iobroker.javascript 10.3.0 → 10.4.1

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 (165) hide show
  1. package/README.md +23 -22
  2. package/admin/assets/AiChatPanel-CfjSsVpE.js +27 -0
  3. package/admin/assets/AiChatService-rFZwYNPk.js +216 -0
  4. package/admin/assets/AiDiffView-DeynDw7L.js +1 -0
  5. package/admin/assets/AiInlineProvider-R_AVYwFT.js +5 -0
  6. package/admin/assets/{BlocklyEditor-BZyoN1JE.js → BlocklyEditor-DPJkoxjP.js} +7 -7
  7. package/admin/assets/Compile-BgTrxmPA.js +165 -0
  8. package/admin/assets/Debugger-CThCzBvP.js +15 -0
  9. package/admin/assets/Diff--plofAtP.js +1 -0
  10. package/admin/assets/{Documentation-uz4Ut9pT.js → Documentation-D3E0U4AK.js} +4 -4
  11. package/admin/assets/ExpandMore-Dio4GeHC.js +1 -0
  12. package/admin/assets/{FbEditor-aOZ-RpPV.js → FbEditor-A7I5U0hA.js} +6 -6
  13. package/admin/assets/History-Ewi5YEEn.js +1 -0
  14. package/admin/assets/Import-6Mm2vrM2.js +1 -0
  15. package/admin/assets/MonacoDiff-BYvG7IqB.js +1 -0
  16. package/admin/assets/{NotificationsActive-BdzH44gp.js → NotificationsActive-CuNfWVJM.js} +1 -1
  17. package/admin/assets/RulesEditor-MDkGXERp.js +1 -0
  18. package/admin/assets/{ScriptEditor-CviB6Hif.js → ScriptEditor-CqphehA8.js} +2 -2
  19. package/admin/assets/ScriptEditorVanillaMonaco-CxgNa-3O.js +3 -0
  20. package/admin/assets/Send-Pz1eveU5.js +1 -0
  21. package/admin/assets/_virtual_mf-localSharedImportMap___mfe_internal__iobroker_javascript__mf_owner__1-Ceh8EDcF.js +1 -0
  22. package/admin/assets/_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__234968779812303__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BRdHvuuG.js +1217 -0
  23. package/admin/assets/_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__234968779812303__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-DLWT3PGo.js +9 -0
  24. package/admin/assets/aiPromptBuilder-CI2ChET0.js +1 -0
  25. package/admin/assets/{blockly-fcfyKYzp.js → blockly-B0t_IRJQ.js} +1 -1
  26. package/admin/assets/{blocklyTheme-CGhU3cEO.js → blocklyTheme-iZoge1S9.js} +1 -1
  27. package/admin/assets/{blocks_action-BQ4O7NRE.js → blocks_action-3CepYoiX.js} +1 -1
  28. package/admin/assets/{blocks_convert-0VBjfhqQ.js → blocks_convert-BEpxVx-_.js} +1 -1
  29. package/admin/assets/{blocks_logic-DAo99xDr.js → blocks_logic-CyIBT53p.js} +1 -1
  30. package/admin/assets/{blocks_number-C--e19NU.js → blocks_number-yqm4qwfh.js} +1 -1
  31. package/admin/assets/{blocks_object-D0TPhdzg.js → blocks_object-CizLkmWp.js} +1 -1
  32. package/admin/assets/blocks_procedures-pFTThYqz.js +3 -0
  33. package/admin/assets/{blocks_sendto-CRIrtOUc.js → blocks_sendto-rEq1xPmO.js} +2 -2
  34. package/admin/assets/{blocks_switch-b_GYfF0n.js → blocks_switch-D3aybjqu.js} +1 -1
  35. package/admin/assets/{blocks_system-BdkUdSsc.js → blocks_system-BVRsS2OE.js} +1 -1
  36. package/admin/assets/{blocks_text-DSFhEVOf.js → blocks_text-D93xQ_03.js} +1 -1
  37. package/admin/assets/{blocks_time-CqALAiJp.js → blocks_time-ChxhjgD7.js} +1 -1
  38. package/admin/assets/{blocks_timeout-yrOD2pZp.js → blocks_timeout-CUZ80HaP.js} +1 -1
  39. package/admin/assets/{blocks_trigger-DeAYXpSS.js → blocks_trigger-DivLpAuy.js} +2 -2
  40. package/admin/assets/{cronHoverProvider-DoO2_tpG.js → cronHoverProvider-Curcjz4m.js} +1 -1
  41. package/admin/assets/dist-CzitsFi7.js +1 -0
  42. package/admin/assets/field_cron-RgLY53_S.js +1 -0
  43. package/admin/assets/field_oid-rBhotXJe.js +1 -0
  44. package/admin/assets/field_script-CU7g3-oB.js +1 -0
  45. package/admin/assets/helpers-BZgjFQNf.js +1 -0
  46. package/admin/assets/{helpers-BTGaTdnT.js → helpers-Bt4VKZBw.js} +1 -1
  47. package/admin/assets/hostInit-CrHjJGJJ.js +1 -0
  48. package/admin/assets/index-DzAQnPTD.js +157 -0
  49. package/admin/assets/{inlineChatWidget-BwQVCPkx.js → inlineChatWidget-ChchJD9a.js} +1 -1
  50. package/admin/assets/{inlineDiffController-BsDDsDHn.js → inlineDiffController-ly6qX4jk.js} +1 -1
  51. package/admin/assets/{loadBlocks-RpqM7PwO.js → loadBlocks-DDLPEDa6.js} +23 -23
  52. package/admin/assets/{mf-entry-bootstrap-0-0deef484.js → mf-entry-bootstrap-0-d055f05d.js} +3 -3
  53. package/admin/assets/pendingShares-mBGPbRwZ.js +2 -0
  54. package/admin/assets/{reactour.esm-DX9ZgYlx.js → reactour.esm-Dk3aGxKn.js} +5 -5
  55. package/admin/assets/{stateHoverProvider-BEadnSXp.js → stateHoverProvider-wAsP-THx.js} +1 -1
  56. package/admin/assets/utils-DUKzLJUz.js +4 -0
  57. package/admin/assets/vite-preload-helper-DjNwdemH.js +1 -0
  58. package/admin/custom/assets/Components-fDcxCyN4.js +1 -0
  59. package/admin/custom/assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1-BraOrMSu.js +1 -0
  60. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__198282747311932__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-DbKT6Hsb.js +1 -0
  61. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__198282747311932__loadShare___mf_0_emotion_mf_1_styled__loadShare__.js-CVvbIPAy.js +1 -0
  62. package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-DVb0ZZ1Q.js → _virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__198282747311932__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BhZYie9-.js} +89 -89
  63. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__198282747311932__loadShare___mf_0_mui_mf_1_x_mf_2_date_mf_2_pickers__loadShare__.js-CV50dgj4.js +1 -0
  64. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__198282747311932__loadShare__date_mf_2_fns__loadShare__.js-Djg9OMcQ.js +1 -0
  65. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__198282747311932__loadShare__leaflet__loadShare__.js-D9EyCd42.js +1 -0
  66. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__198282747311932__loadShare__shared-Hb6V6BnJ.js +2 -0
  67. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__198282747311932__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__-BrY-nF2a.js +122 -0
  68. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__198282747311932__prebuild__leaflet__prebuild__-CHjWtrkp.js +1 -0
  69. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__198282747311932__prebuild__react_mf_2_dom_mf_1_client__prebuild__-DOkC-g0X.js +9 -0
  70. package/admin/custom/assets/dist-CzitsFi7.js +1 -0
  71. package/admin/custom/assets/helpers-BZgjFQNf.js +1 -0
  72. package/admin/custom/assets/hostInit-akwaQLq8.js +1 -0
  73. package/admin/custom/assets/index-BkItz-nL.js +1 -0
  74. package/admin/custom/assets/{lib-BmDlTzq2.js → lib-CADOx2YN.js} +1 -1
  75. package/admin/custom/assets/{mf-entry-bootstrap-0-ad1cd7d0.js → mf-entry-bootstrap-0-3c4565e0.js} +3 -3
  76. package/admin/custom/assets/pendingShares-TCMDgBLn.js +2 -0
  77. package/admin/custom/assets/utils-DUKzLJUz.js +4 -0
  78. package/admin/custom/assets/vite-preload-helper-DjNwdemH.js +1 -0
  79. package/admin/custom/customComponents.js +2 -2
  80. package/admin/custom/i18n/de.json +19 -1
  81. package/admin/custom/i18n/en.json +19 -1
  82. package/admin/custom/i18n/es.json +19 -1
  83. package/admin/custom/i18n/fr.json +19 -1
  84. package/admin/custom/i18n/it.json +19 -1
  85. package/admin/custom/i18n/nl.json +19 -1
  86. package/admin/custom/i18n/pl.json +19 -1
  87. package/admin/custom/i18n/pt.json +19 -1
  88. package/admin/custom/i18n/ru.json +19 -1
  89. package/admin/custom/i18n/uk.json +19 -1
  90. package/admin/custom/i18n/zh-cn.json +19 -1
  91. package/admin/i18n/de.json +13 -1
  92. package/admin/i18n/en.json +13 -1
  93. package/admin/i18n/es.json +13 -1
  94. package/admin/i18n/fr.json +13 -1
  95. package/admin/i18n/it.json +13 -1
  96. package/admin/i18n/nl.json +13 -1
  97. package/admin/i18n/pl.json +13 -1
  98. package/admin/i18n/pt.json +13 -1
  99. package/admin/i18n/ru.json +13 -1
  100. package/admin/i18n/uk.json +13 -1
  101. package/admin/i18n/zh-cn.json +13 -1
  102. package/admin/jsonConfig.json +274 -86
  103. package/admin/mf-manifest.json +1 -1
  104. package/admin/mf-stats.json +1 -1
  105. package/admin/remoteEntry.js +2 -2
  106. package/admin/tab.html +2 -2
  107. package/build/lib/ai.js +53 -0
  108. package/build/lib/ai.js.map +1 -0
  109. package/build/lib/inspect.js +66 -10
  110. package/build/lib/inspect.js.map +1 -1
  111. package/build/lib/mirror.js +24 -23
  112. package/build/lib/mirror.js.map +1 -1
  113. package/build/lib/scriptHistory.js +245 -0
  114. package/build/lib/scriptHistory.js.map +1 -0
  115. package/build/main.js +358 -413
  116. package/build/main.js.map +1 -1
  117. package/build/types.d.ts +11 -0
  118. package/io-package.json +17 -15
  119. package/package.json +8 -7
  120. package/admin/assets/AiChatPanel-CpY4Bun-.js +0 -27
  121. package/admin/assets/AiChatService-QKcpW4jQ.js +0 -216
  122. package/admin/assets/AiDiffView-DscPfZ38.js +0 -1
  123. package/admin/assets/AiInlineProvider-DTSPKoXG.js +0 -5
  124. package/admin/assets/Compile-Oss28m_f.js +0 -165
  125. package/admin/assets/Debugger-teJTIU-2.js +0 -15
  126. package/admin/assets/ExpandMore-V5Ix1QB1.js +0 -1
  127. package/admin/assets/Import-BIC5Ee9z.js +0 -1
  128. package/admin/assets/RulesEditor-CcDVthPa.js +0 -1
  129. package/admin/assets/ScriptEditorVanillaMonaco-ByuXwybM.js +0 -3
  130. package/admin/assets/Send-Mdo32jMb.js +0 -1
  131. package/admin/assets/_virtual_mf-localSharedImportMap___mfe_internal__iobroker_javascript__mf_owner__1-BnL93BgK.js +0 -1
  132. package/admin/assets/_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__180366418666083__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-NI-3Uv4e.js +0 -1217
  133. package/admin/assets/_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__180366418666083__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-DVaMIZyC.js +0 -9
  134. package/admin/assets/aiPromptBuilder-yTB6N2VT.js +0 -1
  135. package/admin/assets/blocks_procedures-DgTxgXdB.js +0 -3
  136. package/admin/assets/dist-D4uJqRBO.js +0 -4
  137. package/admin/assets/field_cron-D3Ts_s9M.js +0 -1
  138. package/admin/assets/field_oid-BRNXredg.js +0 -1
  139. package/admin/assets/field_script-3X6ousg7.js +0 -1
  140. package/admin/assets/hostInit-2h2Cbsaw.js +0 -1
  141. package/admin/assets/index-CbQlIKB_.js +0 -156
  142. package/admin/assets/pendingShares-BaAadIDv.js +0 -1
  143. package/admin/assets/vite-preload-helper-CaC3yEL3.js +0 -1
  144. package/admin/custom/assets/Components-FkGDIlId.js +0 -1
  145. package/admin/custom/assets/_virtual_mf-localSharedImportMap___mfe_internal__ConfigCustomJavascriptSet__mf_owner__1-Cs88NUCd.js +0 -1
  146. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__loadShare___mf_0_emotion_mf_1_react__loadShare__.js-P-8ffWXw.js +0 -1
  147. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__loadShare___mf_0_emotion_mf_1_styled__loadShare__.js-ZVuRAEo5.js +0 -1
  148. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__loadShare___mf_0_iobroker_mf_1_json_mf_2_config__loadShare__.js-Dna3WF04.js +0 -1
  149. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__loadShare___mf_0_mui_mf_1_x_mf_2_date_mf_2_pickers__loadShare__.js-DcjdCGAx.js +0 -1
  150. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__loadShare__date_mf_2_fns__loadShare__.js-CnhNjamd.js +0 -1
  151. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__loadShare__leaflet__loadShare__.js-Dz7BFJqH.js +0 -1
  152. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__loadShare__react_mf_2_dom_mf_1_client__loadShare__.js-B0olko2J.js +0 -1
  153. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__prebuild___mf_0_iobroker_mf_1_json_mf_2_config__prebuild__-CzN4reh_.js +0 -122
  154. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__prebuild__leaflet__prebuild__-xPcBaiTQ.js +0 -1
  155. package/admin/custom/assets/_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__prebuild__react_mf_2_dom_mf_1_client__prebuild__-DuFBE5fh.js +0 -9
  156. package/admin/custom/assets/dist-D4uJqRBO.js +0 -4
  157. package/admin/custom/assets/hostInit-6oh4UY2k.js +0 -1
  158. package/admin/custom/assets/index-BrlyEy6J.js +0 -1
  159. package/admin/custom/assets/pendingShares-kV2kwejX.js +0 -1
  160. package/admin/custom/assets/vite-preload-helper-CaC3yEL3.js +0 -1
  161. package/build/lib/aiProviderResolver.js +0 -140
  162. package/build/lib/aiProviderResolver.js.map +0 -1
  163. package/build/lib/anthropicAdapter.js +0 -175
  164. package/build/lib/anthropicAdapter.js.map +0 -1
  165. /package/admin/custom/assets/{_virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__37453319418803__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__-CXpyx8Vy.js → _virtual_mf___mfe_internal__ConfigCustomJavascriptSet__mf_owner__198282747311932__prebuild__react_mf_1_jsx_mf_2_runtime__prebuild__-CXpyx8Vy.js} +0 -0
@@ -1,15 +1,15 @@
1
- import{a as e,o as t,r as n,t as r}from"./rolldown-runtime-C0FnF6B9.js";import{An as i,Cr as a,Ct as o,Er as s,Gt as c,Ht as l,Jn as u,Jt as d,Kt as f,Mn as p,Mr as m,Mt as h,Nn as g,Nr as _,Or as v,Pn as y,Sn as b,Tr as x,Tt as S,a as C,ar as w,br as T,dt as E,en as D,ft as O,gr as k,gt as A,kn as j,kr as M,kt as N,l as P,m as F,or as I,pr as L,qn as R,sr as z,ur as B,ut as ee,wr as V,wt as H,xn as U,xr as W,xt as te,yn as ne,yr as G}from"./_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__180366418666083__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-NI-3Uv4e.js";import{n as re,r as K,t as q}from"./NotificationsActive-BdzH44gp.js";import{n as ie,t as ae}from"./ExpandMore-V5Ix1QB1.js";import{t as oe}from"./Send-Mdo32jMb.js";import{_ as se,b as ce,g as le,h as ue,v as de,x as fe,y as pe}from"./index-CbQlIKB_.js";var me=u(I(`path`,{d:`M12 2C6.49 2 2 6.49 2 12s4.49 10 10 10 10-4.49 10-10S17.51 2 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m3-8c0 1.66-1.34 3-3 3s-3-1.34-3-3 1.34-3 3-3 3 1.34 3 3`}),`Adjust`),he=u(I(`path`,{d:`M9 11H7v2h2zm4 0h-2v2h2zm4 0h-2v2h2zm2-7h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2m0 16H5V9h14z`}),`DateRange`),ge=u(I(`path`,{d:`M21 12V6c0-1.1-.9-2-2-2h-1V2h-2v2H8V2H6v2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h7v-2H5V10h14v2zm-5.36 8c.43 1.45 1.77 2.5 3.36 2.5 1.93 0 3.5-1.57 3.5-3.5s-1.57-3.5-3.5-3.5c-.95 0-1.82.38-2.45 1H18V18h-4v-4h1.5v1.43c.9-.88 2.14-1.43 3.5-1.43 2.76 0 5 2.24 5 5s-2.24 5-5 5c-2.42 0-4.44-1.72-4.9-4z`}),`EventRepeat`),_e=u(I(`path`,{d:`m12 8-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z`}),`ExpandLess`),ve=u(I(`path`,{d:`M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7s2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11`}),`Extension`),ye=u(I(`path`,{d:`M7 11H1v2h6zm2.17-3.24L7.05 5.64 5.64 7.05l2.12 2.12zM13 1h-2v6h2zm5.36 6.05-1.41-1.41-2.12 2.12 1.41 1.41zM17 11v2h6v-2zm-5-2c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3m2.83 7.24 2.12 2.12 1.41-1.41-2.12-2.12zm-9.19.71 1.41 1.41 2.12-2.12-1.41-1.41zM11 23h2v-6h-2z`}),`Flare`),be=u(I(`path`,{d:`M4.59 6.89c.7-.71 1.4-1.35 1.71-1.22.5.2 0 1.03-.3 1.52-.25.42-2.86 3.89-2.86 6.31 0 1.28.48 2.34 1.34 2.98.75.56 1.74.73 2.64.46 1.07-.31 1.95-1.4 3.06-2.77 1.21-1.49 2.83-3.44 4.08-3.44 1.63 0 1.65 1.01 1.76 1.79-3.78.64-5.38 3.67-5.38 5.37s1.44 3.09 3.21 3.09c1.63 0 4.29-1.33 4.69-6.1H21v-2.5h-2.47c-.15-1.65-1.09-4.2-4.03-4.2-2.25 0-4.18 1.91-4.94 2.84-.58.73-2.06 2.48-2.29 2.72-.25.3-.68.84-1.11.84-.45 0-.72-.83-.36-1.92.35-1.09 1.4-2.86 1.85-3.52.78-1.14 1.3-1.92 1.3-3.28C8.95 3.69 7.31 3 6.44 3 5.12 3 3.97 4 3.72 4.25c-.36.36-.66.66-.88.93zm9.29 11.66c-.31 0-.74-.26-.74-.72 0-.6.73-2.2 2.87-2.76-.3 2.69-1.43 3.48-2.13 3.48`}),`Gesture`),xe=u(I(`path`,{d:`M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2M8 20H4v-4h4zm0-6H4v-4h4zm0-6H4V4h4zm6 12h-4v-4h4zm0-6h-4v-4h4zm0-6h-4V4h4zm6 12h-4v-4h4zm0-6h-4v-4h4zm0-6h-4V4h4z`}),`GridOn`),Se=u(I(`path`,{d:`m18 22-.01-6L14 12l3.99-4.01L18 2H6v6l4 4-4 3.99V22zM8 7.5V4h8v3.5l-4 4z`}),`HourglassBottom`),Ce=u(I(`path`,{d:`M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6z`}),`KeyboardArrowDown`),we=u(I(`path`,{d:`M7.41 15.41 12 10.83l4.59 4.58L18 14l-6-6-6 6z`}),`KeyboardArrowUp`),Te=u(I(`path`,{d:`M11 7 9.6 8.4l2.6 2.6H2v2h10.2l-2.6 2.6L11 17l5-5zm9 12h-8v2h8c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-8v2h8z`}),`Login`),Ee=u(I(`path`,{d:`m17 7-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5zM4 5h8V3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h8v-2H4z`}),`Logout`),De=u(I(`path`,{d:`M3 18h12v-2H3zM3 6v2h18V6zm0 7h18v-2H3z`}),`Notes`),Oe=u([I(`path`,{d:`m17 17 5-5-5-5-1.41 1.41L18.17 11H9v2h9.17l-2.58 2.59z`},`0`),I(`path`,{d:`M19 19H5V5h14v2h2V5c0-1.1-.89-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.11 0 2-.9 2-2v-2h-2z`},`1`)],`Output`),ke=u(I(`path`,{d:`M15 16v1.26l-6-3v-3.17L11.7 8H16V2h-6v4.9L7.3 10H3v6h5l7 3.5V22h6v-6z`}),`Polyline`),Ae=u(I(`path`,{fillRule:`evenodd`,d:`M16 9V4h1c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1s.45 1 1 1h1v5c0 1.66-1.34 3-3 3v2h5.97v7l1 1 1-1v-7H19v-2c-1.66 0-3-1.34-3-3`}),`PushPin`),je=u(I(`path`,{d:`M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.65 0-8.58 3.03-9.96 7.22L3.9 16c1.05-3.19 4.05-5.5 7.6-5.5 1.95 0 3.73.72 5.12 1.88L13 16h9V7z`}),`Redo`),Me=u(I(`path`,{d:`M19 13H5v-2h14z`}),`Remove`),Ne=u([I(`path`,{d:`M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2M12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8`},`0`),I(`path`,{d:`M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z`},`1`)],`Schedule`),Pe=u(I(`path`,{d:`M14 9v2h-3V9H8.5V7H11V1H4v6h2.5v2H4v6h2.5v2H4v6h7v-6H8.5v-2H11v-2h3v2h7V9z`}),`Schema`),Fe=u(I(`path`,{d:`m6 18 8.5-6L6 6zM16 6v12h2V6z`}),`SkipNext`),Ie=u(I(`path`,{d:`M12 17.27 18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z`}),`Star`),Le=u(I(`path`,{d:`m22 9.24-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03zM12 15.4l-3.76 2.27 1-4.28-3.32-2.88 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28z`}),`StarBorder`),Re=u(I(`path`,{d:`M19 3H4.99C3.89 3 3 3.9 3 5l.01 14c0 1.1.89 2 1.99 2h10l6-6V5c0-1.1-.9-2-2-2M7 8h10v2H7zm5 6H7v-2h5zm2 5.5V14h5.5z`}),`StickyNote2`),ze=u(I(`path`,{d:`M15 13V5c0-1.66-1.34-3-3-3S9 3.34 9 5v8c-1.21.91-2 2.37-2 4 0 2.76 2.24 5 5 5s5-2.24 5-5c0-1.63-.79-3.09-2-4m-4-2V5c0-.55.45-1 1-1s1 .45 1 1v1h-1v1h1v2h-1v1h1v1z`}),`Thermostat`),Be=u(I(`path`,{d:`M9 1h6v2H9zm10.03 6.39 1.42-1.42c-.43-.51-.9-.99-1.41-1.41l-1.42 1.42C16.07 4.74 14.12 4 12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9 9-4.03 9-9c0-2.12-.74-4.07-1.97-5.61M13 14h-2V8h2z`}),`Timer`),Ve=u(I(`path`,{d:`M9 1h6v2H9zm4 7v2.17l6.98 6.98C20.63 15.91 21 14.5 21 13c0-2.12-.74-4.07-1.97-5.61l1.42-1.42c-.43-.51-.9-.99-1.41-1.41l-1.42 1.42C16.07 4.74 14.12 4 12 4c-1.5 0-2.91.37-4.15 1.02L10.83 8zM2.81 2.81 1.39 4.22l3.4 3.4C3.67 9.12 3 10.98 3 13c0 4.97 4.02 9 9 9 2.02 0 3.88-.67 5.38-1.79l2.4 2.4 1.41-1.41z`}),`TimerOff`),He=u(I(`path`,{d:`m16 6 2.29 2.29-4.88 4.88-4-4L2 16.59 3.41 18l6-6 4 4 6.3-6.29L22 12V6z`}),`TrendingUp`),Ue=u(I(`path`,{d:`M3 17v2h6v-2zM3 5v2h10V5zm10 16v-2h8v-2h-8v-2h-2v6zM7 9v2H3v2h4v2h2V9zm14 4v-2H11v2zm-6-4h2V7h4V5h-4V3h-2z`}),`Tune`),We=u(I(`path`,{d:`M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7M2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2m4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3z`}),`VisibilityOff`),Ge=u(I(`path`,{d:`m16.9541 8.6624 2.1206-2.122 1.4147 1.4137-2.1206 2.122zM2 18h20v2H2zm9-14h2v3h-2zM3.5427 7.9249l1.4142-1.4142L7.0782 8.632 5.664 10.0462zM5 16h14c0-3.87-3.13-7-7-7s-7 3.13-7 7`}),`WbTwilight`),Ke=u([I(`path`,{d:`M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14`},`0`),I(`path`,{d:`M12 10h-2v2H9v-2H7V9h2V7h1v2h2z`},`1`)],`ZoomIn`);_();function J(e){if(typeof e==`string`||typeof e==`number`)return``+e;let t=``;if(Array.isArray(e))for(let n=0,r;n<e.length;n++)(r=J(e[n]))!==``&&(t+=(t&&` `)+r);else for(let n in e)e[n]&&(t+=(t&&` `)+n);return t}var qe={value:()=>{}};function Je(){for(var e=0,t=arguments.length,n={},r;e<t;++e){if(!(r=arguments[e]+``)||r in n||/[\s.]/.test(r))throw Error(`illegal type: `+r);n[r]=[]}return new Ye(n)}function Ye(e){this._=e}function Xe(e,t){return e.trim().split(/^|\s+/).map(function(e){var n=``,r=e.indexOf(`.`);if(r>=0&&(n=e.slice(r+1),e=e.slice(0,r)),e&&!t.hasOwnProperty(e))throw Error(`unknown type: `+e);return{type:e,name:n}})}Ye.prototype=Je.prototype={constructor:Ye,on:function(e,t){var n=this._,r=Xe(e+``,n),i,a=-1,o=r.length;if(arguments.length<2){for(;++a<o;)if((i=(e=r[a]).type)&&(i=Ze(n[i],e.name)))return i;return}if(t!=null&&typeof t!=`function`)throw Error(`invalid callback: `+t);for(;++a<o;)if(i=(e=r[a]).type)n[i]=Qe(n[i],e.name,t);else if(t==null)for(i in n)n[i]=Qe(n[i],e.name,null);return this},copy:function(){var e={},t=this._;for(var n in t)e[n]=t[n].slice();return new Ye(e)},call:function(e,t){if((i=arguments.length-2)>0)for(var n=Array(i),r=0,i,a;r<i;++r)n[r]=arguments[r+2];if(!this._.hasOwnProperty(e))throw Error(`unknown type: `+e);for(a=this._[e],r=0,i=a.length;r<i;++r)a[r].value.apply(t,n)},apply:function(e,t,n){if(!this._.hasOwnProperty(e))throw Error(`unknown type: `+e);for(var r=this._[e],i=0,a=r.length;i<a;++i)r[i].value.apply(t,n)}};function Ze(e,t){for(var n=0,r=e.length,i;n<r;++n)if((i=e[n]).name===t)return i.value}function Qe(e,t,n){for(var r=0,i=e.length;r<i;++r)if(e[r].name===t){e[r]=qe,e=e.slice(0,r).concat(e.slice(r+1));break}return n!=null&&e.push({name:t,value:n}),e}var $e={svg:`http://www.w3.org/2000/svg`,xhtml:`http://www.w3.org/1999/xhtml`,xlink:`http://www.w3.org/1999/xlink`,xml:`http://www.w3.org/XML/1998/namespace`,xmlns:`http://www.w3.org/2000/xmlns/`};function et(e){var t=e+=``,n=t.indexOf(`:`);return n>=0&&(t=e.slice(0,n))!==`xmlns`&&(e=e.slice(n+1)),$e.hasOwnProperty(t)?{space:$e[t],local:e}:e}function tt(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===`http://www.w3.org/1999/xhtml`&&t.documentElement.namespaceURI===`http://www.w3.org/1999/xhtml`?t.createElement(e):t.createElementNS(n,e)}}function nt(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function rt(e){var t=et(e);return(t.local?nt:tt)(t)}function it(){}function at(e){return e==null?it:function(){return this.querySelector(e)}}function ot(e){typeof e!=`function`&&(e=at(e));for(var t=this._groups,n=t.length,r=Array(n),i=0;i<n;++i)for(var a=t[i],o=a.length,s=r[i]=Array(o),c,l,u=0;u<o;++u)(c=a[u])&&(l=e.call(c,c.__data__,u,a))&&(`__data__`in c&&(l.__data__=c.__data__),s[u]=l);return new Yn(r,this._parents)}function st(e){return e==null?[]:Array.isArray(e)?e:Array.from(e)}function ct(){return[]}function lt(e){return e==null?ct:function(){return this.querySelectorAll(e)}}function ut(e){return function(){return st(e.apply(this,arguments))}}function dt(e){e=typeof e==`function`?ut(e):lt(e);for(var t=this._groups,n=t.length,r=[],i=[],a=0;a<n;++a)for(var o=t[a],s=o.length,c,l=0;l<s;++l)(c=o[l])&&(r.push(e.call(c,c.__data__,l,o)),i.push(c));return new Yn(r,i)}function ft(e){return function(){return this.matches(e)}}function pt(e){return function(t){return t.matches(e)}}var mt=Array.prototype.find;function ht(e){return function(){return mt.call(this.children,e)}}function gt(){return this.firstElementChild}function _t(e){return this.select(e==null?gt:ht(typeof e==`function`?e:pt(e)))}var vt=Array.prototype.filter;function yt(){return Array.from(this.children)}function bt(e){return function(){return vt.call(this.children,e)}}function xt(e){return this.selectAll(e==null?yt:bt(typeof e==`function`?e:pt(e)))}function St(e){typeof e!=`function`&&(e=ft(e));for(var t=this._groups,n=t.length,r=Array(n),i=0;i<n;++i)for(var a=t[i],o=a.length,s=r[i]=[],c,l=0;l<o;++l)(c=a[l])&&e.call(c,c.__data__,l,a)&&s.push(c);return new Yn(r,this._parents)}function Ct(e){return Array(e.length)}function wt(){return new Yn(this._enter||this._groups.map(Ct),this._parents)}function Tt(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}Tt.prototype={constructor:Tt,appendChild:function(e){return this._parent.insertBefore(e,this._next)},insertBefore:function(e,t){return this._parent.insertBefore(e,t)},querySelector:function(e){return this._parent.querySelector(e)},querySelectorAll:function(e){return this._parent.querySelectorAll(e)}};function Et(e){return function(){return e}}function Dt(e,t,n,r,i,a){for(var o=0,s,c=t.length,l=a.length;o<l;++o)(s=t[o])?(s.__data__=a[o],r[o]=s):n[o]=new Tt(e,a[o]);for(;o<c;++o)(s=t[o])&&(i[o]=s)}function Ot(e,t,n,r,i,a,o){var s,c,l=new Map,u=t.length,d=a.length,f=Array(u),p;for(s=0;s<u;++s)(c=t[s])&&(f[s]=p=o.call(c,c.__data__,s,t)+``,l.has(p)?i[s]=c:l.set(p,c));for(s=0;s<d;++s)p=o.call(e,a[s],s,a)+``,(c=l.get(p))?(r[s]=c,c.__data__=a[s],l.delete(p)):n[s]=new Tt(e,a[s]);for(s=0;s<u;++s)(c=t[s])&&l.get(f[s])===c&&(i[s]=c)}function kt(e){return e.__data__}function At(e,t){if(!arguments.length)return Array.from(this,kt);var n=t?Ot:Dt,r=this._parents,i=this._groups;typeof e!=`function`&&(e=Et(e));for(var a=i.length,o=Array(a),s=Array(a),c=Array(a),l=0;l<a;++l){var u=r[l],d=i[l],f=d.length,p=jt(e.call(u,u&&u.__data__,l,r)),m=p.length,h=s[l]=Array(m),g=o[l]=Array(m);n(u,d,h,g,c[l]=Array(f),p,t);for(var _=0,v=0,y,b;_<m;++_)if(y=h[_]){for(_>=v&&(v=_+1);!(b=g[v])&&++v<m;);y._next=b||null}}return o=new Yn(o,r),o._enter=s,o._exit=c,o}function jt(e){return typeof e==`object`&&`length`in e?e:Array.from(e)}function Mt(){return new Yn(this._exit||this._groups.map(Ct),this._parents)}function Nt(e,t,n){var r=this.enter(),i=this,a=this.exit();return typeof e==`function`?(r=e(r),r&&=r.selection()):r=r.append(e+``),t!=null&&(i=t(i),i&&=i.selection()),n==null?a.remove():n(a),r&&i?r.merge(i).order():i}function Pt(e){for(var t=e.selection?e.selection():e,n=this._groups,r=t._groups,i=n.length,a=r.length,o=Math.min(i,a),s=Array(i),c=0;c<o;++c)for(var l=n[c],u=r[c],d=l.length,f=s[c]=Array(d),p,m=0;m<d;++m)(p=l[m]||u[m])&&(f[m]=p);for(;c<i;++c)s[c]=n[c];return new Yn(s,this._parents)}function Ft(){for(var e=this._groups,t=-1,n=e.length;++t<n;)for(var r=e[t],i=r.length-1,a=r[i],o;--i>=0;)(o=r[i])&&(a&&o.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(o,a),a=o);return this}function It(e){e||=Lt;function t(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}for(var n=this._groups,r=n.length,i=Array(r),a=0;a<r;++a){for(var o=n[a],s=o.length,c=i[a]=Array(s),l,u=0;u<s;++u)(l=o[u])&&(c[u]=l);c.sort(t)}return new Yn(i,this._parents).order()}function Lt(e,t){return e<t?-1:e>t?1:e>=t?0:NaN}function Rt(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function zt(){return Array.from(this)}function Bt(){for(var e=this._groups,t=0,n=e.length;t<n;++t)for(var r=e[t],i=0,a=r.length;i<a;++i){var o=r[i];if(o)return o}return null}function Vt(){let e=0;for(let t of this)++e;return e}function Ht(){return!this.node()}function Ut(e){for(var t=this._groups,n=0,r=t.length;n<r;++n)for(var i=t[n],a=0,o=i.length,s;a<o;++a)(s=i[a])&&e.call(s,s.__data__,a,i);return this}function Wt(e){return function(){this.removeAttribute(e)}}function Gt(e){return function(){this.removeAttributeNS(e.space,e.local)}}function Kt(e,t){return function(){this.setAttribute(e,t)}}function qt(e,t){return function(){this.setAttributeNS(e.space,e.local,t)}}function Jt(e,t){return function(){var n=t.apply(this,arguments);n==null?this.removeAttribute(e):this.setAttribute(e,n)}}function Yt(e,t){return function(){var n=t.apply(this,arguments);n==null?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,n)}}function Xt(e,t){var n=et(e);if(arguments.length<2){var r=this.node();return n.local?r.getAttributeNS(n.space,n.local):r.getAttribute(n)}return this.each((t==null?n.local?Gt:Wt:typeof t==`function`?n.local?Yt:Jt:n.local?qt:Kt)(n,t))}function Zt(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView}function Qt(e){return function(){this.style.removeProperty(e)}}function $t(e,t,n){return function(){this.style.setProperty(e,t,n)}}function en(e,t,n){return function(){var r=t.apply(this,arguments);r==null?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}function tn(e,t,n){return arguments.length>1?this.each((t==null?Qt:typeof t==`function`?en:$t)(e,t,n??``)):nn(this.node(),e)}function nn(e,t){return e.style.getPropertyValue(t)||Zt(e).getComputedStyle(e,null).getPropertyValue(t)}function rn(e){return function(){delete this[e]}}function an(e,t){return function(){this[e]=t}}function on(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function sn(e,t){return arguments.length>1?this.each((t==null?rn:typeof t==`function`?on:an)(e,t)):this.node()[e]}function cn(e){return e.trim().split(/^|\s+/)}function ln(e){return e.classList||new un(e)}function un(e){this._node=e,this._names=cn(e.getAttribute(`class`)||``)}un.prototype={add:function(e){this._names.indexOf(e)<0&&(this._names.push(e),this._node.setAttribute(`class`,this._names.join(` `)))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute(`class`,this._names.join(` `)))},contains:function(e){return this._names.indexOf(e)>=0}};function dn(e,t){for(var n=ln(e),r=-1,i=t.length;++r<i;)n.add(t[r])}function fn(e,t){for(var n=ln(e),r=-1,i=t.length;++r<i;)n.remove(t[r])}function pn(e){return function(){dn(this,e)}}function mn(e){return function(){fn(this,e)}}function hn(e,t){return function(){(t.apply(this,arguments)?dn:fn)(this,e)}}function gn(e,t){var n=cn(e+``);if(arguments.length<2){for(var r=ln(this.node()),i=-1,a=n.length;++i<a;)if(!r.contains(n[i]))return!1;return!0}return this.each((typeof t==`function`?hn:t?pn:mn)(n,t))}function _n(){this.textContent=``}function vn(e){return function(){this.textContent=e}}function yn(e){return function(){var t=e.apply(this,arguments);this.textContent=t??``}}function bn(e){return arguments.length?this.each(e==null?_n:(typeof e==`function`?yn:vn)(e)):this.node().textContent}function xn(){this.innerHTML=``}function Sn(e){return function(){this.innerHTML=e}}function Cn(e){return function(){var t=e.apply(this,arguments);this.innerHTML=t??``}}function wn(e){return arguments.length?this.each(e==null?xn:(typeof e==`function`?Cn:Sn)(e)):this.node().innerHTML}function Tn(){this.nextSibling&&this.parentNode.appendChild(this)}function En(){return this.each(Tn)}function Dn(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function On(){return this.each(Dn)}function kn(e){var t=typeof e==`function`?e:rt(e);return this.select(function(){return this.appendChild(t.apply(this,arguments))})}function An(){return null}function jn(e,t){var n=typeof e==`function`?e:rt(e),r=t==null?An:typeof t==`function`?t:at(t);return this.select(function(){return this.insertBefore(n.apply(this,arguments),r.apply(this,arguments)||null)})}function Mn(){var e=this.parentNode;e&&e.removeChild(this)}function Nn(){return this.each(Mn)}function Pn(){var e=this.cloneNode(!1),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function Fn(){var e=this.cloneNode(!0),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function In(e){return this.select(e?Fn:Pn)}function Ln(e){return arguments.length?this.property(`__data__`,e):this.node().__data__}function Rn(e){return function(t){e.call(this,t,this.__data__)}}function zn(e){return e.trim().split(/^|\s+/).map(function(e){var t=``,n=e.indexOf(`.`);return n>=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}})}function Bn(e){return function(){var t=this.__on;if(t){for(var n=0,r=-1,i=t.length,a;n<i;++n)a=t[n],(!e.type||a.type===e.type)&&a.name===e.name?this.removeEventListener(a.type,a.listener,a.options):t[++r]=a;++r?t.length=r:delete this.__on}}}function Vn(e,t,n){return function(){var r=this.__on,i,a=Rn(t);if(r){for(var o=0,s=r.length;o<s;++o)if((i=r[o]).type===e.type&&i.name===e.name){this.removeEventListener(i.type,i.listener,i.options),this.addEventListener(i.type,i.listener=a,i.options=n),i.value=t;return}}this.addEventListener(e.type,a,n),i={type:e.type,name:e.name,value:t,listener:a,options:n},r?r.push(i):this.__on=[i]}}function Hn(e,t,n){var r=zn(e+``),i,a=r.length,o;if(arguments.length<2){var s=this.node().__on;if(s){for(var c=0,l=s.length,u;c<l;++c)for(i=0,u=s[c];i<a;++i)if((o=r[i]).type===u.type&&o.name===u.name)return u.value}return}for(s=t?Vn:Bn,i=0;i<a;++i)this.each(s(r[i],t,n));return this}function Un(e,t,n){var r=Zt(e),i=r.CustomEvent;typeof i==`function`?i=new i(t,n):(i=r.document.createEvent(`Event`),n?(i.initEvent(t,n.bubbles,n.cancelable),i.detail=n.detail):i.initEvent(t,!1,!1)),e.dispatchEvent(i)}function Wn(e,t){return function(){return Un(this,e,t)}}function Gn(e,t){return function(){return Un(this,e,t.apply(this,arguments))}}function Kn(e,t){return this.each((typeof t==`function`?Gn:Wn)(e,t))}function*qn(){for(var e=this._groups,t=0,n=e.length;t<n;++t)for(var r=e[t],i=0,a=r.length,o;i<a;++i)(o=r[i])&&(yield o)}var Jn=[null];function Yn(e,t){this._groups=e,this._parents=t}function Xn(){return new Yn([[document.documentElement]],Jn)}function Zn(){return this}Yn.prototype=Xn.prototype={constructor:Yn,select:ot,selectAll:dt,selectChild:_t,selectChildren:xt,filter:St,data:At,enter:wt,exit:Mt,join:Nt,merge:Pt,selection:Zn,order:Ft,sort:It,call:Rt,nodes:zt,node:Bt,size:Vt,empty:Ht,each:Ut,attr:Xt,style:tn,property:sn,classed:gn,text:bn,html:wn,raise:En,lower:On,append:kn,insert:jn,remove:Nn,clone:In,datum:Ln,on:Hn,dispatch:Kn,[Symbol.iterator]:qn};function Qn(e){return typeof e==`string`?new Yn([[document.querySelector(e)]],[document.documentElement]):new Yn([[e]],Jn)}function $n(e){let t;for(;t=e.sourceEvent;)e=t;return e}function er(e,t){if(e=$n(e),t===void 0&&(t=e.currentTarget),t){var n=t.ownerSVGElement||t;if(n.createSVGPoint){var r=n.createSVGPoint();return r.x=e.clientX,r.y=e.clientY,r=r.matrixTransform(t.getScreenCTM().inverse()),[r.x,r.y]}if(t.getBoundingClientRect){var i=t.getBoundingClientRect();return[e.clientX-i.left-t.clientLeft,e.clientY-i.top-t.clientTop]}}return[e.pageX,e.pageY]}var tr={passive:!1},nr={capture:!0,passive:!1};function rr(e){e.stopImmediatePropagation()}function ir(e){e.preventDefault(),e.stopImmediatePropagation()}function ar(e){var t=e.document.documentElement,n=Qn(e).on(`dragstart.drag`,ir,nr);`onselectstart`in t?n.on(`selectstart.drag`,ir,nr):(t.__noselect=t.style.MozUserSelect,t.style.MozUserSelect=`none`)}function or(e,t){var n=e.document.documentElement,r=Qn(e).on(`dragstart.drag`,null);t&&(r.on(`click.drag`,ir,nr),setTimeout(function(){r.on(`click.drag`,null)},0)),`onselectstart`in n?r.on(`selectstart.drag`,null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}var sr=e=>()=>e;function cr(e,{sourceEvent:t,subject:n,target:r,identifier:i,active:a,x:o,y:s,dx:c,dy:l,dispatch:u}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},identifier:{value:i,enumerable:!0,configurable:!0},active:{value:a,enumerable:!0,configurable:!0},x:{value:o,enumerable:!0,configurable:!0},y:{value:s,enumerable:!0,configurable:!0},dx:{value:c,enumerable:!0,configurable:!0},dy:{value:l,enumerable:!0,configurable:!0},_:{value:u}})}cr.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function lr(e){return!e.ctrlKey&&!e.button}function ur(){return this.parentNode}function dr(e,t){return t??{x:e.x,y:e.y}}function fr(){return navigator.maxTouchPoints||`ontouchstart`in this}function pr(){var e=lr,t=ur,n=dr,r=fr,i={},a=Je(`start`,`drag`,`end`),o=0,s,c,l,u,d=0;function f(e){e.on(`mousedown.drag`,p).filter(r).on(`touchstart.drag`,g).on(`touchmove.drag`,_,tr).on(`touchend.drag touchcancel.drag`,v).style(`touch-action`,`none`).style(`-webkit-tap-highlight-color`,`rgba(0,0,0,0)`)}function p(n,r){if(!u&&e.call(this,n,r)){var i=y(this,t.call(this,n,r),n,r,`mouse`);i&&(Qn(n.view).on(`mousemove.drag`,m,nr).on(`mouseup.drag`,h,nr),ar(n.view),rr(n),l=!1,s=n.clientX,c=n.clientY,i(`start`,n))}}function m(e){if(ir(e),!l){var t=e.clientX-s,n=e.clientY-c;l=t*t+n*n>d}i.mouse(`drag`,e)}function h(e){Qn(e.view).on(`mousemove.drag mouseup.drag`,null),or(e.view,l),ir(e),i.mouse(`end`,e)}function g(n,r){if(e.call(this,n,r))for(var i=n.changedTouches,a=t.call(this,n,r),o=i.length,s=0,c;s<o;++s)(c=y(this,a,n,r,i[s].identifier,i[s]))&&(rr(n),c(`start`,n,i[s]))}function _(e){for(var t=e.changedTouches,n=t.length,r=0,a;r<n;++r)(a=i[t[r].identifier])&&(ir(e),a(`drag`,e,t[r]))}function v(e){var t=e.changedTouches,n=t.length,r,a;for(u&&clearTimeout(u),u=setTimeout(function(){u=null},500),r=0;r<n;++r)(a=i[t[r].identifier])&&(rr(e),a(`end`,e,t[r]))}function y(e,t,r,s,c,l){var u=a.copy(),d=er(l||r,t),p,m,h;if((h=n.call(e,new cr(`beforestart`,{sourceEvent:r,target:f,identifier:c,active:o,x:d[0],y:d[1],dx:0,dy:0,dispatch:u}),s))!=null)return p=h.x-d[0]||0,m=h.y-d[1]||0,function n(r,a,l){var g=d,_;switch(r){case`start`:i[c]=n,_=o++;break;case`end`:delete i[c],--o;case`drag`:d=er(l||a,t),_=o}u.call(r,e,new cr(r,{sourceEvent:a,subject:h,target:f,identifier:c,active:_,x:d[0]+p,y:d[1]+m,dx:d[0]-g[0],dy:d[1]-g[1],dispatch:u}),s)}}return f.filter=function(t){return arguments.length?(e=typeof t==`function`?t:sr(!!t),f):e},f.container=function(e){return arguments.length?(t=typeof e==`function`?e:sr(e),f):t},f.subject=function(e){return arguments.length?(n=typeof e==`function`?e:sr(e),f):n},f.touchable=function(e){return arguments.length?(r=typeof e==`function`?e:sr(!!e),f):r},f.on=function(){var e=a.on.apply(a,arguments);return e===a?f:e},f.clickDistance=function(e){return arguments.length?(d=(e=+e)*e,f):Math.sqrt(d)},f}function mr(e,t,n){e.prototype=t.prototype=n,n.constructor=e}function hr(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function gr(){}var _r=.7,vr=1/_r,yr=`\\s*([+-]?\\d+)\\s*`,br=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*`,xr=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*`,Sr=/^#([0-9a-f]{3,8})$/,Cr=RegExp(`^rgb\\(${yr},${yr},${yr}\\)$`),wr=RegExp(`^rgb\\(${xr},${xr},${xr}\\)$`),Tr=RegExp(`^rgba\\(${yr},${yr},${yr},${br}\\)$`),Er=RegExp(`^rgba\\(${xr},${xr},${xr},${br}\\)$`),Dr=RegExp(`^hsl\\(${br},${xr},${xr}\\)$`),Or=RegExp(`^hsla\\(${br},${xr},${xr},${br}\\)$`),kr={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};mr(gr,Pr,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:Ar,formatHex:Ar,formatHex8:jr,formatHsl:Mr,formatRgb:Nr,toString:Nr});function Ar(){return this.rgb().formatHex()}function jr(){return this.rgb().formatHex8()}function Mr(){return qr(this).formatHsl()}function Nr(){return this.rgb().formatRgb()}function Pr(e){var t,n;return e=(e+``).trim().toLowerCase(),(t=Sr.exec(e))?(n=t[1].length,t=parseInt(t[1],16),n===6?Fr(t):n===3?new zr(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?Ir(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?Ir(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=Cr.exec(e))?new zr(t[1],t[2],t[3],1):(t=wr.exec(e))?new zr(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=Tr.exec(e))?Ir(t[1],t[2],t[3],t[4]):(t=Er.exec(e))?Ir(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=Dr.exec(e))?Kr(t[1],t[2]/100,t[3]/100,1):(t=Or.exec(e))?Kr(t[1],t[2]/100,t[3]/100,t[4]):kr.hasOwnProperty(e)?Fr(kr[e]):e===`transparent`?new zr(NaN,NaN,NaN,0):null}function Fr(e){return new zr(e>>16&255,e>>8&255,e&255,1)}function Ir(e,t,n,r){return r<=0&&(e=t=n=NaN),new zr(e,t,n,r)}function Lr(e){return e instanceof gr||(e=Pr(e)),e?(e=e.rgb(),new zr(e.r,e.g,e.b,e.opacity)):new zr}function Rr(e,t,n,r){return arguments.length===1?Lr(e):new zr(e,t,n,r??1)}function zr(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}mr(zr,Rr,hr(gr,{brighter(e){return e=e==null?vr:vr**+e,new zr(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?_r:_r**+e,new zr(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new zr(Wr(this.r),Wr(this.g),Wr(this.b),Ur(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Br,formatHex:Br,formatHex8:Vr,formatRgb:Hr,toString:Hr}));function Br(){return`#${Gr(this.r)}${Gr(this.g)}${Gr(this.b)}`}function Vr(){return`#${Gr(this.r)}${Gr(this.g)}${Gr(this.b)}${Gr((isNaN(this.opacity)?1:this.opacity)*255)}`}function Hr(){let e=Ur(this.opacity);return`${e===1?`rgb(`:`rgba(`}${Wr(this.r)}, ${Wr(this.g)}, ${Wr(this.b)}${e===1?`)`:`, ${e})`}`}function Ur(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Wr(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Gr(e){return e=Wr(e),(e<16?`0`:``)+e.toString(16)}function Kr(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new Yr(e,t,n,r)}function qr(e){if(e instanceof Yr)return new Yr(e.h,e.s,e.l,e.opacity);if(e instanceof gr||(e=Pr(e)),!e)return new Yr;if(e instanceof Yr)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=t===a?(n-r)/s+(n<r)*6:n===a?(r-t)/s+2:(t-n)/s+4,s/=c<.5?a+i:2-a-i,o*=60):s=c>0&&c<1?0:o,new Yr(o,s,c,e.opacity)}function Jr(e,t,n,r){return arguments.length===1?qr(e):new Yr(e,t,n,r??1)}function Yr(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}mr(Yr,Jr,hr(gr,{brighter(e){return e=e==null?vr:vr**+e,new Yr(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?_r:_r**+e,new Yr(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new zr(Qr(e>=240?e-240:e+120,i,r),Qr(e,i,r),Qr(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new Yr(Xr(this.h),Zr(this.s),Zr(this.l),Ur(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let e=Ur(this.opacity);return`${e===1?`hsl(`:`hsla(`}${Xr(this.h)}, ${Zr(this.s)*100}%, ${Zr(this.l)*100}%${e===1?`)`:`, ${e})`}`}}));function Xr(e){return e=(e||0)%360,e<0?e+360:e}function Zr(e){return Math.max(0,Math.min(1,e||0))}function Qr(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}var $r=e=>()=>e;function ei(e,t){return function(n){return e+n*t}}function ti(e,t,n){return e**=+n,t=t**+n-e,n=1/n,function(r){return(e+r*t)**+n}}function ni(e){return(e=+e)==1?ri:function(t,n){return n-t?ti(t,n,e):$r(isNaN(t)?n:t)}}function ri(e,t){var n=t-e;return n?ei(e,n):$r(isNaN(e)?t:e)}var ii=(function e(t){var n=ni(t);function r(e,t){var r=n((e=Rr(e)).r,(t=Rr(t)).r),i=n(e.g,t.g),a=n(e.b,t.b),o=ri(e.opacity,t.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+``}}return r.gamma=e,r})(1);function ai(e,t){t||=[];var n=e?Math.min(t.length,e.length):0,r=t.slice(),i;return function(a){for(i=0;i<n;++i)r[i]=e[i]*(1-a)+t[i]*a;return r}}function oi(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function si(e,t){for(var n=t?t.length:0,r=e?Math.min(n,e.length):0,i=Array(r),a=Array(n),o=0;o<r;++o)i[o]=gi(e[o],t[o]);for(;o<n;++o)a[o]=t[o];return function(e){for(o=0;o<r;++o)a[o]=i[o](e);return a}}function ci(e,t){var n=new Date;return e=+e,t=+t,function(r){return n.setTime(e*(1-r)+t*r),n}}function li(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}function ui(e,t){var n={},r={},i;for(i in(typeof e!=`object`||!e)&&(e={}),(typeof t!=`object`||!t)&&(t={}),t)i in e?n[i]=gi(e[i],t[i]):r[i]=t[i];return function(e){for(i in n)r[i]=n[i](e);return r}}var di=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,fi=new RegExp(di.source,`g`);function pi(e){return function(){return e}}function mi(e){return function(t){return e(t)+``}}function hi(e,t){var n=di.lastIndex=fi.lastIndex=0,r,i,a,o=-1,s=[],c=[];for(e+=``,t+=``;(r=di.exec(e))&&(i=fi.exec(t));)(a=i.index)>n&&(a=t.slice(n,a),s[o]?s[o]+=a:s[++o]=a),(r=r[0])===(i=i[0])?s[o]?s[o]+=i:s[++o]=i:(s[++o]=null,c.push({i:o,x:li(r,i)})),n=fi.lastIndex;return n<t.length&&(a=t.slice(n),s[o]?s[o]+=a:s[++o]=a),s.length<2?c[0]?mi(c[0].x):pi(t):(t=c.length,function(e){for(var n=0,r;n<t;++n)s[(r=c[n]).i]=r.x(e);return s.join(``)})}function gi(e,t){var n=typeof t,r;return t==null||n===`boolean`?$r(t):(n===`number`?li:n===`string`?(r=Pr(t))?(t=r,ii):hi:t instanceof Pr?ii:t instanceof Date?ci:oi(t)?ai:Array.isArray(t)?si:typeof t.valueOf!=`function`&&typeof t.toString!=`function`||isNaN(t)?ui:li)(e,t)}var _i=180/Math.PI,vi={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function yi(e,t,n,r,i,a){var o,s,c;return(o=Math.sqrt(e*e+t*t))&&(e/=o,t/=o),(c=e*n+t*r)&&(n-=e*c,r-=t*c),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,c/=s),e*r<t*n&&(e=-e,t=-t,c=-c,o=-o),{translateX:i,translateY:a,rotate:Math.atan2(t,e)*_i,skewX:Math.atan(c)*_i,scaleX:o,scaleY:s}}var bi;function xi(e){let t=new(typeof DOMMatrix==`function`?DOMMatrix:WebKitCSSMatrix)(e+``);return t.isIdentity?vi:yi(t.a,t.b,t.c,t.d,t.e,t.f)}function Si(e){return e==null||(bi||=document.createElementNS(`http://www.w3.org/2000/svg`,`g`),bi.setAttribute(`transform`,e),!(e=bi.transform.baseVal.consolidate()))?vi:(e=e.matrix,yi(e.a,e.b,e.c,e.d,e.e,e.f))}function Ci(e,t,n,r){function i(e){return e.length?e.pop()+` `:``}function a(e,r,i,a,o,s){if(e!==i||r!==a){var c=o.push(`translate(`,null,t,null,n);s.push({i:c-4,x:li(e,i)},{i:c-2,x:li(r,a)})}else(i||a)&&o.push(`translate(`+i+t+a+n)}function o(e,t,n,a){e===t?t&&n.push(i(n)+`rotate(`+t+r):(e-t>180?t+=360:t-e>180&&(e+=360),a.push({i:n.push(i(n)+`rotate(`,null,r)-2,x:li(e,t)}))}function s(e,t,n,a){e===t?t&&n.push(i(n)+`skewX(`+t+r):a.push({i:n.push(i(n)+`skewX(`,null,r)-2,x:li(e,t)})}function c(e,t,n,r,a,o){if(e!==n||t!==r){var s=a.push(i(a)+`scale(`,null,`,`,null,`)`);o.push({i:s-4,x:li(e,n)},{i:s-2,x:li(t,r)})}else(n!==1||r!==1)&&a.push(i(a)+`scale(`+n+`,`+r+`)`)}return function(t,n){var r=[],i=[];return t=e(t),n=e(n),a(t.translateX,t.translateY,n.translateX,n.translateY,r,i),o(t.rotate,n.rotate,r,i),s(t.skewX,n.skewX,r,i),c(t.scaleX,t.scaleY,n.scaleX,n.scaleY,r,i),t=n=null,function(e){for(var t=-1,n=i.length,a;++t<n;)r[(a=i[t]).i]=a.x(e);return r.join(``)}}}var wi=Ci(xi,`px, `,`px)`,`deg)`),Ti=Ci(Si,`, `,`)`,`)`),Ei=1e-12;function Di(e){return((e=Math.exp(e))+1/e)/2}function Oi(e){return((e=Math.exp(e))-1/e)/2}function ki(e){return((e=Math.exp(2*e))-1)/(e+1)}var Ai=(function e(t,n,r){function i(e,i){var a=e[0],o=e[1],s=e[2],c=i[0],l=i[1],u=i[2],d=c-a,f=l-o,p=d*d+f*f,m,h;if(p<Ei)h=Math.log(u/s)/t,m=function(e){return[a+e*d,o+e*f,s*Math.exp(t*e*h)]};else{var g=Math.sqrt(p),_=(u*u-s*s+r*p)/(2*s*n*g),v=(u*u-s*s-r*p)/(2*u*n*g),y=Math.log(Math.sqrt(_*_+1)-_);h=(Math.log(Math.sqrt(v*v+1)-v)-y)/t,m=function(e){var r=e*h,i=Di(y),c=s/(n*g)*(i*ki(t*r+y)-Oi(y));return[a+c*d,o+c*f,s*i/Di(t*r+y)]}}return m.duration=h*1e3*t/Math.SQRT2,m}return i.rho=function(t){var n=Math.max(.001,+t),r=n*n;return e(n,r,r*r)},i})(Math.SQRT2,2,4),ji=0,Mi=0,Ni=0,Pi=1e3,Fi,Ii,Li=0,Ri=0,zi=0,Bi=typeof performance==`object`&&performance.now?performance:Date,Vi=typeof window==`object`&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(e){setTimeout(e,17)};function Hi(){return Ri||=(Vi(Ui),Bi.now()+zi)}function Ui(){Ri=0}function Wi(){this._call=this._time=this._next=null}Wi.prototype=Gi.prototype={constructor:Wi,restart:function(e,t,n){if(typeof e!=`function`)throw TypeError(`callback is not a function`);n=(n==null?Hi():+n)+(t==null?0:+t),!this._next&&Ii!==this&&(Ii?Ii._next=this:Fi=this,Ii=this),this._call=e,this._time=n,Xi()},stop:function(){this._call&&(this._call=null,this._time=1/0,Xi())}};function Gi(e,t,n){var r=new Wi;return r.restart(e,t,n),r}function Ki(){Hi(),++ji;for(var e=Fi,t;e;)(t=Ri-e._time)>=0&&e._call.call(void 0,t),e=e._next;--ji}function qi(){Ri=(Li=Bi.now())+zi,ji=Mi=0;try{Ki()}finally{ji=0,Yi(),Ri=0}}function Ji(){var e=Bi.now(),t=e-Li;t>Pi&&(zi-=t,Li=e)}function Yi(){for(var e,t=Fi,n,r=1/0;t;)t._call?(r>t._time&&(r=t._time),e=t,t=t._next):(n=t._next,t._next=null,t=e?e._next=n:Fi=n);Ii=e,Xi(r)}function Xi(e){ji||(Mi&&=clearTimeout(Mi),e-Ri>24?(e<1/0&&(Mi=setTimeout(qi,e-Bi.now()-zi)),Ni&&=clearInterval(Ni)):(Ni||=(Li=Bi.now(),setInterval(Ji,Pi)),ji=1,Vi(qi)))}function Zi(e,t,n){var r=new Wi;return t=t==null?0:+t,r.restart(n=>{r.stop(),e(n+t)},t,n),r}var Qi=Je(`start`,`end`,`cancel`,`interrupt`),$i=[];function ea(e,t,n,r,i,a){var o=e.__transition;if(!o)e.__transition={};else if(n in o)return;ia(e,n,{name:t,index:r,group:i,on:Qi,tween:$i,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:0})}function ta(e,t){var n=ra(e,t);if(n.state>0)throw Error(`too late; already scheduled`);return n}function na(e,t){var n=ra(e,t);if(n.state>3)throw Error(`too late; already running`);return n}function ra(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw Error(`transition not found`);return n}function ia(e,t,n){var r=e.__transition,i;r[t]=n,n.timer=Gi(a,0,n.time);function a(e){n.state=1,n.timer.restart(o,n.delay,n.time),n.delay<=e&&o(e-n.delay)}function o(a){var l,u,d,f;if(n.state!==1)return c();for(l in r)if(f=r[l],f.name===n.name){if(f.state===3)return Zi(o);f.state===4?(f.state=6,f.timer.stop(),f.on.call(`interrupt`,e,e.__data__,f.index,f.group),delete r[l]):+l<t&&(f.state=6,f.timer.stop(),f.on.call(`cancel`,e,e.__data__,f.index,f.group),delete r[l])}if(Zi(function(){n.state===3&&(n.state=4,n.timer.restart(s,n.delay,n.time),s(a))}),n.state=2,n.on.call(`start`,e,e.__data__,n.index,n.group),n.state===2){for(n.state=3,i=Array(d=n.tween.length),l=0,u=-1;l<d;++l)(f=n.tween[l].value.call(e,e.__data__,n.index,n.group))&&(i[++u]=f);i.length=u+1}}function s(t){for(var r=t<n.duration?n.ease.call(null,t/n.duration):(n.timer.restart(c),n.state=5,1),a=-1,o=i.length;++a<o;)i[a].call(e,r);n.state===5&&(n.on.call(`end`,e,e.__data__,n.index,n.group),c())}function c(){for(var i in n.state=6,n.timer.stop(),delete r[t],r)return;delete e.__transition}}function aa(e,t){var n=e.__transition,r,i,a=!0,o;if(n){for(o in t=t==null?null:t+``,n){if((r=n[o]).name!==t){a=!1;continue}i=r.state>2&&r.state<5,r.state=6,r.timer.stop(),r.on.call(i?`interrupt`:`cancel`,e,e.__data__,r.index,r.group),delete n[o]}a&&delete e.__transition}}function oa(e){return this.each(function(){aa(this,e)})}function sa(e,t){var n,r;return function(){var i=na(this,e),a=i.tween;if(a!==n){r=n=a;for(var o=0,s=r.length;o<s;++o)if(r[o].name===t){r=r.slice(),r.splice(o,1);break}}i.tween=r}}function ca(e,t,n){var r,i;if(typeof n!=`function`)throw Error();return function(){var a=na(this,e),o=a.tween;if(o!==r){i=(r=o).slice();for(var s={name:t,value:n},c=0,l=i.length;c<l;++c)if(i[c].name===t){i[c]=s;break}c===l&&i.push(s)}a.tween=i}}function la(e,t){var n=this._id;if(e+=``,arguments.length<2){for(var r=ra(this.node(),n).tween,i=0,a=r.length,o;i<a;++i)if((o=r[i]).name===e)return o.value;return null}return this.each((t==null?sa:ca)(n,e,t))}function ua(e,t,n){var r=e._id;return e.each(function(){var e=na(this,r);(e.value||={})[t]=n.apply(this,arguments)}),function(e){return ra(e,r).value[t]}}function da(e,t){var n;return(typeof t==`number`?li:t instanceof Pr?ii:(n=Pr(t))?(t=n,ii):hi)(e,t)}function fa(e){return function(){this.removeAttribute(e)}}function pa(e){return function(){this.removeAttributeNS(e.space,e.local)}}function ma(e,t,n){var r,i=n+``,a;return function(){var o=this.getAttribute(e);return o===i?null:o===r?a:a=t(r=o,n)}}function ha(e,t,n){var r,i=n+``,a;return function(){var o=this.getAttributeNS(e.space,e.local);return o===i?null:o===r?a:a=t(r=o,n)}}function ga(e,t,n){var r,i,a;return function(){var o,s=n(this),c;return s==null?void this.removeAttribute(e):(o=this.getAttribute(e),c=s+``,o===c?null:o===r&&c===i?a:(i=c,a=t(r=o,s)))}}function _a(e,t,n){var r,i,a;return function(){var o,s=n(this),c;return s==null?void this.removeAttributeNS(e.space,e.local):(o=this.getAttributeNS(e.space,e.local),c=s+``,o===c?null:o===r&&c===i?a:(i=c,a=t(r=o,s)))}}function va(e,t){var n=et(e),r=n===`transform`?Ti:da;return this.attrTween(e,typeof t==`function`?(n.local?_a:ga)(n,r,ua(this,`attr.`+e,t)):t==null?(n.local?pa:fa)(n):(n.local?ha:ma)(n,r,t))}function ya(e,t){return function(n){this.setAttribute(e,t.call(this,n))}}function ba(e,t){return function(n){this.setAttributeNS(e.space,e.local,t.call(this,n))}}function xa(e,t){var n,r;function i(){var i=t.apply(this,arguments);return i!==r&&(n=(r=i)&&ba(e,i)),n}return i._value=t,i}function Sa(e,t){var n,r;function i(){var i=t.apply(this,arguments);return i!==r&&(n=(r=i)&&ya(e,i)),n}return i._value=t,i}function Ca(e,t){var n=`attr.`+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(t==null)return this.tween(n,null);if(typeof t!=`function`)throw Error();var r=et(e);return this.tween(n,(r.local?xa:Sa)(r,t))}function wa(e,t){return function(){ta(this,e).delay=+t.apply(this,arguments)}}function Ta(e,t){return t=+t,function(){ta(this,e).delay=t}}function Ea(e){var t=this._id;return arguments.length?this.each((typeof e==`function`?wa:Ta)(t,e)):ra(this.node(),t).delay}function Da(e,t){return function(){na(this,e).duration=+t.apply(this,arguments)}}function Oa(e,t){return t=+t,function(){na(this,e).duration=t}}function ka(e){var t=this._id;return arguments.length?this.each((typeof e==`function`?Da:Oa)(t,e)):ra(this.node(),t).duration}function Aa(e,t){if(typeof t!=`function`)throw Error();return function(){na(this,e).ease=t}}function ja(e){var t=this._id;return arguments.length?this.each(Aa(t,e)):ra(this.node(),t).ease}function Ma(e,t){return function(){var n=t.apply(this,arguments);if(typeof n!=`function`)throw Error();na(this,e).ease=n}}function Na(e){if(typeof e!=`function`)throw Error();return this.each(Ma(this._id,e))}function Pa(e){typeof e!=`function`&&(e=ft(e));for(var t=this._groups,n=t.length,r=Array(n),i=0;i<n;++i)for(var a=t[i],o=a.length,s=r[i]=[],c,l=0;l<o;++l)(c=a[l])&&e.call(c,c.__data__,l,a)&&s.push(c);return new lo(r,this._parents,this._name,this._id)}function Fa(e){if(e._id!==this._id)throw Error();for(var t=this._groups,n=e._groups,r=t.length,i=n.length,a=Math.min(r,i),o=Array(r),s=0;s<a;++s)for(var c=t[s],l=n[s],u=c.length,d=o[s]=Array(u),f,p=0;p<u;++p)(f=c[p]||l[p])&&(d[p]=f);for(;s<r;++s)o[s]=t[s];return new lo(o,this._parents,this._name,this._id)}function Ia(e){return(e+``).trim().split(/^|\s+/).every(function(e){var t=e.indexOf(`.`);return t>=0&&(e=e.slice(0,t)),!e||e===`start`})}function La(e,t,n){var r,i,a=Ia(t)?ta:na;return function(){var o=a(this,e),s=o.on;s!==r&&(i=(r=s).copy()).on(t,n),o.on=i}}function Ra(e,t){var n=this._id;return arguments.length<2?ra(this.node(),n).on.on(e):this.each(La(n,e,t))}function za(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function Ba(){return this.on(`end.remove`,za(this._id))}function Va(e){var t=this._name,n=this._id;typeof e!=`function`&&(e=at(e));for(var r=this._groups,i=r.length,a=Array(i),o=0;o<i;++o)for(var s=r[o],c=s.length,l=a[o]=Array(c),u,d,f=0;f<c;++f)(u=s[f])&&(d=e.call(u,u.__data__,f,s))&&(`__data__`in u&&(d.__data__=u.__data__),l[f]=d,ea(l[f],t,n,f,l,ra(u,n)));return new lo(a,this._parents,t,n)}function Ha(e){var t=this._name,n=this._id;typeof e!=`function`&&(e=lt(e));for(var r=this._groups,i=r.length,a=[],o=[],s=0;s<i;++s)for(var c=r[s],l=c.length,u,d=0;d<l;++d)if(u=c[d]){for(var f=e.call(u,u.__data__,d,c),p,m=ra(u,n),h=0,g=f.length;h<g;++h)(p=f[h])&&ea(p,t,n,h,f,m);a.push(f),o.push(u)}return new lo(a,o,t,n)}var Ua=Xn.prototype.constructor;function Wa(){return new Ua(this._groups,this._parents)}function Ga(e,t){var n,r,i;return function(){var a=nn(this,e),o=(this.style.removeProperty(e),nn(this,e));return a===o?null:a===n&&o===r?i:i=t(n=a,r=o)}}function Ka(e){return function(){this.style.removeProperty(e)}}function qa(e,t,n){var r,i=n+``,a;return function(){var o=nn(this,e);return o===i?null:o===r?a:a=t(r=o,n)}}function Ja(e,t,n){var r,i,a;return function(){var o=nn(this,e),s=n(this),c=s+``;return s??(c=s=(this.style.removeProperty(e),nn(this,e))),o===c?null:o===r&&c===i?a:(i=c,a=t(r=o,s))}}function Ya(e,t){var n,r,i,a=`style.`+t,o=`end.`+a,s;return function(){var c=na(this,e),l=c.on,u=c.value[a]==null?s||=Ka(t):void 0;(l!==n||i!==u)&&(r=(n=l).copy()).on(o,i=u),c.on=r}}function Xa(e,t,n){var r=(e+=``)==`transform`?wi:da;return t==null?this.styleTween(e,Ga(e,r)).on(`end.style.`+e,Ka(e)):typeof t==`function`?this.styleTween(e,Ja(e,r,ua(this,`style.`+e,t))).each(Ya(this._id,e)):this.styleTween(e,qa(e,r,t),n).on(`end.style.`+e,null)}function Za(e,t,n){return function(r){this.style.setProperty(e,t.call(this,r),n)}}function Qa(e,t,n){var r,i;function a(){var a=t.apply(this,arguments);return a!==i&&(r=(i=a)&&Za(e,a,n)),r}return a._value=t,a}function $a(e,t,n){var r=`style.`+(e+=``);if(arguments.length<2)return(r=this.tween(r))&&r._value;if(t==null)return this.tween(r,null);if(typeof t!=`function`)throw Error();return this.tween(r,Qa(e,t,n??``))}function eo(e){return function(){this.textContent=e}}function to(e){return function(){var t=e(this);this.textContent=t??``}}function no(e){return this.tween(`text`,typeof e==`function`?to(ua(this,`text`,e)):eo(e==null?``:e+``))}function ro(e){return function(t){this.textContent=e.call(this,t)}}function io(e){var t,n;function r(){var r=e.apply(this,arguments);return r!==n&&(t=(n=r)&&ro(r)),t}return r._value=e,r}function ao(e){var t=`text`;if(arguments.length<1)return(t=this.tween(t))&&t._value;if(e==null)return this.tween(t,null);if(typeof e!=`function`)throw Error();return this.tween(t,io(e))}function oo(){for(var e=this._name,t=this._id,n=uo(),r=this._groups,i=r.length,a=0;a<i;++a)for(var o=r[a],s=o.length,c,l=0;l<s;++l)if(c=o[l]){var u=ra(c,t);ea(c,e,n,l,o,{time:u.time+u.delay+u.duration,delay:0,duration:u.duration,ease:u.ease})}return new lo(r,this._parents,e,n)}function so(){var e,t,n=this,r=n._id,i=n.size();return new Promise(function(a,o){var s={value:o},c={value:function(){--i===0&&a()}};n.each(function(){var n=na(this,r),i=n.on;i!==e&&(t=(e=i).copy(),t._.cancel.push(s),t._.interrupt.push(s),t._.end.push(c)),n.on=t}),i===0&&a()})}var co=0;function lo(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function uo(){return++co}var fo=Xn.prototype;lo.prototype={constructor:lo,select:Va,selectAll:Ha,selectChild:fo.selectChild,selectChildren:fo.selectChildren,filter:Pa,merge:Fa,selection:Wa,transition:oo,call:fo.call,nodes:fo.nodes,node:fo.node,size:fo.size,empty:fo.empty,each:fo.each,on:Ra,attr:va,attrTween:Ca,style:Xa,styleTween:$a,text:no,textTween:ao,remove:Ba,tween:la,delay:Ea,duration:ka,ease:ja,easeVarying:Na,end:so,[Symbol.iterator]:fo[Symbol.iterator]};function po(e){return((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2}var mo={time:null,delay:0,duration:250,ease:po};function ho(e,t){for(var n;!(n=e.__transition)||!(n=n[t]);)if(!(e=e.parentNode))throw Error(`transition ${t} not found`);return n}function go(e){var t,n;e instanceof lo?(t=e._id,e=e._name):(t=uo(),(n=mo).time=Hi(),e=e==null?null:e+``);for(var r=this._groups,i=r.length,a=0;a<i;++a)for(var o=r[a],s=o.length,c,l=0;l<s;++l)(c=o[l])&&ea(c,e,t,l,o,n||ho(c,t));return new lo(r,this._parents,e,t)}Xn.prototype.interrupt=oa,Xn.prototype.transition=go;var _o=e=>()=>e;function vo(e,{sourceEvent:t,target:n,transform:r,dispatch:i}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},transform:{value:r,enumerable:!0,configurable:!0},_:{value:i}})}function yo(e,t,n){this.k=e,this.x=t,this.y=n}yo.prototype={constructor:yo,scale:function(e){return e===1?this:new yo(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new yo(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return`translate(`+this.x+`,`+this.y+`) scale(`+this.k+`)`}};var bo=new yo(1,0,0);xo.prototype=yo.prototype;function xo(e){for(;!e.__zoom;)if(!(e=e.parentNode))return bo;return e.__zoom}function So(e){e.stopImmediatePropagation()}function Co(e){e.preventDefault(),e.stopImmediatePropagation()}function wo(e){return(!e.ctrlKey||e.type===`wheel`)&&!e.button}function To(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute(`viewBox`)?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function Eo(){return this.__zoom||bo}function Do(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function Oo(){return navigator.maxTouchPoints||`ontouchstart`in this}function ko(e,t,n){var r=e.invertX(t[0][0])-n[0][0],i=e.invertX(t[1][0])-n[1][0],a=e.invertY(t[0][1])-n[0][1],o=e.invertY(t[1][1])-n[1][1];return e.translate(i>r?(r+i)/2:Math.min(0,r)||Math.max(0,i),o>a?(a+o)/2:Math.min(0,a)||Math.max(0,o))}function Ao(){var e=wo,t=To,n=ko,r=Do,i=Oo,a=[0,1/0],o=[[-1/0,-1/0],[1/0,1/0]],s=250,c=Ai,l=Je(`start`,`zoom`,`end`),u,d,f,p=500,m=150,h=0,g=10;function _(e){e.property(`__zoom`,Eo).on(`wheel.zoom`,w,{passive:!1}).on(`mousedown.zoom`,T).on(`dblclick.zoom`,E).filter(i).on(`touchstart.zoom`,D).on(`touchmove.zoom`,O).on(`touchend.zoom touchcancel.zoom`,k).style(`-webkit-tap-highlight-color`,`rgba(0,0,0,0)`)}_.transform=function(e,t,n,r){var i=e.selection?e.selection():e;i.property(`__zoom`,Eo),e===i?i.interrupt().each(function(){S(this,arguments).event(r).start().zoom(null,typeof t==`function`?t.apply(this,arguments):t).end()}):x(e,t,n,r)},_.scaleBy=function(e,t,n,r){_.scaleTo(e,function(){return this.__zoom.k*(typeof t==`function`?t.apply(this,arguments):t)},n,r)},_.scaleTo=function(e,r,i,a){_.transform(e,function(){var e=t.apply(this,arguments),a=this.__zoom,s=i==null?b(e):typeof i==`function`?i.apply(this,arguments):i,c=a.invert(s),l=typeof r==`function`?r.apply(this,arguments):r;return n(y(v(a,l),s,c),e,o)},i,a)},_.translateBy=function(e,r,i,a){_.transform(e,function(){return n(this.__zoom.translate(typeof r==`function`?r.apply(this,arguments):r,typeof i==`function`?i.apply(this,arguments):i),t.apply(this,arguments),o)},null,a)},_.translateTo=function(e,r,i,a,s){_.transform(e,function(){var e=t.apply(this,arguments),s=this.__zoom,c=a==null?b(e):typeof a==`function`?a.apply(this,arguments):a;return n(bo.translate(c[0],c[1]).scale(s.k).translate(typeof r==`function`?-r.apply(this,arguments):-r,typeof i==`function`?-i.apply(this,arguments):-i),e,o)},a,s)};function v(e,t){return t=Math.max(a[0],Math.min(a[1],t)),t===e.k?e:new yo(t,e.x,e.y)}function y(e,t,n){var r=t[0]-n[0]*e.k,i=t[1]-n[1]*e.k;return r===e.x&&i===e.y?e:new yo(e.k,r,i)}function b(e){return[(+e[0][0]+ +e[1][0])/2,(+e[0][1]+ +e[1][1])/2]}function x(e,n,r,i){e.on(`start.zoom`,function(){S(this,arguments).event(i).start()}).on(`interrupt.zoom end.zoom`,function(){S(this,arguments).event(i).end()}).tween(`zoom`,function(){var e=this,a=arguments,o=S(e,a).event(i),s=t.apply(e,a),l=r==null?b(s):typeof r==`function`?r.apply(e,a):r,u=Math.max(s[1][0]-s[0][0],s[1][1]-s[0][1]),d=e.__zoom,f=typeof n==`function`?n.apply(e,a):n,p=c(d.invert(l).concat(u/d.k),f.invert(l).concat(u/f.k));return function(e){if(e===1)e=f;else{var t=p(e),n=u/t[2];e=new yo(n,l[0]-t[0]*n,l[1]-t[1]*n)}o.zoom(null,e)}})}function S(e,t,n){return!n&&e.__zooming||new C(e,t)}function C(e,n){this.that=e,this.args=n,this.active=0,this.sourceEvent=null,this.extent=t.apply(e,n),this.taps=0}C.prototype={event:function(e){return e&&(this.sourceEvent=e),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit(`start`)),this},zoom:function(e,t){return this.mouse&&e!==`mouse`&&(this.mouse[1]=t.invert(this.mouse[0])),this.touch0&&e!==`touch`&&(this.touch0[1]=t.invert(this.touch0[0])),this.touch1&&e!==`touch`&&(this.touch1[1]=t.invert(this.touch1[0])),this.that.__zoom=t,this.emit(`zoom`),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit(`end`)),this},emit:function(e){var t=Qn(this.that).datum();l.call(e,this.that,new vo(e,{sourceEvent:this.sourceEvent,target:_,type:e,transform:this.that.__zoom,dispatch:l}),t)}};function w(t,...i){if(!e.apply(this,arguments))return;var s=S(this,i).event(t),c=this.__zoom,l=Math.max(a[0],Math.min(a[1],c.k*2**r.apply(this,arguments))),u=er(t);if(s.wheel)(s.mouse[0][0]!==u[0]||s.mouse[0][1]!==u[1])&&(s.mouse[1]=c.invert(s.mouse[0]=u)),clearTimeout(s.wheel);else if(c.k===l)return;else s.mouse=[u,c.invert(u)],aa(this),s.start();Co(t),s.wheel=setTimeout(d,m),s.zoom(`mouse`,n(y(v(c,l),s.mouse[0],s.mouse[1]),s.extent,o));function d(){s.wheel=null,s.end()}}function T(t,...r){if(f||!e.apply(this,arguments))return;var i=t.currentTarget,a=S(this,r,!0).event(t),s=Qn(t.view).on(`mousemove.zoom`,d,!0).on(`mouseup.zoom`,p,!0),c=er(t,i),l=t.clientX,u=t.clientY;ar(t.view),So(t),a.mouse=[c,this.__zoom.invert(c)],aa(this),a.start();function d(e){if(Co(e),!a.moved){var t=e.clientX-l,r=e.clientY-u;a.moved=t*t+r*r>h}a.event(e).zoom(`mouse`,n(y(a.that.__zoom,a.mouse[0]=er(e,i),a.mouse[1]),a.extent,o))}function p(e){s.on(`mousemove.zoom mouseup.zoom`,null),or(e.view,a.moved),Co(e),a.event(e).end()}}function E(r,...i){if(e.apply(this,arguments)){var a=this.__zoom,c=er(r.changedTouches?r.changedTouches[0]:r,this),l=a.invert(c),u=a.k*(r.shiftKey?.5:2),d=n(y(v(a,u),c,l),t.apply(this,i),o);Co(r),s>0?Qn(this).transition().duration(s).call(x,d,c,r):Qn(this).call(_.transform,d,c,r)}}function D(t,...n){if(e.apply(this,arguments)){var r=t.touches,i=r.length,a=S(this,n,t.changedTouches.length===i).event(t),o,s,c,l;for(So(t),s=0;s<i;++s)c=r[s],l=er(c,this),l=[l,this.__zoom.invert(l),c.identifier],a.touch0?!a.touch1&&a.touch0[2]!==l[2]&&(a.touch1=l,a.taps=0):(a.touch0=l,o=!0,a.taps=1+!!u);u&&=clearTimeout(u),o&&(a.taps<2&&(d=l[0],u=setTimeout(function(){u=null},p)),aa(this),a.start())}}function O(e,...t){if(this.__zooming){var r=S(this,t).event(e),i=e.changedTouches,a=i.length,s,c,l,u;for(Co(e),s=0;s<a;++s)c=i[s],l=er(c,this),r.touch0&&r.touch0[2]===c.identifier?r.touch0[0]=l:r.touch1&&r.touch1[2]===c.identifier&&(r.touch1[0]=l);if(c=r.that.__zoom,r.touch1){var d=r.touch0[0],f=r.touch0[1],p=r.touch1[0],m=r.touch1[1],h=(h=p[0]-d[0])*h+(h=p[1]-d[1])*h,g=(g=m[0]-f[0])*g+(g=m[1]-f[1])*g;c=v(c,Math.sqrt(h/g)),l=[(d[0]+p[0])/2,(d[1]+p[1])/2],u=[(f[0]+m[0])/2,(f[1]+m[1])/2]}else if(r.touch0)l=r.touch0[0],u=r.touch0[1];else return;r.zoom(`touch`,n(y(c,l,u),r.extent,o))}}function k(e,...t){if(this.__zooming){var n=S(this,t).event(e),r=e.changedTouches,i=r.length,a,o;for(So(e),f&&clearTimeout(f),f=setTimeout(function(){f=null},p),a=0;a<i;++a)o=r[a],n.touch0&&n.touch0[2]===o.identifier?delete n.touch0:n.touch1&&n.touch1[2]===o.identifier&&delete n.touch1;if(n.touch1&&!n.touch0&&(n.touch0=n.touch1,delete n.touch1),n.touch0)n.touch0[1]=this.__zoom.invert(n.touch0[0]);else if(n.end(),n.taps===2&&(o=er(o,this),Math.hypot(d[0]-o[0],d[1]-o[1])<g)){var s=Qn(this).on(`dblclick.zoom`);s&&s.apply(this,arguments)}}}return _.wheelDelta=function(e){return arguments.length?(r=typeof e==`function`?e:_o(+e),_):r},_.filter=function(t){return arguments.length?(e=typeof t==`function`?t:_o(!!t),_):e},_.touchable=function(e){return arguments.length?(i=typeof e==`function`?e:_o(!!e),_):i},_.extent=function(e){return arguments.length?(t=typeof e==`function`?e:_o([[+e[0][0],+e[0][1]],[+e[1][0],+e[1][1]]]),_):t},_.scaleExtent=function(e){return arguments.length?(a[0]=+e[0],a[1]=+e[1],_):[a[0],a[1]]},_.translateExtent=function(e){return arguments.length?(o[0][0]=+e[0][0],o[1][0]=+e[1][0],o[0][1]=+e[0][1],o[1][1]=+e[1][1],_):[[o[0][0],o[0][1]],[o[1][0],o[1][1]]]},_.constrain=function(e){return arguments.length?(n=e,_):n},_.duration=function(e){return arguments.length?(s=+e,_):s},_.interpolate=function(e){return arguments.length?(c=e,_):c},_.on=function(){var e=l.on.apply(l,arguments);return e===l?_:e},_.clickDistance=function(e){return arguments.length?(h=(e=+e)*e,_):Math.sqrt(h)},_.tapDistance=function(e){return arguments.length?(g=+e,_):g},_}var jo={error001:(e=`react`)=>`Seems like you have not used ${e===`svelte`?`SvelteFlowProvider`:`ReactFlowProvider`} as an ancestor. Help: https://${e}flow.dev/error#001`,error002:()=>`It looks like you've created a new nodeTypes or edgeTypes object. If this wasn't on purpose please define the nodeTypes/edgeTypes outside of the component or memoize them.`,error003:e=>`Node type "${e}" not found. Using fallback type "default".`,error004:()=>`The parent container needs a width and a height to render the graph.`,error005:()=>`Only child nodes can use a parent extent.`,error006:()=>`Can't create edge. An edge needs a source and a target.`,error007:e=>`The old edge with id=${e} does not exist.`,error009:e=>`Marker type "${e}" doesn't exist.`,error008:(e,{id:t,sourceHandle:n,targetHandle:r})=>`Couldn't create edge for ${e} handle id: "${e===`source`?n:r}", edge id: ${t}.`,error010:()=>`Handle: No node id found. Make sure to only use a Handle inside a custom Node.`,error011:e=>`Edge type "${e}" not found. Using fallback type "default".`,error012:e=>`Node with id "${e}" does not exist, it may have been removed. This can happen when a node is deleted before the "onNodeClick" handler is called.`,error013:(e=`react`)=>`It seems that you haven't loaded the styles. Please import '@xyflow/${e}/dist/style.css' or base.css to make sure everything is working properly.`,error014:()=>`useNodeConnections: No node ID found. Call useNodeConnections inside a custom Node or provide a node ID.`,error015:()=>`It seems that you are trying to drag a node that is not initialized. Please use onNodesChange as explained in the docs.`,error016:e=>`Edge with id "${e}" does not exist, it may have been removed. This can happen when an edge is deleted before the "onEdgeClick" handler is called.`},Mo=[[-1/0,-1/0],[1/0,1/0]],No=[`Enter`,` `,`Escape`],Po={"node.a11yDescription.default":`Press enter or space to select a node. Press delete to remove it and escape to cancel.`,"node.a11yDescription.keyboardDisabled":`Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.`,"node.a11yDescription.ariaLiveMessage":({direction:e,x:t,y:n})=>`Moved selected node ${e}. New position, x: ${t}, y: ${n}`,"edge.a11yDescription.default":`Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.`,"controls.ariaLabel":`Control Panel`,"controls.zoomIn.ariaLabel":`Zoom In`,"controls.zoomOut.ariaLabel":`Zoom Out`,"controls.fitView.ariaLabel":`Fit View`,"controls.interactive.ariaLabel":`Toggle Interactivity`,"minimap.ariaLabel":`Mini Map`,"handle.ariaLabel":`Handle`},Fo;(function(e){e.Strict=`strict`,e.Loose=`loose`})(Fo||={});var Io;(function(e){e.Free=`free`,e.Vertical=`vertical`,e.Horizontal=`horizontal`})(Io||={});var Lo;(function(e){e.Partial=`partial`,e.Full=`full`})(Lo||={});var Ro={inProgress:!1,isValid:null,from:null,fromHandle:null,fromPosition:null,fromNode:null,to:null,toHandle:null,toPosition:null,toNode:null,pointer:null},zo;(function(e){e.Bezier=`default`,e.Straight=`straight`,e.Step=`step`,e.SmoothStep=`smoothstep`,e.SimpleBezier=`simplebezier`})(zo||={});var Bo;(function(e){e.Arrow=`arrow`,e.ArrowClosed=`arrowclosed`})(Bo||={});var Y;(function(e){e.Left=`left`,e.Top=`top`,e.Right=`right`,e.Bottom=`bottom`})(Y||={});var Vo={[Y.Left]:Y.Right,[Y.Right]:Y.Left,[Y.Top]:Y.Bottom,[Y.Bottom]:Y.Top},Ho=e=>!!e&&typeof e==`object`&&`id`in e&&`source`in e&&`target`in e,Uo=e=>!!e&&typeof e==`object`&&`id`in e&&`position`in e&&!(`source`in e)&&!(`target`in e),Wo=e=>!!e&&typeof e==`object`&&`id`in e&&`internals`in e&&!(`source`in e)&&!(`target`in e),Go=(e,t=[0,0])=>{let{width:n,height:r}=Ts(e),i=e.origin??t,a=n*i[0],o=r*i[1];return{x:e.position.x-a,y:e.position.y-o}},Ko=(e,t={nodeOrigin:[0,0]})=>{if(e.length===0)return{x:0,y:0,width:0,height:0};let n=!1,r=e.reduce((e,r)=>{let i=typeof r==`string`,a=!t.nodeLookup&&!i?r:void 0;return t.nodeLookup&&(a=i?t.nodeLookup.get(r):Wo(r)?r:t.nodeLookup.get(r.id)),a?(n=!0,as(e,ls(a,t.nodeOrigin))):e},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return n?ss(r):{x:0,y:0,width:0,height:0}},qo=(e,t={})=>{let n={x:1/0,y:1/0,x2:-1/0,y2:-1/0},r=!1;return e.forEach(e=>{(t.filter===void 0||t.filter(e))&&(n=as(n,ls(e)),r=!0)}),r?ss(n):{x:0,y:0,width:0,height:0}},Jo=(e,t,[n,r,i]=[0,0,1],a=!1,o=!1)=>{let s=(t.x-n)/i,c=(t.y-r)/i,l=t.width/i,u=t.height/i,d=[];for(let t of e.values()){let{measured:e,selectable:n=!0,hidden:r=!1}=t;if(o&&!n||r)continue;let i=e.width??t.width??t.initialWidth??0,f=e.height??t.height??t.initialHeight??0,{x:p,y:m}=t.internals.positionAbsolute,h=ds(s,c,l,u,p,m,i,f),g=i*f,_=a&&h>0;(!t.internals.handleBounds||_||h>=g||t.dragging)&&d.push(t)}return d},Yo=(e,t)=>{let n=new Set;return e.forEach(e=>{n.add(e.id)}),t.filter(e=>n.has(e.source)||n.has(e.target))};function Xo(e,t){let n=new Map,r=t!=null&&t.nodes?new Set(t.nodes.map(e=>e.id)):null;return e.forEach(e=>{let i;if(t!=null&&t.includeHiddenNodes){let{width:t,height:n}=Ts(e);i=t>0&&n>0}else i=!!(e.measured.width&&e.measured.height&&!e.hidden);i&&(!r||r.has(e.id))&&n.set(e.id,e)}),n}async function Zo({nodes:e,width:t,height:n,panZoom:r,minZoom:i,maxZoom:a},o){if(e.size===0)return!0;let s=Ss(qo(Xo(e,o)),t,n,(o==null?void 0:o.minZoom)??i,(o==null?void 0:o.maxZoom)??a,(o==null?void 0:o.padding)??.1);return await r.setViewport(s,{duration:o==null?void 0:o.duration,ease:o==null?void 0:o.ease,interpolate:o==null?void 0:o.interpolate}),!0}function Qo({nodeId:e,nextPosition:t,nodeLookup:n,nodeOrigin:r=[0,0],nodeExtent:i,onError:a}){let o=n.get(e),s=o.parentId?n.get(o.parentId):void 0,{x:c,y:l}=s?s.internals.positionAbsolute:{x:0,y:0},u=o.origin??r,d=o.extent||i;if(o.extent===`parent`&&!o.expandParent){if(!s)a==null||a(`005`,jo.error005());else{let{width:e,height:t}=Ts(s);e&&t&&(d=[[c,l],[c+e,l+t]])}}else s&&ws(o.extent)&&(d=[[o.extent[0][0]+c,o.extent[0][1]+l],[o.extent[1][0]+c,o.extent[1][1]+l]]);let f=ws(d)?ts(t,d,o.measured):t;return(o.measured.width===void 0||o.measured.height===void 0)&&(a==null||a(`015`,jo.error015())),{position:{x:f.x-c+(o.measured.width??0)*u[0],y:f.y-l+(o.measured.height??0)*u[1]},positionAbsolute:f}}async function $o({nodesToRemove:e=[],edgesToRemove:t=[],nodes:n,edges:r,onBeforeDelete:i}){let a=new Set(e.map(e=>e.id)),o=[];for(let e of n){if(e.deletable===!1)continue;let t=a.has(e.id),n=!t&&e.parentId&&o.find(t=>t.id===e.parentId);(t||n)&&o.push(e)}let s=new Set(t.map(e=>e.id)),c=r.filter(e=>e.deletable!==!1),l=Yo(o,c);for(let e of c)s.has(e.id)&&!l.find(t=>t.id===e.id)&&l.push(e);if(!i)return{edges:l,nodes:o};let u=await i({nodes:o,edges:l});return typeof u==`boolean`?u?{edges:l,nodes:o}:{edges:[],nodes:[]}:u}var es=(e,t=0,n=1)=>Math.min(Math.max(e,t),n),ts=(e={x:0,y:0},t,n)=>({x:es(e.x,t[0][0],t[1][0]-((n==null?void 0:n.width)??0)),y:es(e.y,t[0][1],t[1][1]-((n==null?void 0:n.height)??0))});function ns(e,t,n){let{width:r,height:i}=Ts(n),{x:a,y:o}=n.internals.positionAbsolute;return ts(e,[[a,o],[a+r,o+i]],t)}var rs=(e,t,n)=>e<t?es(Math.abs(e-t),1,t)/t:e>n?-es(Math.abs(e-n),1,t)/t:0,is=(e,t,n=15,r=40)=>[rs(e.x,r,t.width-r)*n,rs(e.y,r,t.height-r)*n],as=(e,t)=>({x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x2,t.x2),y2:Math.max(e.y2,t.y2)}),os=({x:e,y:t,width:n,height:r})=>({x:e,y:t,x2:e+n,y2:t+r}),ss=({x:e,y:t,x2:n,y2:r})=>({x:e,y:t,width:n-e,height:r-t}),cs=(e,t=[0,0])=>{var n,r;let{x:i,y:a}=Wo(e)?e.internals.positionAbsolute:Go(e,t);return{x:i,y:a,width:((n=e.measured)==null?void 0:n.width)??e.width??e.initialWidth??0,height:((r=e.measured)==null?void 0:r.height)??e.height??e.initialHeight??0}},ls=(e,t=[0,0])=>{var n,r;let{x:i,y:a}=Wo(e)?e.internals.positionAbsolute:Go(e,t);return{x:i,y:a,x2:i+(((n=e.measured)==null?void 0:n.width)??e.width??e.initialWidth??0),y2:a+(((r=e.measured)==null?void 0:r.height)??e.height??e.initialHeight??0)}},us=(e,t)=>ss(as(os(e),os(t))),ds=(e,t,n,r,i,a,o,s)=>{let c=Math.max(0,Math.min(e+n,i+o)-Math.max(e,i)),l=Math.max(0,Math.min(t+r,a+s)-Math.max(t,a));return Math.ceil(c*l)},fs=(e,t)=>ds(e.x,e.y,e.width,e.height,t.x,t.y,t.width,t.height),ps=e=>ms(e.width)&&ms(e.height)&&ms(e.x)&&ms(e.y),ms=e=>!isNaN(e)&&isFinite(e),hs=(e,t)=>(e,t)=>{},gs=(e,t=[1,1])=>({x:t[0]*Math.round(e.x/t[0]),y:t[1]*Math.round(e.y/t[1])}),_s=({x:e,y:t},[n,r,i],a=!1,o=[1,1])=>{let s={x:(e-n)/i,y:(t-r)/i};return a?gs(s,o):s},vs=({x:e,y:t},[n,r,i])=>({x:e*i+n,y:t*i+r});function ys(e,t){if(typeof e==`number`)return Math.floor((t-t/(1+e))*.5);if(typeof e==`string`&&e.endsWith(`px`)){let t=parseFloat(e);if(!Number.isNaN(t))return Math.floor(t)}if(typeof e==`string`&&e.endsWith(`%`)){let n=parseFloat(e);if(!Number.isNaN(n))return Math.floor(t*n*.01)}return console.error(`The padding value "${e}" is invalid. Please provide a number or a string with a valid unit (px or %).`),0}function bs(e,t,n){if(typeof e==`string`||typeof e==`number`){let r=ys(e,n),i=ys(e,t);return{top:r,right:i,bottom:r,left:i,x:i*2,y:r*2}}if(typeof e==`object`){let r=ys(e.top??e.y??0,n),i=ys(e.bottom??e.y??0,n),a=ys(e.left??e.x??0,t),o=ys(e.right??e.x??0,t);return{top:r,right:o,bottom:i,left:a,x:a+o,y:r+i}}return{top:0,right:0,bottom:0,left:0,x:0,y:0}}function xs(e,t,n,r,i,a){let{x:o,y:s}=vs(e,[t,n,r]),{x:c,y:l}=vs({x:e.x+e.width,y:e.y+e.height},[t,n,r]),u=i-c,d=a-l;return{left:Math.floor(o),top:Math.floor(s),right:Math.floor(u),bottom:Math.floor(d)}}var Ss=(e,t,n,r,i,a)=>{let o=bs(a,t,n),s=(t-o.x)/e.width,c=(n-o.y)/e.height,l=es(Math.min(s,c),r,i),u=e.x+e.width/2,d=e.y+e.height/2,f=t/2-u*l,p=n/2-d*l,m=xs(e,f,p,l,t,n),h={left:Math.min(m.left-o.left,0),top:Math.min(m.top-o.top,0),right:Math.min(m.right-o.right,0),bottom:Math.min(m.bottom-o.bottom,0)};return{x:f-h.left+h.right,y:p-h.top+h.bottom,zoom:l}},Cs=()=>{var e;return typeof navigator<`u`&&((e=navigator)==null||(e=e.userAgent)==null?void 0:e.indexOf(`Mac`))>=0};function ws(e){return e!=null&&e!==`parent`}function Ts(e){var t,n;return{width:((t=e.measured)==null?void 0:t.width)??e.width??e.initialWidth??0,height:((n=e.measured)==null?void 0:n.height)??e.height??e.initialHeight??0}}function Es(e){var t,n;return(((t=e.measured)==null?void 0:t.width)??e.width??e.initialWidth)!==void 0&&(((n=e.measured)==null?void 0:n.height)??e.height??e.initialHeight)!==void 0}function Ds(e,t={width:0,height:0},n,r,i){let a={...e},o=r.get(n);if(o){let e=o.origin||i;a.x+=o.internals.positionAbsolute.x-(t.width??0)*e[0],a.y+=o.internals.positionAbsolute.y-(t.height??0)*e[1]}return a}function Os(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}function ks(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function As(e){return{...Po,...e||{}}}function js(e,t){if(!e&&!t)return!0;if(!e||!t||e.size!==t.size)return!1;if(!e.size&&!t.size)return!0;for(let n of e.keys())if(!t.has(n))return!1;return!0}function Ms(e,t,n){if(!n)return;let r=[];e.forEach((e,n)=>{t!=null&&t.has(n)||r.push(e)}),r.length&&n(r)}function Ns(e){return e===null?null:e?`valid`:`invalid`}function Ps(e,{snapGrid:t=[0,0],snapToGrid:n=!1,transform:r,containerBounds:i}){let{x:a,y:o}=Bs(e),s=_s({x:a-((i==null?void 0:i.left)??0),y:o-((i==null?void 0:i.top)??0)},r),{x:c,y:l}=n?gs(s,t):s;return{xSnapped:c,ySnapped:l,...s}}var Fs=e=>({width:e.offsetWidth,height:e.offsetHeight}),Is=e=>{var t,n;return(e==null||(t=e.getRootNode)==null?void 0:t.call(e))||((n=window)==null?void 0:n.document)},Ls=[`INPUT`,`SELECT`,`TEXTAREA`];function Rs(e){var t;let n=((t=e.composedPath)==null||(t=t.call(e))==null?void 0:t[0])||e.target;return(n==null?void 0:n.nodeType)===1?Ls.includes(n.nodeName)||n.hasAttribute(`contenteditable`)||!!n.closest(`.nokey`):!1}var zs=e=>`clientX`in e,Bs=(e,t)=>{var n,r;let i=zs(e),a=i?e.clientX:(n=e.touches)==null?void 0:n[0].clientX,o=i?e.clientY:(r=e.touches)==null?void 0:r[0].clientY;return{x:a-((t==null?void 0:t.left)??0),y:o-((t==null?void 0:t.top)??0)}},Vs=(e,t,n,r,i)=>{let a=t.querySelectorAll(`.${e}`);return!a||!a.length?null:Array.from(a).map(t=>{let a=t.getBoundingClientRect();return{id:t.getAttribute(`data-handleid`),type:e,nodeId:i,position:t.getAttribute(`data-handlepos`),x:(a.left-n.left)/r,y:(a.top-n.top)/r,...Fs(t)}})};function Hs({sourceX:e,sourceY:t,targetX:n,targetY:r,sourceControlX:i,sourceControlY:a,targetControlX:o,targetControlY:s}){let c=e*.125+i*.375+o*.375+n*.125,l=t*.125+a*.375+s*.375+r*.125;return[c,l,Math.abs(c-e),Math.abs(l-t)]}function Us(e,t){return e>=0?.5*e:t*25*Math.sqrt(-e)}function Ws({pos:e,x1:t,y1:n,x2:r,y2:i,c:a}){switch(e){case Y.Left:return[t-Us(t-r,a),n];case Y.Right:return[t+Us(r-t,a),n];case Y.Top:return[t,n-Us(n-i,a)];case Y.Bottom:return[t,n+Us(i-n,a)]}}function Gs({sourceX:e,sourceY:t,sourcePosition:n=Y.Bottom,targetX:r,targetY:i,targetPosition:a=Y.Top,curvature:o=.25}){let[s,c]=Ws({pos:n,x1:e,y1:t,x2:r,y2:i,c:o}),[l,u]=Ws({pos:a,x1:r,y1:i,x2:e,y2:t,c:o}),[d,f,p,m]=Hs({sourceX:e,sourceY:t,targetX:r,targetY:i,sourceControlX:s,sourceControlY:c,targetControlX:l,targetControlY:u});return[`M${e},${t} C${s},${c} ${l},${u} ${r},${i}`,d,f,p,m]}function Ks({sourceX:e,sourceY:t,targetX:n,targetY:r}){let i=Math.abs(n-e)/2,a=n<e?n+i:n-i,o=Math.abs(r-t)/2;return[a,r<t?r+o:r-o,i,o]}function qs({sourceNode:e,targetNode:t,selected:n=!1,zIndex:r=0,elevateOnSelect:i=!1,zIndexMode:a=`basic`}){return a===`manual`?r:(i&&n?r+1e3:r)+Math.max(e.parentId||i&&e.selected?e.internals.z:0,t.parentId||i&&t.selected?t.internals.z:0)}function Js({sourceNode:e,targetNode:t,width:n,height:r,transform:i}){let a=as(ls(e),ls(t));return a.x===a.x2&&(a.x2+=1),a.y===a.y2&&(a.y2+=1),fs({x:-i[0]/i[2],y:-i[1]/i[2],width:n/i[2],height:r/i[2]},ss(a))>0}var Ys=({source:e,sourceHandle:t,target:n,targetHandle:r})=>`xy-edge__${e}${t||``}-${n}${r||``}`,Xs=(e,t)=>t.some(t=>t.source===e.source&&t.target===e.target&&(t.sourceHandle===e.sourceHandle||!t.sourceHandle&&!e.sourceHandle)&&(t.targetHandle===e.targetHandle||!t.targetHandle&&!e.targetHandle)),Zs=(e,t,n={})=>{if(!e.source||!e.target){var r;return(r=n.onError)==null||r.call(n,`006`,jo.error006()),t}let i=n.getEdgeId||Ys,a;return a=Ho(e)?{...e}:{...e,id:i(e)},Xs(a,t)?t:(a.sourceHandle===null&&delete a.sourceHandle,a.targetHandle===null&&delete a.targetHandle,t.concat(a))};function Qs({sourceX:e,sourceY:t,targetX:n,targetY:r}){let[i,a,o,s]=Ks({sourceX:e,sourceY:t,targetX:n,targetY:r});return[`M ${e},${t}L ${n},${r}`,i,a,o,s]}var $s={[Y.Left]:{x:-1,y:0},[Y.Right]:{x:1,y:0},[Y.Top]:{x:0,y:-1},[Y.Bottom]:{x:0,y:1}},ec=({source:e,sourcePosition:t=Y.Bottom,target:n})=>t===Y.Left||t===Y.Right?e.x<n.x?{x:1,y:0}:{x:-1,y:0}:e.y<n.y?{x:0,y:1}:{x:0,y:-1},tc=(e,t)=>Math.sqrt((t.x-e.x)**2+(t.y-e.y)**2);function nc({source:e,sourcePosition:t=Y.Bottom,target:n,targetPosition:r=Y.Top,center:i,offset:a,stepPosition:o}){let s=$s[t],c=$s[r],l={x:e.x+s.x*a,y:e.y+s.y*a},u={x:n.x+c.x*a,y:n.y+c.y*a},d=ec({source:l,sourcePosition:t,target:u}),f=d.x===0?`y`:`x`,p=d[f],m=[],h,g,_={x:0,y:0},v={x:0,y:0},[,,y,b]=Ks({sourceX:e.x,sourceY:e.y,targetX:n.x,targetY:n.y});if(s[f]*c[f]===-1){f===`x`?(h=i.x??l.x+(u.x-l.x)*o,g=i.y??(l.y+u.y)/2):(h=i.x??(l.x+u.x)/2,g=i.y??l.y+(u.y-l.y)*o);let e=[{x:h,y:l.y},{x:h,y:u.y}],t=[{x:l.x,y:g},{x:u.x,y:g}];m=s[f]===p?f===`x`?e:t:f===`x`?t:e}else{let i=[{x:l.x,y:u.y}],o=[{x:u.x,y:l.y}];if(m=f===`x`?s.x===p?o:i:s.y===p?i:o,t===r){let t=Math.abs(e[f]-n[f]);if(t<=a){let r=Math.min(a-1,a-t);s[f]===p?_[f]=(l[f]>e[f]?-1:1)*r:v[f]=(u[f]>n[f]?-1:1)*r}}if(t!==r){let e=f===`x`?`y`:`x`,t=s[f]===c[e],n=l[e]>u[e],r=l[e]<u[e];(s[f]===1&&(!t&&n||t&&r)||s[f]!==1&&(!t&&r||t&&n))&&(m=f===`x`?i:o)}let d={x:l.x+_.x,y:l.y+_.y},y={x:u.x+v.x,y:u.y+v.y};Math.max(Math.abs(d.x-m[0].x),Math.abs(y.x-m[0].x))>=Math.max(Math.abs(d.y-m[0].y),Math.abs(y.y-m[0].y))?(h=(d.x+y.x)/2,g=m[0].y):(h=m[0].x,g=(d.y+y.y)/2)}let x={x:l.x+_.x,y:l.y+_.y},S={x:u.x+v.x,y:u.y+v.y};return[[e,...x.x!==m[0].x||x.y!==m[0].y?[x]:[],...m,...S.x!==m[m.length-1].x||S.y!==m[m.length-1].y?[S]:[],n],h,g,y,b]}function rc(e,t,n,r){let i=Math.min(tc(e,t)/2,tc(t,n)/2,r),{x:a,y:o}=t;if(e.x===a&&a===n.x||e.y===o&&o===n.y)return`L${a} ${o}`;if(e.y===o){let t=e.x<n.x?-1:1,r=e.y<n.y?1:-1;return`L ${a+i*t},${o}Q ${a},${o} ${a},${o+i*r}`}let s=e.x<n.x?1:-1;return`L ${a},${o+i*(e.y<n.y?-1:1)}Q ${a},${o} ${a+i*s},${o}`}function ic({sourceX:e,sourceY:t,sourcePosition:n=Y.Bottom,targetX:r,targetY:i,targetPosition:a=Y.Top,borderRadius:o=5,centerX:s,centerY:c,offset:l=20,stepPosition:u=.5}){let[d,f,p,m,h]=nc({source:{x:e,y:t},sourcePosition:n,target:{x:r,y:i},targetPosition:a,center:{x:s,y:c},offset:l,stepPosition:u}),g=`M${d[0].x} ${d[0].y}`;for(let e=1;e<d.length-1;e++)g+=rc(d[e-1],d[e],d[e+1],o);return g+=`L${d[d.length-1].x} ${d[d.length-1].y}`,[g,f,p,m,h]}function ac(e){var t;return e&&!!(e.internals.handleBounds||(t=e.handles)!=null&&t.length)&&!!(e.measured.width||e.width||e.initialWidth)}function oc(e){let{sourceNode:t,targetNode:n}=e;if(!ac(t)||!ac(n))return null;let r=t.internals.handleBounds||sc(t.handles),i=n.internals.handleBounds||sc(n.handles),a=lc((r==null?void 0:r.source)??[],e.sourceHandle),o=lc(e.connectionMode===Fo.Strict?(i==null?void 0:i.target)??[]:((i==null?void 0:i.target)??[]).concat((i==null?void 0:i.source)??[]),e.targetHandle);if(!a||!o){var s;return(s=e.onError)==null||s.call(e,`008`,jo.error008(a?`target`:`source`,{id:e.id,sourceHandle:e.sourceHandle,targetHandle:e.targetHandle})),null}let c=(a==null?void 0:a.position)||Y.Bottom,l=(o==null?void 0:o.position)||Y.Top,u=cc(t,a,c),d=cc(n,o,l);return{sourceX:u.x,sourceY:u.y,targetX:d.x,targetY:d.y,sourcePosition:c,targetPosition:l}}function sc(e){if(!e)return null;let t=[],n=[];for(let r of e)r.width=r.width??1,r.height=r.height??1,r.type===`source`?t.push(r):r.type===`target`&&n.push(r);return{source:t,target:n}}function cc(e,t,n=Y.Left,r=!1){let i=((t==null?void 0:t.x)??0)+e.internals.positionAbsolute.x,a=((t==null?void 0:t.y)??0)+e.internals.positionAbsolute.y,{width:o,height:s}=t??Ts(e);if(r)return{x:i+o/2,y:a+s/2};switch((t==null?void 0:t.position)??n){case Y.Top:return{x:i+o/2,y:a};case Y.Right:return{x:i+o,y:a+s/2};case Y.Bottom:return{x:i+o/2,y:a+s};case Y.Left:return{x:i,y:a+s/2}}}function lc(e,t){return e&&(t?e.find(e=>e.id===t):e[0])||null}function uc(e,t){return e?typeof e==`string`?e:`${t?`${t}__`:``}${Object.keys(e).sort().map(t=>`${t}=${e[t]}`).join(`&`)}`:``}function dc(e,{id:t,defaultColor:n,defaultMarkerStart:r,defaultMarkerEnd:i}){let a=new Set;return e.reduce((e,o)=>([o.markerStart||r,o.markerEnd||i].forEach(r=>{if(r&&typeof r==`object`){let i=uc(r,t);a.has(i)||(e.push({id:i,color:r.color||n,...r}),a.add(i))}}),e),[]).sort((e,t)=>e.id.localeCompare(t.id))}var fc=1e3,pc=10,mc={nodeOrigin:[0,0],nodeExtent:Mo,elevateNodesOnSelect:!0,zIndexMode:`basic`,defaults:{}},hc={...mc,checkEquality:!0};function gc(e,t){let n={...e};for(let e in t)t[e]!==void 0&&(n[e]=t[e]);return n}function _c(e,t,n){let r=gc(mc,n);for(let n of e.values())if(n.parentId)Sc(n,e,t,r);else{let e=ts(Go(n,r.nodeOrigin),ws(n.extent)?n.extent:r.nodeExtent,Ts(n));n.internals.positionAbsolute=e}}function vc(e,t){if(!e.handles)return e.measured?t==null?void 0:t.internals.handleBounds:void 0;let n=[],r=[];for(let t of e.handles){let i={id:t.id,width:t.width??1,height:t.height??1,nodeId:e.id,x:t.x,y:t.y,position:t.position,type:t.type};t.type===`source`?n.push(i):t.type===`target`&&r.push(i)}return{source:n,target:r}}function yc(e){return e===`manual`}function bc(e,t,n,r={}){let i=gc(hc,r),a={i:0},o=new Map(t),s=i!=null&&i.elevateNodesOnSelect&&!yc(i.zIndexMode)?fc:0,c=e.length>0,l=!1;t.clear(),n.clear();for(let f of e){let e=o.get(f.id);if(i.checkEquality&&f===(e==null?void 0:e.internals.userNode))t.set(f.id,e);else{var u,d;let n=ts(Go(f,i.nodeOrigin),ws(f.extent)?f.extent:i.nodeExtent,Ts(f));e={...i.defaults,...f,measured:{width:(u=f.measured)==null?void 0:u.width,height:(d=f.measured)==null?void 0:d.height},internals:{positionAbsolute:n,handleBounds:vc(f,e),z:Cc(f,s,i.zIndexMode),userNode:f}},t.set(f.id,e)}(e.measured===void 0||e.measured.width===void 0||e.measured.height===void 0)&&!e.hidden&&(c=!1),f.parentId&&Sc(e,t,n,r,a),l||=f.selected??!1}return{nodesInitialized:c,hasSelectedNodes:l}}function xc(e,t){if(!e.parentId)return;let n=t.get(e.parentId);n?n.set(e.id,e):t.set(e.parentId,new Map([[e.id,e]]))}function Sc(e,t,n,r,i){let{elevateNodesOnSelect:a,nodeOrigin:o,nodeExtent:s,zIndexMode:c}=gc(mc,r),l=e.parentId,u=t.get(l);if(!u){console.warn(`Parent node ${l} not found. Please make sure that parent nodes are in front of their child nodes in the nodes array.`);return}xc(e,n),i&&!u.parentId&&u.internals.rootParentIndex===void 0&&c===`auto`&&(u.internals.rootParentIndex=++i.i,u.internals.z=u.internals.z+i.i*pc),i&&u.internals.rootParentIndex!==void 0&&(i.i=u.internals.rootParentIndex);let{x:d,y:f,z:p}=wc(e,u,o,s,a&&!yc(c)?fc:0,c),{positionAbsolute:m}=e.internals,h=d!==m.x||f!==m.y;(h||p!==e.internals.z)&&t.set(e.id,{...e,internals:{...e.internals,positionAbsolute:h?{x:d,y:f}:m,z:p}})}function Cc(e,t,n){let r=ms(e.zIndex)?e.zIndex:0;return yc(n)?r:r+(e.selected?t:0)}function wc(e,t,n,r,i,a){let{x:o,y:s}=t.internals.positionAbsolute,c=Ts(e),l=Go(e,n),u=ws(e.extent)?ts(l,e.extent,c):l,d=ts({x:o+u.x,y:s+u.y},r,c);e.extent===`parent`&&(d=ns(d,c,t));let f=Cc(e,i,a),p=t.internals.z??0;return{x:d.x,y:d.y,z:p>=f?p+1:f}}function Tc(e,t,n,r=[0,0]){let i=[],a=new Map;for(let n of e){var o;let e=t.get(n.parentId);if(!e)continue;let r=us(((o=a.get(n.parentId))==null?void 0:o.expandedRect)??cs(e),n.rect);a.set(n.parentId,{expandedRect:r,parent:e})}return a.size>0&&a.forEach(({expandedRect:t,parent:a},o)=>{let s=a.internals.positionAbsolute,c=Ts(a),l=a.origin??r,u=t.x<s.x?Math.round(Math.abs(s.x-t.x)):0,d=t.y<s.y?Math.round(Math.abs(s.y-t.y)):0,f=Math.max(c.width,Math.round(t.width)),p=Math.max(c.height,Math.round(t.height)),m=(f-c.width)*l[0],h=(p-c.height)*l[1];if(u>0||d>0||m||h){var g;i.push({id:o,type:`position`,position:{x:a.position.x-u+m,y:a.position.y-d+h}}),(g=n.get(o))==null||g.forEach(t=>{e.some(e=>e.id===t.id)||i.push({id:t.id,type:`position`,position:{x:t.position.x+u,y:t.position.y+d}})})}(c.width<t.width||c.height<t.height||u||d)&&i.push({id:o,type:`dimensions`,setAttributes:!0,dimensions:{width:f+(u?l[0]*u-m:0),height:p+(d?l[1]*d-h:0)}})}),i}function Ec(e,t,n,r,i,a,o){let s=r==null?void 0:r.querySelector(`.xyflow__viewport`),c=!1;if(!s)return{changes:[],updatedInternals:c};let l=[],u=window.getComputedStyle(s),{m22:d}=new window.DOMMatrixReadOnly(u.transform),f=[];for(let r of e.values()){let e=t.get(r.id);if(!e)continue;if(e.hidden){t.set(e.id,{...e,internals:{...e.internals,handleBounds:void 0}}),c=!0;continue}let s=Fs(r.nodeElement),u=e.measured.width!==s.width||e.measured.height!==s.height;if(s.width&&s.height&&(u||!e.internals.handleBounds||r.force)){let p=r.nodeElement.getBoundingClientRect(),m=ws(e.extent)?e.extent:a,{positionAbsolute:h}=e.internals;if(e.parentId&&e.extent===`parent`){let n=t.get(e.parentId);n&&(h=ns(h,s,n))}else m&&(h=ts(h,m,s));let g={...e,measured:s,internals:{...e.internals,positionAbsolute:h,handleBounds:{source:Vs(`source`,r.nodeElement,p,d,e.id),target:Vs(`target`,r.nodeElement,p,d,e.id)}}};t.set(e.id,g),e.parentId&&Sc(g,t,n,{nodeOrigin:i,zIndexMode:o}),c=!0,u&&(l.push({id:e.id,type:`dimensions`,dimensions:s}),e.expandParent&&e.parentId&&f.push({id:e.id,parentId:e.parentId,rect:cs(g,i)}))}}if(f.length>0){let e=Tc(f,t,n,i);l.push(...e)}return{changes:l,updatedInternals:c}}async function Dc({delta:e,panZoom:t,transform:n,translateExtent:r,width:i,height:a}){if(!t||!e.x&&!e.y)return!1;let o=await t.setViewportConstrained({x:n[0]+e.x,y:n[1]+e.y,zoom:n[2]},[[0,0],[i,a]],r);return!!o&&(o.x!==n[0]||o.y!==n[1]||o.k!==n[2])}function Oc(e,t,n,r,i,a){let o=i,s=r.get(o)||new Map;r.set(o,s.set(n,t)),o=`${i}-${e}`;let c=r.get(o)||new Map;if(r.set(o,c.set(n,t)),a){o=`${i}-${e}-${a}`;let s=r.get(o)||new Map;r.set(o,s.set(n,t))}}function kc(e,t,n){e.clear(),t.clear();for(let r of n){let{source:n,target:i,sourceHandle:a=null,targetHandle:o=null}=r,s={edgeId:r.id,source:n,target:i,sourceHandle:a,targetHandle:o},c=`${n}-${a}--${i}-${o}`;Oc(`source`,s,`${i}-${o}--${n}-${a}`,e,n,a),Oc(`target`,s,c,e,i,o),t.set(r.id,r)}}function Ac(e,t){if(!e.parentId)return!1;let n=t.get(e.parentId);return n?n.selected?!0:Ac(n,t):!1}function jc(e,t,n){let r=e;do{var i;if(r!=null&&(i=r.matches)!=null&&i.call(r,t))return!0;if(r===n)return!1;r=r==null?void 0:r.parentElement}while(r);return!1}function Mc(e,t,n,r){let i=new Map;for(let[a,o]of e)if((o.selected||o.id===r)&&(!o.parentId||!Ac(o,e))&&(o.draggable||t&&o.draggable===void 0)){let t=e.get(a);t&&i.set(a,{id:a,position:t.position||{x:0,y:0},distance:{x:n.x-t.internals.positionAbsolute.x,y:n.y-t.internals.positionAbsolute.y},extent:t.extent,parentId:t.parentId,origin:t.origin,expandParent:t.expandParent,internals:{positionAbsolute:t.internals.positionAbsolute||{x:0,y:0}},measured:{width:t.measured.width??0,height:t.measured.height??0}})}return i}function Nc({nodeId:e,dragItems:t,nodeLookup:n,dragging:r=!0}){var i,a;let o=[];for(let[e,i]of t){var s;let t=(s=n.get(e))==null?void 0:s.internals.userNode;t&&o.push({...t,position:i.position,dragging:r})}if(!e)return[o[0],o];let c=(i=n.get(e))==null?void 0:i.internals.userNode;return[c?{...c,position:((a=t.get(e))==null?void 0:a.position)||c.position,dragging:r}:o[0],o]}function Pc({dragItems:e,snapGrid:t,x:n,y:r}){let i=e.values().next().value;if(!i)return null;let a={x:n-i.distance.x,y:r-i.distance.y},o=gs(a,t);return{x:o.x-a.x,y:o.y-a.y}}function Fc({onNodeMouseDown:e,getStoreItems:t,onDragStart:n,onDrag:r,onDragStop:i}){let a={x:null,y:null},o=0,s=new Map,c=!1,l={x:0,y:0},u=null,d=!1,f=null,p=!1,m=!1,h=null;function g({noDragClassName:g,handleSelector:_,domNode:v,isSelectable:y,nodeId:b,nodeClickDistance:x=0}){f=Qn(v);function S({x:e,y:n}){let{nodeLookup:i,nodeExtent:o,snapGrid:c,snapToGrid:l,nodeOrigin:u,onNodeDrag:d,onSelectionDrag:f,onError:p,updateNodePositions:g}=t();a={x:e,y:n};let _=!1,v=s.size>1,y=v&&o?os(qo(s)):null,x=v&&l?Pc({dragItems:s,snapGrid:c,x:e,y:n}):null;for(let[t,r]of s){if(!i.has(t))continue;let a={x:e-r.distance.x,y:n-r.distance.y};l&&(a=x?{x:Math.round(a.x+x.x),y:Math.round(a.y+x.y)}:gs(a,c));let s=null;if(v&&o&&!r.extent&&y){let{positionAbsolute:e}=r.internals,t=e.x-y.x+o[0][0],n=e.x+r.measured.width-y.x2+o[1][0],i=e.y-y.y+o[0][1],a=e.y+r.measured.height-y.y2+o[1][1];s=[[t,i],[n,a]]}let{position:d,positionAbsolute:f}=Qo({nodeId:t,nextPosition:a,nodeLookup:i,nodeExtent:s||o,nodeOrigin:u,onError:p});_=_||r.position.x!==d.x||r.position.y!==d.y,r.position=d,r.internals.positionAbsolute=f}if(m||=_,_&&(g(s,!0),h&&(r||d||!b&&f))){let[e,t]=Nc({nodeId:b,dragItems:s,nodeLookup:i});r==null||r(h,s,e,t),d==null||d(h,e,t),b||f==null||f(h,t)}}async function C(){if(!u)return;let{transform:e,panBy:n,autoPanSpeed:r,autoPanOnNodeDrag:i}=t();if(!i){c=!1,cancelAnimationFrame(o);return}let[s,d]=is(l,u,r);(s!==0||d!==0)&&(a.x=(a.x??0)-s/e[2],a.y=(a.y??0)-d/e[2],await n({x:s,y:d})&&S(a)),o=requestAnimationFrame(C)}function w(r){let{nodeLookup:i,multiSelectionActive:o,nodesDraggable:c,transform:l,snapGrid:f,snapToGrid:p,selectNodesOnDrag:m,onNodeDragStart:h,onSelectionDragStart:g,unselectNodesAndEdges:_}=t();if(d=!0,(!m||!y)&&!o&&b){var v;(v=i.get(b))!=null&&v.selected||_()}y&&m&&b&&(e==null||e(b));let x=Ps(r.sourceEvent,{transform:l,snapGrid:f,snapToGrid:p,containerBounds:u});if(a=x,s=Mc(i,c,x,b),s.size>0&&(n||h||!b&&g)){let[e,t]=Nc({nodeId:b,dragItems:s,nodeLookup:i});n==null||n(r.sourceEvent,s,e,t),h==null||h(r.sourceEvent,e,t),b||g==null||g(r.sourceEvent,t)}}let T=pr().clickDistance(x).on(`start`,e=>{let{domNode:n,nodeDragThreshold:r,transform:i,snapGrid:o,snapToGrid:s}=t();u=(n==null?void 0:n.getBoundingClientRect())||null,p=!1,m=!1,h=e.sourceEvent,r===0&&w(e),a=Ps(e.sourceEvent,{transform:i,snapGrid:o,snapToGrid:s,containerBounds:u}),l=Bs(e.sourceEvent,u)}).on(`drag`,e=>{let{autoPanOnNodeDrag:n,transform:r,snapGrid:i,snapToGrid:o,nodeDragThreshold:f,nodeLookup:m}=t(),g=Ps(e.sourceEvent,{transform:r,snapGrid:i,snapToGrid:o,containerBounds:u});if(h=e.sourceEvent,(e.sourceEvent.type===`touchmove`&&e.sourceEvent.touches.length>1||b&&!m.has(b))&&(p=!0),!p){if(!c&&n&&d&&(c=!0,C()),!d){let t=Bs(e.sourceEvent,u),n=t.x-l.x,r=t.y-l.y;Math.sqrt(n*n+r*r)>f&&w(e)}(a.x!==g.xSnapped||a.y!==g.ySnapped)&&s&&d&&(l=Bs(e.sourceEvent,u),S(g))}}).on(`end`,e=>{if(!d||p){p&&s.size>0&&t().updateNodePositions(s,!1);return}if(c=!1,d=!1,cancelAnimationFrame(o),s.size>0){let{nodeLookup:n,updateNodePositions:r,onNodeDragStop:a,onSelectionDragStop:o}=t();if(m&&=(r(s,!1),!1),i||a||!b&&o){let[t,r]=Nc({nodeId:b,dragItems:s,nodeLookup:n,dragging:!1});i==null||i(e.sourceEvent,s,t,r),a==null||a(e.sourceEvent,t,r),b||o==null||o(e.sourceEvent,r)}}}).filter(e=>{let t=e.target;return!e.button&&(!g||!jc(t,`.${g}`,v))&&(!_||jc(t,_,v))});f.call(T)}function _(){f==null||f.on(`.drag`,null)}return{update:g,destroy:_}}function Ic(e,t,n){let r=[],i={x:e.x-n,y:e.y-n,width:n*2,height:n*2};for(let e of t.values())fs(i,cs(e))>0&&r.push(e);return r}var Lc=250;function Rc(e,t,n,r){let i=[],a=1/0,o=Ic(e,n,t+Lc);for(let n of o){var s,c;let o=[...((s=n.internals.handleBounds)==null?void 0:s.source)??[],...((c=n.internals.handleBounds)==null?void 0:c.target)??[]];for(let s of o){if(r.nodeId===s.nodeId&&r.type===s.type&&r.id===s.id)continue;let{x:o,y:c}=cc(n,s,s.position,!0),l=Math.sqrt((o-e.x)**2+(c-e.y)**2);l>t||(l<a?(i=[{...s,x:o,y:c}],a=l):l===a&&i.push({...s,x:o,y:c}))}}if(!i.length)return null;if(i.length>1){let e=r.type===`source`?`target`:`source`;return i.find(t=>t.type===e)??i[0]}return i[0]}function zc(e,t,n,r,i,a=!1){var o,s,c;let l=r.get(e);if(!l)return null;let u=i===`strict`?(o=l.internals.handleBounds)==null?void 0:o[t]:[...((s=l.internals.handleBounds)==null?void 0:s.source)??[],...((c=l.internals.handleBounds)==null?void 0:c.target)??[]],d=(n?u==null?void 0:u.find(e=>e.id===n):u==null?void 0:u[0])??null;return d&&a?{...d,...cc(l,d,d.position,!0)}:d}function Bc(e,t){return e||(t!=null&&t.classList.contains(`target`)?`target`:t!=null&&t.classList.contains(`source`)?`source`:null)}function Vc(e,t){let n=null;return t?n=!0:e&&!t&&(n=!1),n}var Hc=()=>!0;function Uc(e,{connectionMode:t,connectionRadius:n,handleId:r,nodeId:i,edgeUpdaterType:a,isTarget:o,domNode:s,nodeLookup:c,lib:l,autoPanOnConnect:u,flowId:d,panBy:f,cancelConnection:p,onConnectStart:m,onConnect:h,onConnectEnd:g,isValidConnection:_=Hc,onReconnectEnd:v,updateConnection:y,getTransform:b,getFromHandle:x,autoPanSpeed:S,dragThreshold:C=1,handleDomNode:w}){let T=Is(e.target),E=0,D,{x:O,y:k}=Bs(e),A=Bc(a,w),j=s==null?void 0:s.getBoundingClientRect(),M=!1;if(!j||!A)return;let N=zc(i,A,r,c,t);if(!N)return;let P=Bs(e,j),F=!1,I=null,L=!1,R=null;function z(){if(!u||!j)return;let[e,t]=is(P,j,S);f({x:e,y:t}),E=requestAnimationFrame(z)}let B={...N,nodeId:i,type:A,position:N.position},ee=c.get(i),V={inProgress:!0,isValid:null,from:cc(ee,B,Y.Left,!0),fromHandle:B,fromPosition:B.position,fromNode:ee,to:P,toHandle:null,toPosition:Vo[B.position],toNode:null,pointer:P};function H(){M=!0,y(V),m==null||m(e,{nodeId:i,handleId:r,handleType:A})}C===0&&H();function U(e){if(!M){let{x:t,y:n}=Bs(e),r=t-O,i=n-k;if(!(r*r+i*i>C*C))return;H()}if(!x()||!B){W(e);return}let a=b();P=Bs(e,j),D=Rc(_s(P,a,!1,[1,1]),n,c,B),F||=(z(),!0);let s=Wc(e,{handle:D,connectionMode:t,fromNodeId:i,fromHandleId:r,fromType:o?`target`:`source`,isValidConnection:_,doc:T,lib:l,flowId:d,nodeLookup:c});R=s.handleDomNode,I=s.connection,L=Vc(!!D,s.isValid);let u=c.get(i),f=u?cc(u,B,Y.Left,!0):V.from,p={...V,from:f,isValid:L,to:s.toHandle&&L?vs({x:s.toHandle.x,y:s.toHandle.y},a):P,toHandle:s.toHandle,toPosition:L&&s.toHandle?s.toHandle.position:Vo[B.position],toNode:s.toHandle?c.get(s.toHandle.nodeId):null,pointer:P};y(p),V=p}function W(e){if(!(`touches`in e&&e.touches.length>0)){if(M){(D||R)&&I&&L&&(h==null||h(I));let{inProgress:t,...n}=V,r={...n,toPosition:V.toHandle?V.toPosition:null};g==null||g(e,r),a&&(v==null||v(e,r))}p(),cancelAnimationFrame(E),F=!1,L=!1,I=null,R=null,T.removeEventListener(`mousemove`,U),T.removeEventListener(`mouseup`,W),T.removeEventListener(`touchmove`,U),T.removeEventListener(`touchend`,W)}}T.addEventListener(`mousemove`,U),T.addEventListener(`mouseup`,W),T.addEventListener(`touchmove`,U),T.addEventListener(`touchend`,W)}function Wc(e,{handle:t,connectionMode:n,fromNodeId:r,fromHandleId:i,fromType:a,doc:o,lib:s,flowId:c,isValidConnection:l=Hc,nodeLookup:u}){let d=a===`target`,f=t?o.querySelector(`.${s}-flow__handle[data-id="${c}-${t==null?void 0:t.nodeId}-${t==null?void 0:t.id}-${t==null?void 0:t.type}"]`):null,{x:p,y:m}=Bs(e),h=o.elementFromPoint(p,m),g=h!=null&&h.classList.contains(`${s}-flow__handle`)?h:f,_={handleDomNode:g,isValid:!1,connection:null,toHandle:null};if(g){let e=Bc(void 0,g),t=g.getAttribute(`data-nodeid`),a=g.getAttribute(`data-handleid`),o=g.classList.contains(`connectable`),s=g.classList.contains(`connectableend`);if(!t||!e)return _;let c={source:d?t:r,sourceHandle:d?a:i,target:d?r:t,targetHandle:d?i:a};_.connection=c,_.isValid=o&&s&&(n===Fo.Strict?d&&e===`source`||!d&&e===`target`:t!==r||a!==i)&&l(c),_.toHandle=zc(t,e,a,u,n,!0)}return _}var Gc={onPointerDown:Uc,isValid:Wc};function Kc({domNode:e,panZoom:t,getTransform:n,getViewScale:r}){let i=Qn(e);function a({translateExtent:e,width:a,height:o,zoomStep:s=1,pannable:c=!0,zoomable:l=!0,inversePan:u=!1}){let d=e=>{if(e.sourceEvent.type!==`wheel`||!t)return;let r=n(),i=e.sourceEvent.ctrlKey&&Cs()?10:1,a=-e.sourceEvent.deltaY*(e.sourceEvent.deltaMode===1?.05:e.sourceEvent.deltaMode?1:.002)*s,o=r[2]*2**(a*i);t.scaleTo(o)},f=[0,0],p=Ao().on(`start`,e=>{(e.sourceEvent.type===`mousedown`||e.sourceEvent.type===`touchstart`)&&(f=[e.sourceEvent.clientX??e.sourceEvent.touches[0].clientX,e.sourceEvent.clientY??e.sourceEvent.touches[0].clientY])}).on(`zoom`,c?i=>{let s=n();if(i.sourceEvent.type!==`mousemove`&&i.sourceEvent.type!==`touchmove`||!t)return;let c=[i.sourceEvent.clientX??i.sourceEvent.touches[0].clientX,i.sourceEvent.clientY??i.sourceEvent.touches[0].clientY],l=[c[0]-f[0],c[1]-f[1]];f=c;let d=r()*Math.max(s[2],Math.log(s[2]))*(u?-1:1),p={x:s[0]-l[0]*d,y:s[1]-l[1]*d},m=[[0,0],[a,o]];t.setViewportConstrained({x:p.x,y:p.y,zoom:s[2]},m,e)}:null).on(`zoom.wheel`,l?d:null);i.call(p,{})}function o(){i.on(`zoom`,null)}return{update:a,destroy:o,pointer:er}}var qc=e=>({x:e.x,y:e.y,zoom:e.k}),Jc=({x:e,y:t,zoom:n})=>bo.translate(e,t).scale(n),Yc=(e,t)=>e.target.closest(`.${t}`),Xc=(e,t)=>t===2&&Array.isArray(e)&&e.includes(2),Zc=e=>((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2,Qc=(e,t=0,n=Zc,r=()=>{})=>{let i=typeof t==`number`&&t>0;return i||r(),i?e.transition().duration(t).ease(n).on(`end`,r):e},$c=e=>{let t=e.ctrlKey&&Cs()?10:1;return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*t};function el({zoomPanValues:e,noWheelClassName:t,d3Selection:n,d3Zoom:r,panOnScrollMode:i,panOnScrollSpeed:a,zoomOnPinch:o,onPanZoomStart:s,onPanZoom:c,onPanZoomEnd:l}){return u=>{if(Yc(u,t))return u.ctrlKey&&u.preventDefault(),!1;u.preventDefault(),u.stopImmediatePropagation();let d=n.property(`__zoom`).k||1;if(u.ctrlKey&&o){let e=er(u),t=d*2**$c(u);r.scaleTo(n,t,e,u);return}let f=u.deltaMode===1?20:1,p=i===Io.Vertical?0:u.deltaX*f,m=i===Io.Horizontal?0:u.deltaY*f;!Cs()&&u.shiftKey&&i!==Io.Vertical&&(p=u.deltaY*f,m=0),r.translateBy(n,-(p/d)*a,-(m/d)*a,{internal:!0});let h=qc(n.property(`__zoom`));clearTimeout(e.panScrollTimeout),e.isPanScrolling?c==null||c(u,h):(e.isPanScrolling=!0,s==null||s(u,h)),e.panScrollTimeout=setTimeout(()=>{l==null||l(u,h),e.isPanScrolling=!1},150)}}function tl({noWheelClassName:e,preventScrolling:t,d3ZoomHandler:n}){return function(r,i){let a=r.type===`wheel`,o=!t&&a&&!r.ctrlKey,s=Yc(r,e);if(r.ctrlKey&&a&&s&&r.preventDefault(),o||s)return null;r.preventDefault(),n.call(this,r,i)}}function nl({zoomPanValues:e,onDraggingChange:t,onPanZoomStart:n}){return r=>{var i,a,o;if((i=r.sourceEvent)!=null&&i.internal)return;let s=qc(r.transform);e.mouseButton=((a=r.sourceEvent)==null?void 0:a.button)||0,e.isZoomingOrPanning=!0,e.prevViewport=s,((o=r.sourceEvent)==null?void 0:o.type)===`mousedown`&&t(!0),n&&(n==null||n(r.sourceEvent,s))}}function rl({zoomPanValues:e,panOnDrag:t,onPaneContextMenu:n,onTransformChange:r,onPanZoom:i}){return a=>{var o,s;e.usedRightMouseButton=!!(n&&Xc(t,e.mouseButton??0)),(o=a.sourceEvent)!=null&&o.sync||r([a.transform.x,a.transform.y,a.transform.k]),i&&!((s=a.sourceEvent)!=null&&s.internal)&&(i==null||i(a.sourceEvent,qc(a.transform)))}}function il({zoomPanValues:e,panOnDrag:t,panOnScroll:n,onDraggingChange:r,onPanZoomEnd:i,onPaneContextMenu:a}){return o=>{var s;if(!((s=o.sourceEvent)!=null&&s.internal)&&(e.isZoomingOrPanning=!1,a&&Xc(t,e.mouseButton??0)&&!e.usedRightMouseButton&&o.sourceEvent&&a(o.sourceEvent),e.usedRightMouseButton=!1,r(!1),i)){let t=qc(o.transform);e.prevViewport=t,clearTimeout(e.timerId),e.timerId=setTimeout(()=>{i==null||i(o.sourceEvent,t)},n?150:0)}}}function al({panActivationKeyPressed:e,zoomActivationKeyPressed:t,zoomOnScroll:n,zoomOnPinch:r,panOnDrag:i,panOnScroll:a,zoomOnDoubleClick:o,userSelectionActive:s,noWheelClassName:c,noPanClassName:l,lib:u,connectionInProgress:d}){return f=>{var p;let m=t||n,h=r&&f.ctrlKey,g=f.type===`wheel`;if(f.button===1&&f.type===`mousedown`&&(Yc(f,`${u}-flow__node`)||Yc(f,`${u}-flow__edge`)||Yc(f,`${u}-flow__selection`)||Yc(f,`${u}-flow__nodesselection`)))return!0;if(!i&&!m&&!a&&!o&&!r||s||d&&!g||Yc(f,c)&&g||Yc(f,l)&&(!g||a&&g&&!t)||!r&&f.ctrlKey&&g)return!1;if(!r&&f.type===`touchstart`&&((p=f.touches)==null?void 0:p.length)>1)return f.preventDefault(),!1;if(!m&&!a&&!h&&g||!i&&(f.type===`mousedown`||f.type===`touchstart`)||Array.isArray(i)&&!i.includes(f.button)&&f.type===`mousedown`)return!1;let _=Array.isArray(i)&&i.includes(f.button)||!f.button||f.button<=1;return(!f.ctrlKey||g||e)&&_}}function ol({domNode:e,minZoom:t,maxZoom:n,translateExtent:r,viewport:i,onPanZoom:a,onPanZoomStart:o,onPanZoomEnd:s,onDraggingChange:c}){let l={isZoomingOrPanning:!1,usedRightMouseButton:!1,prevViewport:{},mouseButton:0,timerId:void 0,panScrollTimeout:void 0,isPanScrolling:!1},u=e.getBoundingClientRect(),d=[[0,0],[u.width,u.height]],f=typeof ResizeObserver<`u`?new ResizeObserver(e=>{let t=e[0];t&&(d=[[0,0],[t.contentRect.width,t.contentRect.height]])}):null;f==null||f.observe(e);let p=Ao().extent(()=>d).scaleExtent([t,n]).translateExtent(r),m=Qn(e).call(p);b({x:i.x,y:i.y,zoom:es(i.zoom,t,n)},[[0,0],[u.width,u.height]],r);let h=m.on(`wheel.zoom`),g=m.on(`dblclick.zoom`);p.wheelDelta($c);async function _(e,t){return m?new Promise(n=>{p==null||p.interpolate((t==null?void 0:t.interpolate)===`linear`?gi:Ai).transform(Qc(m,t==null?void 0:t.duration,t==null?void 0:t.ease,()=>n(!0)),e)}):!1}function v({noWheelClassName:e,noPanClassName:t,onPaneContextMenu:n,userSelectionActive:r,panOnScroll:i,panOnDrag:u,panOnScrollMode:d,panOnScrollSpeed:f,preventScrolling:_,zoomOnPinch:v,zoomOnScroll:b,zoomOnDoubleClick:x,panActivationKeyPressed:S=!1,zoomActivationKeyPressed:C,lib:w,onTransformChange:T,connectionInProgress:E,paneClickDistance:D,selectionOnDrag:O}){r&&!l.isZoomingOrPanning&&y();let k=i&&!C&&!r;p.clickDistance(O?1/0:!ms(D)||D<0?0:D);let A=k?el({zoomPanValues:l,noWheelClassName:e,d3Selection:m,d3Zoom:p,panOnScrollMode:d,panOnScrollSpeed:f,zoomOnPinch:v,onPanZoomStart:o,onPanZoom:a,onPanZoomEnd:s}):tl({noWheelClassName:e,preventScrolling:_,d3ZoomHandler:h});m.on(`wheel.zoom`,A,{passive:!1});let j=nl({zoomPanValues:l,onDraggingChange:c,onPanZoomStart:o});p.on(`start`,j);let M=rl({zoomPanValues:l,panOnDrag:u,onPaneContextMenu:!!n,onPanZoom:a,onTransformChange:T});p.on(`zoom`,M);let N=il({zoomPanValues:l,panOnDrag:u,panOnScroll:i,onPaneContextMenu:n,onPanZoomEnd:s,onDraggingChange:c});p.on(`end`,N);let P=al({panActivationKeyPressed:S,zoomActivationKeyPressed:C,panOnDrag:u,zoomOnScroll:b,panOnScroll:i,zoomOnDoubleClick:x,zoomOnPinch:v,userSelectionActive:r,noPanClassName:t,noWheelClassName:e,lib:w,connectionInProgress:E});p.filter(P),x?m.on(`dblclick.zoom`,g):m.on(`dblclick.zoom`,null)}function y(){p.on(`zoom`,null)}async function b(e,t,n){let r=Jc(e),i=p==null?void 0:p.constrain()(r,t,n);return i&&await _(i),i}async function x(e,t){let n=Jc(e);return await _(n,t),n}function S(e){if(m){let t=Jc(e),n=m.property(`__zoom`);(n.k!==e.zoom||n.x!==e.x||n.y!==e.y)&&(p==null||p.transform(m,t,null,{sync:!0}))}}function C(){let e=m?xo(m.node()):{x:0,y:0,k:1};return{x:e.x,y:e.y,zoom:e.k}}async function w(e,t){return m?new Promise(n=>{p==null||p.interpolate((t==null?void 0:t.interpolate)===`linear`?gi:Ai).scaleTo(Qc(m,t==null?void 0:t.duration,t==null?void 0:t.ease,()=>n(!0)),e)}):!1}async function T(e,t){return m?new Promise(n=>{p==null||p.interpolate((t==null?void 0:t.interpolate)===`linear`?gi:Ai).scaleBy(Qc(m,t==null?void 0:t.duration,t==null?void 0:t.ease,()=>n(!0)),e)}):!1}function E(e){p==null||p.scaleExtent(e)}function D(e){p==null||p.translateExtent(e)}function O(e){let t=!ms(e)||e<0?0:e;p==null||p.clickDistance(t)}return{update:v,destroy:y,setViewport:x,setViewportConstrained:b,getViewport:C,scaleTo:w,scaleBy:T,setScaleExtent:E,setTranslateExtent:D,syncViewport:S,setClickDistance:O}}var sl;(function(e){e.Line=`line`,e.Handle=`handle`})(sl||={});var cl=[`top-left`,`top-right`,`bottom-left`,`bottom-right`],ll=[`top`,`right`,`bottom`,`left`];function ul({width:e,prevWidth:t,height:n,prevHeight:r,affectsX:i,affectsY:a}){let o=e-t,s=n-r,c=[o>0?1:o<0?-1:0,s>0?1:s<0?-1:0];return o&&i&&(c[0]*=-1),s&&a&&(c[1]*=-1),c}function dl(e){return{isHorizontal:e.includes(`right`)||e.includes(`left`),isVertical:e.includes(`bottom`)||e.includes(`top`),affectsX:e.includes(`left`),affectsY:e.includes(`top`)}}function fl(e,t){return Math.max(0,t-e)}function pl(e,t){return Math.max(0,e-t)}function ml(e,t,n){return Math.max(0,t-e,e-n)}function hl(e,t){return e?!t:t}function gl(e,t,n,r,i,a,o,s){let{affectsX:c,affectsY:l}=t,{isHorizontal:u,isVertical:d}=t,f=u&&d,{xSnapped:p,ySnapped:m}=n,{minWidth:h,maxWidth:g,minHeight:_,maxHeight:v}=r,{x:y,y:b,width:x,height:S,aspectRatio:C}=e,w=Math.floor(u?p-e.pointerX:0),T=Math.floor(d?m-e.pointerY:0),E=x+(c?-w:w),D=S+(l?-T:T),O=-a[0]*x,k=-a[1]*S,A=ml(E,h,g),j=ml(D,_,v);if(o){let e=0,t=0;c&&w<0?e=fl(y+w+O,o[0][0]):!c&&w>0&&(e=pl(y+E+O,o[1][0])),l&&T<0?t=fl(b+T+k,o[0][1]):!l&&T>0&&(t=pl(b+D+k,o[1][1])),A=Math.max(A,e),j=Math.max(j,t)}if(s){let e=0,t=0;c&&w>0?e=pl(y+w,s[0][0]):!c&&w<0&&(e=fl(y+E,s[1][0])),l&&T>0?t=pl(b+T,s[0][1]):!l&&T<0&&(t=fl(b+D,s[1][1])),A=Math.max(A,e),j=Math.max(j,t)}if(i){if(u){let e=ml(E/C,_,v)*C;if(A=Math.max(A,e),o){let e=0;e=!c&&!l||c&&!l&&f?pl(b+k+E/C,o[1][1])*C:fl(b+k+(c?w:-w)/C,o[0][1])*C,A=Math.max(A,e)}if(s){let e=0;e=!c&&!l||c&&!l&&f?fl(b+E/C,s[1][1])*C:pl(b+(c?w:-w)/C,s[0][1])*C,A=Math.max(A,e)}}if(d){let e=ml(D*C,h,g)/C;if(j=Math.max(j,e),o){let e=0;e=!c&&!l||l&&!c&&f?pl(y+D*C+O,o[1][0])/C:fl(y+(l?T:-T)*C+O,o[0][0])/C,j=Math.max(j,e)}if(s){let e=0;e=!c&&!l||l&&!c&&f?fl(y+D*C,s[1][0])/C:pl(y+(l?T:-T)*C,s[0][0])/C,j=Math.max(j,e)}}}T+=T<0?j:-j,w+=w<0?A:-A,i&&(f?E>D*C?T=(hl(c,l)?-w:w)/C:w=(hl(c,l)?-T:T)*C:u?(T=w/C,l=c):(w=T*C,c=l));let M=c?y+w:y,N=l?b+T:b;return{width:x+(c?-w:w),height:S+(l?-T:T),x:a[0]*w*(c?-1:1)+M,y:a[1]*T*(l?-1:1)+N}}var _l={width:0,height:0,x:0,y:0},vl={..._l,pointerX:0,pointerY:0,aspectRatio:1};function yl(e,t,n){let r=t.position.x+e.position.x,i=t.position.y+e.position.y,a=e.measured.width??0,o=e.measured.height??0,s=n[0]*a,c=n[1]*o;return[[r-s,i-c],[r+a-s,i+o-c]]}function bl({domNode:e,nodeId:t,getStoreItems:n,onChange:r,onEnd:i}){let a=Qn(e),o={controlDirection:dl(`bottom-right`),boundaries:{minWidth:0,minHeight:0,maxWidth:Number.MAX_VALUE,maxHeight:Number.MAX_VALUE},resizeDirection:void 0,keepAspectRatio:!1};function s({controlPosition:e,boundaries:s,keepAspectRatio:c,resizeDirection:l,onResizeStart:u,onResize:d,onResizeEnd:f,shouldResize:p}){let m={..._l},h={...vl};o={boundaries:s,resizeDirection:l,keepAspectRatio:c,controlDirection:dl(e)};let g,_=null,v=[],y,b,x,S=!1,C=pr().on(`start`,e=>{let{nodeLookup:r,transform:i,snapGrid:a,snapToGrid:o,nodeOrigin:s,paneDomNode:c}=n();if(g=r.get(t),!g)return;_=(c==null?void 0:c.getBoundingClientRect())??null;let{xSnapped:l,ySnapped:d}=Ps(e.sourceEvent,{transform:i,snapGrid:a,snapToGrid:o,containerBounds:_});m={width:g.measured.width??0,height:g.measured.height??0,x:g.position.x??0,y:g.position.y??0},h={...m,pointerX:l,pointerY:d,aspectRatio:m.width/m.height},y=void 0,b=ws(g.extent)?g.extent:void 0,g.parentId&&(g.extent===`parent`||g.expandParent)&&(y=r.get(g.parentId)),y&&g.extent===`parent`&&(b=[[0,0],[y.measured.width,y.measured.height]]),v=[],x=void 0;for(let[e,n]of r)if(n.parentId===t&&(v.push({id:e,position:{...n.position},extent:n.extent}),n.extent===`parent`||n.expandParent)){let e=yl(n,g,n.origin??s);x=x?[[Math.min(e[0][0],x[0][0]),Math.min(e[0][1],x[0][1])],[Math.max(e[1][0],x[1][0]),Math.max(e[1][1],x[1][1])]]:e}u==null||u(e,{...m})}).on(`drag`,e=>{let{transform:t,snapGrid:i,snapToGrid:a,nodeOrigin:s}=n(),c=Ps(e.sourceEvent,{transform:t,snapGrid:i,snapToGrid:a,containerBounds:_}),l=[];if(!g)return;let{x:u,y:f,width:C,height:w}=m,T={},E=g.origin??s,{width:D,height:O,x:k,y:A}=gl(h,o.controlDirection,c,o.boundaries,o.keepAspectRatio,E,b,x),j=D!==C,M=O!==w,N=k!==u&&j,P=A!==f&&M;if(!N&&!P&&!j&&!M)return;if((N||P||E[0]===1||E[1]===1)&&(T.x=N?k:m.x,T.y=P?A:m.y,m.x=T.x,m.y=T.y,v.length>0)){let e=k-u,t=A-f;for(let n of v)n.position={x:n.position.x-e+E[0]*(D-C),y:n.position.y-t+E[1]*(O-w)},l.push(n)}if((j||M)&&(T.width=j&&(!o.resizeDirection||o.resizeDirection===`horizontal`)?D:m.width,T.height=M&&(!o.resizeDirection||o.resizeDirection===`vertical`)?O:m.height,m.width=T.width,m.height=T.height),y&&g.expandParent){let e=E[0]*(T.width??0);T.x&&T.x<e&&(m.x=e,h.x-=T.x-e);let t=E[1]*(T.height??0);T.y&&T.y<t&&(m.y=t,h.y-=T.y-t)}let F=ul({width:m.width,prevWidth:C,height:m.height,prevHeight:w,affectsX:o.controlDirection.affectsX,affectsY:o.controlDirection.affectsY}),I={...m,direction:F};(p==null?void 0:p(e,I))!==!1&&(S=!0,d==null||d(e,I),r(T,l))}).on(`end`,e=>{S&&=(f==null||f(e,{...m}),i==null||i({...m}),!1)});a.call(C)}function c(){a.on(`.drag`,null)}return{update:s,destroy:c}}var xl=r((t=>{var n=(_(),e(m));function r(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var i=typeof Object.is==`function`?Object.is:r,a=n.useState,o=n.useEffect,s=n.useLayoutEffect,c=n.useDebugValue;function l(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),i=r[0].inst,l=r[1];return s(function(){i.value=n,i.getSnapshot=t,u(i)&&l({inst:i})},[e,n,t]),o(function(){return u(i)&&l({inst:i}),e(function(){u(i)&&l({inst:i})})},[e]),c(n),n}function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!i(e,n)}catch{return!0}}function d(e,t){return t()}var f=typeof window>`u`||window.document===void 0||window.document.createElement===void 0?d:l;t.useSyncExternalStore=n.useSyncExternalStore===void 0?f:n.useSyncExternalStore})),Sl=r(((e,t)=>{t.exports=xl()})),Cl=r((t=>{var n=(_(),e(m)),r=Sl();function i(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var a=typeof Object.is==`function`?Object.is:i,o=r.useSyncExternalStore,s=n.useRef,c=n.useEffect,l=n.useMemo,u=n.useDebugValue;t.useSyncExternalStoreWithSelector=function(e,t,n,r,i){var d=s(null);if(d.current===null){var f={hasValue:!1,value:null};d.current=f}else f=d.current;d=l(function(){function e(e){if(!o){if(o=!0,s=e,e=r(e),i!==void 0&&f.hasValue){var t=f.value;if(i(t,e))return c=t}return c=e}if(t=c,a(s,e))return t;var n=r(e);return i!==void 0&&i(t,n)?(s=e,t):(s=e,c=n)}var o=!1,s,c,l=n===void 0?null:n;return[function(){return e(t())},l===null?void 0:function(){return e(l())}]},[t,n,r,i]);var p=o(e,d[0],d[1]);return c(function(){f.hasValue=!0,f.value=p},[p]),u(p),p}})),wl=t(r(((e,t)=>{t.exports=Cl()}))(),1),Tl=e=>{let t,n=new Set,r=(e,r)=>{let i=typeof e==`function`?e(t):e;if(!Object.is(i,t)){let e=t;t=r??(typeof i!=`object`||!i)?i:Object.assign({},t,i),n.forEach(n=>n(t,e))}},i=()=>t,a={setState:r,getState:i,getInitialState:()=>o,subscribe:e=>(n.add(e),()=>n.delete(e)),destroy:()=>{n.clear()}},o=t=e(r,i,a);return a},El=e=>e?Tl(e):Tl,{useDebugValue:Dl}=B,{useSyncExternalStoreWithSelector:Ol}=wl.default,kl=e=>e;function Al(e,t=kl,n){let r=Ol(e.subscribe,e.getState,e.getServerState||e.getInitialState,t,n);return Dl(r),r}var jl=(e,t)=>{let n=El(e),r=(e,r=t)=>Al(n,e,r);return Object.assign(r,n),r},Ml=(e,t)=>e?jl(e,t):jl;function X(e,t){if(Object.is(e,t))return!0;if(typeof e!=`object`||!e||typeof t!=`object`||!t)return!1;if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(let[n,r]of e)if(!Object.is(r,t.get(n)))return!1;return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}let n=Object.keys(e);if(n.length!==Object.keys(t).length)return!1;for(let r of n)if(!Object.prototype.hasOwnProperty.call(t,r)||!Object.is(e[r],t[r]))return!1;return!0}_();var Nl=L(null),Pl=Nl.Provider,Fl=jo.error001(`react`);function Z(e,t){let n=W(Nl);if(n===null)throw Error(Fl);return Al(n,e,t)}function Q(){let e=W(Nl);if(e===null)throw Error(Fl);return s(()=>({getState:e.getState,setState:e.setState,subscribe:e.subscribe}),[e])}var Il={display:`none`},Ll={position:`absolute`,width:1,height:1,margin:-1,border:0,padding:0,overflow:`hidden`,clip:`rect(0px, 0px, 0px, 0px)`,clipPath:`inset(100%)`},Rl=`react-flow__node-desc`,zl=`react-flow__edge-desc`,Bl=`react-flow__aria-live`,Vl=e=>e.ariaLiveMessage,Hl=e=>e.ariaLabelConfig;function Ul({rfId:e}){let t=Z(Vl);return I(`div`,{id:`${Bl}-${e}`,"aria-live":`assertive`,"aria-atomic":`true`,style:Ll,children:t})}function Wl({rfId:e,disableKeyboardA11y:t}){let n=Z(Hl);return z(w,{children:[I(`div`,{id:`${Rl}-${e}`,style:Il,children:t?n[`node.a11yDescription.default`]:n[`node.a11yDescription.keyboardDisabled`]}),I(`div`,{id:`${zl}-${e}`,style:Il,children:n[`edge.a11yDescription.default`]}),!t&&I(Ul,{rfId:e})]})}var Gl=k(({position:e=`top-left`,children:t,className:n,style:r,...i},a)=>{let o=`${e}`.split(`-`);return I(`div`,{className:J([`react-flow__panel`,n,...o]),style:r,ref:a,...i,children:t})});Gl.displayName=`Panel`;var Kl=`https://reactflow.dev?utm_source=attribution`;function ql({proOptions:e,position:t=`bottom-right`}){return a(()=>{},[]),e!=null&&e.hideAttribution?null:I(Gl,{position:t,className:`react-flow__attribution`,"data-message":`Please only hide this attribution when you are subscribed to React Flow Pro: ${Kl}`,children:I(`a`,{href:Kl,target:`_blank`,rel:`noopener noreferrer`,"aria-label":`React Flow attribution`,children:`React Flow`})})}var Jl=e=>{let t=[],n=[];for(let[,n]of e.nodeLookup)n.selected&&t.push(n.internals.userNode);for(let[,t]of e.edgeLookup)t.selected&&n.push(t);return{selectedNodes:t,selectedEdges:n}},Yl=e=>e.id;function Xl(e,t){return X(e.selectedNodes.map(Yl),t.selectedNodes.map(Yl))&&X(e.selectedEdges.map(Yl),t.selectedEdges.map(Yl))}function Zl({onSelectionChange:e}){let t=Q(),{selectedNodes:n,selectedEdges:r}=Z(Jl,Xl);return a(()=>{let i={nodes:n,edges:r};e==null||e(i),t.getState().onSelectionChangeHandlers.forEach(e=>e(i))},[n,r,e]),null}var Ql=e=>!!e.onSelectionChangeHandlers;function $l({onSelectionChange:e}){let t=Z(Ql);return e||t?I(Zl,{onSelectionChange:e}):null}var eu=[0,0],tu={x:0,y:0,zoom:1},nu=[...`nodes.edges.defaultNodes.defaultEdges.onConnect.onConnectStart.onConnectEnd.onClickConnectStart.onClickConnectEnd.nodesDraggable.autoPanOnNodeFocus.nodesConnectable.nodesFocusable.edgesFocusable.edgesReconnectable.elevateNodesOnSelect.elevateEdgesOnSelect.minZoom.maxZoom.nodeExtent.onNodesChange.onEdgesChange.elementsSelectable.connectionMode.snapGrid.snapToGrid.translateExtent.connectOnClick.defaultEdgeOptions.fitView.fitViewOptions.onNodesDelete.onEdgesDelete.onDelete.onNodeDrag.onNodeDragStart.onNodeDragStop.onSelectionDrag.onSelectionDragStart.onSelectionDragStop.onMoveStart.onMove.onMoveEnd.noPanClassName.nodeOrigin.autoPanOnConnect.autoPanOnNodeDrag.onError.connectionRadius.isValidConnection.selectNodesOnDrag.nodeDragThreshold.connectionDragThreshold.onBeforeDelete.debug.autoPanSpeed.ariaLabelConfig.zIndexMode`.split(`.`),`rfId`],ru=e=>({setNodes:e.setNodes,setEdges:e.setEdges,setMinZoom:e.setMinZoom,setMaxZoom:e.setMaxZoom,setTranslateExtent:e.setTranslateExtent,setNodeExtent:e.setNodeExtent,reset:e.reset,setDefaultNodesAndEdges:e.setDefaultNodesAndEdges}),iu={translateExtent:Mo,nodeOrigin:eu,minZoom:.5,maxZoom:2,elementsSelectable:!0,noPanClassName:`nopan`,rfId:`1`};function au(e){let{setNodes:t,setEdges:n,setMinZoom:r,setMaxZoom:i,setTranslateExtent:o,setNodeExtent:s,reset:c,setDefaultNodesAndEdges:l}=Z(ru,X),u=Q();a(()=>(l(e.defaultNodes,e.defaultEdges),()=>{d.current=iu,c()}),[]);let d=v(iu);return a(()=>{for(let a of nu){let c=e[a];c!==d.current[a]&&e[a]!==void 0&&(a===`nodes`?t(c):a===`edges`?n(c):a===`minZoom`?r(c):a===`maxZoom`?i(c):a===`translateExtent`?o(c):a===`nodeExtent`?s(c):a===`ariaLabelConfig`?u.setState({ariaLabelConfig:As(c)}):a===`fitView`?u.setState({fitViewQueued:c}):a===`fitViewOptions`?u.setState({fitViewOptions:c}):u.setState({[a]:c}))}d.current=e},nu.map(t=>e[t])),null}function ou(){return typeof window>`u`||!window.matchMedia?null:window.matchMedia(`(prefers-color-scheme: dark)`)}function su(e){var t;let[n,r]=M(e===`system`?null:e);return a(()=>{if(e!==`system`){r(e);return}let t=ou(),n=()=>r(t!=null&&t.matches?`dark`:`light`);return n(),t==null||t.addEventListener(`change`,n),()=>{t==null||t.removeEventListener(`change`,n)}},[e]),n===null?(t=ou())!=null&&t.matches?`dark`:`light`:n}var cu=typeof document<`u`?document:null;function lu(e=null,t={target:cu,actInsideInputWithModifier:!0}){let[n,r]=M(!1),i=v(!1),o=v(new Set([])),[c,l]=s(()=>{if(e!==null){let t=(Array.isArray(e)?e:[e]).filter(e=>typeof e==`string`).map(e=>e.replace(/\+/g,`
1
+ import{a as e,o as t,r as n,t as r}from"./rolldown-runtime-C0FnF6B9.js";import{Ar as i,Cn as a,Cr as o,Ct as s,Dr as c,Dt as l,Er as u,Et as d,Fn as f,Fr as p,In as m,Jt as h,Mn as g,Or as _,Pn as v,Pr as y,Pt as b,Sr as x,Tr as S,Tt as C,Wt as w,Xt as T,Yn as E,a as D,cr as O,fr as k,ft as A,hr as j,jn as M,jr as N,jt as P,l as F,lr as I,m as L,mt as ee,nn as R,or as z,pt as te,qt as B,sr as V,vr as H,vt as U,wn as ne,xn as re,xr as W}from"./_virtual_mf___mfe_internal__iobroker_javascript__mf_owner__234968779812303__loadShare___mf_0_iobroker_mf_1_gui_mf_2_components__loadShare__.js-BRdHvuuG.js";import{n as ie,r as G,t as K}from"./NotificationsActive-CuNfWVJM.js";import{n as ae,t as oe}from"./ExpandMore-Dio4GeHC.js";import{t as se}from"./Send-Pz1eveU5.js";import{_ as ce,b as le,g as ue,h as de,v as fe,x as q,y as pe}from"./index-DzAQnPTD.js";var me=E(O(`path`,{d:`M12 2C6.49 2 2 6.49 2 12s4.49 10 10 10 10-4.49 10-10S17.51 2 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8m3-8c0 1.66-1.34 3-3 3s-3-1.34-3-3 1.34-3 3-3 3 1.34 3 3`}),`Adjust`),he=E(O(`path`,{d:`M9 11H7v2h2zm4 0h-2v2h2zm4 0h-2v2h2zm2-7h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2m0 16H5V9h14z`}),`DateRange`),ge=E(O(`path`,{d:`M21 12V6c0-1.1-.9-2-2-2h-1V2h-2v2H8V2H6v2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h7v-2H5V10h14v2zm-5.36 8c.43 1.45 1.77 2.5 3.36 2.5 1.93 0 3.5-1.57 3.5-3.5s-1.57-3.5-3.5-3.5c-.95 0-1.82.38-2.45 1H18V18h-4v-4h1.5v1.43c.9-.88 2.14-1.43 3.5-1.43 2.76 0 5 2.24 5 5s-2.24 5-5 5c-2.42 0-4.44-1.72-4.9-4z`}),`EventRepeat`),_e=E(O(`path`,{d:`m12 8-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z`}),`ExpandLess`),ve=E(O(`path`,{d:`M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7s2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11`}),`Extension`),ye=E(O(`path`,{d:`M7 11H1v2h6zm2.17-3.24L7.05 5.64 5.64 7.05l2.12 2.12zM13 1h-2v6h2zm5.36 6.05-1.41-1.41-2.12 2.12 1.41 1.41zM17 11v2h6v-2zm-5-2c-1.66 0-3 1.34-3 3s1.34 3 3 3 3-1.34 3-3-1.34-3-3-3m2.83 7.24 2.12 2.12 1.41-1.41-2.12-2.12zm-9.19.71 1.41 1.41 2.12-2.12-1.41-1.41zM11 23h2v-6h-2z`}),`Flare`),be=E(O(`path`,{d:`M4.59 6.89c.7-.71 1.4-1.35 1.71-1.22.5.2 0 1.03-.3 1.52-.25.42-2.86 3.89-2.86 6.31 0 1.28.48 2.34 1.34 2.98.75.56 1.74.73 2.64.46 1.07-.31 1.95-1.4 3.06-2.77 1.21-1.49 2.83-3.44 4.08-3.44 1.63 0 1.65 1.01 1.76 1.79-3.78.64-5.38 3.67-5.38 5.37s1.44 3.09 3.21 3.09c1.63 0 4.29-1.33 4.69-6.1H21v-2.5h-2.47c-.15-1.65-1.09-4.2-4.03-4.2-2.25 0-4.18 1.91-4.94 2.84-.58.73-2.06 2.48-2.29 2.72-.25.3-.68.84-1.11.84-.45 0-.72-.83-.36-1.92.35-1.09 1.4-2.86 1.85-3.52.78-1.14 1.3-1.92 1.3-3.28C8.95 3.69 7.31 3 6.44 3 5.12 3 3.97 4 3.72 4.25c-.36.36-.66.66-.88.93zm9.29 11.66c-.31 0-.74-.26-.74-.72 0-.6.73-2.2 2.87-2.76-.3 2.69-1.43 3.48-2.13 3.48`}),`Gesture`),xe=E(O(`path`,{d:`M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2M8 20H4v-4h4zm0-6H4v-4h4zm0-6H4V4h4zm6 12h-4v-4h4zm0-6h-4v-4h4zm0-6h-4V4h4zm6 12h-4v-4h4zm0-6h-4v-4h4zm0-6h-4V4h4z`}),`GridOn`),Se=E(O(`path`,{d:`m18 22-.01-6L14 12l3.99-4.01L18 2H6v6l4 4-4 3.99V22zM8 7.5V4h8v3.5l-4 4z`}),`HourglassBottom`),Ce=E(O(`path`,{d:`M7.41 8.59 12 13.17l4.59-4.58L18 10l-6 6-6-6z`}),`KeyboardArrowDown`),we=E(O(`path`,{d:`M7.41 15.41 12 10.83l4.59 4.58L18 14l-6-6-6 6z`}),`KeyboardArrowUp`),Te=E(O(`path`,{d:`M11 7 9.6 8.4l2.6 2.6H2v2h10.2l-2.6 2.6L11 17l5-5zm9 12h-8v2h8c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-8v2h8z`}),`Login`),Ee=E(O(`path`,{d:`m17 7-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5zM4 5h8V3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h8v-2H4z`}),`Logout`),De=E(O(`path`,{d:`M3 18h12v-2H3zM3 6v2h18V6zm0 7h18v-2H3z`}),`Notes`),Oe=E([O(`path`,{d:`m17 17 5-5-5-5-1.41 1.41L18.17 11H9v2h9.17l-2.58 2.59z`},`0`),O(`path`,{d:`M19 19H5V5h14v2h2V5c0-1.1-.89-2-2-2H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.11 0 2-.9 2-2v-2h-2z`},`1`)],`Output`),ke=E(O(`path`,{d:`M15 16v1.26l-6-3v-3.17L11.7 8H16V2h-6v4.9L7.3 10H3v6h5l7 3.5V22h6v-6z`}),`Polyline`),Ae=E(O(`path`,{fillRule:`evenodd`,d:`M16 9V4h1c.55 0 1-.45 1-1s-.45-1-1-1H7c-.55 0-1 .45-1 1s.45 1 1 1h1v5c0 1.66-1.34 3-3 3v2h5.97v7l1 1 1-1v-7H19v-2c-1.66 0-3-1.34-3-3`}),`PushPin`),je=E(O(`path`,{d:`M18.4 10.6C16.55 8.99 14.15 8 11.5 8c-4.65 0-8.58 3.03-9.96 7.22L3.9 16c1.05-3.19 4.05-5.5 7.6-5.5 1.95 0 3.73.72 5.12 1.88L13 16h9V7z`}),`Redo`),Me=E(O(`path`,{d:`M19 13H5v-2h14z`}),`Remove`),Ne=E([O(`path`,{d:`M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2M12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8`},`0`),O(`path`,{d:`M12.5 7H11v6l5.25 3.15.75-1.23-4.5-2.67z`},`1`)],`Schedule`),Pe=E(O(`path`,{d:`M14 9v2h-3V9H8.5V7H11V1H4v6h2.5v2H4v6h2.5v2H4v6h7v-6H8.5v-2H11v-2h3v2h7V9z`}),`Schema`),Fe=E(O(`path`,{d:`m6 18 8.5-6L6 6zM16 6v12h2V6z`}),`SkipNext`),Ie=E(O(`path`,{d:`M12 17.27 18.18 21l-1.64-7.03L22 9.24l-7.19-.61L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21z`}),`Star`),Le=E(O(`path`,{d:`m22 9.24-7.19-.62L12 2 9.19 8.63 2 9.24l5.46 4.73L5.82 21 12 17.27 18.18 21l-1.63-7.03zM12 15.4l-3.76 2.27 1-4.28-3.32-2.88 4.38-.38L12 6.1l1.71 4.04 4.38.38-3.32 2.88 1 4.28z`}),`StarBorder`),Re=E(O(`path`,{d:`M19 3H4.99C3.89 3 3 3.9 3 5l.01 14c0 1.1.89 2 1.99 2h10l6-6V5c0-1.1-.9-2-2-2M7 8h10v2H7zm5 6H7v-2h5zm2 5.5V14h5.5z`}),`StickyNote2`),ze=E(O(`path`,{d:`M15 13V5c0-1.66-1.34-3-3-3S9 3.34 9 5v8c-1.21.91-2 2.37-2 4 0 2.76 2.24 5 5 5s5-2.24 5-5c0-1.63-.79-3.09-2-4m-4-2V5c0-.55.45-1 1-1s1 .45 1 1v1h-1v1h1v2h-1v1h1v1z`}),`Thermostat`),Be=E(O(`path`,{d:`M9 1h6v2H9zm10.03 6.39 1.42-1.42c-.43-.51-.9-.99-1.41-1.41l-1.42 1.42C16.07 4.74 14.12 4 12 4c-4.97 0-9 4.03-9 9s4.02 9 9 9 9-4.03 9-9c0-2.12-.74-4.07-1.97-5.61M13 14h-2V8h2z`}),`Timer`),Ve=E(O(`path`,{d:`M9 1h6v2H9zm4 7v2.17l6.98 6.98C20.63 15.91 21 14.5 21 13c0-2.12-.74-4.07-1.97-5.61l1.42-1.42c-.43-.51-.9-.99-1.41-1.41l-1.42 1.42C16.07 4.74 14.12 4 12 4c-1.5 0-2.91.37-4.15 1.02L10.83 8zM2.81 2.81 1.39 4.22l3.4 3.4C3.67 9.12 3 10.98 3 13c0 4.97 4.02 9 9 9 2.02 0 3.88-.67 5.38-1.79l2.4 2.4 1.41-1.41z`}),`TimerOff`),He=E(O(`path`,{d:`m16 6 2.29 2.29-4.88 4.88-4-4L2 16.59 3.41 18l6-6 4 4 6.3-6.29L22 12V6z`}),`TrendingUp`),Ue=E(O(`path`,{d:`M3 17v2h6v-2zM3 5v2h10V5zm10 16v-2h8v-2h-8v-2h-2v6zM7 9v2H3v2h4v2h2V9zm14 4v-2H11v2zm-6-4h2V7h4V5h-4V3h-2z`}),`Tune`),We=E(O(`path`,{d:`M12 7c2.76 0 5 2.24 5 5 0 .65-.13 1.26-.36 1.83l2.92 2.92c1.51-1.26 2.7-2.89 3.43-4.75-1.73-4.39-6-7.5-11-7.5-1.4 0-2.74.25-3.98.7l2.16 2.16C10.74 7.13 11.35 7 12 7M2 4.27l2.28 2.28.46.46C3.08 8.3 1.78 10.02 1 12c1.73 4.39 6 7.5 11 7.5 1.55 0 3.03-.3 4.38-.84l.42.42L19.73 22 21 20.73 3.27 3zM7.53 9.8l1.55 1.55c-.05.21-.08.43-.08.65 0 1.66 1.34 3 3 3 .22 0 .44-.03.65-.08l1.55 1.55c-.67.33-1.41.53-2.2.53-2.76 0-5-2.24-5-5 0-.79.2-1.53.53-2.2m4.31-.78 3.15 3.15.02-.16c0-1.66-1.34-3-3-3z`}),`VisibilityOff`),Ge=E(O(`path`,{d:`m16.9541 8.6624 2.1206-2.122 1.4147 1.4137-2.1206 2.122zM2 18h20v2H2zm9-14h2v3h-2zM3.5427 7.9249l1.4142-1.4142L7.0782 8.632 5.664 10.0462zM5 16h14c0-3.87-3.13-7-7-7s-7 3.13-7 7`}),`WbTwilight`),Ke=E([O(`path`,{d:`M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14`},`0`),O(`path`,{d:`M12 10h-2v2H9v-2H7V9h2V7h1v2h2z`},`1`)],`ZoomIn`);p();function J(e){if(typeof e==`string`||typeof e==`number`)return``+e;let t=``;if(Array.isArray(e))for(let n=0,r;n<e.length;n++)(r=J(e[n]))!==``&&(t+=(t&&` `)+r);else for(let n in e)e[n]&&(t+=(t&&` `)+n);return t}var qe={value:()=>{}};function Je(){for(var e=0,t=arguments.length,n={},r;e<t;++e){if(!(r=arguments[e]+``)||r in n||/[\s.]/.test(r))throw Error(`illegal type: `+r);n[r]=[]}return new Ye(n)}function Ye(e){this._=e}function Xe(e,t){return e.trim().split(/^|\s+/).map(function(e){var n=``,r=e.indexOf(`.`);if(r>=0&&(n=e.slice(r+1),e=e.slice(0,r)),e&&!t.hasOwnProperty(e))throw Error(`unknown type: `+e);return{type:e,name:n}})}Ye.prototype=Je.prototype={constructor:Ye,on:function(e,t){var n=this._,r=Xe(e+``,n),i,a=-1,o=r.length;if(arguments.length<2){for(;++a<o;)if((i=(e=r[a]).type)&&(i=Ze(n[i],e.name)))return i;return}if(t!=null&&typeof t!=`function`)throw Error(`invalid callback: `+t);for(;++a<o;)if(i=(e=r[a]).type)n[i]=Qe(n[i],e.name,t);else if(t==null)for(i in n)n[i]=Qe(n[i],e.name,null);return this},copy:function(){var e={},t=this._;for(var n in t)e[n]=t[n].slice();return new Ye(e)},call:function(e,t){if((i=arguments.length-2)>0)for(var n=Array(i),r=0,i,a;r<i;++r)n[r]=arguments[r+2];if(!this._.hasOwnProperty(e))throw Error(`unknown type: `+e);for(a=this._[e],r=0,i=a.length;r<i;++r)a[r].value.apply(t,n)},apply:function(e,t,n){if(!this._.hasOwnProperty(e))throw Error(`unknown type: `+e);for(var r=this._[e],i=0,a=r.length;i<a;++i)r[i].value.apply(t,n)}};function Ze(e,t){for(var n=0,r=e.length,i;n<r;++n)if((i=e[n]).name===t)return i.value}function Qe(e,t,n){for(var r=0,i=e.length;r<i;++r)if(e[r].name===t){e[r]=qe,e=e.slice(0,r).concat(e.slice(r+1));break}return n!=null&&e.push({name:t,value:n}),e}var $e={svg:`http://www.w3.org/2000/svg`,xhtml:`http://www.w3.org/1999/xhtml`,xlink:`http://www.w3.org/1999/xlink`,xml:`http://www.w3.org/XML/1998/namespace`,xmlns:`http://www.w3.org/2000/xmlns/`};function et(e){var t=e+=``,n=t.indexOf(`:`);return n>=0&&(t=e.slice(0,n))!==`xmlns`&&(e=e.slice(n+1)),$e.hasOwnProperty(t)?{space:$e[t],local:e}:e}function tt(e){return function(){var t=this.ownerDocument,n=this.namespaceURI;return n===`http://www.w3.org/1999/xhtml`&&t.documentElement.namespaceURI===`http://www.w3.org/1999/xhtml`?t.createElement(e):t.createElementNS(n,e)}}function nt(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function rt(e){var t=et(e);return(t.local?nt:tt)(t)}function it(){}function at(e){return e==null?it:function(){return this.querySelector(e)}}function ot(e){typeof e!=`function`&&(e=at(e));for(var t=this._groups,n=t.length,r=Array(n),i=0;i<n;++i)for(var a=t[i],o=a.length,s=r[i]=Array(o),c,l,u=0;u<o;++u)(c=a[u])&&(l=e.call(c,c.__data__,u,a))&&(`__data__`in c&&(l.__data__=c.__data__),s[u]=l);return new Yn(r,this._parents)}function st(e){return e==null?[]:Array.isArray(e)?e:Array.from(e)}function ct(){return[]}function lt(e){return e==null?ct:function(){return this.querySelectorAll(e)}}function ut(e){return function(){return st(e.apply(this,arguments))}}function dt(e){e=typeof e==`function`?ut(e):lt(e);for(var t=this._groups,n=t.length,r=[],i=[],a=0;a<n;++a)for(var o=t[a],s=o.length,c,l=0;l<s;++l)(c=o[l])&&(r.push(e.call(c,c.__data__,l,o)),i.push(c));return new Yn(r,i)}function ft(e){return function(){return this.matches(e)}}function pt(e){return function(t){return t.matches(e)}}var mt=Array.prototype.find;function ht(e){return function(){return mt.call(this.children,e)}}function gt(){return this.firstElementChild}function _t(e){return this.select(e==null?gt:ht(typeof e==`function`?e:pt(e)))}var vt=Array.prototype.filter;function yt(){return Array.from(this.children)}function bt(e){return function(){return vt.call(this.children,e)}}function xt(e){return this.selectAll(e==null?yt:bt(typeof e==`function`?e:pt(e)))}function St(e){typeof e!=`function`&&(e=ft(e));for(var t=this._groups,n=t.length,r=Array(n),i=0;i<n;++i)for(var a=t[i],o=a.length,s=r[i]=[],c,l=0;l<o;++l)(c=a[l])&&e.call(c,c.__data__,l,a)&&s.push(c);return new Yn(r,this._parents)}function Ct(e){return Array(e.length)}function wt(){return new Yn(this._enter||this._groups.map(Ct),this._parents)}function Tt(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}Tt.prototype={constructor:Tt,appendChild:function(e){return this._parent.insertBefore(e,this._next)},insertBefore:function(e,t){return this._parent.insertBefore(e,t)},querySelector:function(e){return this._parent.querySelector(e)},querySelectorAll:function(e){return this._parent.querySelectorAll(e)}};function Et(e){return function(){return e}}function Dt(e,t,n,r,i,a){for(var o=0,s,c=t.length,l=a.length;o<l;++o)(s=t[o])?(s.__data__=a[o],r[o]=s):n[o]=new Tt(e,a[o]);for(;o<c;++o)(s=t[o])&&(i[o]=s)}function Ot(e,t,n,r,i,a,o){var s,c,l=new Map,u=t.length,d=a.length,f=Array(u),p;for(s=0;s<u;++s)(c=t[s])&&(f[s]=p=o.call(c,c.__data__,s,t)+``,l.has(p)?i[s]=c:l.set(p,c));for(s=0;s<d;++s)p=o.call(e,a[s],s,a)+``,(c=l.get(p))?(r[s]=c,c.__data__=a[s],l.delete(p)):n[s]=new Tt(e,a[s]);for(s=0;s<u;++s)(c=t[s])&&l.get(f[s])===c&&(i[s]=c)}function kt(e){return e.__data__}function At(e,t){if(!arguments.length)return Array.from(this,kt);var n=t?Ot:Dt,r=this._parents,i=this._groups;typeof e!=`function`&&(e=Et(e));for(var a=i.length,o=Array(a),s=Array(a),c=Array(a),l=0;l<a;++l){var u=r[l],d=i[l],f=d.length,p=jt(e.call(u,u&&u.__data__,l,r)),m=p.length,h=s[l]=Array(m),g=o[l]=Array(m);n(u,d,h,g,c[l]=Array(f),p,t);for(var _=0,v=0,y,b;_<m;++_)if(y=h[_]){for(_>=v&&(v=_+1);!(b=g[v])&&++v<m;);y._next=b||null}}return o=new Yn(o,r),o._enter=s,o._exit=c,o}function jt(e){return typeof e==`object`&&`length`in e?e:Array.from(e)}function Mt(){return new Yn(this._exit||this._groups.map(Ct),this._parents)}function Nt(e,t,n){var r=this.enter(),i=this,a=this.exit();return typeof e==`function`?(r=e(r),r&&=r.selection()):r=r.append(e+``),t!=null&&(i=t(i),i&&=i.selection()),n==null?a.remove():n(a),r&&i?r.merge(i).order():i}function Pt(e){for(var t=e.selection?e.selection():e,n=this._groups,r=t._groups,i=n.length,a=r.length,o=Math.min(i,a),s=Array(i),c=0;c<o;++c)for(var l=n[c],u=r[c],d=l.length,f=s[c]=Array(d),p,m=0;m<d;++m)(p=l[m]||u[m])&&(f[m]=p);for(;c<i;++c)s[c]=n[c];return new Yn(s,this._parents)}function Ft(){for(var e=this._groups,t=-1,n=e.length;++t<n;)for(var r=e[t],i=r.length-1,a=r[i],o;--i>=0;)(o=r[i])&&(a&&o.compareDocumentPosition(a)^4&&a.parentNode.insertBefore(o,a),a=o);return this}function It(e){e||=Lt;function t(t,n){return t&&n?e(t.__data__,n.__data__):!t-!n}for(var n=this._groups,r=n.length,i=Array(r),a=0;a<r;++a){for(var o=n[a],s=o.length,c=i[a]=Array(s),l,u=0;u<s;++u)(l=o[u])&&(c[u]=l);c.sort(t)}return new Yn(i,this._parents).order()}function Lt(e,t){return e<t?-1:e>t?1:e>=t?0:NaN}function Rt(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function zt(){return Array.from(this)}function Bt(){for(var e=this._groups,t=0,n=e.length;t<n;++t)for(var r=e[t],i=0,a=r.length;i<a;++i){var o=r[i];if(o)return o}return null}function Vt(){let e=0;for(let t of this)++e;return e}function Ht(){return!this.node()}function Ut(e){for(var t=this._groups,n=0,r=t.length;n<r;++n)for(var i=t[n],a=0,o=i.length,s;a<o;++a)(s=i[a])&&e.call(s,s.__data__,a,i);return this}function Wt(e){return function(){this.removeAttribute(e)}}function Gt(e){return function(){this.removeAttributeNS(e.space,e.local)}}function Kt(e,t){return function(){this.setAttribute(e,t)}}function qt(e,t){return function(){this.setAttributeNS(e.space,e.local,t)}}function Jt(e,t){return function(){var n=t.apply(this,arguments);n==null?this.removeAttribute(e):this.setAttribute(e,n)}}function Yt(e,t){return function(){var n=t.apply(this,arguments);n==null?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,n)}}function Xt(e,t){var n=et(e);if(arguments.length<2){var r=this.node();return n.local?r.getAttributeNS(n.space,n.local):r.getAttribute(n)}return this.each((t==null?n.local?Gt:Wt:typeof t==`function`?n.local?Yt:Jt:n.local?qt:Kt)(n,t))}function Zt(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView}function Qt(e){return function(){this.style.removeProperty(e)}}function $t(e,t,n){return function(){this.style.setProperty(e,t,n)}}function en(e,t,n){return function(){var r=t.apply(this,arguments);r==null?this.style.removeProperty(e):this.style.setProperty(e,r,n)}}function tn(e,t,n){return arguments.length>1?this.each((t==null?Qt:typeof t==`function`?en:$t)(e,t,n??``)):nn(this.node(),e)}function nn(e,t){return e.style.getPropertyValue(t)||Zt(e).getComputedStyle(e,null).getPropertyValue(t)}function rn(e){return function(){delete this[e]}}function an(e,t){return function(){this[e]=t}}function on(e,t){return function(){var n=t.apply(this,arguments);n==null?delete this[e]:this[e]=n}}function sn(e,t){return arguments.length>1?this.each((t==null?rn:typeof t==`function`?on:an)(e,t)):this.node()[e]}function cn(e){return e.trim().split(/^|\s+/)}function ln(e){return e.classList||new un(e)}function un(e){this._node=e,this._names=cn(e.getAttribute(`class`)||``)}un.prototype={add:function(e){this._names.indexOf(e)<0&&(this._names.push(e),this._node.setAttribute(`class`,this._names.join(` `)))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute(`class`,this._names.join(` `)))},contains:function(e){return this._names.indexOf(e)>=0}};function dn(e,t){for(var n=ln(e),r=-1,i=t.length;++r<i;)n.add(t[r])}function fn(e,t){for(var n=ln(e),r=-1,i=t.length;++r<i;)n.remove(t[r])}function pn(e){return function(){dn(this,e)}}function mn(e){return function(){fn(this,e)}}function hn(e,t){return function(){(t.apply(this,arguments)?dn:fn)(this,e)}}function gn(e,t){var n=cn(e+``);if(arguments.length<2){for(var r=ln(this.node()),i=-1,a=n.length;++i<a;)if(!r.contains(n[i]))return!1;return!0}return this.each((typeof t==`function`?hn:t?pn:mn)(n,t))}function _n(){this.textContent=``}function vn(e){return function(){this.textContent=e}}function yn(e){return function(){var t=e.apply(this,arguments);this.textContent=t??``}}function bn(e){return arguments.length?this.each(e==null?_n:(typeof e==`function`?yn:vn)(e)):this.node().textContent}function xn(){this.innerHTML=``}function Sn(e){return function(){this.innerHTML=e}}function Cn(e){return function(){var t=e.apply(this,arguments);this.innerHTML=t??``}}function wn(e){return arguments.length?this.each(e==null?xn:(typeof e==`function`?Cn:Sn)(e)):this.node().innerHTML}function Tn(){this.nextSibling&&this.parentNode.appendChild(this)}function En(){return this.each(Tn)}function Dn(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function On(){return this.each(Dn)}function kn(e){var t=typeof e==`function`?e:rt(e);return this.select(function(){return this.appendChild(t.apply(this,arguments))})}function An(){return null}function jn(e,t){var n=typeof e==`function`?e:rt(e),r=t==null?An:typeof t==`function`?t:at(t);return this.select(function(){return this.insertBefore(n.apply(this,arguments),r.apply(this,arguments)||null)})}function Mn(){var e=this.parentNode;e&&e.removeChild(this)}function Nn(){return this.each(Mn)}function Pn(){var e=this.cloneNode(!1),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function Fn(){var e=this.cloneNode(!0),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function In(e){return this.select(e?Fn:Pn)}function Ln(e){return arguments.length?this.property(`__data__`,e):this.node().__data__}function Rn(e){return function(t){e.call(this,t,this.__data__)}}function zn(e){return e.trim().split(/^|\s+/).map(function(e){var t=``,n=e.indexOf(`.`);return n>=0&&(t=e.slice(n+1),e=e.slice(0,n)),{type:e,name:t}})}function Bn(e){return function(){var t=this.__on;if(t){for(var n=0,r=-1,i=t.length,a;n<i;++n)a=t[n],(!e.type||a.type===e.type)&&a.name===e.name?this.removeEventListener(a.type,a.listener,a.options):t[++r]=a;++r?t.length=r:delete this.__on}}}function Vn(e,t,n){return function(){var r=this.__on,i,a=Rn(t);if(r){for(var o=0,s=r.length;o<s;++o)if((i=r[o]).type===e.type&&i.name===e.name){this.removeEventListener(i.type,i.listener,i.options),this.addEventListener(i.type,i.listener=a,i.options=n),i.value=t;return}}this.addEventListener(e.type,a,n),i={type:e.type,name:e.name,value:t,listener:a,options:n},r?r.push(i):this.__on=[i]}}function Hn(e,t,n){var r=zn(e+``),i,a=r.length,o;if(arguments.length<2){var s=this.node().__on;if(s){for(var c=0,l=s.length,u;c<l;++c)for(i=0,u=s[c];i<a;++i)if((o=r[i]).type===u.type&&o.name===u.name)return u.value}return}for(s=t?Vn:Bn,i=0;i<a;++i)this.each(s(r[i],t,n));return this}function Un(e,t,n){var r=Zt(e),i=r.CustomEvent;typeof i==`function`?i=new i(t,n):(i=r.document.createEvent(`Event`),n?(i.initEvent(t,n.bubbles,n.cancelable),i.detail=n.detail):i.initEvent(t,!1,!1)),e.dispatchEvent(i)}function Wn(e,t){return function(){return Un(this,e,t)}}function Gn(e,t){return function(){return Un(this,e,t.apply(this,arguments))}}function Kn(e,t){return this.each((typeof t==`function`?Gn:Wn)(e,t))}function*qn(){for(var e=this._groups,t=0,n=e.length;t<n;++t)for(var r=e[t],i=0,a=r.length,o;i<a;++i)(o=r[i])&&(yield o)}var Jn=[null];function Yn(e,t){this._groups=e,this._parents=t}function Xn(){return new Yn([[document.documentElement]],Jn)}function Zn(){return this}Yn.prototype=Xn.prototype={constructor:Yn,select:ot,selectAll:dt,selectChild:_t,selectChildren:xt,filter:St,data:At,enter:wt,exit:Mt,join:Nt,merge:Pt,selection:Zn,order:Ft,sort:It,call:Rt,nodes:zt,node:Bt,size:Vt,empty:Ht,each:Ut,attr:Xt,style:tn,property:sn,classed:gn,text:bn,html:wn,raise:En,lower:On,append:kn,insert:jn,remove:Nn,clone:In,datum:Ln,on:Hn,dispatch:Kn,[Symbol.iterator]:qn};function Qn(e){return typeof e==`string`?new Yn([[document.querySelector(e)]],[document.documentElement]):new Yn([[e]],Jn)}function $n(e){let t;for(;t=e.sourceEvent;)e=t;return e}function er(e,t){if(e=$n(e),t===void 0&&(t=e.currentTarget),t){var n=t.ownerSVGElement||t;if(n.createSVGPoint){var r=n.createSVGPoint();return r.x=e.clientX,r.y=e.clientY,r=r.matrixTransform(t.getScreenCTM().inverse()),[r.x,r.y]}if(t.getBoundingClientRect){var i=t.getBoundingClientRect();return[e.clientX-i.left-t.clientLeft,e.clientY-i.top-t.clientTop]}}return[e.pageX,e.pageY]}var tr={passive:!1},nr={capture:!0,passive:!1};function rr(e){e.stopImmediatePropagation()}function ir(e){e.preventDefault(),e.stopImmediatePropagation()}function ar(e){var t=e.document.documentElement,n=Qn(e).on(`dragstart.drag`,ir,nr);`onselectstart`in t?n.on(`selectstart.drag`,ir,nr):(t.__noselect=t.style.MozUserSelect,t.style.MozUserSelect=`none`)}function or(e,t){var n=e.document.documentElement,r=Qn(e).on(`dragstart.drag`,null);t&&(r.on(`click.drag`,ir,nr),setTimeout(function(){r.on(`click.drag`,null)},0)),`onselectstart`in n?r.on(`selectstart.drag`,null):(n.style.MozUserSelect=n.__noselect,delete n.__noselect)}var sr=e=>()=>e;function cr(e,{sourceEvent:t,subject:n,target:r,identifier:i,active:a,x:o,y:s,dx:c,dy:l,dispatch:u}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},subject:{value:n,enumerable:!0,configurable:!0},target:{value:r,enumerable:!0,configurable:!0},identifier:{value:i,enumerable:!0,configurable:!0},active:{value:a,enumerable:!0,configurable:!0},x:{value:o,enumerable:!0,configurable:!0},y:{value:s,enumerable:!0,configurable:!0},dx:{value:c,enumerable:!0,configurable:!0},dy:{value:l,enumerable:!0,configurable:!0},_:{value:u}})}cr.prototype.on=function(){var e=this._.on.apply(this._,arguments);return e===this._?this:e};function lr(e){return!e.ctrlKey&&!e.button}function ur(){return this.parentNode}function dr(e,t){return t??{x:e.x,y:e.y}}function fr(){return navigator.maxTouchPoints||`ontouchstart`in this}function pr(){var e=lr,t=ur,n=dr,r=fr,i={},a=Je(`start`,`drag`,`end`),o=0,s,c,l,u,d=0;function f(e){e.on(`mousedown.drag`,p).filter(r).on(`touchstart.drag`,g).on(`touchmove.drag`,_,tr).on(`touchend.drag touchcancel.drag`,v).style(`touch-action`,`none`).style(`-webkit-tap-highlight-color`,`rgba(0,0,0,0)`)}function p(n,r){if(!u&&e.call(this,n,r)){var i=y(this,t.call(this,n,r),n,r,`mouse`);i&&(Qn(n.view).on(`mousemove.drag`,m,nr).on(`mouseup.drag`,h,nr),ar(n.view),rr(n),l=!1,s=n.clientX,c=n.clientY,i(`start`,n))}}function m(e){if(ir(e),!l){var t=e.clientX-s,n=e.clientY-c;l=t*t+n*n>d}i.mouse(`drag`,e)}function h(e){Qn(e.view).on(`mousemove.drag mouseup.drag`,null),or(e.view,l),ir(e),i.mouse(`end`,e)}function g(n,r){if(e.call(this,n,r))for(var i=n.changedTouches,a=t.call(this,n,r),o=i.length,s=0,c;s<o;++s)(c=y(this,a,n,r,i[s].identifier,i[s]))&&(rr(n),c(`start`,n,i[s]))}function _(e){for(var t=e.changedTouches,n=t.length,r=0,a;r<n;++r)(a=i[t[r].identifier])&&(ir(e),a(`drag`,e,t[r]))}function v(e){var t=e.changedTouches,n=t.length,r,a;for(u&&clearTimeout(u),u=setTimeout(function(){u=null},500),r=0;r<n;++r)(a=i[t[r].identifier])&&(rr(e),a(`end`,e,t[r]))}function y(e,t,r,s,c,l){var u=a.copy(),d=er(l||r,t),p,m,h;if((h=n.call(e,new cr(`beforestart`,{sourceEvent:r,target:f,identifier:c,active:o,x:d[0],y:d[1],dx:0,dy:0,dispatch:u}),s))!=null)return p=h.x-d[0]||0,m=h.y-d[1]||0,function n(r,a,l){var g=d,_;switch(r){case`start`:i[c]=n,_=o++;break;case`end`:delete i[c],--o;case`drag`:d=er(l||a,t),_=o}u.call(r,e,new cr(r,{sourceEvent:a,subject:h,target:f,identifier:c,active:_,x:d[0]+p,y:d[1]+m,dx:d[0]-g[0],dy:d[1]-g[1],dispatch:u}),s)}}return f.filter=function(t){return arguments.length?(e=typeof t==`function`?t:sr(!!t),f):e},f.container=function(e){return arguments.length?(t=typeof e==`function`?e:sr(e),f):t},f.subject=function(e){return arguments.length?(n=typeof e==`function`?e:sr(e),f):n},f.touchable=function(e){return arguments.length?(r=typeof e==`function`?e:sr(!!e),f):r},f.on=function(){var e=a.on.apply(a,arguments);return e===a?f:e},f.clickDistance=function(e){return arguments.length?(d=(e=+e)*e,f):Math.sqrt(d)},f}function mr(e,t,n){e.prototype=t.prototype=n,n.constructor=e}function hr(e,t){var n=Object.create(e.prototype);for(var r in t)n[r]=t[r];return n}function gr(){}var _r=.7,vr=1/_r,yr=`\\s*([+-]?\\d+)\\s*`,br=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*`,xr=`\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*`,Sr=/^#([0-9a-f]{3,8})$/,Cr=RegExp(`^rgb\\(${yr},${yr},${yr}\\)$`),wr=RegExp(`^rgb\\(${xr},${xr},${xr}\\)$`),Tr=RegExp(`^rgba\\(${yr},${yr},${yr},${br}\\)$`),Er=RegExp(`^rgba\\(${xr},${xr},${xr},${br}\\)$`),Dr=RegExp(`^hsl\\(${br},${xr},${xr}\\)$`),Or=RegExp(`^hsla\\(${br},${xr},${xr},${br}\\)$`),kr={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};mr(gr,Pr,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:Ar,formatHex:Ar,formatHex8:jr,formatHsl:Mr,formatRgb:Nr,toString:Nr});function Ar(){return this.rgb().formatHex()}function jr(){return this.rgb().formatHex8()}function Mr(){return qr(this).formatHsl()}function Nr(){return this.rgb().formatRgb()}function Pr(e){var t,n;return e=(e+``).trim().toLowerCase(),(t=Sr.exec(e))?(n=t[1].length,t=parseInt(t[1],16),n===6?Fr(t):n===3?new zr(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?Ir(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?Ir(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=Cr.exec(e))?new zr(t[1],t[2],t[3],1):(t=wr.exec(e))?new zr(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=Tr.exec(e))?Ir(t[1],t[2],t[3],t[4]):(t=Er.exec(e))?Ir(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=Dr.exec(e))?Kr(t[1],t[2]/100,t[3]/100,1):(t=Or.exec(e))?Kr(t[1],t[2]/100,t[3]/100,t[4]):kr.hasOwnProperty(e)?Fr(kr[e]):e===`transparent`?new zr(NaN,NaN,NaN,0):null}function Fr(e){return new zr(e>>16&255,e>>8&255,e&255,1)}function Ir(e,t,n,r){return r<=0&&(e=t=n=NaN),new zr(e,t,n,r)}function Lr(e){return e instanceof gr||(e=Pr(e)),e?(e=e.rgb(),new zr(e.r,e.g,e.b,e.opacity)):new zr}function Rr(e,t,n,r){return arguments.length===1?Lr(e):new zr(e,t,n,r??1)}function zr(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}mr(zr,Rr,hr(gr,{brighter(e){return e=e==null?vr:vr**+e,new zr(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?_r:_r**+e,new zr(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new zr(Wr(this.r),Wr(this.g),Wr(this.b),Ur(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Br,formatHex:Br,formatHex8:Vr,formatRgb:Hr,toString:Hr}));function Br(){return`#${Gr(this.r)}${Gr(this.g)}${Gr(this.b)}`}function Vr(){return`#${Gr(this.r)}${Gr(this.g)}${Gr(this.b)}${Gr((isNaN(this.opacity)?1:this.opacity)*255)}`}function Hr(){let e=Ur(this.opacity);return`${e===1?`rgb(`:`rgba(`}${Wr(this.r)}, ${Wr(this.g)}, ${Wr(this.b)}${e===1?`)`:`, ${e})`}`}function Ur(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Wr(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function Gr(e){return e=Wr(e),(e<16?`0`:``)+e.toString(16)}function Kr(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new Yr(e,t,n,r)}function qr(e){if(e instanceof Yr)return new Yr(e.h,e.s,e.l,e.opacity);if(e instanceof gr||(e=Pr(e)),!e)return new Yr;if(e instanceof Yr)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,i=Math.min(t,n,r),a=Math.max(t,n,r),o=NaN,s=a-i,c=(a+i)/2;return s?(o=t===a?(n-r)/s+(n<r)*6:n===a?(r-t)/s+2:(t-n)/s+4,s/=c<.5?a+i:2-a-i,o*=60):s=c>0&&c<1?0:o,new Yr(o,s,c,e.opacity)}function Jr(e,t,n,r){return arguments.length===1?qr(e):new Yr(e,t,n,r??1)}function Yr(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}mr(Yr,Jr,hr(gr,{brighter(e){return e=e==null?vr:vr**+e,new Yr(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?_r:_r**+e,new Yr(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,i=2*n-r;return new zr(Qr(e>=240?e-240:e+120,i,r),Qr(e,i,r),Qr(e<120?e+240:e-120,i,r),this.opacity)},clamp(){return new Yr(Xr(this.h),Zr(this.s),Zr(this.l),Ur(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){let e=Ur(this.opacity);return`${e===1?`hsl(`:`hsla(`}${Xr(this.h)}, ${Zr(this.s)*100}%, ${Zr(this.l)*100}%${e===1?`)`:`, ${e})`}`}}));function Xr(e){return e=(e||0)%360,e<0?e+360:e}function Zr(e){return Math.max(0,Math.min(1,e||0))}function Qr(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}var $r=e=>()=>e;function ei(e,t){return function(n){return e+n*t}}function ti(e,t,n){return e**=+n,t=t**+n-e,n=1/n,function(r){return(e+r*t)**+n}}function ni(e){return(e=+e)==1?ri:function(t,n){return n-t?ti(t,n,e):$r(isNaN(t)?n:t)}}function ri(e,t){var n=t-e;return n?ei(e,n):$r(isNaN(e)?t:e)}var ii=(function e(t){var n=ni(t);function r(e,t){var r=n((e=Rr(e)).r,(t=Rr(t)).r),i=n(e.g,t.g),a=n(e.b,t.b),o=ri(e.opacity,t.opacity);return function(t){return e.r=r(t),e.g=i(t),e.b=a(t),e.opacity=o(t),e+``}}return r.gamma=e,r})(1);function ai(e,t){t||=[];var n=e?Math.min(t.length,e.length):0,r=t.slice(),i;return function(a){for(i=0;i<n;++i)r[i]=e[i]*(1-a)+t[i]*a;return r}}function oi(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function si(e,t){for(var n=t?t.length:0,r=e?Math.min(n,e.length):0,i=Array(r),a=Array(n),o=0;o<r;++o)i[o]=gi(e[o],t[o]);for(;o<n;++o)a[o]=t[o];return function(e){for(o=0;o<r;++o)a[o]=i[o](e);return a}}function ci(e,t){var n=new Date;return e=+e,t=+t,function(r){return n.setTime(e*(1-r)+t*r),n}}function li(e,t){return e=+e,t=+t,function(n){return e*(1-n)+t*n}}function ui(e,t){var n={},r={},i;for(i in(typeof e!=`object`||!e)&&(e={}),(typeof t!=`object`||!t)&&(t={}),t)i in e?n[i]=gi(e[i],t[i]):r[i]=t[i];return function(e){for(i in n)r[i]=n[i](e);return r}}var di=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,fi=new RegExp(di.source,`g`);function pi(e){return function(){return e}}function mi(e){return function(t){return e(t)+``}}function hi(e,t){var n=di.lastIndex=fi.lastIndex=0,r,i,a,o=-1,s=[],c=[];for(e+=``,t+=``;(r=di.exec(e))&&(i=fi.exec(t));)(a=i.index)>n&&(a=t.slice(n,a),s[o]?s[o]+=a:s[++o]=a),(r=r[0])===(i=i[0])?s[o]?s[o]+=i:s[++o]=i:(s[++o]=null,c.push({i:o,x:li(r,i)})),n=fi.lastIndex;return n<t.length&&(a=t.slice(n),s[o]?s[o]+=a:s[++o]=a),s.length<2?c[0]?mi(c[0].x):pi(t):(t=c.length,function(e){for(var n=0,r;n<t;++n)s[(r=c[n]).i]=r.x(e);return s.join(``)})}function gi(e,t){var n=typeof t,r;return t==null||n===`boolean`?$r(t):(n===`number`?li:n===`string`?(r=Pr(t))?(t=r,ii):hi:t instanceof Pr?ii:t instanceof Date?ci:oi(t)?ai:Array.isArray(t)?si:typeof t.valueOf!=`function`&&typeof t.toString!=`function`||isNaN(t)?ui:li)(e,t)}var _i=180/Math.PI,vi={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function yi(e,t,n,r,i,a){var o,s,c;return(o=Math.sqrt(e*e+t*t))&&(e/=o,t/=o),(c=e*n+t*r)&&(n-=e*c,r-=t*c),(s=Math.sqrt(n*n+r*r))&&(n/=s,r/=s,c/=s),e*r<t*n&&(e=-e,t=-t,c=-c,o=-o),{translateX:i,translateY:a,rotate:Math.atan2(t,e)*_i,skewX:Math.atan(c)*_i,scaleX:o,scaleY:s}}var bi;function xi(e){let t=new(typeof DOMMatrix==`function`?DOMMatrix:WebKitCSSMatrix)(e+``);return t.isIdentity?vi:yi(t.a,t.b,t.c,t.d,t.e,t.f)}function Si(e){return e==null||(bi||=document.createElementNS(`http://www.w3.org/2000/svg`,`g`),bi.setAttribute(`transform`,e),!(e=bi.transform.baseVal.consolidate()))?vi:(e=e.matrix,yi(e.a,e.b,e.c,e.d,e.e,e.f))}function Ci(e,t,n,r){function i(e){return e.length?e.pop()+` `:``}function a(e,r,i,a,o,s){if(e!==i||r!==a){var c=o.push(`translate(`,null,t,null,n);s.push({i:c-4,x:li(e,i)},{i:c-2,x:li(r,a)})}else(i||a)&&o.push(`translate(`+i+t+a+n)}function o(e,t,n,a){e===t?t&&n.push(i(n)+`rotate(`+t+r):(e-t>180?t+=360:t-e>180&&(e+=360),a.push({i:n.push(i(n)+`rotate(`,null,r)-2,x:li(e,t)}))}function s(e,t,n,a){e===t?t&&n.push(i(n)+`skewX(`+t+r):a.push({i:n.push(i(n)+`skewX(`,null,r)-2,x:li(e,t)})}function c(e,t,n,r,a,o){if(e!==n||t!==r){var s=a.push(i(a)+`scale(`,null,`,`,null,`)`);o.push({i:s-4,x:li(e,n)},{i:s-2,x:li(t,r)})}else(n!==1||r!==1)&&a.push(i(a)+`scale(`+n+`,`+r+`)`)}return function(t,n){var r=[],i=[];return t=e(t),n=e(n),a(t.translateX,t.translateY,n.translateX,n.translateY,r,i),o(t.rotate,n.rotate,r,i),s(t.skewX,n.skewX,r,i),c(t.scaleX,t.scaleY,n.scaleX,n.scaleY,r,i),t=n=null,function(e){for(var t=-1,n=i.length,a;++t<n;)r[(a=i[t]).i]=a.x(e);return r.join(``)}}}var wi=Ci(xi,`px, `,`px)`,`deg)`),Ti=Ci(Si,`, `,`)`,`)`),Ei=1e-12;function Di(e){return((e=Math.exp(e))+1/e)/2}function Oi(e){return((e=Math.exp(e))-1/e)/2}function ki(e){return((e=Math.exp(2*e))-1)/(e+1)}var Ai=(function e(t,n,r){function i(e,i){var a=e[0],o=e[1],s=e[2],c=i[0],l=i[1],u=i[2],d=c-a,f=l-o,p=d*d+f*f,m,h;if(p<Ei)h=Math.log(u/s)/t,m=function(e){return[a+e*d,o+e*f,s*Math.exp(t*e*h)]};else{var g=Math.sqrt(p),_=(u*u-s*s+r*p)/(2*s*n*g),v=(u*u-s*s-r*p)/(2*u*n*g),y=Math.log(Math.sqrt(_*_+1)-_);h=(Math.log(Math.sqrt(v*v+1)-v)-y)/t,m=function(e){var r=e*h,i=Di(y),c=s/(n*g)*(i*ki(t*r+y)-Oi(y));return[a+c*d,o+c*f,s*i/Di(t*r+y)]}}return m.duration=h*1e3*t/Math.SQRT2,m}return i.rho=function(t){var n=Math.max(.001,+t),r=n*n;return e(n,r,r*r)},i})(Math.SQRT2,2,4),ji=0,Mi=0,Ni=0,Pi=1e3,Fi,Ii,Li=0,Ri=0,zi=0,Bi=typeof performance==`object`&&performance.now?performance:Date,Vi=typeof window==`object`&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(e){setTimeout(e,17)};function Hi(){return Ri||=(Vi(Ui),Bi.now()+zi)}function Ui(){Ri=0}function Wi(){this._call=this._time=this._next=null}Wi.prototype=Gi.prototype={constructor:Wi,restart:function(e,t,n){if(typeof e!=`function`)throw TypeError(`callback is not a function`);n=(n==null?Hi():+n)+(t==null?0:+t),!this._next&&Ii!==this&&(Ii?Ii._next=this:Fi=this,Ii=this),this._call=e,this._time=n,Xi()},stop:function(){this._call&&(this._call=null,this._time=1/0,Xi())}};function Gi(e,t,n){var r=new Wi;return r.restart(e,t,n),r}function Ki(){Hi(),++ji;for(var e=Fi,t;e;)(t=Ri-e._time)>=0&&e._call.call(void 0,t),e=e._next;--ji}function qi(){Ri=(Li=Bi.now())+zi,ji=Mi=0;try{Ki()}finally{ji=0,Yi(),Ri=0}}function Ji(){var e=Bi.now(),t=e-Li;t>Pi&&(zi-=t,Li=e)}function Yi(){for(var e,t=Fi,n,r=1/0;t;)t._call?(r>t._time&&(r=t._time),e=t,t=t._next):(n=t._next,t._next=null,t=e?e._next=n:Fi=n);Ii=e,Xi(r)}function Xi(e){ji||(Mi&&=clearTimeout(Mi),e-Ri>24?(e<1/0&&(Mi=setTimeout(qi,e-Bi.now()-zi)),Ni&&=clearInterval(Ni)):(Ni||=(Li=Bi.now(),setInterval(Ji,Pi)),ji=1,Vi(qi)))}function Zi(e,t,n){var r=new Wi;return t=t==null?0:+t,r.restart(n=>{r.stop(),e(n+t)},t,n),r}var Qi=Je(`start`,`end`,`cancel`,`interrupt`),$i=[];function ea(e,t,n,r,i,a){var o=e.__transition;if(!o)e.__transition={};else if(n in o)return;ia(e,n,{name:t,index:r,group:i,on:Qi,tween:$i,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:0})}function ta(e,t){var n=ra(e,t);if(n.state>0)throw Error(`too late; already scheduled`);return n}function na(e,t){var n=ra(e,t);if(n.state>3)throw Error(`too late; already running`);return n}function ra(e,t){var n=e.__transition;if(!n||!(n=n[t]))throw Error(`transition not found`);return n}function ia(e,t,n){var r=e.__transition,i;r[t]=n,n.timer=Gi(a,0,n.time);function a(e){n.state=1,n.timer.restart(o,n.delay,n.time),n.delay<=e&&o(e-n.delay)}function o(a){var l,u,d,f;if(n.state!==1)return c();for(l in r)if(f=r[l],f.name===n.name){if(f.state===3)return Zi(o);f.state===4?(f.state=6,f.timer.stop(),f.on.call(`interrupt`,e,e.__data__,f.index,f.group),delete r[l]):+l<t&&(f.state=6,f.timer.stop(),f.on.call(`cancel`,e,e.__data__,f.index,f.group),delete r[l])}if(Zi(function(){n.state===3&&(n.state=4,n.timer.restart(s,n.delay,n.time),s(a))}),n.state=2,n.on.call(`start`,e,e.__data__,n.index,n.group),n.state===2){for(n.state=3,i=Array(d=n.tween.length),l=0,u=-1;l<d;++l)(f=n.tween[l].value.call(e,e.__data__,n.index,n.group))&&(i[++u]=f);i.length=u+1}}function s(t){for(var r=t<n.duration?n.ease.call(null,t/n.duration):(n.timer.restart(c),n.state=5,1),a=-1,o=i.length;++a<o;)i[a].call(e,r);n.state===5&&(n.on.call(`end`,e,e.__data__,n.index,n.group),c())}function c(){for(var i in n.state=6,n.timer.stop(),delete r[t],r)return;delete e.__transition}}function aa(e,t){var n=e.__transition,r,i,a=!0,o;if(n){for(o in t=t==null?null:t+``,n){if((r=n[o]).name!==t){a=!1;continue}i=r.state>2&&r.state<5,r.state=6,r.timer.stop(),r.on.call(i?`interrupt`:`cancel`,e,e.__data__,r.index,r.group),delete n[o]}a&&delete e.__transition}}function oa(e){return this.each(function(){aa(this,e)})}function sa(e,t){var n,r;return function(){var i=na(this,e),a=i.tween;if(a!==n){r=n=a;for(var o=0,s=r.length;o<s;++o)if(r[o].name===t){r=r.slice(),r.splice(o,1);break}}i.tween=r}}function ca(e,t,n){var r,i;if(typeof n!=`function`)throw Error();return function(){var a=na(this,e),o=a.tween;if(o!==r){i=(r=o).slice();for(var s={name:t,value:n},c=0,l=i.length;c<l;++c)if(i[c].name===t){i[c]=s;break}c===l&&i.push(s)}a.tween=i}}function la(e,t){var n=this._id;if(e+=``,arguments.length<2){for(var r=ra(this.node(),n).tween,i=0,a=r.length,o;i<a;++i)if((o=r[i]).name===e)return o.value;return null}return this.each((t==null?sa:ca)(n,e,t))}function ua(e,t,n){var r=e._id;return e.each(function(){var e=na(this,r);(e.value||={})[t]=n.apply(this,arguments)}),function(e){return ra(e,r).value[t]}}function da(e,t){var n;return(typeof t==`number`?li:t instanceof Pr?ii:(n=Pr(t))?(t=n,ii):hi)(e,t)}function fa(e){return function(){this.removeAttribute(e)}}function pa(e){return function(){this.removeAttributeNS(e.space,e.local)}}function ma(e,t,n){var r,i=n+``,a;return function(){var o=this.getAttribute(e);return o===i?null:o===r?a:a=t(r=o,n)}}function ha(e,t,n){var r,i=n+``,a;return function(){var o=this.getAttributeNS(e.space,e.local);return o===i?null:o===r?a:a=t(r=o,n)}}function ga(e,t,n){var r,i,a;return function(){var o,s=n(this),c;return s==null?void this.removeAttribute(e):(o=this.getAttribute(e),c=s+``,o===c?null:o===r&&c===i?a:(i=c,a=t(r=o,s)))}}function _a(e,t,n){var r,i,a;return function(){var o,s=n(this),c;return s==null?void this.removeAttributeNS(e.space,e.local):(o=this.getAttributeNS(e.space,e.local),c=s+``,o===c?null:o===r&&c===i?a:(i=c,a=t(r=o,s)))}}function va(e,t){var n=et(e),r=n===`transform`?Ti:da;return this.attrTween(e,typeof t==`function`?(n.local?_a:ga)(n,r,ua(this,`attr.`+e,t)):t==null?(n.local?pa:fa)(n):(n.local?ha:ma)(n,r,t))}function ya(e,t){return function(n){this.setAttribute(e,t.call(this,n))}}function ba(e,t){return function(n){this.setAttributeNS(e.space,e.local,t.call(this,n))}}function xa(e,t){var n,r;function i(){var i=t.apply(this,arguments);return i!==r&&(n=(r=i)&&ba(e,i)),n}return i._value=t,i}function Sa(e,t){var n,r;function i(){var i=t.apply(this,arguments);return i!==r&&(n=(r=i)&&ya(e,i)),n}return i._value=t,i}function Ca(e,t){var n=`attr.`+e;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(t==null)return this.tween(n,null);if(typeof t!=`function`)throw Error();var r=et(e);return this.tween(n,(r.local?xa:Sa)(r,t))}function wa(e,t){return function(){ta(this,e).delay=+t.apply(this,arguments)}}function Ta(e,t){return t=+t,function(){ta(this,e).delay=t}}function Ea(e){var t=this._id;return arguments.length?this.each((typeof e==`function`?wa:Ta)(t,e)):ra(this.node(),t).delay}function Da(e,t){return function(){na(this,e).duration=+t.apply(this,arguments)}}function Oa(e,t){return t=+t,function(){na(this,e).duration=t}}function ka(e){var t=this._id;return arguments.length?this.each((typeof e==`function`?Da:Oa)(t,e)):ra(this.node(),t).duration}function Aa(e,t){if(typeof t!=`function`)throw Error();return function(){na(this,e).ease=t}}function ja(e){var t=this._id;return arguments.length?this.each(Aa(t,e)):ra(this.node(),t).ease}function Ma(e,t){return function(){var n=t.apply(this,arguments);if(typeof n!=`function`)throw Error();na(this,e).ease=n}}function Na(e){if(typeof e!=`function`)throw Error();return this.each(Ma(this._id,e))}function Pa(e){typeof e!=`function`&&(e=ft(e));for(var t=this._groups,n=t.length,r=Array(n),i=0;i<n;++i)for(var a=t[i],o=a.length,s=r[i]=[],c,l=0;l<o;++l)(c=a[l])&&e.call(c,c.__data__,l,a)&&s.push(c);return new lo(r,this._parents,this._name,this._id)}function Fa(e){if(e._id!==this._id)throw Error();for(var t=this._groups,n=e._groups,r=t.length,i=n.length,a=Math.min(r,i),o=Array(r),s=0;s<a;++s)for(var c=t[s],l=n[s],u=c.length,d=o[s]=Array(u),f,p=0;p<u;++p)(f=c[p]||l[p])&&(d[p]=f);for(;s<r;++s)o[s]=t[s];return new lo(o,this._parents,this._name,this._id)}function Ia(e){return(e+``).trim().split(/^|\s+/).every(function(e){var t=e.indexOf(`.`);return t>=0&&(e=e.slice(0,t)),!e||e===`start`})}function La(e,t,n){var r,i,a=Ia(t)?ta:na;return function(){var o=a(this,e),s=o.on;s!==r&&(i=(r=s).copy()).on(t,n),o.on=i}}function Ra(e,t){var n=this._id;return arguments.length<2?ra(this.node(),n).on.on(e):this.each(La(n,e,t))}function za(e){return function(){var t=this.parentNode;for(var n in this.__transition)if(+n!==e)return;t&&t.removeChild(this)}}function Ba(){return this.on(`end.remove`,za(this._id))}function Va(e){var t=this._name,n=this._id;typeof e!=`function`&&(e=at(e));for(var r=this._groups,i=r.length,a=Array(i),o=0;o<i;++o)for(var s=r[o],c=s.length,l=a[o]=Array(c),u,d,f=0;f<c;++f)(u=s[f])&&(d=e.call(u,u.__data__,f,s))&&(`__data__`in u&&(d.__data__=u.__data__),l[f]=d,ea(l[f],t,n,f,l,ra(u,n)));return new lo(a,this._parents,t,n)}function Ha(e){var t=this._name,n=this._id;typeof e!=`function`&&(e=lt(e));for(var r=this._groups,i=r.length,a=[],o=[],s=0;s<i;++s)for(var c=r[s],l=c.length,u,d=0;d<l;++d)if(u=c[d]){for(var f=e.call(u,u.__data__,d,c),p,m=ra(u,n),h=0,g=f.length;h<g;++h)(p=f[h])&&ea(p,t,n,h,f,m);a.push(f),o.push(u)}return new lo(a,o,t,n)}var Ua=Xn.prototype.constructor;function Wa(){return new Ua(this._groups,this._parents)}function Ga(e,t){var n,r,i;return function(){var a=nn(this,e),o=(this.style.removeProperty(e),nn(this,e));return a===o?null:a===n&&o===r?i:i=t(n=a,r=o)}}function Ka(e){return function(){this.style.removeProperty(e)}}function qa(e,t,n){var r,i=n+``,a;return function(){var o=nn(this,e);return o===i?null:o===r?a:a=t(r=o,n)}}function Ja(e,t,n){var r,i,a;return function(){var o=nn(this,e),s=n(this),c=s+``;return s??(c=s=(this.style.removeProperty(e),nn(this,e))),o===c?null:o===r&&c===i?a:(i=c,a=t(r=o,s))}}function Ya(e,t){var n,r,i,a=`style.`+t,o=`end.`+a,s;return function(){var c=na(this,e),l=c.on,u=c.value[a]==null?s||=Ka(t):void 0;(l!==n||i!==u)&&(r=(n=l).copy()).on(o,i=u),c.on=r}}function Xa(e,t,n){var r=(e+=``)==`transform`?wi:da;return t==null?this.styleTween(e,Ga(e,r)).on(`end.style.`+e,Ka(e)):typeof t==`function`?this.styleTween(e,Ja(e,r,ua(this,`style.`+e,t))).each(Ya(this._id,e)):this.styleTween(e,qa(e,r,t),n).on(`end.style.`+e,null)}function Za(e,t,n){return function(r){this.style.setProperty(e,t.call(this,r),n)}}function Qa(e,t,n){var r,i;function a(){var a=t.apply(this,arguments);return a!==i&&(r=(i=a)&&Za(e,a,n)),r}return a._value=t,a}function $a(e,t,n){var r=`style.`+(e+=``);if(arguments.length<2)return(r=this.tween(r))&&r._value;if(t==null)return this.tween(r,null);if(typeof t!=`function`)throw Error();return this.tween(r,Qa(e,t,n??``))}function eo(e){return function(){this.textContent=e}}function to(e){return function(){var t=e(this);this.textContent=t??``}}function no(e){return this.tween(`text`,typeof e==`function`?to(ua(this,`text`,e)):eo(e==null?``:e+``))}function ro(e){return function(t){this.textContent=e.call(this,t)}}function io(e){var t,n;function r(){var r=e.apply(this,arguments);return r!==n&&(t=(n=r)&&ro(r)),t}return r._value=e,r}function ao(e){var t=`text`;if(arguments.length<1)return(t=this.tween(t))&&t._value;if(e==null)return this.tween(t,null);if(typeof e!=`function`)throw Error();return this.tween(t,io(e))}function oo(){for(var e=this._name,t=this._id,n=uo(),r=this._groups,i=r.length,a=0;a<i;++a)for(var o=r[a],s=o.length,c,l=0;l<s;++l)if(c=o[l]){var u=ra(c,t);ea(c,e,n,l,o,{time:u.time+u.delay+u.duration,delay:0,duration:u.duration,ease:u.ease})}return new lo(r,this._parents,e,n)}function so(){var e,t,n=this,r=n._id,i=n.size();return new Promise(function(a,o){var s={value:o},c={value:function(){--i===0&&a()}};n.each(function(){var n=na(this,r),i=n.on;i!==e&&(t=(e=i).copy(),t._.cancel.push(s),t._.interrupt.push(s),t._.end.push(c)),n.on=t}),i===0&&a()})}var co=0;function lo(e,t,n,r){this._groups=e,this._parents=t,this._name=n,this._id=r}function uo(){return++co}var fo=Xn.prototype;lo.prototype={constructor:lo,select:Va,selectAll:Ha,selectChild:fo.selectChild,selectChildren:fo.selectChildren,filter:Pa,merge:Fa,selection:Wa,transition:oo,call:fo.call,nodes:fo.nodes,node:fo.node,size:fo.size,empty:fo.empty,each:fo.each,on:Ra,attr:va,attrTween:Ca,style:Xa,styleTween:$a,text:no,textTween:ao,remove:Ba,tween:la,delay:Ea,duration:ka,ease:ja,easeVarying:Na,end:so,[Symbol.iterator]:fo[Symbol.iterator]};function po(e){return((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2}var mo={time:null,delay:0,duration:250,ease:po};function ho(e,t){for(var n;!(n=e.__transition)||!(n=n[t]);)if(!(e=e.parentNode))throw Error(`transition ${t} not found`);return n}function go(e){var t,n;e instanceof lo?(t=e._id,e=e._name):(t=uo(),(n=mo).time=Hi(),e=e==null?null:e+``);for(var r=this._groups,i=r.length,a=0;a<i;++a)for(var o=r[a],s=o.length,c,l=0;l<s;++l)(c=o[l])&&ea(c,e,t,l,o,n||ho(c,t));return new lo(r,this._parents,e,t)}Xn.prototype.interrupt=oa,Xn.prototype.transition=go;var _o=e=>()=>e;function vo(e,{sourceEvent:t,target:n,transform:r,dispatch:i}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:n,enumerable:!0,configurable:!0},transform:{value:r,enumerable:!0,configurable:!0},_:{value:i}})}function yo(e,t,n){this.k=e,this.x=t,this.y=n}yo.prototype={constructor:yo,scale:function(e){return e===1?this:new yo(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new yo(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return`translate(`+this.x+`,`+this.y+`) scale(`+this.k+`)`}};var bo=new yo(1,0,0);xo.prototype=yo.prototype;function xo(e){for(;!e.__zoom;)if(!(e=e.parentNode))return bo;return e.__zoom}function So(e){e.stopImmediatePropagation()}function Co(e){e.preventDefault(),e.stopImmediatePropagation()}function wo(e){return(!e.ctrlKey||e.type===`wheel`)&&!e.button}function To(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute(`viewBox`)?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function Eo(){return this.__zoom||bo}function Do(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function Oo(){return navigator.maxTouchPoints||`ontouchstart`in this}function ko(e,t,n){var r=e.invertX(t[0][0])-n[0][0],i=e.invertX(t[1][0])-n[1][0],a=e.invertY(t[0][1])-n[0][1],o=e.invertY(t[1][1])-n[1][1];return e.translate(i>r?(r+i)/2:Math.min(0,r)||Math.max(0,i),o>a?(a+o)/2:Math.min(0,a)||Math.max(0,o))}function Ao(){var e=wo,t=To,n=ko,r=Do,i=Oo,a=[0,1/0],o=[[-1/0,-1/0],[1/0,1/0]],s=250,c=Ai,l=Je(`start`,`zoom`,`end`),u,d,f,p=500,m=150,h=0,g=10;function _(e){e.property(`__zoom`,Eo).on(`wheel.zoom`,w,{passive:!1}).on(`mousedown.zoom`,T).on(`dblclick.zoom`,E).filter(i).on(`touchstart.zoom`,D).on(`touchmove.zoom`,O).on(`touchend.zoom touchcancel.zoom`,k).style(`-webkit-tap-highlight-color`,`rgba(0,0,0,0)`)}_.transform=function(e,t,n,r){var i=e.selection?e.selection():e;i.property(`__zoom`,Eo),e===i?i.interrupt().each(function(){S(this,arguments).event(r).start().zoom(null,typeof t==`function`?t.apply(this,arguments):t).end()}):x(e,t,n,r)},_.scaleBy=function(e,t,n,r){_.scaleTo(e,function(){return this.__zoom.k*(typeof t==`function`?t.apply(this,arguments):t)},n,r)},_.scaleTo=function(e,r,i,a){_.transform(e,function(){var e=t.apply(this,arguments),a=this.__zoom,s=i==null?b(e):typeof i==`function`?i.apply(this,arguments):i,c=a.invert(s),l=typeof r==`function`?r.apply(this,arguments):r;return n(y(v(a,l),s,c),e,o)},i,a)},_.translateBy=function(e,r,i,a){_.transform(e,function(){return n(this.__zoom.translate(typeof r==`function`?r.apply(this,arguments):r,typeof i==`function`?i.apply(this,arguments):i),t.apply(this,arguments),o)},null,a)},_.translateTo=function(e,r,i,a,s){_.transform(e,function(){var e=t.apply(this,arguments),s=this.__zoom,c=a==null?b(e):typeof a==`function`?a.apply(this,arguments):a;return n(bo.translate(c[0],c[1]).scale(s.k).translate(typeof r==`function`?-r.apply(this,arguments):-r,typeof i==`function`?-i.apply(this,arguments):-i),e,o)},a,s)};function v(e,t){return t=Math.max(a[0],Math.min(a[1],t)),t===e.k?e:new yo(t,e.x,e.y)}function y(e,t,n){var r=t[0]-n[0]*e.k,i=t[1]-n[1]*e.k;return r===e.x&&i===e.y?e:new yo(e.k,r,i)}function b(e){return[(+e[0][0]+ +e[1][0])/2,(+e[0][1]+ +e[1][1])/2]}function x(e,n,r,i){e.on(`start.zoom`,function(){S(this,arguments).event(i).start()}).on(`interrupt.zoom end.zoom`,function(){S(this,arguments).event(i).end()}).tween(`zoom`,function(){var e=this,a=arguments,o=S(e,a).event(i),s=t.apply(e,a),l=r==null?b(s):typeof r==`function`?r.apply(e,a):r,u=Math.max(s[1][0]-s[0][0],s[1][1]-s[0][1]),d=e.__zoom,f=typeof n==`function`?n.apply(e,a):n,p=c(d.invert(l).concat(u/d.k),f.invert(l).concat(u/f.k));return function(e){if(e===1)e=f;else{var t=p(e),n=u/t[2];e=new yo(n,l[0]-t[0]*n,l[1]-t[1]*n)}o.zoom(null,e)}})}function S(e,t,n){return!n&&e.__zooming||new C(e,t)}function C(e,n){this.that=e,this.args=n,this.active=0,this.sourceEvent=null,this.extent=t.apply(e,n),this.taps=0}C.prototype={event:function(e){return e&&(this.sourceEvent=e),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit(`start`)),this},zoom:function(e,t){return this.mouse&&e!==`mouse`&&(this.mouse[1]=t.invert(this.mouse[0])),this.touch0&&e!==`touch`&&(this.touch0[1]=t.invert(this.touch0[0])),this.touch1&&e!==`touch`&&(this.touch1[1]=t.invert(this.touch1[0])),this.that.__zoom=t,this.emit(`zoom`),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit(`end`)),this},emit:function(e){var t=Qn(this.that).datum();l.call(e,this.that,new vo(e,{sourceEvent:this.sourceEvent,target:_,type:e,transform:this.that.__zoom,dispatch:l}),t)}};function w(t,...i){if(!e.apply(this,arguments))return;var s=S(this,i).event(t),c=this.__zoom,l=Math.max(a[0],Math.min(a[1],c.k*2**r.apply(this,arguments))),u=er(t);if(s.wheel)(s.mouse[0][0]!==u[0]||s.mouse[0][1]!==u[1])&&(s.mouse[1]=c.invert(s.mouse[0]=u)),clearTimeout(s.wheel);else if(c.k===l)return;else s.mouse=[u,c.invert(u)],aa(this),s.start();Co(t),s.wheel=setTimeout(d,m),s.zoom(`mouse`,n(y(v(c,l),s.mouse[0],s.mouse[1]),s.extent,o));function d(){s.wheel=null,s.end()}}function T(t,...r){if(f||!e.apply(this,arguments))return;var i=t.currentTarget,a=S(this,r,!0).event(t),s=Qn(t.view).on(`mousemove.zoom`,d,!0).on(`mouseup.zoom`,p,!0),c=er(t,i),l=t.clientX,u=t.clientY;ar(t.view),So(t),a.mouse=[c,this.__zoom.invert(c)],aa(this),a.start();function d(e){if(Co(e),!a.moved){var t=e.clientX-l,r=e.clientY-u;a.moved=t*t+r*r>h}a.event(e).zoom(`mouse`,n(y(a.that.__zoom,a.mouse[0]=er(e,i),a.mouse[1]),a.extent,o))}function p(e){s.on(`mousemove.zoom mouseup.zoom`,null),or(e.view,a.moved),Co(e),a.event(e).end()}}function E(r,...i){if(e.apply(this,arguments)){var a=this.__zoom,c=er(r.changedTouches?r.changedTouches[0]:r,this),l=a.invert(c),u=a.k*(r.shiftKey?.5:2),d=n(y(v(a,u),c,l),t.apply(this,i),o);Co(r),s>0?Qn(this).transition().duration(s).call(x,d,c,r):Qn(this).call(_.transform,d,c,r)}}function D(t,...n){if(e.apply(this,arguments)){var r=t.touches,i=r.length,a=S(this,n,t.changedTouches.length===i).event(t),o,s,c,l;for(So(t),s=0;s<i;++s)c=r[s],l=er(c,this),l=[l,this.__zoom.invert(l),c.identifier],a.touch0?!a.touch1&&a.touch0[2]!==l[2]&&(a.touch1=l,a.taps=0):(a.touch0=l,o=!0,a.taps=1+!!u);u&&=clearTimeout(u),o&&(a.taps<2&&(d=l[0],u=setTimeout(function(){u=null},p)),aa(this),a.start())}}function O(e,...t){if(this.__zooming){var r=S(this,t).event(e),i=e.changedTouches,a=i.length,s,c,l,u;for(Co(e),s=0;s<a;++s)c=i[s],l=er(c,this),r.touch0&&r.touch0[2]===c.identifier?r.touch0[0]=l:r.touch1&&r.touch1[2]===c.identifier&&(r.touch1[0]=l);if(c=r.that.__zoom,r.touch1){var d=r.touch0[0],f=r.touch0[1],p=r.touch1[0],m=r.touch1[1],h=(h=p[0]-d[0])*h+(h=p[1]-d[1])*h,g=(g=m[0]-f[0])*g+(g=m[1]-f[1])*g;c=v(c,Math.sqrt(h/g)),l=[(d[0]+p[0])/2,(d[1]+p[1])/2],u=[(f[0]+m[0])/2,(f[1]+m[1])/2]}else if(r.touch0)l=r.touch0[0],u=r.touch0[1];else return;r.zoom(`touch`,n(y(c,l,u),r.extent,o))}}function k(e,...t){if(this.__zooming){var n=S(this,t).event(e),r=e.changedTouches,i=r.length,a,o;for(So(e),f&&clearTimeout(f),f=setTimeout(function(){f=null},p),a=0;a<i;++a)o=r[a],n.touch0&&n.touch0[2]===o.identifier?delete n.touch0:n.touch1&&n.touch1[2]===o.identifier&&delete n.touch1;if(n.touch1&&!n.touch0&&(n.touch0=n.touch1,delete n.touch1),n.touch0)n.touch0[1]=this.__zoom.invert(n.touch0[0]);else if(n.end(),n.taps===2&&(o=er(o,this),Math.hypot(d[0]-o[0],d[1]-o[1])<g)){var s=Qn(this).on(`dblclick.zoom`);s&&s.apply(this,arguments)}}}return _.wheelDelta=function(e){return arguments.length?(r=typeof e==`function`?e:_o(+e),_):r},_.filter=function(t){return arguments.length?(e=typeof t==`function`?t:_o(!!t),_):e},_.touchable=function(e){return arguments.length?(i=typeof e==`function`?e:_o(!!e),_):i},_.extent=function(e){return arguments.length?(t=typeof e==`function`?e:_o([[+e[0][0],+e[0][1]],[+e[1][0],+e[1][1]]]),_):t},_.scaleExtent=function(e){return arguments.length?(a[0]=+e[0],a[1]=+e[1],_):[a[0],a[1]]},_.translateExtent=function(e){return arguments.length?(o[0][0]=+e[0][0],o[1][0]=+e[1][0],o[0][1]=+e[0][1],o[1][1]=+e[1][1],_):[[o[0][0],o[0][1]],[o[1][0],o[1][1]]]},_.constrain=function(e){return arguments.length?(n=e,_):n},_.duration=function(e){return arguments.length?(s=+e,_):s},_.interpolate=function(e){return arguments.length?(c=e,_):c},_.on=function(){var e=l.on.apply(l,arguments);return e===l?_:e},_.clickDistance=function(e){return arguments.length?(h=(e=+e)*e,_):Math.sqrt(h)},_.tapDistance=function(e){return arguments.length?(g=+e,_):g},_}var jo={error001:(e=`react`)=>`Seems like you have not used ${e===`svelte`?`SvelteFlowProvider`:`ReactFlowProvider`} as an ancestor. Help: https://${e}flow.dev/error#001`,error002:()=>`It looks like you've created a new nodeTypes or edgeTypes object. If this wasn't on purpose please define the nodeTypes/edgeTypes outside of the component or memoize them.`,error003:e=>`Node type "${e}" not found. Using fallback type "default".`,error004:()=>`The parent container needs a width and a height to render the graph.`,error005:()=>`Only child nodes can use a parent extent.`,error006:()=>`Can't create edge. An edge needs a source and a target.`,error007:e=>`The old edge with id=${e} does not exist.`,error009:e=>`Marker type "${e}" doesn't exist.`,error008:(e,{id:t,sourceHandle:n,targetHandle:r})=>`Couldn't create edge for ${e} handle id: "${e===`source`?n:r}", edge id: ${t}.`,error010:()=>`Handle: No node id found. Make sure to only use a Handle inside a custom Node.`,error011:e=>`Edge type "${e}" not found. Using fallback type "default".`,error012:e=>`Node with id "${e}" does not exist, it may have been removed. This can happen when a node is deleted before the "onNodeClick" handler is called.`,error013:(e=`react`)=>`It seems that you haven't loaded the styles. Please import '@xyflow/${e}/dist/style.css' or base.css to make sure everything is working properly.`,error014:()=>`useNodeConnections: No node ID found. Call useNodeConnections inside a custom Node or provide a node ID.`,error015:()=>`It seems that you are trying to drag a node that is not initialized. Please use onNodesChange as explained in the docs.`,error016:e=>`Edge with id "${e}" does not exist, it may have been removed. This can happen when an edge is deleted before the "onEdgeClick" handler is called.`},Mo=[[-1/0,-1/0],[1/0,1/0]],No=[`Enter`,` `,`Escape`],Po={"node.a11yDescription.default":`Press enter or space to select a node. Press delete to remove it and escape to cancel.`,"node.a11yDescription.keyboardDisabled":`Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.`,"node.a11yDescription.ariaLiveMessage":({direction:e,x:t,y:n})=>`Moved selected node ${e}. New position, x: ${t}, y: ${n}`,"edge.a11yDescription.default":`Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.`,"controls.ariaLabel":`Control Panel`,"controls.zoomIn.ariaLabel":`Zoom In`,"controls.zoomOut.ariaLabel":`Zoom Out`,"controls.fitView.ariaLabel":`Fit View`,"controls.interactive.ariaLabel":`Toggle Interactivity`,"minimap.ariaLabel":`Mini Map`,"handle.ariaLabel":`Handle`},Fo;(function(e){e.Strict=`strict`,e.Loose=`loose`})(Fo||={});var Io;(function(e){e.Free=`free`,e.Vertical=`vertical`,e.Horizontal=`horizontal`})(Io||={});var Lo;(function(e){e.Partial=`partial`,e.Full=`full`})(Lo||={});var Ro={inProgress:!1,isValid:null,from:null,fromHandle:null,fromPosition:null,fromNode:null,to:null,toHandle:null,toPosition:null,toNode:null,pointer:null},zo;(function(e){e.Bezier=`default`,e.Straight=`straight`,e.Step=`step`,e.SmoothStep=`smoothstep`,e.SimpleBezier=`simplebezier`})(zo||={});var Bo;(function(e){e.Arrow=`arrow`,e.ArrowClosed=`arrowclosed`})(Bo||={});var Y;(function(e){e.Left=`left`,e.Top=`top`,e.Right=`right`,e.Bottom=`bottom`})(Y||={});var Vo={[Y.Left]:Y.Right,[Y.Right]:Y.Left,[Y.Top]:Y.Bottom,[Y.Bottom]:Y.Top},Ho=e=>!!e&&typeof e==`object`&&`id`in e&&`source`in e&&`target`in e,Uo=e=>!!e&&typeof e==`object`&&`id`in e&&`position`in e&&!(`source`in e)&&!(`target`in e),Wo=e=>!!e&&typeof e==`object`&&`id`in e&&`internals`in e&&!(`source`in e)&&!(`target`in e),Go=(e,t=[0,0])=>{let{width:n,height:r}=Ts(e),i=e.origin??t,a=n*i[0],o=r*i[1];return{x:e.position.x-a,y:e.position.y-o}},Ko=(e,t={nodeOrigin:[0,0]})=>{if(e.length===0)return{x:0,y:0,width:0,height:0};let n=!1,r=e.reduce((e,r)=>{let i=typeof r==`string`,a=!t.nodeLookup&&!i?r:void 0;return t.nodeLookup&&(a=i?t.nodeLookup.get(r):Wo(r)?r:t.nodeLookup.get(r.id)),a?(n=!0,as(e,ls(a,t.nodeOrigin))):e},{x:1/0,y:1/0,x2:-1/0,y2:-1/0});return n?ss(r):{x:0,y:0,width:0,height:0}},qo=(e,t={})=>{let n={x:1/0,y:1/0,x2:-1/0,y2:-1/0},r=!1;return e.forEach(e=>{(t.filter===void 0||t.filter(e))&&(n=as(n,ls(e)),r=!0)}),r?ss(n):{x:0,y:0,width:0,height:0}},Jo=(e,t,[n,r,i]=[0,0,1],a=!1,o=!1)=>{let s=(t.x-n)/i,c=(t.y-r)/i,l=t.width/i,u=t.height/i,d=[];for(let t of e.values()){let{measured:e,selectable:n=!0,hidden:r=!1}=t;if(o&&!n||r)continue;let i=e.width??t.width??t.initialWidth??0,f=e.height??t.height??t.initialHeight??0,{x:p,y:m}=t.internals.positionAbsolute,h=ds(s,c,l,u,p,m,i,f),g=i*f,_=a&&h>0;(!t.internals.handleBounds||_||h>=g||t.dragging)&&d.push(t)}return d},Yo=(e,t)=>{let n=new Set;return e.forEach(e=>{n.add(e.id)}),t.filter(e=>n.has(e.source)||n.has(e.target))};function Xo(e,t){let n=new Map,r=t!=null&&t.nodes?new Set(t.nodes.map(e=>e.id)):null;return e.forEach(e=>{let i;if(t!=null&&t.includeHiddenNodes){let{width:t,height:n}=Ts(e);i=t>0&&n>0}else i=!!(e.measured.width&&e.measured.height&&!e.hidden);i&&(!r||r.has(e.id))&&n.set(e.id,e)}),n}async function Zo({nodes:e,width:t,height:n,panZoom:r,minZoom:i,maxZoom:a},o){if(e.size===0)return!0;let s=Ss(qo(Xo(e,o)),t,n,(o==null?void 0:o.minZoom)??i,(o==null?void 0:o.maxZoom)??a,(o==null?void 0:o.padding)??.1);return await r.setViewport(s,{duration:o==null?void 0:o.duration,ease:o==null?void 0:o.ease,interpolate:o==null?void 0:o.interpolate}),!0}function Qo({nodeId:e,nextPosition:t,nodeLookup:n,nodeOrigin:r=[0,0],nodeExtent:i,onError:a}){let o=n.get(e),s=o.parentId?n.get(o.parentId):void 0,{x:c,y:l}=s?s.internals.positionAbsolute:{x:0,y:0},u=o.origin??r,d=o.extent||i;if(o.extent===`parent`&&!o.expandParent){if(!s)a==null||a(`005`,jo.error005());else{let{width:e,height:t}=Ts(s);e&&t&&(d=[[c,l],[c+e,l+t]])}}else s&&ws(o.extent)&&(d=[[o.extent[0][0]+c,o.extent[0][1]+l],[o.extent[1][0]+c,o.extent[1][1]+l]]);let f=ws(d)?ts(t,d,o.measured):t;return(o.measured.width===void 0||o.measured.height===void 0)&&(a==null||a(`015`,jo.error015())),{position:{x:f.x-c+(o.measured.width??0)*u[0],y:f.y-l+(o.measured.height??0)*u[1]},positionAbsolute:f}}async function $o({nodesToRemove:e=[],edgesToRemove:t=[],nodes:n,edges:r,onBeforeDelete:i}){let a=new Set(e.map(e=>e.id)),o=[];for(let e of n){if(e.deletable===!1)continue;let t=a.has(e.id),n=!t&&e.parentId&&o.find(t=>t.id===e.parentId);(t||n)&&o.push(e)}let s=new Set(t.map(e=>e.id)),c=r.filter(e=>e.deletable!==!1),l=Yo(o,c);for(let e of c)s.has(e.id)&&!l.find(t=>t.id===e.id)&&l.push(e);if(!i)return{edges:l,nodes:o};let u=await i({nodes:o,edges:l});return typeof u==`boolean`?u?{edges:l,nodes:o}:{edges:[],nodes:[]}:u}var es=(e,t=0,n=1)=>Math.min(Math.max(e,t),n),ts=(e={x:0,y:0},t,n)=>({x:es(e.x,t[0][0],t[1][0]-((n==null?void 0:n.width)??0)),y:es(e.y,t[0][1],t[1][1]-((n==null?void 0:n.height)??0))});function ns(e,t,n){let{width:r,height:i}=Ts(n),{x:a,y:o}=n.internals.positionAbsolute;return ts(e,[[a,o],[a+r,o+i]],t)}var rs=(e,t,n)=>e<t?es(Math.abs(e-t),1,t)/t:e>n?-es(Math.abs(e-n),1,t)/t:0,is=(e,t,n=15,r=40)=>[rs(e.x,r,t.width-r)*n,rs(e.y,r,t.height-r)*n],as=(e,t)=>({x:Math.min(e.x,t.x),y:Math.min(e.y,t.y),x2:Math.max(e.x2,t.x2),y2:Math.max(e.y2,t.y2)}),os=({x:e,y:t,width:n,height:r})=>({x:e,y:t,x2:e+n,y2:t+r}),ss=({x:e,y:t,x2:n,y2:r})=>({x:e,y:t,width:n-e,height:r-t}),cs=(e,t=[0,0])=>{var n,r;let{x:i,y:a}=Wo(e)?e.internals.positionAbsolute:Go(e,t);return{x:i,y:a,width:((n=e.measured)==null?void 0:n.width)??e.width??e.initialWidth??0,height:((r=e.measured)==null?void 0:r.height)??e.height??e.initialHeight??0}},ls=(e,t=[0,0])=>{var n,r;let{x:i,y:a}=Wo(e)?e.internals.positionAbsolute:Go(e,t);return{x:i,y:a,x2:i+(((n=e.measured)==null?void 0:n.width)??e.width??e.initialWidth??0),y2:a+(((r=e.measured)==null?void 0:r.height)??e.height??e.initialHeight??0)}},us=(e,t)=>ss(as(os(e),os(t))),ds=(e,t,n,r,i,a,o,s)=>{let c=Math.max(0,Math.min(e+n,i+o)-Math.max(e,i)),l=Math.max(0,Math.min(t+r,a+s)-Math.max(t,a));return Math.ceil(c*l)},fs=(e,t)=>ds(e.x,e.y,e.width,e.height,t.x,t.y,t.width,t.height),ps=e=>ms(e.width)&&ms(e.height)&&ms(e.x)&&ms(e.y),ms=e=>!isNaN(e)&&isFinite(e),hs=(e,t)=>(e,t)=>{},gs=(e,t=[1,1])=>({x:t[0]*Math.round(e.x/t[0]),y:t[1]*Math.round(e.y/t[1])}),_s=({x:e,y:t},[n,r,i],a=!1,o=[1,1])=>{let s={x:(e-n)/i,y:(t-r)/i};return a?gs(s,o):s},vs=({x:e,y:t},[n,r,i])=>({x:e*i+n,y:t*i+r});function ys(e,t){if(typeof e==`number`)return Math.floor((t-t/(1+e))*.5);if(typeof e==`string`&&e.endsWith(`px`)){let t=parseFloat(e);if(!Number.isNaN(t))return Math.floor(t)}if(typeof e==`string`&&e.endsWith(`%`)){let n=parseFloat(e);if(!Number.isNaN(n))return Math.floor(t*n*.01)}return console.error(`The padding value "${e}" is invalid. Please provide a number or a string with a valid unit (px or %).`),0}function bs(e,t,n){if(typeof e==`string`||typeof e==`number`){let r=ys(e,n),i=ys(e,t);return{top:r,right:i,bottom:r,left:i,x:i*2,y:r*2}}if(typeof e==`object`){let r=ys(e.top??e.y??0,n),i=ys(e.bottom??e.y??0,n),a=ys(e.left??e.x??0,t),o=ys(e.right??e.x??0,t);return{top:r,right:o,bottom:i,left:a,x:a+o,y:r+i}}return{top:0,right:0,bottom:0,left:0,x:0,y:0}}function xs(e,t,n,r,i,a){let{x:o,y:s}=vs(e,[t,n,r]),{x:c,y:l}=vs({x:e.x+e.width,y:e.y+e.height},[t,n,r]),u=i-c,d=a-l;return{left:Math.floor(o),top:Math.floor(s),right:Math.floor(u),bottom:Math.floor(d)}}var Ss=(e,t,n,r,i,a)=>{let o=bs(a,t,n),s=(t-o.x)/e.width,c=(n-o.y)/e.height,l=es(Math.min(s,c),r,i),u=e.x+e.width/2,d=e.y+e.height/2,f=t/2-u*l,p=n/2-d*l,m=xs(e,f,p,l,t,n),h={left:Math.min(m.left-o.left,0),top:Math.min(m.top-o.top,0),right:Math.min(m.right-o.right,0),bottom:Math.min(m.bottom-o.bottom,0)};return{x:f-h.left+h.right,y:p-h.top+h.bottom,zoom:l}},Cs=()=>{var e;return typeof navigator<`u`&&((e=navigator)==null||(e=e.userAgent)==null?void 0:e.indexOf(`Mac`))>=0};function ws(e){return e!=null&&e!==`parent`}function Ts(e){var t,n;return{width:((t=e.measured)==null?void 0:t.width)??e.width??e.initialWidth??0,height:((n=e.measured)==null?void 0:n.height)??e.height??e.initialHeight??0}}function Es(e){var t,n;return(((t=e.measured)==null?void 0:t.width)??e.width??e.initialWidth)!==void 0&&(((n=e.measured)==null?void 0:n.height)??e.height??e.initialHeight)!==void 0}function Ds(e,t={width:0,height:0},n,r,i){let a={...e},o=r.get(n);if(o){let e=o.origin||i;a.x+=o.internals.positionAbsolute.x-(t.width??0)*e[0],a.y+=o.internals.positionAbsolute.y-(t.height??0)*e[1]}return a}function Os(e,t){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}function ks(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function As(e){return{...Po,...e||{}}}function js(e,t){if(!e&&!t)return!0;if(!e||!t||e.size!==t.size)return!1;if(!e.size&&!t.size)return!0;for(let n of e.keys())if(!t.has(n))return!1;return!0}function Ms(e,t,n){if(!n)return;let r=[];e.forEach((e,n)=>{t!=null&&t.has(n)||r.push(e)}),r.length&&n(r)}function Ns(e){return e===null?null:e?`valid`:`invalid`}function Ps(e,{snapGrid:t=[0,0],snapToGrid:n=!1,transform:r,containerBounds:i}){let{x:a,y:o}=Bs(e),s=_s({x:a-((i==null?void 0:i.left)??0),y:o-((i==null?void 0:i.top)??0)},r),{x:c,y:l}=n?gs(s,t):s;return{xSnapped:c,ySnapped:l,...s}}var Fs=e=>({width:e.offsetWidth,height:e.offsetHeight}),Is=e=>{var t,n;return(e==null||(t=e.getRootNode)==null?void 0:t.call(e))||((n=window)==null?void 0:n.document)},Ls=[`INPUT`,`SELECT`,`TEXTAREA`];function Rs(e){var t;let n=((t=e.composedPath)==null||(t=t.call(e))==null?void 0:t[0])||e.target;return(n==null?void 0:n.nodeType)===1?Ls.includes(n.nodeName)||n.hasAttribute(`contenteditable`)||!!n.closest(`.nokey`):!1}var zs=e=>`clientX`in e,Bs=(e,t)=>{var n,r;let i=zs(e),a=i?e.clientX:(n=e.touches)==null?void 0:n[0].clientX,o=i?e.clientY:(r=e.touches)==null?void 0:r[0].clientY;return{x:a-((t==null?void 0:t.left)??0),y:o-((t==null?void 0:t.top)??0)}},Vs=(e,t,n,r,i)=>{let a=t.querySelectorAll(`.${e}`);return!a||!a.length?null:Array.from(a).map(t=>{let a=t.getBoundingClientRect();return{id:t.getAttribute(`data-handleid`),type:e,nodeId:i,position:t.getAttribute(`data-handlepos`),x:(a.left-n.left)/r,y:(a.top-n.top)/r,...Fs(t)}})};function Hs({sourceX:e,sourceY:t,targetX:n,targetY:r,sourceControlX:i,sourceControlY:a,targetControlX:o,targetControlY:s}){let c=e*.125+i*.375+o*.375+n*.125,l=t*.125+a*.375+s*.375+r*.125;return[c,l,Math.abs(c-e),Math.abs(l-t)]}function Us(e,t){return e>=0?.5*e:t*25*Math.sqrt(-e)}function Ws({pos:e,x1:t,y1:n,x2:r,y2:i,c:a}){switch(e){case Y.Left:return[t-Us(t-r,a),n];case Y.Right:return[t+Us(r-t,a),n];case Y.Top:return[t,n-Us(n-i,a)];case Y.Bottom:return[t,n+Us(i-n,a)]}}function Gs({sourceX:e,sourceY:t,sourcePosition:n=Y.Bottom,targetX:r,targetY:i,targetPosition:a=Y.Top,curvature:o=.25}){let[s,c]=Ws({pos:n,x1:e,y1:t,x2:r,y2:i,c:o}),[l,u]=Ws({pos:a,x1:r,y1:i,x2:e,y2:t,c:o}),[d,f,p,m]=Hs({sourceX:e,sourceY:t,targetX:r,targetY:i,sourceControlX:s,sourceControlY:c,targetControlX:l,targetControlY:u});return[`M${e},${t} C${s},${c} ${l},${u} ${r},${i}`,d,f,p,m]}function Ks({sourceX:e,sourceY:t,targetX:n,targetY:r}){let i=Math.abs(n-e)/2,a=n<e?n+i:n-i,o=Math.abs(r-t)/2;return[a,r<t?r+o:r-o,i,o]}function qs({sourceNode:e,targetNode:t,selected:n=!1,zIndex:r=0,elevateOnSelect:i=!1,zIndexMode:a=`basic`}){return a===`manual`?r:(i&&n?r+1e3:r)+Math.max(e.parentId||i&&e.selected?e.internals.z:0,t.parentId||i&&t.selected?t.internals.z:0)}function Js({sourceNode:e,targetNode:t,width:n,height:r,transform:i}){let a=as(ls(e),ls(t));return a.x===a.x2&&(a.x2+=1),a.y===a.y2&&(a.y2+=1),fs({x:-i[0]/i[2],y:-i[1]/i[2],width:n/i[2],height:r/i[2]},ss(a))>0}var Ys=({source:e,sourceHandle:t,target:n,targetHandle:r})=>`xy-edge__${e}${t||``}-${n}${r||``}`,Xs=(e,t)=>t.some(t=>t.source===e.source&&t.target===e.target&&(t.sourceHandle===e.sourceHandle||!t.sourceHandle&&!e.sourceHandle)&&(t.targetHandle===e.targetHandle||!t.targetHandle&&!e.targetHandle)),Zs=(e,t,n={})=>{if(!e.source||!e.target){var r;return(r=n.onError)==null||r.call(n,`006`,jo.error006()),t}let i=n.getEdgeId||Ys,a;return a=Ho(e)?{...e}:{...e,id:i(e)},Xs(a,t)?t:(a.sourceHandle===null&&delete a.sourceHandle,a.targetHandle===null&&delete a.targetHandle,t.concat(a))};function Qs({sourceX:e,sourceY:t,targetX:n,targetY:r}){let[i,a,o,s]=Ks({sourceX:e,sourceY:t,targetX:n,targetY:r});return[`M ${e},${t}L ${n},${r}`,i,a,o,s]}var $s={[Y.Left]:{x:-1,y:0},[Y.Right]:{x:1,y:0},[Y.Top]:{x:0,y:-1},[Y.Bottom]:{x:0,y:1}},ec=({source:e,sourcePosition:t=Y.Bottom,target:n})=>t===Y.Left||t===Y.Right?e.x<n.x?{x:1,y:0}:{x:-1,y:0}:e.y<n.y?{x:0,y:1}:{x:0,y:-1},tc=(e,t)=>Math.sqrt((t.x-e.x)**2+(t.y-e.y)**2);function nc({source:e,sourcePosition:t=Y.Bottom,target:n,targetPosition:r=Y.Top,center:i,offset:a,stepPosition:o}){let s=$s[t],c=$s[r],l={x:e.x+s.x*a,y:e.y+s.y*a},u={x:n.x+c.x*a,y:n.y+c.y*a},d=ec({source:l,sourcePosition:t,target:u}),f=d.x===0?`y`:`x`,p=d[f],m=[],h,g,_={x:0,y:0},v={x:0,y:0},[,,y,b]=Ks({sourceX:e.x,sourceY:e.y,targetX:n.x,targetY:n.y});if(s[f]*c[f]===-1){f===`x`?(h=i.x??l.x+(u.x-l.x)*o,g=i.y??(l.y+u.y)/2):(h=i.x??(l.x+u.x)/2,g=i.y??l.y+(u.y-l.y)*o);let e=[{x:h,y:l.y},{x:h,y:u.y}],t=[{x:l.x,y:g},{x:u.x,y:g}];m=s[f]===p?f===`x`?e:t:f===`x`?t:e}else{let i=[{x:l.x,y:u.y}],o=[{x:u.x,y:l.y}];if(m=f===`x`?s.x===p?o:i:s.y===p?i:o,t===r){let t=Math.abs(e[f]-n[f]);if(t<=a){let r=Math.min(a-1,a-t);s[f]===p?_[f]=(l[f]>e[f]?-1:1)*r:v[f]=(u[f]>n[f]?-1:1)*r}}if(t!==r){let e=f===`x`?`y`:`x`,t=s[f]===c[e],n=l[e]>u[e],r=l[e]<u[e];(s[f]===1&&(!t&&n||t&&r)||s[f]!==1&&(!t&&r||t&&n))&&(m=f===`x`?i:o)}let d={x:l.x+_.x,y:l.y+_.y},y={x:u.x+v.x,y:u.y+v.y};Math.max(Math.abs(d.x-m[0].x),Math.abs(y.x-m[0].x))>=Math.max(Math.abs(d.y-m[0].y),Math.abs(y.y-m[0].y))?(h=(d.x+y.x)/2,g=m[0].y):(h=m[0].x,g=(d.y+y.y)/2)}let x={x:l.x+_.x,y:l.y+_.y},S={x:u.x+v.x,y:u.y+v.y};return[[e,...x.x!==m[0].x||x.y!==m[0].y?[x]:[],...m,...S.x!==m[m.length-1].x||S.y!==m[m.length-1].y?[S]:[],n],h,g,y,b]}function rc(e,t,n,r){let i=Math.min(tc(e,t)/2,tc(t,n)/2,r),{x:a,y:o}=t;if(e.x===a&&a===n.x||e.y===o&&o===n.y)return`L${a} ${o}`;if(e.y===o){let t=e.x<n.x?-1:1,r=e.y<n.y?1:-1;return`L ${a+i*t},${o}Q ${a},${o} ${a},${o+i*r}`}let s=e.x<n.x?1:-1;return`L ${a},${o+i*(e.y<n.y?-1:1)}Q ${a},${o} ${a+i*s},${o}`}function ic({sourceX:e,sourceY:t,sourcePosition:n=Y.Bottom,targetX:r,targetY:i,targetPosition:a=Y.Top,borderRadius:o=5,centerX:s,centerY:c,offset:l=20,stepPosition:u=.5}){let[d,f,p,m,h]=nc({source:{x:e,y:t},sourcePosition:n,target:{x:r,y:i},targetPosition:a,center:{x:s,y:c},offset:l,stepPosition:u}),g=`M${d[0].x} ${d[0].y}`;for(let e=1;e<d.length-1;e++)g+=rc(d[e-1],d[e],d[e+1],o);return g+=`L${d[d.length-1].x} ${d[d.length-1].y}`,[g,f,p,m,h]}function ac(e){var t;return e&&!!(e.internals.handleBounds||(t=e.handles)!=null&&t.length)&&!!(e.measured.width||e.width||e.initialWidth)}function oc(e){let{sourceNode:t,targetNode:n}=e;if(!ac(t)||!ac(n))return null;let r=t.internals.handleBounds||sc(t.handles),i=n.internals.handleBounds||sc(n.handles),a=lc((r==null?void 0:r.source)??[],e.sourceHandle),o=lc(e.connectionMode===Fo.Strict?(i==null?void 0:i.target)??[]:((i==null?void 0:i.target)??[]).concat((i==null?void 0:i.source)??[]),e.targetHandle);if(!a||!o){var s;return(s=e.onError)==null||s.call(e,`008`,jo.error008(a?`target`:`source`,{id:e.id,sourceHandle:e.sourceHandle,targetHandle:e.targetHandle})),null}let c=(a==null?void 0:a.position)||Y.Bottom,l=(o==null?void 0:o.position)||Y.Top,u=cc(t,a,c),d=cc(n,o,l);return{sourceX:u.x,sourceY:u.y,targetX:d.x,targetY:d.y,sourcePosition:c,targetPosition:l}}function sc(e){if(!e)return null;let t=[],n=[];for(let r of e)r.width=r.width??1,r.height=r.height??1,r.type===`source`?t.push(r):r.type===`target`&&n.push(r);return{source:t,target:n}}function cc(e,t,n=Y.Left,r=!1){let i=((t==null?void 0:t.x)??0)+e.internals.positionAbsolute.x,a=((t==null?void 0:t.y)??0)+e.internals.positionAbsolute.y,{width:o,height:s}=t??Ts(e);if(r)return{x:i+o/2,y:a+s/2};switch((t==null?void 0:t.position)??n){case Y.Top:return{x:i+o/2,y:a};case Y.Right:return{x:i+o,y:a+s/2};case Y.Bottom:return{x:i+o/2,y:a+s};case Y.Left:return{x:i,y:a+s/2}}}function lc(e,t){return e&&(t?e.find(e=>e.id===t):e[0])||null}function uc(e,t){return e?typeof e==`string`?e:`${t?`${t}__`:``}${Object.keys(e).sort().map(t=>`${t}=${e[t]}`).join(`&`)}`:``}function dc(e,{id:t,defaultColor:n,defaultMarkerStart:r,defaultMarkerEnd:i}){let a=new Set;return e.reduce((e,o)=>([o.markerStart||r,o.markerEnd||i].forEach(r=>{if(r&&typeof r==`object`){let i=uc(r,t);a.has(i)||(e.push({id:i,color:r.color||n,...r}),a.add(i))}}),e),[]).sort((e,t)=>e.id.localeCompare(t.id))}var fc=1e3,pc=10,mc={nodeOrigin:[0,0],nodeExtent:Mo,elevateNodesOnSelect:!0,zIndexMode:`basic`,defaults:{}},hc={...mc,checkEquality:!0};function gc(e,t){let n={...e};for(let e in t)t[e]!==void 0&&(n[e]=t[e]);return n}function _c(e,t,n){let r=gc(mc,n);for(let n of e.values())if(n.parentId)Sc(n,e,t,r);else{let e=ts(Go(n,r.nodeOrigin),ws(n.extent)?n.extent:r.nodeExtent,Ts(n));n.internals.positionAbsolute=e}}function vc(e,t){if(!e.handles)return e.measured?t==null?void 0:t.internals.handleBounds:void 0;let n=[],r=[];for(let t of e.handles){let i={id:t.id,width:t.width??1,height:t.height??1,nodeId:e.id,x:t.x,y:t.y,position:t.position,type:t.type};t.type===`source`?n.push(i):t.type===`target`&&r.push(i)}return{source:n,target:r}}function yc(e){return e===`manual`}function bc(e,t,n,r={}){let i=gc(hc,r),a={i:0},o=new Map(t),s=i!=null&&i.elevateNodesOnSelect&&!yc(i.zIndexMode)?fc:0,c=e.length>0,l=!1;t.clear(),n.clear();for(let f of e){let e=o.get(f.id);if(i.checkEquality&&f===(e==null?void 0:e.internals.userNode))t.set(f.id,e);else{var u,d;let n=ts(Go(f,i.nodeOrigin),ws(f.extent)?f.extent:i.nodeExtent,Ts(f));e={...i.defaults,...f,measured:{width:(u=f.measured)==null?void 0:u.width,height:(d=f.measured)==null?void 0:d.height},internals:{positionAbsolute:n,handleBounds:vc(f,e),z:Cc(f,s,i.zIndexMode),userNode:f}},t.set(f.id,e)}(e.measured===void 0||e.measured.width===void 0||e.measured.height===void 0)&&!e.hidden&&(c=!1),f.parentId&&Sc(e,t,n,r,a),l||=f.selected??!1}return{nodesInitialized:c,hasSelectedNodes:l}}function xc(e,t){if(!e.parentId)return;let n=t.get(e.parentId);n?n.set(e.id,e):t.set(e.parentId,new Map([[e.id,e]]))}function Sc(e,t,n,r,i){let{elevateNodesOnSelect:a,nodeOrigin:o,nodeExtent:s,zIndexMode:c}=gc(mc,r),l=e.parentId,u=t.get(l);if(!u){console.warn(`Parent node ${l} not found. Please make sure that parent nodes are in front of their child nodes in the nodes array.`);return}xc(e,n),i&&!u.parentId&&u.internals.rootParentIndex===void 0&&c===`auto`&&(u.internals.rootParentIndex=++i.i,u.internals.z=u.internals.z+i.i*pc),i&&u.internals.rootParentIndex!==void 0&&(i.i=u.internals.rootParentIndex);let{x:d,y:f,z:p}=wc(e,u,o,s,a&&!yc(c)?fc:0,c),{positionAbsolute:m}=e.internals,h=d!==m.x||f!==m.y;(h||p!==e.internals.z)&&t.set(e.id,{...e,internals:{...e.internals,positionAbsolute:h?{x:d,y:f}:m,z:p}})}function Cc(e,t,n){let r=ms(e.zIndex)?e.zIndex:0;return yc(n)?r:r+(e.selected?t:0)}function wc(e,t,n,r,i,a){let{x:o,y:s}=t.internals.positionAbsolute,c=Ts(e),l=Go(e,n),u=ws(e.extent)?ts(l,e.extent,c):l,d=ts({x:o+u.x,y:s+u.y},r,c);e.extent===`parent`&&(d=ns(d,c,t));let f=Cc(e,i,a),p=t.internals.z??0;return{x:d.x,y:d.y,z:p>=f?p+1:f}}function Tc(e,t,n,r=[0,0]){let i=[],a=new Map;for(let n of e){var o;let e=t.get(n.parentId);if(!e)continue;let r=us(((o=a.get(n.parentId))==null?void 0:o.expandedRect)??cs(e),n.rect);a.set(n.parentId,{expandedRect:r,parent:e})}return a.size>0&&a.forEach(({expandedRect:t,parent:a},o)=>{let s=a.internals.positionAbsolute,c=Ts(a),l=a.origin??r,u=t.x<s.x?Math.round(Math.abs(s.x-t.x)):0,d=t.y<s.y?Math.round(Math.abs(s.y-t.y)):0,f=Math.max(c.width,Math.round(t.width)),p=Math.max(c.height,Math.round(t.height)),m=(f-c.width)*l[0],h=(p-c.height)*l[1];if(u>0||d>0||m||h){var g;i.push({id:o,type:`position`,position:{x:a.position.x-u+m,y:a.position.y-d+h}}),(g=n.get(o))==null||g.forEach(t=>{e.some(e=>e.id===t.id)||i.push({id:t.id,type:`position`,position:{x:t.position.x+u,y:t.position.y+d}})})}(c.width<t.width||c.height<t.height||u||d)&&i.push({id:o,type:`dimensions`,setAttributes:!0,dimensions:{width:f+(u?l[0]*u-m:0),height:p+(d?l[1]*d-h:0)}})}),i}function Ec(e,t,n,r,i,a,o){let s=r==null?void 0:r.querySelector(`.xyflow__viewport`),c=!1;if(!s)return{changes:[],updatedInternals:c};let l=[],u=window.getComputedStyle(s),{m22:d}=new window.DOMMatrixReadOnly(u.transform),f=[];for(let r of e.values()){let e=t.get(r.id);if(!e)continue;if(e.hidden){t.set(e.id,{...e,internals:{...e.internals,handleBounds:void 0}}),c=!0;continue}let s=Fs(r.nodeElement),u=e.measured.width!==s.width||e.measured.height!==s.height;if(s.width&&s.height&&(u||!e.internals.handleBounds||r.force)){let p=r.nodeElement.getBoundingClientRect(),m=ws(e.extent)?e.extent:a,{positionAbsolute:h}=e.internals;if(e.parentId&&e.extent===`parent`){let n=t.get(e.parentId);n&&(h=ns(h,s,n))}else m&&(h=ts(h,m,s));let g={...e,measured:s,internals:{...e.internals,positionAbsolute:h,handleBounds:{source:Vs(`source`,r.nodeElement,p,d,e.id),target:Vs(`target`,r.nodeElement,p,d,e.id)}}};t.set(e.id,g),e.parentId&&Sc(g,t,n,{nodeOrigin:i,zIndexMode:o}),c=!0,u&&(l.push({id:e.id,type:`dimensions`,dimensions:s}),e.expandParent&&e.parentId&&f.push({id:e.id,parentId:e.parentId,rect:cs(g,i)}))}}if(f.length>0){let e=Tc(f,t,n,i);l.push(...e)}return{changes:l,updatedInternals:c}}async function Dc({delta:e,panZoom:t,transform:n,translateExtent:r,width:i,height:a}){if(!t||!e.x&&!e.y)return!1;let o=await t.setViewportConstrained({x:n[0]+e.x,y:n[1]+e.y,zoom:n[2]},[[0,0],[i,a]],r);return!!o&&(o.x!==n[0]||o.y!==n[1]||o.k!==n[2])}function Oc(e,t,n,r,i,a){let o=i,s=r.get(o)||new Map;r.set(o,s.set(n,t)),o=`${i}-${e}`;let c=r.get(o)||new Map;if(r.set(o,c.set(n,t)),a){o=`${i}-${e}-${a}`;let s=r.get(o)||new Map;r.set(o,s.set(n,t))}}function kc(e,t,n){e.clear(),t.clear();for(let r of n){let{source:n,target:i,sourceHandle:a=null,targetHandle:o=null}=r,s={edgeId:r.id,source:n,target:i,sourceHandle:a,targetHandle:o},c=`${n}-${a}--${i}-${o}`;Oc(`source`,s,`${i}-${o}--${n}-${a}`,e,n,a),Oc(`target`,s,c,e,i,o),t.set(r.id,r)}}function Ac(e,t){if(!e.parentId)return!1;let n=t.get(e.parentId);return n?n.selected?!0:Ac(n,t):!1}function jc(e,t,n){let r=e;do{var i;if(r!=null&&(i=r.matches)!=null&&i.call(r,t))return!0;if(r===n)return!1;r=r==null?void 0:r.parentElement}while(r);return!1}function Mc(e,t,n,r){let i=new Map;for(let[a,o]of e)if((o.selected||o.id===r)&&(!o.parentId||!Ac(o,e))&&(o.draggable||t&&o.draggable===void 0)){let t=e.get(a);t&&i.set(a,{id:a,position:t.position||{x:0,y:0},distance:{x:n.x-t.internals.positionAbsolute.x,y:n.y-t.internals.positionAbsolute.y},extent:t.extent,parentId:t.parentId,origin:t.origin,expandParent:t.expandParent,internals:{positionAbsolute:t.internals.positionAbsolute||{x:0,y:0}},measured:{width:t.measured.width??0,height:t.measured.height??0}})}return i}function Nc({nodeId:e,dragItems:t,nodeLookup:n,dragging:r=!0}){var i,a;let o=[];for(let[e,i]of t){var s;let t=(s=n.get(e))==null?void 0:s.internals.userNode;t&&o.push({...t,position:i.position,dragging:r})}if(!e)return[o[0],o];let c=(i=n.get(e))==null?void 0:i.internals.userNode;return[c?{...c,position:((a=t.get(e))==null?void 0:a.position)||c.position,dragging:r}:o[0],o]}function Pc({dragItems:e,snapGrid:t,x:n,y:r}){let i=e.values().next().value;if(!i)return null;let a={x:n-i.distance.x,y:r-i.distance.y},o=gs(a,t);return{x:o.x-a.x,y:o.y-a.y}}function Fc({onNodeMouseDown:e,getStoreItems:t,onDragStart:n,onDrag:r,onDragStop:i}){let a={x:null,y:null},o=0,s=new Map,c=!1,l={x:0,y:0},u=null,d=!1,f=null,p=!1,m=!1,h=null;function g({noDragClassName:g,handleSelector:_,domNode:v,isSelectable:y,nodeId:b,nodeClickDistance:x=0}){f=Qn(v);function S({x:e,y:n}){let{nodeLookup:i,nodeExtent:o,snapGrid:c,snapToGrid:l,nodeOrigin:u,onNodeDrag:d,onSelectionDrag:f,onError:p,updateNodePositions:g}=t();a={x:e,y:n};let _=!1,v=s.size>1,y=v&&o?os(qo(s)):null,x=v&&l?Pc({dragItems:s,snapGrid:c,x:e,y:n}):null;for(let[t,r]of s){if(!i.has(t))continue;let a={x:e-r.distance.x,y:n-r.distance.y};l&&(a=x?{x:Math.round(a.x+x.x),y:Math.round(a.y+x.y)}:gs(a,c));let s=null;if(v&&o&&!r.extent&&y){let{positionAbsolute:e}=r.internals,t=e.x-y.x+o[0][0],n=e.x+r.measured.width-y.x2+o[1][0],i=e.y-y.y+o[0][1],a=e.y+r.measured.height-y.y2+o[1][1];s=[[t,i],[n,a]]}let{position:d,positionAbsolute:f}=Qo({nodeId:t,nextPosition:a,nodeLookup:i,nodeExtent:s||o,nodeOrigin:u,onError:p});_=_||r.position.x!==d.x||r.position.y!==d.y,r.position=d,r.internals.positionAbsolute=f}if(m||=_,_&&(g(s,!0),h&&(r||d||!b&&f))){let[e,t]=Nc({nodeId:b,dragItems:s,nodeLookup:i});r==null||r(h,s,e,t),d==null||d(h,e,t),b||f==null||f(h,t)}}async function C(){if(!u)return;let{transform:e,panBy:n,autoPanSpeed:r,autoPanOnNodeDrag:i}=t();if(!i){c=!1,cancelAnimationFrame(o);return}let[s,d]=is(l,u,r);(s!==0||d!==0)&&(a.x=(a.x??0)-s/e[2],a.y=(a.y??0)-d/e[2],await n({x:s,y:d})&&S(a)),o=requestAnimationFrame(C)}function w(r){let{nodeLookup:i,multiSelectionActive:o,nodesDraggable:c,transform:l,snapGrid:f,snapToGrid:p,selectNodesOnDrag:m,onNodeDragStart:h,onSelectionDragStart:g,unselectNodesAndEdges:_}=t();if(d=!0,(!m||!y)&&!o&&b){var v;(v=i.get(b))!=null&&v.selected||_()}y&&m&&b&&(e==null||e(b));let x=Ps(r.sourceEvent,{transform:l,snapGrid:f,snapToGrid:p,containerBounds:u});if(a=x,s=Mc(i,c,x,b),s.size>0&&(n||h||!b&&g)){let[e,t]=Nc({nodeId:b,dragItems:s,nodeLookup:i});n==null||n(r.sourceEvent,s,e,t),h==null||h(r.sourceEvent,e,t),b||g==null||g(r.sourceEvent,t)}}let T=pr().clickDistance(x).on(`start`,e=>{let{domNode:n,nodeDragThreshold:r,transform:i,snapGrid:o,snapToGrid:s}=t();u=(n==null?void 0:n.getBoundingClientRect())||null,p=!1,m=!1,h=e.sourceEvent,r===0&&w(e),a=Ps(e.sourceEvent,{transform:i,snapGrid:o,snapToGrid:s,containerBounds:u}),l=Bs(e.sourceEvent,u)}).on(`drag`,e=>{let{autoPanOnNodeDrag:n,transform:r,snapGrid:i,snapToGrid:o,nodeDragThreshold:f,nodeLookup:m}=t(),g=Ps(e.sourceEvent,{transform:r,snapGrid:i,snapToGrid:o,containerBounds:u});if(h=e.sourceEvent,(e.sourceEvent.type===`touchmove`&&e.sourceEvent.touches.length>1||b&&!m.has(b))&&(p=!0),!p){if(!c&&n&&d&&(c=!0,C()),!d){let t=Bs(e.sourceEvent,u),n=t.x-l.x,r=t.y-l.y;Math.sqrt(n*n+r*r)>f&&w(e)}(a.x!==g.xSnapped||a.y!==g.ySnapped)&&s&&d&&(l=Bs(e.sourceEvent,u),S(g))}}).on(`end`,e=>{if(!d||p){p&&s.size>0&&t().updateNodePositions(s,!1);return}if(c=!1,d=!1,cancelAnimationFrame(o),s.size>0){let{nodeLookup:n,updateNodePositions:r,onNodeDragStop:a,onSelectionDragStop:o}=t();if(m&&=(r(s,!1),!1),i||a||!b&&o){let[t,r]=Nc({nodeId:b,dragItems:s,nodeLookup:n,dragging:!1});i==null||i(e.sourceEvent,s,t,r),a==null||a(e.sourceEvent,t,r),b||o==null||o(e.sourceEvent,r)}}}).filter(e=>{let t=e.target;return!e.button&&(!g||!jc(t,`.${g}`,v))&&(!_||jc(t,_,v))});f.call(T)}function _(){f==null||f.on(`.drag`,null)}return{update:g,destroy:_}}function Ic(e,t,n){let r=[],i={x:e.x-n,y:e.y-n,width:n*2,height:n*2};for(let e of t.values())fs(i,cs(e))>0&&r.push(e);return r}var Lc=250;function Rc(e,t,n,r){let i=[],a=1/0,o=Ic(e,n,t+Lc);for(let n of o){var s,c;let o=[...((s=n.internals.handleBounds)==null?void 0:s.source)??[],...((c=n.internals.handleBounds)==null?void 0:c.target)??[]];for(let s of o){if(r.nodeId===s.nodeId&&r.type===s.type&&r.id===s.id)continue;let{x:o,y:c}=cc(n,s,s.position,!0),l=Math.sqrt((o-e.x)**2+(c-e.y)**2);l>t||(l<a?(i=[{...s,x:o,y:c}],a=l):l===a&&i.push({...s,x:o,y:c}))}}if(!i.length)return null;if(i.length>1){let e=r.type===`source`?`target`:`source`;return i.find(t=>t.type===e)??i[0]}return i[0]}function zc(e,t,n,r,i,a=!1){var o,s,c;let l=r.get(e);if(!l)return null;let u=i===`strict`?(o=l.internals.handleBounds)==null?void 0:o[t]:[...((s=l.internals.handleBounds)==null?void 0:s.source)??[],...((c=l.internals.handleBounds)==null?void 0:c.target)??[]],d=(n?u==null?void 0:u.find(e=>e.id===n):u==null?void 0:u[0])??null;return d&&a?{...d,...cc(l,d,d.position,!0)}:d}function Bc(e,t){return e||(t!=null&&t.classList.contains(`target`)?`target`:t!=null&&t.classList.contains(`source`)?`source`:null)}function Vc(e,t){let n=null;return t?n=!0:e&&!t&&(n=!1),n}var Hc=()=>!0;function Uc(e,{connectionMode:t,connectionRadius:n,handleId:r,nodeId:i,edgeUpdaterType:a,isTarget:o,domNode:s,nodeLookup:c,lib:l,autoPanOnConnect:u,flowId:d,panBy:f,cancelConnection:p,onConnectStart:m,onConnect:h,onConnectEnd:g,isValidConnection:_=Hc,onReconnectEnd:v,updateConnection:y,getTransform:b,getFromHandle:x,autoPanSpeed:S,dragThreshold:C=1,handleDomNode:w}){let T=Is(e.target),E=0,D,{x:O,y:k}=Bs(e),A=Bc(a,w),j=s==null?void 0:s.getBoundingClientRect(),M=!1;if(!j||!A)return;let N=zc(i,A,r,c,t);if(!N)return;let P=Bs(e,j),F=!1,I=null,L=!1,ee=null;function R(){if(!u||!j)return;let[e,t]=is(P,j,S);f({x:e,y:t}),E=requestAnimationFrame(R)}let z={...N,nodeId:i,type:A,position:N.position},te=c.get(i),B={inProgress:!0,isValid:null,from:cc(te,z,Y.Left,!0),fromHandle:z,fromPosition:z.position,fromNode:te,to:P,toHandle:null,toPosition:Vo[z.position],toNode:null,pointer:P};function V(){M=!0,y(B),m==null||m(e,{nodeId:i,handleId:r,handleType:A})}C===0&&V();function H(e){if(!M){let{x:t,y:n}=Bs(e),r=t-O,i=n-k;if(!(r*r+i*i>C*C))return;V()}if(!x()||!z){U(e);return}let a=b();P=Bs(e,j),D=Rc(_s(P,a,!1,[1,1]),n,c,z),F||=(R(),!0);let s=Wc(e,{handle:D,connectionMode:t,fromNodeId:i,fromHandleId:r,fromType:o?`target`:`source`,isValidConnection:_,doc:T,lib:l,flowId:d,nodeLookup:c});ee=s.handleDomNode,I=s.connection,L=Vc(!!D,s.isValid);let u=c.get(i),f=u?cc(u,z,Y.Left,!0):B.from,p={...B,from:f,isValid:L,to:s.toHandle&&L?vs({x:s.toHandle.x,y:s.toHandle.y},a):P,toHandle:s.toHandle,toPosition:L&&s.toHandle?s.toHandle.position:Vo[z.position],toNode:s.toHandle?c.get(s.toHandle.nodeId):null,pointer:P};y(p),B=p}function U(e){if(!(`touches`in e&&e.touches.length>0)){if(M){(D||ee)&&I&&L&&(h==null||h(I));let{inProgress:t,...n}=B,r={...n,toPosition:B.toHandle?B.toPosition:null};g==null||g(e,r),a&&(v==null||v(e,r))}p(),cancelAnimationFrame(E),F=!1,L=!1,I=null,ee=null,T.removeEventListener(`mousemove`,H),T.removeEventListener(`mouseup`,U),T.removeEventListener(`touchmove`,H),T.removeEventListener(`touchend`,U)}}T.addEventListener(`mousemove`,H),T.addEventListener(`mouseup`,U),T.addEventListener(`touchmove`,H),T.addEventListener(`touchend`,U)}function Wc(e,{handle:t,connectionMode:n,fromNodeId:r,fromHandleId:i,fromType:a,doc:o,lib:s,flowId:c,isValidConnection:l=Hc,nodeLookup:u}){let d=a===`target`,f=t?o.querySelector(`.${s}-flow__handle[data-id="${c}-${t==null?void 0:t.nodeId}-${t==null?void 0:t.id}-${t==null?void 0:t.type}"]`):null,{x:p,y:m}=Bs(e),h=o.elementFromPoint(p,m),g=h!=null&&h.classList.contains(`${s}-flow__handle`)?h:f,_={handleDomNode:g,isValid:!1,connection:null,toHandle:null};if(g){let e=Bc(void 0,g),t=g.getAttribute(`data-nodeid`),a=g.getAttribute(`data-handleid`),o=g.classList.contains(`connectable`),s=g.classList.contains(`connectableend`);if(!t||!e)return _;let c={source:d?t:r,sourceHandle:d?a:i,target:d?r:t,targetHandle:d?i:a};_.connection=c,_.isValid=o&&s&&(n===Fo.Strict?d&&e===`source`||!d&&e===`target`:t!==r||a!==i)&&l(c),_.toHandle=zc(t,e,a,u,n,!0)}return _}var Gc={onPointerDown:Uc,isValid:Wc};function Kc({domNode:e,panZoom:t,getTransform:n,getViewScale:r}){let i=Qn(e);function a({translateExtent:e,width:a,height:o,zoomStep:s=1,pannable:c=!0,zoomable:l=!0,inversePan:u=!1}){let d=e=>{if(e.sourceEvent.type!==`wheel`||!t)return;let r=n(),i=e.sourceEvent.ctrlKey&&Cs()?10:1,a=-e.sourceEvent.deltaY*(e.sourceEvent.deltaMode===1?.05:e.sourceEvent.deltaMode?1:.002)*s,o=r[2]*2**(a*i);t.scaleTo(o)},f=[0,0],p=Ao().on(`start`,e=>{(e.sourceEvent.type===`mousedown`||e.sourceEvent.type===`touchstart`)&&(f=[e.sourceEvent.clientX??e.sourceEvent.touches[0].clientX,e.sourceEvent.clientY??e.sourceEvent.touches[0].clientY])}).on(`zoom`,c?i=>{let s=n();if(i.sourceEvent.type!==`mousemove`&&i.sourceEvent.type!==`touchmove`||!t)return;let c=[i.sourceEvent.clientX??i.sourceEvent.touches[0].clientX,i.sourceEvent.clientY??i.sourceEvent.touches[0].clientY],l=[c[0]-f[0],c[1]-f[1]];f=c;let d=r()*Math.max(s[2],Math.log(s[2]))*(u?-1:1),p={x:s[0]-l[0]*d,y:s[1]-l[1]*d},m=[[0,0],[a,o]];t.setViewportConstrained({x:p.x,y:p.y,zoom:s[2]},m,e)}:null).on(`zoom.wheel`,l?d:null);i.call(p,{})}function o(){i.on(`zoom`,null)}return{update:a,destroy:o,pointer:er}}var qc=e=>({x:e.x,y:e.y,zoom:e.k}),Jc=({x:e,y:t,zoom:n})=>bo.translate(e,t).scale(n),Yc=(e,t)=>e.target.closest(`.${t}`),Xc=(e,t)=>t===2&&Array.isArray(e)&&e.includes(2),Zc=e=>((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2,Qc=(e,t=0,n=Zc,r=()=>{})=>{let i=typeof t==`number`&&t>0;return i||r(),i?e.transition().duration(t).ease(n).on(`end`,r):e},$c=e=>{let t=e.ctrlKey&&Cs()?10:1;return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*t};function el({zoomPanValues:e,noWheelClassName:t,d3Selection:n,d3Zoom:r,panOnScrollMode:i,panOnScrollSpeed:a,zoomOnPinch:o,onPanZoomStart:s,onPanZoom:c,onPanZoomEnd:l}){return u=>{if(Yc(u,t))return u.ctrlKey&&u.preventDefault(),!1;u.preventDefault(),u.stopImmediatePropagation();let d=n.property(`__zoom`).k||1;if(u.ctrlKey&&o){let e=er(u),t=d*2**$c(u);r.scaleTo(n,t,e,u);return}let f=u.deltaMode===1?20:1,p=i===Io.Vertical?0:u.deltaX*f,m=i===Io.Horizontal?0:u.deltaY*f;!Cs()&&u.shiftKey&&i!==Io.Vertical&&(p=u.deltaY*f,m=0),r.translateBy(n,-(p/d)*a,-(m/d)*a,{internal:!0});let h=qc(n.property(`__zoom`));clearTimeout(e.panScrollTimeout),e.isPanScrolling?c==null||c(u,h):(e.isPanScrolling=!0,s==null||s(u,h)),e.panScrollTimeout=setTimeout(()=>{l==null||l(u,h),e.isPanScrolling=!1},150)}}function tl({noWheelClassName:e,preventScrolling:t,d3ZoomHandler:n}){return function(r,i){let a=r.type===`wheel`,o=!t&&a&&!r.ctrlKey,s=Yc(r,e);if(r.ctrlKey&&a&&s&&r.preventDefault(),o||s)return null;r.preventDefault(),n.call(this,r,i)}}function nl({zoomPanValues:e,onDraggingChange:t,onPanZoomStart:n}){return r=>{var i,a,o;if((i=r.sourceEvent)!=null&&i.internal)return;let s=qc(r.transform);e.mouseButton=((a=r.sourceEvent)==null?void 0:a.button)||0,e.isZoomingOrPanning=!0,e.prevViewport=s,((o=r.sourceEvent)==null?void 0:o.type)===`mousedown`&&t(!0),n&&(n==null||n(r.sourceEvent,s))}}function rl({zoomPanValues:e,panOnDrag:t,onPaneContextMenu:n,onTransformChange:r,onPanZoom:i}){return a=>{var o,s;e.usedRightMouseButton=!!(n&&Xc(t,e.mouseButton??0)),(o=a.sourceEvent)!=null&&o.sync||r([a.transform.x,a.transform.y,a.transform.k]),i&&!((s=a.sourceEvent)!=null&&s.internal)&&(i==null||i(a.sourceEvent,qc(a.transform)))}}function il({zoomPanValues:e,panOnDrag:t,panOnScroll:n,onDraggingChange:r,onPanZoomEnd:i,onPaneContextMenu:a}){return o=>{var s;if(!((s=o.sourceEvent)!=null&&s.internal)&&(e.isZoomingOrPanning=!1,a&&Xc(t,e.mouseButton??0)&&!e.usedRightMouseButton&&o.sourceEvent&&a(o.sourceEvent),e.usedRightMouseButton=!1,r(!1),i)){let t=qc(o.transform);e.prevViewport=t,clearTimeout(e.timerId),e.timerId=setTimeout(()=>{i==null||i(o.sourceEvent,t)},n?150:0)}}}function al({panActivationKeyPressed:e,zoomActivationKeyPressed:t,zoomOnScroll:n,zoomOnPinch:r,panOnDrag:i,panOnScroll:a,zoomOnDoubleClick:o,userSelectionActive:s,noWheelClassName:c,noPanClassName:l,lib:u,connectionInProgress:d}){return f=>{var p;let m=t||n,h=r&&f.ctrlKey,g=f.type===`wheel`;if(f.button===1&&f.type===`mousedown`&&(Yc(f,`${u}-flow__node`)||Yc(f,`${u}-flow__edge`)||Yc(f,`${u}-flow__selection`)||Yc(f,`${u}-flow__nodesselection`)))return!0;if(!i&&!m&&!a&&!o&&!r||s||d&&!g||Yc(f,c)&&g||Yc(f,l)&&(!g||a&&g&&!t)||!r&&f.ctrlKey&&g)return!1;if(!r&&f.type===`touchstart`&&((p=f.touches)==null?void 0:p.length)>1)return f.preventDefault(),!1;if(!m&&!a&&!h&&g||!i&&(f.type===`mousedown`||f.type===`touchstart`)||Array.isArray(i)&&!i.includes(f.button)&&f.type===`mousedown`)return!1;let _=Array.isArray(i)&&i.includes(f.button)||!f.button||f.button<=1;return(!f.ctrlKey||g||e)&&_}}function ol({domNode:e,minZoom:t,maxZoom:n,translateExtent:r,viewport:i,onPanZoom:a,onPanZoomStart:o,onPanZoomEnd:s,onDraggingChange:c}){let l={isZoomingOrPanning:!1,usedRightMouseButton:!1,prevViewport:{},mouseButton:0,timerId:void 0,panScrollTimeout:void 0,isPanScrolling:!1},u=e.getBoundingClientRect(),d=[[0,0],[u.width,u.height]],f=typeof ResizeObserver<`u`?new ResizeObserver(e=>{let t=e[0];t&&(d=[[0,0],[t.contentRect.width,t.contentRect.height]])}):null;f==null||f.observe(e);let p=Ao().extent(()=>d).scaleExtent([t,n]).translateExtent(r),m=Qn(e).call(p);b({x:i.x,y:i.y,zoom:es(i.zoom,t,n)},[[0,0],[u.width,u.height]],r);let h=m.on(`wheel.zoom`),g=m.on(`dblclick.zoom`);p.wheelDelta($c);async function _(e,t){return m?new Promise(n=>{p==null||p.interpolate((t==null?void 0:t.interpolate)===`linear`?gi:Ai).transform(Qc(m,t==null?void 0:t.duration,t==null?void 0:t.ease,()=>n(!0)),e)}):!1}function v({noWheelClassName:e,noPanClassName:t,onPaneContextMenu:n,userSelectionActive:r,panOnScroll:i,panOnDrag:u,panOnScrollMode:d,panOnScrollSpeed:f,preventScrolling:_,zoomOnPinch:v,zoomOnScroll:b,zoomOnDoubleClick:x,panActivationKeyPressed:S=!1,zoomActivationKeyPressed:C,lib:w,onTransformChange:T,connectionInProgress:E,paneClickDistance:D,selectionOnDrag:O}){r&&!l.isZoomingOrPanning&&y();let k=i&&!C&&!r;p.clickDistance(O?1/0:!ms(D)||D<0?0:D);let A=k?el({zoomPanValues:l,noWheelClassName:e,d3Selection:m,d3Zoom:p,panOnScrollMode:d,panOnScrollSpeed:f,zoomOnPinch:v,onPanZoomStart:o,onPanZoom:a,onPanZoomEnd:s}):tl({noWheelClassName:e,preventScrolling:_,d3ZoomHandler:h});m.on(`wheel.zoom`,A,{passive:!1});let j=nl({zoomPanValues:l,onDraggingChange:c,onPanZoomStart:o});p.on(`start`,j);let M=rl({zoomPanValues:l,panOnDrag:u,onPaneContextMenu:!!n,onPanZoom:a,onTransformChange:T});p.on(`zoom`,M);let N=il({zoomPanValues:l,panOnDrag:u,panOnScroll:i,onPaneContextMenu:n,onPanZoomEnd:s,onDraggingChange:c});p.on(`end`,N);let P=al({panActivationKeyPressed:S,zoomActivationKeyPressed:C,panOnDrag:u,zoomOnScroll:b,panOnScroll:i,zoomOnDoubleClick:x,zoomOnPinch:v,userSelectionActive:r,noPanClassName:t,noWheelClassName:e,lib:w,connectionInProgress:E});p.filter(P),x?m.on(`dblclick.zoom`,g):m.on(`dblclick.zoom`,null)}function y(){p.on(`zoom`,null)}async function b(e,t,n){let r=Jc(e),i=p==null?void 0:p.constrain()(r,t,n);return i&&await _(i),i}async function x(e,t){let n=Jc(e);return await _(n,t),n}function S(e){if(m){let t=Jc(e),n=m.property(`__zoom`);(n.k!==e.zoom||n.x!==e.x||n.y!==e.y)&&(p==null||p.transform(m,t,null,{sync:!0}))}}function C(){let e=m?xo(m.node()):{x:0,y:0,k:1};return{x:e.x,y:e.y,zoom:e.k}}async function w(e,t){return m?new Promise(n=>{p==null||p.interpolate((t==null?void 0:t.interpolate)===`linear`?gi:Ai).scaleTo(Qc(m,t==null?void 0:t.duration,t==null?void 0:t.ease,()=>n(!0)),e)}):!1}async function T(e,t){return m?new Promise(n=>{p==null||p.interpolate((t==null?void 0:t.interpolate)===`linear`?gi:Ai).scaleBy(Qc(m,t==null?void 0:t.duration,t==null?void 0:t.ease,()=>n(!0)),e)}):!1}function E(e){p==null||p.scaleExtent(e)}function D(e){p==null||p.translateExtent(e)}function O(e){let t=!ms(e)||e<0?0:e;p==null||p.clickDistance(t)}return{update:v,destroy:y,setViewport:x,setViewportConstrained:b,getViewport:C,scaleTo:w,scaleBy:T,setScaleExtent:E,setTranslateExtent:D,syncViewport:S,setClickDistance:O}}var sl;(function(e){e.Line=`line`,e.Handle=`handle`})(sl||={});var cl=[`top-left`,`top-right`,`bottom-left`,`bottom-right`],ll=[`top`,`right`,`bottom`,`left`];function ul({width:e,prevWidth:t,height:n,prevHeight:r,affectsX:i,affectsY:a}){let o=e-t,s=n-r,c=[o>0?1:o<0?-1:0,s>0?1:s<0?-1:0];return o&&i&&(c[0]*=-1),s&&a&&(c[1]*=-1),c}function dl(e){return{isHorizontal:e.includes(`right`)||e.includes(`left`),isVertical:e.includes(`bottom`)||e.includes(`top`),affectsX:e.includes(`left`),affectsY:e.includes(`top`)}}function fl(e,t){return Math.max(0,t-e)}function pl(e,t){return Math.max(0,e-t)}function ml(e,t,n){return Math.max(0,t-e,e-n)}function hl(e,t){return e?!t:t}function gl(e,t,n,r,i,a,o,s){let{affectsX:c,affectsY:l}=t,{isHorizontal:u,isVertical:d}=t,f=u&&d,{xSnapped:p,ySnapped:m}=n,{minWidth:h,maxWidth:g,minHeight:_,maxHeight:v}=r,{x:y,y:b,width:x,height:S,aspectRatio:C}=e,w=Math.floor(u?p-e.pointerX:0),T=Math.floor(d?m-e.pointerY:0),E=x+(c?-w:w),D=S+(l?-T:T),O=-a[0]*x,k=-a[1]*S,A=ml(E,h,g),j=ml(D,_,v);if(o){let e=0,t=0;c&&w<0?e=fl(y+w+O,o[0][0]):!c&&w>0&&(e=pl(y+E+O,o[1][0])),l&&T<0?t=fl(b+T+k,o[0][1]):!l&&T>0&&(t=pl(b+D+k,o[1][1])),A=Math.max(A,e),j=Math.max(j,t)}if(s){let e=0,t=0;c&&w>0?e=pl(y+w,s[0][0]):!c&&w<0&&(e=fl(y+E,s[1][0])),l&&T>0?t=pl(b+T,s[0][1]):!l&&T<0&&(t=fl(b+D,s[1][1])),A=Math.max(A,e),j=Math.max(j,t)}if(i){if(u){let e=ml(E/C,_,v)*C;if(A=Math.max(A,e),o){let e=0;e=!c&&!l||c&&!l&&f?pl(b+k+E/C,o[1][1])*C:fl(b+k+(c?w:-w)/C,o[0][1])*C,A=Math.max(A,e)}if(s){let e=0;e=!c&&!l||c&&!l&&f?fl(b+E/C,s[1][1])*C:pl(b+(c?w:-w)/C,s[0][1])*C,A=Math.max(A,e)}}if(d){let e=ml(D*C,h,g)/C;if(j=Math.max(j,e),o){let e=0;e=!c&&!l||l&&!c&&f?pl(y+D*C+O,o[1][0])/C:fl(y+(l?T:-T)*C+O,o[0][0])/C,j=Math.max(j,e)}if(s){let e=0;e=!c&&!l||l&&!c&&f?fl(y+D*C,s[1][0])/C:pl(y+(l?T:-T)*C,s[0][0])/C,j=Math.max(j,e)}}}T+=T<0?j:-j,w+=w<0?A:-A,i&&(f?E>D*C?T=(hl(c,l)?-w:w)/C:w=(hl(c,l)?-T:T)*C:u?(T=w/C,l=c):(w=T*C,c=l));let M=c?y+w:y,N=l?b+T:b;return{width:x+(c?-w:w),height:S+(l?-T:T),x:a[0]*w*(c?-1:1)+M,y:a[1]*T*(l?-1:1)+N}}var _l={width:0,height:0,x:0,y:0},vl={..._l,pointerX:0,pointerY:0,aspectRatio:1};function yl(e,t,n){let r=t.position.x+e.position.x,i=t.position.y+e.position.y,a=e.measured.width??0,o=e.measured.height??0,s=n[0]*a,c=n[1]*o;return[[r-s,i-c],[r+a-s,i+o-c]]}function bl({domNode:e,nodeId:t,getStoreItems:n,onChange:r,onEnd:i}){let a=Qn(e),o={controlDirection:dl(`bottom-right`),boundaries:{minWidth:0,minHeight:0,maxWidth:Number.MAX_VALUE,maxHeight:Number.MAX_VALUE},resizeDirection:void 0,keepAspectRatio:!1};function s({controlPosition:e,boundaries:s,keepAspectRatio:c,resizeDirection:l,onResizeStart:u,onResize:d,onResizeEnd:f,shouldResize:p}){let m={..._l},h={...vl};o={boundaries:s,resizeDirection:l,keepAspectRatio:c,controlDirection:dl(e)};let g,_=null,v=[],y,b,x,S=pr().on(`start`,e=>{let{nodeLookup:r,transform:i,snapGrid:a,snapToGrid:o,nodeOrigin:s,paneDomNode:c}=n();if(g=r.get(t),!g)return;_=(c==null?void 0:c.getBoundingClientRect())??null;let{xSnapped:l,ySnapped:d}=Ps(e.sourceEvent,{transform:i,snapGrid:a,snapToGrid:o,containerBounds:_});m={width:g.measured.width??0,height:g.measured.height??0,x:g.position.x??0,y:g.position.y??0},h={...m,pointerX:l,pointerY:d,aspectRatio:m.width/m.height},y=void 0,b=ws(g.extent)?g.extent:void 0,g.parentId&&(g.extent===`parent`||g.expandParent)&&(y=r.get(g.parentId)),y&&g.extent===`parent`&&(b=[[0,0],[y.measured.width,y.measured.height]]),v=[],x=void 0;for(let[e,n]of r)if(n.parentId===t&&(v.push({id:e,position:{...n.position},extent:n.extent}),n.extent===`parent`||n.expandParent)){let e=yl(n,g,n.origin??s);x=x?[[Math.min(e[0][0],x[0][0]),Math.min(e[0][1],x[0][1])],[Math.max(e[1][0],x[1][0]),Math.max(e[1][1],x[1][1])]]:e}u==null||u(e,{...m})}).on(`drag`,e=>{let{transform:t,snapGrid:i,snapToGrid:a,nodeOrigin:s}=n(),c=Ps(e.sourceEvent,{transform:t,snapGrid:i,snapToGrid:a,containerBounds:_}),l=[];if(!g)return;let{x:u,y:f,width:S,height:C}=m,w={},T=g.origin??s,{width:E,height:D,x:O,y:k}=gl(h,o.controlDirection,c,o.boundaries,o.keepAspectRatio,T,b,x),A=E!==S,j=D!==C,M=O!==u&&A,N=k!==f&&j;if(!M&&!N&&!A&&!j)return;let P={prevValues:{...m},startX:h.x,startY:h.y,childNodes:v.map(e=>({...e,position:{...e.position}}))};if((M||N||T[0]===1||T[1]===1)&&(w.x=M?O:m.x,w.y=N?k:m.y,m.x=w.x,m.y=w.y,v.length>0)){let e=O-u,t=k-f;for(let n of v)n.position={x:n.position.x-e+T[0]*(E-S),y:n.position.y-t+T[1]*(D-C)},l.push(n)}if((A||j)&&(w.width=A&&(!o.resizeDirection||o.resizeDirection===`horizontal`)?E:m.width,w.height=j&&(!o.resizeDirection||o.resizeDirection===`vertical`)?D:m.height,m.width=w.width,m.height=w.height),y&&g.expandParent){let e=T[0]*(w.width??0);w.x&&w.x<e&&(m.x=e,h.x-=w.x-e);let t=T[1]*(w.height??0);w.y&&w.y<t&&(m.y=t,h.y-=w.y-t)}let F=ul({width:m.width,prevWidth:S,height:m.height,prevHeight:C,affectsX:o.controlDirection.affectsX,affectsY:o.controlDirection.affectsY}),I={...m,direction:F};if((p==null?void 0:p(e,I))===!1){m=P.prevValues,h.x=P.startX,h.y=P.startY,v.forEach((e,t)=>{e.position=P.childNodes[t].position});return}d==null||d(e,I),r(w,l)}).on(`end`,e=>{f==null||f(e,{...m}),i==null||i({...m})});a.call(S)}function c(){a.on(`.drag`,null)}return{update:s,destroy:c}}var xl=r((t=>{var n=(p(),e(y));function r(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var i=typeof Object.is==`function`?Object.is:r,a=n.useState,o=n.useEffect,s=n.useLayoutEffect,c=n.useDebugValue;function l(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),i=r[0].inst,l=r[1];return s(function(){i.value=n,i.getSnapshot=t,u(i)&&l({inst:i})},[e,n,t]),o(function(){return u(i)&&l({inst:i}),e(function(){u(i)&&l({inst:i})})},[e]),c(n),n}function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!i(e,n)}catch{return!0}}function d(e,t){return t()}var f=typeof window>`u`||window.document===void 0||window.document.createElement===void 0?d:l;t.useSyncExternalStore=n.useSyncExternalStore===void 0?f:n.useSyncExternalStore})),Sl=r(((e,t)=>{t.exports=xl()})),Cl=r((t=>{var n=(p(),e(y)),r=Sl();function i(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var a=typeof Object.is==`function`?Object.is:i,o=r.useSyncExternalStore,s=n.useRef,c=n.useEffect,l=n.useMemo,u=n.useDebugValue;t.useSyncExternalStoreWithSelector=function(e,t,n,r,i){var d=s(null);if(d.current===null){var f={hasValue:!1,value:null};d.current=f}else f=d.current;d=l(function(){function e(e){if(!o){if(o=!0,s=e,e=r(e),i!==void 0&&f.hasValue){var t=f.value;if(i(t,e))return c=t}return c=e}if(t=c,a(s,e))return t;var n=r(e);return i!==void 0&&i(t,n)?(s=e,t):(s=e,c=n)}var o=!1,s,c,l=n===void 0?null:n;return[function(){return e(t())},l===null?void 0:function(){return e(l())}]},[t,n,r,i]);var p=o(e,d[0],d[1]);return c(function(){f.hasValue=!0,f.value=p},[p]),u(p),p}})),wl=t(r(((e,t)=>{t.exports=Cl()}))(),1),Tl=e=>{let t,n=new Set,r=(e,r)=>{let i=typeof e==`function`?e(t):e;if(!Object.is(i,t)){let e=t;t=r??(typeof i!=`object`||!i)?i:Object.assign({},t,i),n.forEach(n=>n(t,e))}},i=()=>t,a={setState:r,getState:i,getInitialState:()=>o,subscribe:e=>(n.add(e),()=>n.delete(e)),destroy:()=>{n.clear()}},o=t=e(r,i,a);return a},El=e=>e?Tl(e):Tl,{useDebugValue:Dl}=k,{useSyncExternalStoreWithSelector:Ol}=wl.default,kl=e=>e;function Al(e,t=kl,n){let r=Ol(e.subscribe,e.getState,e.getServerState||e.getInitialState,t,n);return Dl(r),r}var jl=(e,t)=>{let n=El(e),r=(e,r=t)=>Al(n,e,r);return Object.assign(r,n),r},Ml=(e,t)=>e?jl(e,t):jl;function X(e,t){if(Object.is(e,t))return!0;if(typeof e!=`object`||!e||typeof t!=`object`||!t)return!1;if(e instanceof Map&&t instanceof Map){if(e.size!==t.size)return!1;for(let[n,r]of e)if(!Object.is(r,t.get(n)))return!1;return!0}if(e instanceof Set&&t instanceof Set){if(e.size!==t.size)return!1;for(let n of e)if(!t.has(n))return!1;return!0}let n=Object.keys(e);if(n.length!==Object.keys(t).length)return!1;for(let r of n)if(!Object.prototype.hasOwnProperty.call(t,r)||!Object.is(e[r],t[r]))return!1;return!0}p();var Nl=j(null),Pl=Nl.Provider,Fl=jo.error001(`react`);function Z(e,t){let n=o(Nl);if(n===null)throw Error(Fl);return Al(n,e,t)}function Q(){let e=o(Nl);if(e===null)throw Error(Fl);return _(()=>({getState:e.getState,setState:e.setState,subscribe:e.subscribe}),[e])}var Il={display:`none`},Ll={position:`absolute`,width:1,height:1,margin:-1,border:0,padding:0,overflow:`hidden`,clip:`rect(0px, 0px, 0px, 0px)`,clipPath:`inset(100%)`},Rl=`react-flow__node-desc`,zl=`react-flow__edge-desc`,Bl=`react-flow__aria-live`,Vl=e=>e.ariaLiveMessage,Hl=e=>e.ariaLabelConfig;function Ul({rfId:e}){let t=Z(Vl);return O(`div`,{id:`${Bl}-${e}`,"aria-live":`assertive`,"aria-atomic":`true`,style:Ll,children:t})}function Wl({rfId:e,disableKeyboardA11y:t}){let n=Z(Hl);return I(V,{children:[O(`div`,{id:`${Rl}-${e}`,style:Il,children:t?n[`node.a11yDescription.default`]:n[`node.a11yDescription.keyboardDisabled`]}),O(`div`,{id:`${zl}-${e}`,style:Il,children:n[`edge.a11yDescription.default`]}),!t&&O(Ul,{rfId:e})]})}var Gl=H(({position:e=`top-left`,children:t,className:n,style:r,...i},a)=>{let o=`${e}`.split(`-`);return O(`div`,{className:J([`react-flow__panel`,n,...o]),style:r,ref:a,...i,children:t})});Gl.displayName=`Panel`;var Kl=`https://reactflow.dev?utm_source=attribution`;function ql({proOptions:e,position:t=`bottom-right`}){return S(()=>{},[]),e!=null&&e.hideAttribution?null:O(Gl,{position:t,className:`react-flow__attribution`,"data-message":`Please only hide this attribution when you are subscribed to React Flow Pro: ${Kl}`,children:O(`a`,{href:Kl,target:`_blank`,rel:`noopener noreferrer`,"aria-label":`React Flow attribution`,children:`React Flow`})})}var Jl=e=>{let t=[],n=[];for(let[,n]of e.nodeLookup)n.selected&&t.push(n.internals.userNode);for(let[,t]of e.edgeLookup)t.selected&&n.push(t);return{selectedNodes:t,selectedEdges:n}},Yl=e=>e.id;function Xl(e,t){return X(e.selectedNodes.map(Yl),t.selectedNodes.map(Yl))&&X(e.selectedEdges.map(Yl),t.selectedEdges.map(Yl))}function Zl({onSelectionChange:e}){let t=Q(),{selectedNodes:n,selectedEdges:r}=Z(Jl,Xl);return S(()=>{let i={nodes:n,edges:r};e==null||e(i),t.getState().onSelectionChangeHandlers.forEach(e=>e(i))},[n,r,e]),null}var Ql=e=>!!e.onSelectionChangeHandlers;function $l({onSelectionChange:e}){let t=Z(Ql);return e||t?O(Zl,{onSelectionChange:e}):null}var eu=[0,0],tu={x:0,y:0,zoom:1},nu=[...`nodes.edges.defaultNodes.defaultEdges.onConnect.onConnectStart.onConnectEnd.onClickConnectStart.onClickConnectEnd.nodesDraggable.autoPanOnNodeFocus.nodesConnectable.nodesFocusable.edgesFocusable.edgesReconnectable.elevateNodesOnSelect.elevateEdgesOnSelect.minZoom.maxZoom.nodeExtent.onNodesChange.onEdgesChange.elementsSelectable.connectionMode.snapGrid.snapToGrid.translateExtent.connectOnClick.defaultEdgeOptions.fitView.fitViewOptions.onNodesDelete.onEdgesDelete.onDelete.onNodeDrag.onNodeDragStart.onNodeDragStop.onSelectionDrag.onSelectionDragStart.onSelectionDragStop.onMoveStart.onMove.onMoveEnd.noPanClassName.nodeOrigin.autoPanOnConnect.autoPanOnNodeDrag.onError.connectionRadius.isValidConnection.selectNodesOnDrag.nodeDragThreshold.connectionDragThreshold.onBeforeDelete.debug.autoPanSpeed.ariaLabelConfig.zIndexMode`.split(`.`),`rfId`],ru=e=>({setNodes:e.setNodes,setEdges:e.setEdges,setMinZoom:e.setMinZoom,setMaxZoom:e.setMaxZoom,setTranslateExtent:e.setTranslateExtent,setNodeExtent:e.setNodeExtent,reset:e.reset,setDefaultNodesAndEdges:e.setDefaultNodesAndEdges}),iu={translateExtent:Mo,nodeOrigin:eu,minZoom:.5,maxZoom:2,elementsSelectable:!0,noPanClassName:`nopan`,rfId:`1`};function au(e){let{setNodes:t,setEdges:n,setMinZoom:r,setMaxZoom:a,setTranslateExtent:o,setNodeExtent:s,reset:c,setDefaultNodesAndEdges:l}=Z(ru,X),u=Q();S(()=>(l(e.defaultNodes,e.defaultEdges),()=>{d.current=iu,c()}),[]);let d=i(iu);return S(()=>{for(let i of nu){let c=e[i];c!==d.current[i]&&e[i]!==void 0&&(i===`nodes`?t(c):i===`edges`?n(c):i===`minZoom`?r(c):i===`maxZoom`?a(c):i===`translateExtent`?o(c):i===`nodeExtent`?s(c):i===`ariaLabelConfig`?u.setState({ariaLabelConfig:As(c)}):i===`fitView`?u.setState({fitViewQueued:c}):i===`fitViewOptions`?u.setState({fitViewOptions:c}):u.setState({[i]:c}))}d.current=e},nu.map(t=>e[t])),null}function ou(){return typeof window>`u`||!window.matchMedia?null:window.matchMedia(`(prefers-color-scheme: dark)`)}function su(e){var t;let[n,r]=N(e===`system`?null:e);return S(()=>{if(e!==`system`){r(e);return}let t=ou(),n=()=>r(t!=null&&t.matches?`dark`:`light`);return n(),t==null||t.addEventListener(`change`,n),()=>{t==null||t.removeEventListener(`change`,n)}},[e]),n===null?(t=ou())!=null&&t.matches?`dark`:`light`:n}var cu=typeof document<`u`?document:null;function lu(e=null,t={target:cu,actInsideInputWithModifier:!0}){let[n,r]=N(!1),a=i(!1),o=i(new Set([])),[s,c]=_(()=>{if(e!==null){let t=(Array.isArray(e)?e:[e]).filter(e=>typeof e==`string`).map(e=>e.replace(/\+/g,`
2
2
  `).replace(`
3
3
 
4
4
  `,`
5
5
  +`).split(`
6
- `));return[t,t.reduce((e,t)=>e.concat(...t),[])]}return[[],[]]},[e]);return a(()=>{let n=(t==null?void 0:t.target)??cu,a=(t==null?void 0:t.actInsideInputWithModifier)??!0;if(e!==null){let e=e=>{if(i.current=e.ctrlKey||e.metaKey||e.shiftKey||e.altKey,(!i.current||i.current&&!a)&&Rs(e))return!1;let n=du(e.code,l);if(o.current.add(e[n]),uu(c,o.current,!1)){var s;let n=((s=e.composedPath)==null||(s=s.call(e))==null?void 0:s[0])||e.target,a=(n==null?void 0:n.nodeName)===`BUTTON`||(n==null?void 0:n.nodeName)===`A`;t.preventDefault!==!1&&(i.current||!a)&&e.preventDefault(),r(!0)}},s=e=>{let t=du(e.code,l);uu(c,o.current,!0)?(r(!1),o.current.clear()):o.current.delete(e[t]),e.key===`Meta`&&o.current.clear(),i.current=!1},u=()=>{o.current.clear(),r(!1)};return n==null||n.addEventListener(`keydown`,e),n==null||n.addEventListener(`keyup`,s),window.addEventListener(`blur`,u),window.addEventListener(`contextmenu`,u),()=>{n==null||n.removeEventListener(`keydown`,e),n==null||n.removeEventListener(`keyup`,s),window.removeEventListener(`blur`,u),window.removeEventListener(`contextmenu`,u)}}},[e,r]),n}function uu(e,t,n){return e.filter(e=>n||e.length===t.size).some(e=>e.every(e=>t.has(e)))}function du(e,t){return t.includes(e)?`code`:`key`}var fu=()=>{let e=Q();return s(()=>({zoomIn:async t=>{let{panZoom:n}=e.getState();return n?n.scaleBy(1.2,t):!1},zoomOut:async t=>{let{panZoom:n}=e.getState();return n?n.scaleBy(1/1.2,t):!1},zoomTo:async(t,n)=>{let{panZoom:r}=e.getState();return r?r.scaleTo(t,n):!1},getZoom:()=>e.getState().transform[2],setViewport:async(t,n)=>{let{transform:[r,i,a],panZoom:o}=e.getState();return o?(await o.setViewport({x:t.x??r,y:t.y??i,zoom:t.zoom??a},n),!0):!1},getViewport:()=>{let[t,n,r]=e.getState().transform;return{x:t,y:n,zoom:r}},setCenter:async(t,n,r)=>e.getState().setCenter(t,n,r),fitBounds:async(t,n)=>{let{width:r,height:i,minZoom:a,maxZoom:o,panZoom:s}=e.getState(),c=Ss(t,r,i,a,o,(n==null?void 0:n.padding)??.1);return s?(await s.setViewport(c,{duration:n==null?void 0:n.duration,ease:n==null?void 0:n.ease,interpolate:n==null?void 0:n.interpolate}),!0):!1},screenToFlowPosition:(t,n={})=>{let{transform:r,snapGrid:i,snapToGrid:a,domNode:o}=e.getState();if(!o)return t;let{x:s,y:c}=o.getBoundingClientRect(),l={x:t.x-s,y:t.y-c},u=n.snapGrid??i;return _s(l,r,n.snapToGrid??a,u)},flowToScreenPosition:t=>{let{transform:n,domNode:r}=e.getState();if(!r)return t;let{x:i,y:a}=r.getBoundingClientRect(),o=vs(t,n);return{x:o.x+i,y:o.y+a}}}),[])};function pu(e,t){let n=[],r=new Map,i=[];for(let t of e)if(t.type===`add`){i.push(t);continue}else if(t.type===`remove`||t.type===`replace`)r.set(t.id,[t]);else{let e=r.get(t.id);e?e.push(t):r.set(t.id,[t])}for(let e of t){let t=r.get(e.id);if(!t){n.push(e);continue}if(t[0].type===`remove`)continue;if(t[0].type===`replace`){n.push({...t[0].item});continue}let i={...e};for(let e of t)mu(e,i);n.push(i)}return i.length&&i.forEach(e=>{e.index===void 0?n.push({...e.item}):n.splice(e.index,0,{...e.item})}),n}function mu(e,t){switch(e.type){case`select`:t.selected=e.selected;break;case`position`:e.position!==void 0&&(t.position=e.position),e.dragging!==void 0&&(t.dragging=e.dragging);break;case`dimensions`:e.dimensions!==void 0&&(t.measured={...e.dimensions},e.setAttributes&&((e.setAttributes===!0||e.setAttributes===`width`)&&(t.width=e.dimensions.width),(e.setAttributes===!0||e.setAttributes===`height`)&&(t.height=e.dimensions.height))),typeof e.resizing==`boolean`&&(t.resizing=e.resizing)}}function hu(e,t){return pu(e,t)}function gu(e,t){return pu(e,t)}function _u(e,t){return{id:e,type:`select`,selected:t}}function vu(e,t=new Set,n=!1){let r=[];for(let[i,a]of e){let e=t.has(i);(a.selected!==void 0||e)&&a.selected!==e&&(n&&(a.selected=e),r.push(_u(a.id,e)))}return r}function yu({items:e=[],lookup:t}){let n=[],r=new Map(e.map(e=>[e.id,e]));for(let[r,a]of e.entries()){var i;let e=t.get(a.id),o=(e==null||(i=e.internals)==null?void 0:i.userNode)??e;o!==void 0&&o!==a&&n.push({id:a.id,item:a,type:`replace`}),o===void 0&&n.push({item:a,type:`add`,index:r})}for(let[e]of t)r.get(e)===void 0&&n.push({id:e,type:`remove`});return n}function bu(e){return{id:e.id,type:`remove`}}var xu=hs(`React Flow`,`https://reactflow.dev/`);function Su(e,t,n={}){return Zs(e,t,{...n,onError:n.onError??xu})}var Cu=e=>Uo(e),wu=e=>Ho(e);function Tu(e){return k(e)}var Eu=typeof window<`u`?x:a;function Du(e){let[t,n]=M(BigInt(0)),[r]=M(()=>Ou(()=>n(e=>e+BigInt(1))));return Eu(()=>{let t=r.get();t.length&&(e(t),r.reset())},[t]),r}function Ou(e){let t=[];return{get:()=>t,reset:()=>{t=[]},push:n=>{t.push(n),e()}}}var ku=L(null);function Au({children:e}){let t=Q(),n=Du(T(e=>{let{nodes:n=[],setNodes:r,hasDefaultNodes:i,onNodesChange:a,nodeLookup:o,fitViewQueued:s,onNodesChangeMiddlewareMap:c}=t.getState(),l=n;for(let t of e)l=typeof t==`function`?t(l):t;let u=yu({items:l,lookup:o});for(let e of c.values())u=e(u);i&&r(l),u.length>0?a==null||a(u):s&&window.requestAnimationFrame(()=>{let{fitViewQueued:e,nodes:n,setNodes:r}=t.getState();e&&r(n)})},[])),r=Du(T(e=>{let{edges:n=[],setEdges:r,hasDefaultEdges:i,onEdgesChange:a,edgeLookup:o}=t.getState(),s=n;for(let t of e)s=typeof t==`function`?t(s):t;i?r(s):a&&a(yu({items:s,lookup:o}))},[])),i=s(()=>({nodeQueue:n,edgeQueue:r}),[]);return I(ku.Provider,{value:i,children:e})}function ju(){let e=W(ku);if(!e)throw Error(`useBatchContext must be used within a BatchProvider`);return e}var Mu=e=>!!e.panZoom;function Nu(){let e=fu(),t=Q(),n=ju(),r=Z(Mu),i=s(()=>{let e=e=>t.getState().nodeLookup.get(e),r=e=>{n.nodeQueue.push(e)},i=e=>{n.edgeQueue.push(e)},a=e=>{var n,r;let{nodeLookup:i,nodeOrigin:a}=t.getState(),o=Cu(e)?e:i.get(e.id),s=o.parentId?Ds(o.position,o.measured,o.parentId,i,a):o.position;return cs({...o,position:s,width:((n=o.measured)==null?void 0:n.width)??o.width,height:((r=o.measured)==null?void 0:r.height)??o.height})},o=(e,t,n={replace:!1})=>{r(r=>r.map(r=>{if(r.id===e){let e=typeof t==`function`?t(r):t;return n.replace&&Cu(e)?e:{...r,...e}}return r}))},s=(e,t,n={replace:!1})=>{i(r=>r.map(r=>{if(r.id===e){let e=typeof t==`function`?t(r):t;return n.replace&&wu(e)?e:{...r,...e}}return r}))};return{getNodes:()=>t.getState().nodes.map(e=>({...e})),getNode:t=>{var n;return(n=e(t))==null?void 0:n.internals.userNode},getInternalNode:e,getEdges:()=>{let{edges:e=[]}=t.getState();return e.map(e=>({...e}))},getEdge:e=>t.getState().edgeLookup.get(e),setNodes:r,setEdges:i,addNodes:e=>{let t=Array.isArray(e)?e:[e];n.nodeQueue.push(e=>[...e,...t])},addEdges:e=>{let t=Array.isArray(e)?e:[e];n.edgeQueue.push(e=>[...e,...t])},toObject:()=>{let{nodes:e=[],edges:n=[],transform:r}=t.getState(),[i,a,o]=r;return{nodes:e.map(e=>({...e})),edges:n.map(e=>({...e})),viewport:{x:i,y:a,zoom:o}}},deleteElements:async({nodes:e=[],edges:n=[]})=>{let{nodes:r,edges:i,onNodesDelete:a,onEdgesDelete:o,triggerNodeChanges:s,triggerEdgeChanges:c,onDelete:l,onBeforeDelete:u}=t.getState(),{nodes:d,edges:f}=await $o({nodesToRemove:e,edgesToRemove:n,nodes:r,edges:i,onBeforeDelete:u}),p=f.length>0,m=d.length>0;if(p){let e=f.map(bu);o==null||o(f),c(e)}if(m){let e=d.map(bu);a==null||a(d),s(e)}return(m||p)&&(l==null||l({nodes:d,edges:f})),{deletedNodes:d,deletedEdges:f}},getIntersectingNodes:(e,n=!0,r)=>{let i=ps(e),o=i?e:a(e),s=r!==void 0;return o?(r||t.getState().nodes).filter(r=>{let a=t.getState().nodeLookup.get(r.id);if(a&&!i&&(r.id===e.id||!a.internals.positionAbsolute))return!1;let c=cs(s?r:a),l=fs(c,o);return n&&l>0||l>=c.width*c.height||l>=o.width*o.height}):[]},isNodeIntersecting:(e,t,n=!0)=>{let r=ps(e)?e:a(e);if(!r)return!1;let i=fs(r,t);return n&&i>0||i>=t.width*t.height||i>=r.width*r.height},updateNode:o,updateNodeData:(e,t,n={replace:!1})=>{o(e,e=>{let r=typeof t==`function`?t(e):t;return n.replace?{...e,data:r}:{...e,data:{...e.data,...r}}},n)},updateEdge:s,updateEdgeData:(e,t,n={replace:!1})=>{s(e,e=>{let r=typeof t==`function`?t(e):t;return n.replace?{...e,data:r}:{...e,data:{...e.data,...r}}},n)},getNodesBounds:e=>{let{nodeLookup:n,nodeOrigin:r}=t.getState();return Ko(e,{nodeLookup:n,nodeOrigin:r})},getHandleConnections:({type:e,id:n,nodeId:r})=>{var i;return Array.from(((i=t.getState().connectionLookup.get(`${r}-${e}${n?`-${n}`:``}`))==null?void 0:i.values())??[])},getNodeConnections:({type:e,handleId:n,nodeId:r})=>{var i;return Array.from(((i=t.getState().connectionLookup.get(`${r}${e?n?`-${e}-${n}`:`-${e}`:``}`))==null?void 0:i.values())??[])},fitView:async e=>{let r=t.getState().fitViewResolver??ks();return t.setState({fitViewQueued:!0,fitViewOptions:e,fitViewResolver:r}),n.nodeQueue.push(e=>[...e]),r.promise}}},[]);return s(()=>({...i,...e,viewportInitialized:r}),[r])}var Pu=e=>e.selected,Fu=typeof window<`u`?window:void 0;function Iu({deleteKeyCode:e,multiSelectionKeyCode:t}){let n=Q(),{deleteElements:r}=Nu(),i=lu(e,{actInsideInputWithModifier:!1}),o=lu(t,{target:Fu});a(()=>{if(i){let{edges:e,nodes:t}=n.getState();r({nodes:t.filter(Pu),edges:e.filter(Pu)}),n.setState({nodesSelectionActive:!1})}},[i]),a(()=>{n.setState({multiSelectionActive:o})},[o])}function Lu(e){let t=Q();a(()=>{let n=()=>{var n,r;if(!e.current||!(((n=(r=e.current).checkVisibility)==null?void 0:n.call(r))??!0))return!1;let i=Fs(e.current);if(i.height===0||i.width===0){var a,o;(a=(o=t.getState()).onError)==null||a.call(o,`004`,jo.error004())}t.setState({width:i.width||500,height:i.height||500})};if(e.current){n(),window.addEventListener(`resize`,n);let t=new ResizeObserver(()=>n());return t.observe(e.current),()=>{window.removeEventListener(`resize`,n),t&&e.current&&t.unobserve(e.current)}}},[])}var Ru={position:`absolute`,width:`100%`,height:`100%`,top:0,left:0},zu=e=>({userSelectionActive:e.userSelectionActive,lib:e.lib,connectionInProgress:e.connection.inProgress});function Bu({onPaneContextMenu:e,zoomOnScroll:t=!0,zoomOnPinch:n=!0,panOnScroll:r=!1,panActivationKeyPressed:i,panOnScrollSpeed:o=.5,panOnScrollMode:s=Io.Free,zoomOnDoubleClick:c=!0,panOnDrag:l=!0,defaultViewport:u,translateExtent:d,minZoom:f,maxZoom:p,zoomActivationKeyCode:m,preventScrolling:h=!0,children:g,noWheelClassName:_,noPanClassName:y,onViewportChange:b,isControlledViewport:x,paneClickDistance:S,selectionOnDrag:C}){let w=Q(),E=v(null),{userSelectionActive:D,lib:O,connectionInProgress:k}=Z(zu,X),A=lu(m),j=v();Lu(E);let M=T(e=>{b==null||b({x:e[0],y:e[1],zoom:e[2]}),x||w.setState({transform:e})},[b,x]);return a(()=>{if(E.current){j.current=ol({domNode:E.current,minZoom:f,maxZoom:p,translateExtent:d,viewport:u,onDraggingChange:e=>w.setState(t=>t.paneDragging===e?t:{paneDragging:e}),onPanZoomStart:(e,t)=>{let{onViewportChangeStart:n,onMoveStart:r}=w.getState();r==null||r(e,t),n==null||n(t)},onPanZoom:(e,t)=>{let{onViewportChange:n,onMove:r}=w.getState();r==null||r(e,t),n==null||n(t)},onPanZoomEnd:(e,t)=>{let{onViewportChangeEnd:n,onMoveEnd:r}=w.getState();r==null||r(e,t),n==null||n(t)}});let{x:e,y:t,zoom:n}=j.current.getViewport();return w.setState({panZoom:j.current,transform:[e,t,n],domNode:E.current.closest(`.react-flow`)}),()=>{var e;(e=j.current)==null||e.destroy()}}},[]),a(()=>{var a;(a=j.current)==null||a.update({onPaneContextMenu:e,zoomOnScroll:t,zoomOnPinch:n,panOnScroll:r,panActivationKeyPressed:i,panOnScrollSpeed:o,panOnScrollMode:s,zoomOnDoubleClick:c,panOnDrag:l,zoomActivationKeyPressed:A,preventScrolling:h,noPanClassName:y,userSelectionActive:D,noWheelClassName:_,lib:O,onTransformChange:M,connectionInProgress:k,selectionOnDrag:C,paneClickDistance:S})},[e,t,n,r,i,o,s,c,l,A,h,y,D,_,O,M,k,C,S]),I(`div`,{className:`react-flow__renderer`,ref:E,style:Ru,children:g})}var Vu=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function Hu(){let{userSelectionActive:e,userSelectionRect:t}=Z(Vu,X);return e&&t?I(`div`,{className:`react-flow__selection react-flow__container`,style:{width:t.width,height:t.height,transform:`translate(${t.x}px, ${t.y}px)`}}):null}var Uu=(e,t)=>n=>{n.target===t.current&&(e==null||e(n))},Wu=e=>({userSelectionActive:e.userSelectionActive,elementsSelectable:e.elementsSelectable,dragging:e.paneDragging,panBy:e.panBy,autoPanSpeed:e.autoPanSpeed});function Gu({isSelecting:e,selectionKeyPressed:t,selectionMode:n=Lo.Full,panOnDrag:r,autoPanOnSelection:i,paneClickDistance:o,selectionOnDrag:s,onSelectionStart:c,onSelectionEnd:l,onPaneClick:u,onPaneContextMenu:d,onPaneScroll:f,onPaneMouseEnter:p,onPaneMouseMove:m,onPaneMouseLeave:h,children:g}){let _=v(0),y=Q(),{userSelectionActive:b,elementsSelectable:x,dragging:S,panBy:C,autoPanSpeed:w}=Z(Wu,X),T=x&&(e||b),E=v(null),D=v(),O=v(new Set),k=v(new Set),A=v(!1),j=v(!1),M=v({x:0,y:0}),N=v(!1),P=e=>{if(j.current||A.current||y.getState().connection.inProgress){j.current=!1,A.current=!1;return}u==null||u(e),y.getState().resetSelectedElements(),y.setState({nodesSelectionActive:!1})},F=e=>{if(Array.isArray(r)&&r!=null&&r.includes(2)){e.preventDefault();return}d==null||d(e)},L=f?e=>f(e):void 0,R=e=>{j.current&&=(e.stopPropagation(),!1)},B=n=>{var i,a;if(n.pointerType===`touch`&&r!==!1&&!t)return;let{domNode:o,transform:c}=y.getState();if(D.current=o==null?void 0:o.getBoundingClientRect(),!D.current)return;let l=n.target===E.current;if(!l&&n.target.closest(`.nokey`)||!e||!(s&&l||t)||n.button!==0||!n.isPrimary)return;(i=n.target)==null||(a=i.setPointerCapture)==null||a.call(i,n.pointerId),j.current=!1;let{x:u,y:d}=Bs(n.nativeEvent,D.current),f=_s({x:u,y:d},c);y.setState({userSelectionRect:{width:0,height:0,startX:f.x,startY:f.y,x:u,y:d}}),l||(n.stopPropagation(),n.preventDefault())};function ee(e,t){let{userSelectionRect:r}=y.getState();if(!r)return;let{transform:i,nodeLookup:a,edgeLookup:o,connectionLookup:s,triggerNodeChanges:c,triggerEdgeChanges:l,defaultEdgeOptions:u}=y.getState(),d={x:r.startX,y:r.startY},{x:f,y:p}=vs(d,i),m={startX:d.x,startY:d.y,x:e<f?e:f,y:t<p?t:p,width:Math.abs(e-f),height:Math.abs(t-p)},h=O.current,g=k.current;O.current=new Set(Jo(a,m,i,n===Lo.Partial,!0).map(e=>e.id)),k.current=new Set;let _=(u==null?void 0:u.selectable)??!0;for(let e of O.current){let t=s.get(e);if(t)for(let{edgeId:e}of t.values()){let t=o.get(e);t&&(t.selectable??_)&&k.current.add(e)}}Os(h,O.current)||c(vu(a,O.current,!0)),Os(g,k.current)||l(vu(o,k.current)),y.setState({userSelectionRect:m,userSelectionActive:!0,nodesSelectionActive:!1})}function V(){if(!i||!D.current)return;let[e,t]=is(M.current,D.current,w);C({x:e,y:t}).then(e=>{if(!j.current||!e){_.current=requestAnimationFrame(V);return}let{x:t,y:n}=M.current;ee(t,n),_.current=requestAnimationFrame(V)})}let H=()=>{cancelAnimationFrame(_.current),_.current=0,N.current=!1};a(()=>()=>H(),[]);let U=e=>{let{userSelectionRect:n,transform:r,resetSelectedElements:i}=y.getState();if(!D.current||!n)return;let{x:a,y:s}=Bs(e.nativeEvent,D.current);M.current={x:a,y:s};let l=vs({x:n.startX,y:n.startY},r);if(!j.current){let n=t?0:o;if(Math.hypot(a-l.x,s-l.y)<=n)return;i(),c==null||c(e)}j.current=!0,N.current||=(V(),!0),ee(a,s)},W=e=>{var t,n;if(!T){e.target===E.current&&y.getState().connection.inProgress&&(A.current=!0);return}e.button===0&&((t=e.target)==null||(n=t.releasePointerCapture)==null||n.call(t,e.pointerId),!b&&e.target===E.current&&y.getState().userSelectionRect&&(P==null||P(e)),y.setState({userSelectionActive:!1,userSelectionRect:null}),j.current&&(l==null||l(e),y.setState({nodesSelectionActive:O.current.size>0})),H())},te=e=>{var t,n;(t=e.target)==null||(n=t.releasePointerCapture)==null||n.call(t,e.pointerId),H()},ne=r===!0||Array.isArray(r)&&r.includes(0);return z(`div`,{className:J([`react-flow__pane`,{draggable:ne,dragging:S,selection:e}]),onClick:T?void 0:Uu(P,E),onContextMenu:Uu(F,E),onWheel:Uu(L,E),onPointerEnter:T?void 0:p,onPointerMove:T?U:m,onPointerUp:W,onPointerCancel:T?te:void 0,onPointerDownCapture:T?B:void 0,onClickCapture:T?R:void 0,onPointerLeave:h,ref:E,style:Ru,children:[g,I(Hu,{})]})}function Ku({id:e,store:t,unselect:n=!1,nodeRef:r}){let{addSelectedNodes:i,unselectNodesAndEdges:a,multiSelectionActive:o,nodeLookup:s,onError:c}=t.getState(),l=s.get(e);if(!l){c==null||c(`012`,jo.error012(e));return}t.setState({nodesSelectionActive:!1}),l.selected?(n||l.selected&&o)&&(a({nodes:[l],edges:[]}),requestAnimationFrame(()=>{var e;return r==null||(e=r.current)==null?void 0:e.blur()})):i([e])}function qu({nodeRef:e,disabled:t=!1,noDragClassName:n,handleSelector:r,nodeId:i,isSelectable:o,nodeClickDistance:s}){let c=Q(),[l,u]=M(!1),d=v();return a(()=>{if(!t)return d.current=Fc({getStoreItems:()=>c.getState(),onNodeMouseDown:t=>{Ku({id:t,store:c,nodeRef:e})},onDragStart:()=>{u(!0)},onDragStop:()=>{u(!1)}}),()=>{var e;(e=d.current)==null||e.destroy(),d.current=void 0}},[t,c,e]),a(()=>{!t&&e.current&&d.current&&d.current.update({noDragClassName:n,handleSelector:r,domNode:e.current,isSelectable:o,nodeId:i,nodeClickDistance:s})},[n,r,t,o,e,i,s]),l}var Ju=e=>t=>t.selected&&(t.draggable||e&&t.draggable===void 0);function Yu(){let e=Q();return T(t=>{let{nodeExtent:n,snapToGrid:r,snapGrid:i,nodesDraggable:a,onError:o,updateNodePositions:s,nodeLookup:c,nodeOrigin:l}=e.getState(),u=new Map,d=Ju(a),f=r?i[0]:5,p=r?i[1]:5,m=t.direction.x*f*t.factor,h=t.direction.y*p*t.factor;for(let[,e]of c){if(!d(e))continue;let t={x:e.internals.positionAbsolute.x+m,y:e.internals.positionAbsolute.y+h};r&&(t=gs(t,i));let{position:a,positionAbsolute:s}=Qo({nodeId:e.id,nextPosition:t,nodeLookup:c,nodeExtent:n,nodeOrigin:l,onError:o});e.position=a,e.internals.positionAbsolute=s,u.set(e.id,e)}s(u)},[])}var Xu=L(null),Zu=Xu.Provider;Xu.Consumer;var Qu=()=>W(Xu),$u=e=>({connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName,rfId:e.rfId}),ed=L(null);function td({children:e}){let t=Z($u,X);return I(ed.Provider,{value:t,children:e})}function nd(){let e=W(ed);if(!e)throw Error(`useHandleConfig must be used within a HandleConfigProvider`);return e}var rd={connectingFrom:!1,connectingTo:!1,clickConnecting:!1,isPossibleEndHandle:!0,connectionInProcess:!1,clickConnectionInProcess:!1,valid:!1},id=(e,t,n)=>r=>{let{connectionClickStartHandle:i,connectionMode:a,connection:o}=r,{fromHandle:s,toHandle:c,isValid:l}=o;if(!s&&!i)return rd;let u=(c==null?void 0:c.nodeId)===e&&(c==null?void 0:c.id)===t&&(c==null?void 0:c.type)===n;return{connectingFrom:(s==null?void 0:s.nodeId)===e&&(s==null?void 0:s.id)===t&&(s==null?void 0:s.type)===n,connectingTo:u,clickConnecting:(i==null?void 0:i.nodeId)===e&&(i==null?void 0:i.id)===t&&(i==null?void 0:i.type)===n,isPossibleEndHandle:a===Fo.Strict?(s==null?void 0:s.type)!==n:e!==(s==null?void 0:s.nodeId)||t!==(s==null?void 0:s.id),connectionInProcess:!!s,clickConnectionInProcess:!!i,valid:u&&l}};function ad({type:e=`source`,position:t=Y.Top,isValidConnection:n,isConnectable:r=!0,isConnectableStart:i=!0,isConnectableEnd:a=!0,id:o,onConnect:s,children:c,className:l,onMouseDown:u,onTouchStart:d,...f},p){let m=o||null,h=e===`target`,g=Q(),_=Qu(),{connectOnClick:v,noPanClassName:y,rfId:b}=nd(),{connectingFrom:x,connectingTo:S,clickConnecting:C,isPossibleEndHandle:w,connectionInProcess:T,clickConnectionInProcess:E,valid:D}=Z(id(_,m,e),X);if(!_){var O,k;(O=(k=g.getState()).onError)==null||O.call(k,`010`,jo.error010())}let A=e=>{let{defaultEdgeOptions:t,onConnect:n,hasDefaultEdges:r}=g.getState(),i={...t,...e};if(r){let{edges:e,setEdges:t,onError:n}=g.getState();t(Su(i,e,{onError:n}))}n==null||n(i),s==null||s(i)},j=e=>{if(!_)return;let t=zs(e.nativeEvent);if(i&&(t&&e.button===0||!t)){let t=g.getState();Gc.onPointerDown(e.nativeEvent,{handleDomNode:e.currentTarget,autoPanOnConnect:t.autoPanOnConnect,connectionMode:t.connectionMode,connectionRadius:t.connectionRadius,domNode:t.domNode,nodeLookup:t.nodeLookup,lib:t.lib,isTarget:h,handleId:m,nodeId:_,flowId:t.rfId,panBy:t.panBy,cancelConnection:t.cancelConnection,onConnectStart:t.onConnectStart,onConnectEnd:(...e)=>{var t,n;return(t=(n=g.getState()).onConnectEnd)==null?void 0:t.call(n,...e)},updateConnection:t.updateConnection,onConnect:A,isValidConnection:n||((...e)=>{var t,n;return((t=(n=g.getState()).isValidConnection)==null?void 0:t.call(n,...e))??!0}),getTransform:()=>g.getState().transform,getFromHandle:()=>g.getState().connection.fromHandle,autoPanSpeed:t.autoPanSpeed,dragThreshold:t.connectionDragThreshold})}t?u==null||u(e):d==null||d(e)};return I(`div`,{"data-handleid":m,"data-nodeid":_,"data-handlepos":t,"data-id":`${b}-${_}-${m}-${e}`,className:J([`react-flow__handle`,`react-flow__handle-${t}`,`nodrag`,y,l,{source:!h,target:h,connectable:r,connectablestart:i,connectableend:a,clickconnecting:C,connectingfrom:x,connectingto:S,valid:D,connectionindicator:r&&(!T||w)&&(T||E?a:i)}]),onMouseDown:j,onTouchStart:j,onClick:v?t=>{let{onClickConnectStart:r,onClickConnectEnd:a,connectionClickStartHandle:o,connectionMode:s,isValidConnection:c,lib:l,rfId:u,nodeLookup:d,connection:f}=g.getState();if(!_||!o&&!i)return;if(!o){r==null||r(t.nativeEvent,{nodeId:_,handleId:m,handleType:e}),g.setState({connectionClickStartHandle:{nodeId:_,type:e,id:m}});return}let p=Is(t.target),h=n||c,{connection:v,isValid:y}=Gc.isValid(t.nativeEvent,{handle:{nodeId:_,id:m,type:e},connectionMode:s,fromNodeId:o.nodeId,fromHandleId:o.id||null,fromType:o.type,isValidConnection:h,flowId:u,doc:p,lib:l,nodeLookup:d});y&&v&&A(v);let b=structuredClone(f);delete b.inProgress,b.toPosition=b.toHandle?b.toHandle.position:null,a==null||a(t,b),g.setState({connectionClickStartHandle:null})}:void 0,ref:p,...f,children:c})}var od=G(Tu(ad));function sd({data:e,isConnectable:t,sourcePosition:n=Y.Bottom}){return z(w,{children:[e==null?void 0:e.label,I(od,{type:`source`,position:n,isConnectable:t})]})}function cd({data:e,isConnectable:t,targetPosition:n=Y.Top,sourcePosition:r=Y.Bottom}){return z(w,{children:[I(od,{type:`target`,position:n,isConnectable:t}),e==null?void 0:e.label,I(od,{type:`source`,position:r,isConnectable:t})]})}function ld(){return null}function ud({data:e,isConnectable:t,targetPosition:n=Y.Top}){return z(w,{children:[I(od,{type:`target`,position:n,isConnectable:t}),e==null?void 0:e.label]})}var dd={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}},fd={input:sd,default:cd,output:ud,group:ld};function pd(e){var t,n;if(e.internals.handleBounds===void 0){var r,i;return{width:e.width??e.initialWidth??((r=e.style)==null?void 0:r.width),height:e.height??e.initialHeight??((i=e.style)==null?void 0:i.height)}}return{width:e.width??((t=e.style)==null?void 0:t.width),height:e.height??((n=e.style)==null?void 0:n.height)}}var md=e=>{let{width:t,height:n,x:r,y:i}=qo(e.nodeLookup,{filter:e=>!!e.selected});return{width:ms(t)?t:null,height:ms(n)?n:null,userSelectionActive:e.userSelectionActive,transformString:`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]}) translate(${r}px,${i}px)`}};function hd({onSelectionContextMenu:e,noPanClassName:t,disableKeyboardA11y:n}){let r=Q(),{width:i,height:o,transformString:s,userSelectionActive:c}=Z(md,X),l=Yu(),u=v(null);a(()=>{if(!n){var e;(e=u.current)==null||e.focus({preventScroll:!0})}},[n]);let d=!c&&i!==null&&o!==null;if(qu({nodeRef:u,disabled:!d}),!d)return null;let f=e?t=>{e(t,r.getState().nodes.filter(e=>e.selected))}:void 0;return I(`div`,{className:J([`react-flow__nodesselection`,`react-flow__container`,t]),style:{transform:s},children:I(`div`,{ref:u,className:`react-flow__nodesselection-rect`,onContextMenu:f,tabIndex:n?void 0:-1,onKeyDown:n?void 0:e=>{Object.prototype.hasOwnProperty.call(dd,e.key)&&(e.preventDefault(),l({direction:dd[e.key],factor:e.shiftKey?4:1}))},style:{width:i,height:o}})})}var gd=typeof window<`u`?window:void 0,_d=e=>({nodesSelectionActive:e.nodesSelectionActive,userSelectionActive:e.userSelectionActive});function vd({children:e,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:i,onPaneContextMenu:a,onPaneScroll:o,paneClickDistance:s,deleteKeyCode:c,selectionKeyCode:l,selectionOnDrag:u,selectionMode:d,onSelectionStart:f,onSelectionEnd:p,multiSelectionKeyCode:m,panActivationKeyCode:h,zoomActivationKeyCode:g,elementsSelectable:_,zoomOnScroll:v,zoomOnPinch:y,panOnScroll:b,panOnScrollSpeed:x,panOnScrollMode:S,zoomOnDoubleClick:C,panOnDrag:w,autoPanOnSelection:T,defaultViewport:E,translateExtent:D,minZoom:O,maxZoom:k,preventScrolling:A,onSelectionContextMenu:j,noWheelClassName:M,noPanClassName:N,disableKeyboardA11y:P,onViewportChange:F,isControlledViewport:L}){let{nodesSelectionActive:R,userSelectionActive:B}=Z(_d,X),ee=lu(l,{target:gd}),V=lu(h,{target:gd}),H=V||w,U=V||b,W=u&&H!==!0,te=ee||B||W;return Iu({deleteKeyCode:c,multiSelectionKeyCode:m}),I(Bu,{onPaneContextMenu:a,elementsSelectable:_,zoomOnScroll:v,zoomOnPinch:y,panOnScroll:U,panActivationKeyPressed:V,panOnScrollSpeed:x,panOnScrollMode:S,zoomOnDoubleClick:C,panOnDrag:!ee&&H,defaultViewport:E,translateExtent:D,minZoom:O,maxZoom:k,zoomActivationKeyCode:g,preventScrolling:A,noWheelClassName:M,noPanClassName:N,onViewportChange:F,isControlledViewport:L,paneClickDistance:s,selectionOnDrag:W,children:z(Gu,{onSelectionStart:f,onSelectionEnd:p,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:i,onPaneContextMenu:a,onPaneScroll:o,panOnDrag:H,autoPanOnSelection:T,isSelecting:!!te,selectionMode:d,selectionKeyPressed:ee,paneClickDistance:s,selectionOnDrag:W,children:[e,R&&I(hd,{onSelectionContextMenu:j,noPanClassName:N,disableKeyboardA11y:P})]})})}vd.displayName=`FlowRenderer`;var yd=G(vd),bd=e=>t=>e?Jo(t.nodeLookup,{x:0,y:0,width:t.width,height:t.height},t.transform,!0).map(e=>e.id):Array.from(t.nodeLookup.keys());function xd(e){return Z(T(bd(e),[e]),X)}var Sd=e=>e.updateNodeInternals;function Cd(){let e=Z(Sd),[t]=M(()=>typeof ResizeObserver>`u`?null:new ResizeObserver(t=>{let n=new Map;t.forEach(e=>{let t=e.target.getAttribute(`data-id`);n.set(t,{id:t,nodeElement:e.target,force:!0})}),e(n)}));return a(()=>()=>{t==null||t.disconnect()},[t]),t}function wd({node:e,nodeType:t,hasDimensions:n,resizeObserver:r}){let i=Q(),o=v(null),s=v(null),c=v(e.sourcePosition),l=v(e.targetPosition),u=v(t),d=n&&!!e.internals.handleBounds;return a(()=>{o.current&&!e.hidden&&(!d||s.current!==o.current)&&(s.current&&(r==null||r.unobserve(s.current)),r==null||r.observe(o.current),s.current=o.current)},[d,e.hidden]),a(()=>()=>{s.current&&=(r==null||r.unobserve(s.current),null)},[]),a(()=>{if(o.current){let n=u.current!==t,r=c.current!==e.sourcePosition,a=l.current!==e.targetPosition;(n||r||a)&&(u.current=t,c.current=e.sourcePosition,l.current=e.targetPosition,i.getState().updateNodeInternals(new Map([[e.id,{id:e.id,nodeElement:o.current,force:!0}]])))}},[e.id,t,e.sourcePosition,e.targetPosition]),o}function Td({id:e,onClick:t,onMouseEnter:n,onMouseMove:r,onMouseLeave:i,onContextMenu:a,onDoubleClick:o,nodesDraggable:s,elementsSelectable:c,nodesConnectable:l,nodesFocusable:u,resizeObserver:d,noDragClassName:f,noPanClassName:p,disableKeyboardA11y:m,rfId:h,nodeTypes:g,nodeClickDistance:_,onError:v}){let{node:y,internals:b,isParent:x}=Z(t=>{let n=t.nodeLookup.get(e),r=t.parentLookup.has(e);return{node:n,internals:n.internals,isParent:r}},X),S=y.type||`default`,C=(g==null?void 0:g[S])||fd[S];C===void 0&&(v==null||v(`003`,jo.error003(S)),S=`default`,C=(g==null?void 0:g.default)||fd.default);let w=!!(y.draggable||s&&y.draggable===void 0),T=!!(y.selectable||c&&y.selectable===void 0),E=!!(y.connectable||l&&y.connectable===void 0),D=!!(y.focusable||u&&y.focusable===void 0),O=Q(),k=Es(y),A=wd({node:y,nodeType:S,hasDimensions:k,resizeObserver:d}),j=qu({nodeRef:A,disabled:y.hidden||!w,noDragClassName:f,handleSelector:y.dragHandle,nodeId:e,isSelectable:T,nodeClickDistance:_}),M=Yu();if(y.hidden)return null;let N=Ts(y),P=pd(y),F=T||w||t||n||r||i,L=n?e=>n(e,{...b.userNode}):void 0,R=r?e=>r(e,{...b.userNode}):void 0,z=i?e=>i(e,{...b.userNode}):void 0,B=a?e=>a(e,{...b.userNode}):void 0,ee=o?e=>o(e,{...b.userNode}):void 0,V=n=>{let{selectNodesOnDrag:r,nodeDragThreshold:i}=O.getState();T&&(!r||!w||i>0)&&Ku({id:e,store:O,nodeRef:A}),t&&t(n,{...b.userNode})},H=t=>{if(!(Rs(t.nativeEvent)||m)){if(No.includes(t.key)&&T){let n=t.key===`Escape`;Ku({id:e,store:O,unselect:n,nodeRef:A})}else if(w&&y.selected&&Object.prototype.hasOwnProperty.call(dd,t.key)){t.preventDefault();let{ariaLabelConfig:e}=O.getState();O.setState({ariaLiveMessage:e[`node.a11yDescription.ariaLiveMessage`]({direction:t.key.replace(`Arrow`,``).toLowerCase(),x:~~b.positionAbsolute.x,y:~~b.positionAbsolute.y})}),M({direction:dd[t.key],factor:t.shiftKey?4:1})}}},U=()=>{var t;if(m||!((t=A.current)!=null&&t.matches(`:focus-visible`)))return;let{transform:n,width:r,height:i,autoPanOnNodeFocus:a,setCenter:o}=O.getState();a&&(Jo(new Map([[e,y]]),{x:0,y:0,width:r,height:i},n,!0).length>0||o(y.position.x+N.width/2,y.position.y+N.height/2,{zoom:n[2]}))};return I(`div`,{className:J([`react-flow__node`,`react-flow__node-${S}`,{[p]:w},y.className,{selected:y.selected,selectable:T,parent:x,draggable:w,dragging:j}]),ref:A,style:{zIndex:b.z,transform:`translate(${b.positionAbsolute.x}px,${b.positionAbsolute.y}px)`,pointerEvents:F?`all`:`none`,visibility:k?`visible`:`hidden`,...y.style,...P},"data-id":e,"data-testid":`rf__node-${e}`,onMouseEnter:L,onMouseMove:R,onMouseLeave:z,onContextMenu:B,onClick:V,onDoubleClick:ee,onKeyDown:D?H:void 0,tabIndex:D?0:void 0,onFocus:D?U:void 0,role:y.ariaRole??(D?`group`:void 0),"aria-roledescription":`node`,"aria-describedby":m?void 0:`${Rl}-${h}`,"aria-label":y.ariaLabel,...y.domAttributes,children:I(Zu,{value:e,children:I(C,{id:e,data:y.data,type:S,positionAbsoluteX:b.positionAbsolute.x,positionAbsoluteY:b.positionAbsolute.y,selected:y.selected??!1,selectable:T,draggable:w,deletable:y.deletable??!0,isConnectable:E,sourcePosition:y.sourcePosition,targetPosition:y.targetPosition,dragging:j,dragHandle:y.dragHandle,zIndex:b.z,parentId:y.parentId,...N})})})}var Ed=G(Td),Dd=e=>({nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,onError:e.onError});function Od(e){let{nodesConnectable:t,nodesFocusable:n,elementsSelectable:r,onError:i}=Z(Dd,X),a=xd(e.onlyRenderVisibleElements),o=Cd();return I(`div`,{className:`react-flow__nodes`,style:Ru,children:a.map(a=>I(Ed,{id:a,nodeTypes:e.nodeTypes,nodeExtent:e.nodeExtent,onClick:e.onNodeClick,onMouseEnter:e.onNodeMouseEnter,onMouseMove:e.onNodeMouseMove,onMouseLeave:e.onNodeMouseLeave,onContextMenu:e.onNodeContextMenu,onDoubleClick:e.onNodeDoubleClick,noDragClassName:e.noDragClassName,noPanClassName:e.noPanClassName,rfId:e.rfId,disableKeyboardA11y:e.disableKeyboardA11y,resizeObserver:o,nodesDraggable:e.nodesDraggable??!0,nodesConnectable:t,nodesFocusable:n,elementsSelectable:r,nodeClickDistance:e.nodeClickDistance,onError:i},a))})}Od.displayName=`NodeRenderer`;var kd=G(Od);function Ad(e){return Z(T(t=>{if(!e)return t.edges.map(e=>e.id);let n=[];if(t.width&&t.height)for(let e of t.edges){let r=t.nodeLookup.get(e.source),i=t.nodeLookup.get(e.target);r&&i&&Js({sourceNode:r,targetNode:i,width:t.width,height:t.height,transform:t.transform})&&n.push(e.id)}return n},[e]),X)}var jd=({color:e=`none`,strokeWidth:t=1})=>{let n={strokeWidth:t,...e&&{stroke:e}};return I(`polyline`,{className:`arrow`,style:n,strokeLinecap:`round`,fill:`none`,strokeLinejoin:`round`,points:`-5,-4 0,0 -5,4`})},Md=({color:e=`none`,strokeWidth:t=1})=>{let n={strokeWidth:t,...e&&{stroke:e,fill:e}};return I(`polyline`,{className:`arrowclosed`,style:n,strokeLinecap:`round`,strokeLinejoin:`round`,points:`-5,-4 0,0 -5,4 -5,-4`})},Nd={[Bo.Arrow]:jd,[Bo.ArrowClosed]:Md};function Pd(e){let t=Q();return s(()=>{if(!Object.prototype.hasOwnProperty.call(Nd,e)){var n,r;return(n=(r=t.getState()).onError)==null||n.call(r,`009`,jo.error009(e)),null}return Nd[e]},[e])}var Fd=({id:e,type:t,color:n,width:r=12.5,height:i=12.5,markerUnits:a=`strokeWidth`,strokeWidth:o,orient:s=`auto-start-reverse`})=>{let c=Pd(t);return c?I(`marker`,{className:`react-flow__arrowhead`,id:e,markerWidth:`${r}`,markerHeight:`${i}`,viewBox:`-10 -10 20 20`,markerUnits:a,orient:s,refX:`0`,refY:`0`,children:I(c,{color:n,strokeWidth:o})}):null},Id=({defaultColor:e,rfId:t})=>{let n=Z(e=>e.edges),r=Z(e=>e.defaultEdgeOptions),i=s(()=>dc(n,{id:t,defaultColor:e,defaultMarkerStart:r==null?void 0:r.markerStart,defaultMarkerEnd:r==null?void 0:r.markerEnd}),[n,r,t,e]);return i.length?I(`svg`,{className:`react-flow__marker`,"aria-hidden":`true`,children:I(`defs`,{children:i.map(e=>I(Fd,{id:e.id,type:e.type,color:e.color,width:e.width,height:e.height,markerUnits:e.markerUnits,strokeWidth:e.strokeWidth,orient:e.orient},e.id))})}):null};Id.displayName=`MarkerDefinitions`;var Ld=G(Id);function Rd({x:e,y:t,label:n,labelStyle:r,labelShowBg:i=!0,labelBgStyle:o,labelBgPadding:s=[2,4],labelBgBorderRadius:c=2,children:l,className:u,...d}){let[f,p]=M({x:1,y:0,width:0,height:0}),m=J([`react-flow__edge-textwrapper`,u]),h=v(null);return a(()=>{if(h.current){let e=h.current.getBBox();p({x:e.x,y:e.y,width:e.width,height:e.height})}},[n]),n?z(`g`,{transform:`translate(${e-f.width/2} ${t-f.height/2})`,className:m,visibility:f.width?`visible`:`hidden`,...d,children:[i&&I(`rect`,{width:f.width+2*s[0],x:-s[0],y:-s[1],height:f.height+2*s[1],className:`react-flow__edge-textbg`,style:o,rx:c,ry:c}),I(`text`,{className:`react-flow__edge-text`,y:f.height/2,dy:`0.3em`,ref:h,style:r,children:n}),l]}):null}Rd.displayName=`EdgeText`;var zd=G(Rd);function Bd({path:e,labelX:t,labelY:n,label:r,labelStyle:i,labelShowBg:a,labelBgStyle:o,labelBgPadding:s,labelBgBorderRadius:c,interactionWidth:l=20,...u}){return z(w,{children:[I(`path`,{...u,d:e,fill:`none`,className:J([`react-flow__edge-path`,u.className])}),l?I(`path`,{d:e,fill:`none`,strokeOpacity:0,strokeWidth:l,className:`react-flow__edge-interaction`}):null,r&&ms(t)&&ms(n)?I(zd,{x:t,y:n,label:r,labelStyle:i,labelShowBg:a,labelBgStyle:o,labelBgPadding:s,labelBgBorderRadius:c}):null]})}function Vd({pos:e,x1:t,y1:n,x2:r,y2:i}){return e===Y.Left||e===Y.Right?[.5*(t+r),n]:[t,.5*(n+i)]}function Hd({sourceX:e,sourceY:t,sourcePosition:n=Y.Bottom,targetX:r,targetY:i,targetPosition:a=Y.Top}){let[o,s]=Vd({pos:n,x1:e,y1:t,x2:r,y2:i}),[c,l]=Vd({pos:a,x1:r,y1:i,x2:e,y2:t}),[u,d,f,p]=Hs({sourceX:e,sourceY:t,targetX:r,targetY:i,sourceControlX:o,sourceControlY:s,targetControlX:c,targetControlY:l});return[`M${e},${t} C${o},${s} ${c},${l} ${r},${i}`,u,d,f,p]}function Ud(e){return G(({id:t,sourceX:n,sourceY:r,targetX:i,targetY:a,sourcePosition:o,targetPosition:s,label:c,labelStyle:l,labelShowBg:u,labelBgStyle:d,labelBgPadding:f,labelBgBorderRadius:p,style:m,markerEnd:h,markerStart:g,interactionWidth:_})=>{let[v,y,b]=Hd({sourceX:n,sourceY:r,sourcePosition:o,targetX:i,targetY:a,targetPosition:s}),x=e.isInternal?void 0:t;return I(Bd,{id:x,path:v,labelX:y,labelY:b,label:c,labelStyle:l,labelShowBg:u,labelBgStyle:d,labelBgPadding:f,labelBgBorderRadius:p,style:m,markerEnd:h,markerStart:g,interactionWidth:_})})}var Wd=Ud({isInternal:!1}),Gd=Ud({isInternal:!0});Wd.displayName=`SimpleBezierEdge`,Gd.displayName=`SimpleBezierEdgeInternal`;function Kd(e){return G(({id:t,sourceX:n,sourceY:r,targetX:i,targetY:a,label:o,labelStyle:s,labelShowBg:c,labelBgStyle:l,labelBgPadding:u,labelBgBorderRadius:d,style:f,sourcePosition:p=Y.Bottom,targetPosition:m=Y.Top,markerEnd:h,markerStart:g,pathOptions:_,interactionWidth:v})=>{let[y,b,x]=ic({sourceX:n,sourceY:r,sourcePosition:p,targetX:i,targetY:a,targetPosition:m,borderRadius:_==null?void 0:_.borderRadius,offset:_==null?void 0:_.offset,stepPosition:_==null?void 0:_.stepPosition}),S=e.isInternal?void 0:t;return I(Bd,{id:S,path:y,labelX:b,labelY:x,label:o,labelStyle:s,labelShowBg:c,labelBgStyle:l,labelBgPadding:u,labelBgBorderRadius:d,style:f,markerEnd:h,markerStart:g,interactionWidth:v})})}var qd=Kd({isInternal:!1}),Jd=Kd({isInternal:!0});qd.displayName=`SmoothStepEdge`,Jd.displayName=`SmoothStepEdgeInternal`;function Yd(e){return G(({id:t,...n})=>{var r;let i=e.isInternal?void 0:t;return I(qd,{...n,id:i,pathOptions:s(()=>{var e;return{borderRadius:0,offset:(e=n.pathOptions)==null?void 0:e.offset}},[(r=n.pathOptions)==null?void 0:r.offset])})})}var Xd=Yd({isInternal:!1}),Zd=Yd({isInternal:!0});Xd.displayName=`StepEdge`,Zd.displayName=`StepEdgeInternal`;function Qd(e){return G(({id:t,sourceX:n,sourceY:r,targetX:i,targetY:a,label:o,labelStyle:s,labelShowBg:c,labelBgStyle:l,labelBgPadding:u,labelBgBorderRadius:d,style:f,markerEnd:p,markerStart:m,interactionWidth:h})=>{let[g,_,v]=Qs({sourceX:n,sourceY:r,targetX:i,targetY:a}),y=e.isInternal?void 0:t;return I(Bd,{id:y,path:g,labelX:_,labelY:v,label:o,labelStyle:s,labelShowBg:c,labelBgStyle:l,labelBgPadding:u,labelBgBorderRadius:d,style:f,markerEnd:p,markerStart:m,interactionWidth:h})})}var $d=Qd({isInternal:!1}),ef=Qd({isInternal:!0});$d.displayName=`StraightEdge`,ef.displayName=`StraightEdgeInternal`;function tf(e){return G(({id:t,sourceX:n,sourceY:r,targetX:i,targetY:a,sourcePosition:o=Y.Bottom,targetPosition:s=Y.Top,label:c,labelStyle:l,labelShowBg:u,labelBgStyle:d,labelBgPadding:f,labelBgBorderRadius:p,style:m,markerEnd:h,markerStart:g,pathOptions:_,interactionWidth:v})=>{let[y,b,x]=Gs({sourceX:n,sourceY:r,sourcePosition:o,targetX:i,targetY:a,targetPosition:s,curvature:_==null?void 0:_.curvature}),S=e.isInternal?void 0:t;return I(Bd,{id:S,path:y,labelX:b,labelY:x,label:c,labelStyle:l,labelShowBg:u,labelBgStyle:d,labelBgPadding:f,labelBgBorderRadius:p,style:m,markerEnd:h,markerStart:g,interactionWidth:v})})}var nf=tf({isInternal:!1}),rf=tf({isInternal:!0});nf.displayName=`BezierEdge`,rf.displayName=`BezierEdgeInternal`;var af={default:rf,straight:ef,step:Zd,smoothstep:Jd,simplebezier:Gd},of={sourceX:null,sourceY:null,targetX:null,targetY:null,sourcePosition:null,targetPosition:null,zIndex:void 0},sf=(e,t,n)=>n===Y.Left?e-t:n===Y.Right?e+t:e,cf=(e,t,n)=>n===Y.Top?e-t:n===Y.Bottom?e+t:e,lf=`react-flow__edgeupdater`;function uf({position:e,centerX:t,centerY:n,radius:r=10,onMouseDown:i,onMouseEnter:a,onMouseOut:o,type:s}){return I(`circle`,{onMouseDown:i,onMouseEnter:a,onMouseOut:o,className:J([lf,`${lf}-${s}`]),cx:sf(t,r,e),cy:cf(n,r,e),r,stroke:`transparent`,fill:`transparent`})}function df({isReconnectable:e,reconnectRadius:t,edge:n,sourceX:r,sourceY:i,targetX:a,targetY:o,sourcePosition:s,targetPosition:c,onReconnect:l,onReconnectStart:u,onReconnectEnd:d,setReconnecting:f,setUpdateHover:p}){let m=Q(),h=(e,t)=>{if(e.button!==0)return;let{autoPanOnConnect:r,domNode:i,connectionMode:a,connectionRadius:o,lib:s,onConnectStart:c,cancelConnection:p,nodeLookup:h,rfId:g,panBy:_,updateConnection:v}=m.getState(),y=t.type===`target`;Gc.onPointerDown(e.nativeEvent,{autoPanOnConnect:r,connectionMode:a,connectionRadius:o,domNode:i,handleId:t.id,nodeId:t.nodeId,nodeLookup:h,isTarget:y,edgeUpdaterType:t.type,lib:s,flowId:g,cancelConnection:p,panBy:_,isValidConnection:(...e)=>{var t,n;return((t=(n=m.getState()).isValidConnection)==null?void 0:t.call(n,...e))??!0},onConnect:e=>l==null?void 0:l(n,e),onConnectStart:(r,i)=>{f(!0),u==null||u(e,n,t.type),c==null||c(r,i)},onConnectEnd:(...e)=>{var t,n;return(t=(n=m.getState()).onConnectEnd)==null?void 0:t.call(n,...e)},onReconnectEnd:(e,r)=>{f(!1),d==null||d(e,n,t.type,r)},updateConnection:v,getTransform:()=>m.getState().transform,getFromHandle:()=>m.getState().connection.fromHandle,dragThreshold:m.getState().connectionDragThreshold,handleDomNode:e.currentTarget})},g=e=>h(e,{nodeId:n.target,id:n.targetHandle??null,type:`target`}),_=e=>h(e,{nodeId:n.source,id:n.sourceHandle??null,type:`source`}),v=()=>p(!0),y=()=>p(!1);return z(w,{children:[(e===!0||e===`source`)&&I(uf,{position:s,centerX:r,centerY:i,radius:t,onMouseDown:g,onMouseEnter:v,onMouseOut:y,type:`source`}),(e===!0||e===`target`)&&I(uf,{position:c,centerX:a,centerY:o,radius:t,onMouseDown:_,onMouseEnter:v,onMouseOut:y,type:`target`})]})}function ff({id:e,edgesFocusable:t,edgesReconnectable:n,elementsSelectable:r,onClick:i,onDoubleClick:a,onContextMenu:o,onMouseEnter:c,onMouseMove:l,onMouseLeave:u,reconnectRadius:d,onReconnect:f,onReconnectStart:p,onReconnectEnd:m,rfId:h,edgeTypes:g,noPanClassName:_,onError:y,disableKeyboardA11y:b}){let x=Z(t=>t.edgeLookup.get(e)),S=Z(e=>e.defaultEdgeOptions);x=S?{...S,...x}:x;let C=x.type||`default`,w=(g==null?void 0:g[C])||af[C];w===void 0&&(y==null||y(`011`,jo.error011(C)),C=`default`,w=(g==null?void 0:g.default)||af.default);let E=!!(x.focusable||t&&x.focusable===void 0),D=f!==void 0&&(x.reconnectable||n&&x.reconnectable===void 0),O=!!(x.selectable||r&&x.selectable===void 0),k=v(null),[A,j]=M(!1),[N,P]=M(!1),F=Q(),{zIndex:L=x.zIndex,sourceX:R,sourceY:B,targetX:ee,targetY:V,sourcePosition:H,targetPosition:U}=Z(T(t=>{let n=t.nodeLookup.get(x.source),r=t.nodeLookup.get(x.target);if(!n||!r)return of;let i=oc({id:e,sourceNode:n,targetNode:r,sourceHandle:x.sourceHandle||null,targetHandle:x.targetHandle||null,connectionMode:t.connectionMode,onError:y}),a=qs({selected:x.selected,zIndex:x.zIndex,sourceNode:n,targetNode:r,elevateOnSelect:t.elevateEdgesOnSelect,zIndexMode:t.zIndexMode});return{...i||of,zIndex:a}},[x.source,x.target,x.sourceHandle,x.targetHandle,x.selected,x.zIndex,y]),X),W=s(()=>x.markerStart?`url('#${uc(x.markerStart,h)}')`:void 0,[x.markerStart,h]),te=s(()=>x.markerEnd?`url('#${uc(x.markerEnd,h)}')`:void 0,[x.markerEnd,h]);if(x.hidden||R===null||B===null||ee===null||V===null)return null;let ne=t=>{let{addSelectedEdges:n,unselectNodesAndEdges:r,multiSelectionActive:a}=F.getState();if(O){if(F.setState({nodesSelectionActive:!1}),x.selected&&a){var o;r({nodes:[],edges:[x]}),(o=k.current)==null||o.blur()}else n([e])}i&&i(t,x)},G=a?e=>{a(e,{...x})}:void 0,re=o?e=>{o(e,{...x})}:void 0,K=c?e=>{c(e,{...x})}:void 0,q=l?e=>{l(e,{...x})}:void 0,ie=u?e=>{u(e,{...x})}:void 0;return I(`svg`,{style:{zIndex:L},children:z(`g`,{className:J([`react-flow__edge`,`react-flow__edge-${C}`,x.className,_,{selected:x.selected,animated:x.animated,inactive:!O&&!i,updating:A,selectable:O}]),onClick:ne,onDoubleClick:G,onContextMenu:re,onMouseEnter:K,onMouseMove:q,onMouseLeave:ie,onKeyDown:E?t=>{if(!b&&No.includes(t.key)&&O){let{unselectNodesAndEdges:r,addSelectedEdges:i}=F.getState();if(t.key===`Escape`){var n;(n=k.current)==null||n.blur(),r({edges:[x]})}else i([e])}}:void 0,tabIndex:E?0:void 0,role:x.ariaRole??(E?`group`:`img`),"aria-roledescription":`edge`,"data-id":e,"data-testid":`rf__edge-${e}`,"aria-label":x.ariaLabel===null?void 0:x.ariaLabel||`Edge from ${x.source} to ${x.target}`,"aria-describedby":E?`${zl}-${h}`:void 0,ref:k,...x.domAttributes,children:[!N&&I(w,{id:e,source:x.source,target:x.target,type:x.type,selected:x.selected,animated:x.animated,selectable:O,deletable:x.deletable??!0,label:x.label,labelStyle:x.labelStyle,labelShowBg:x.labelShowBg,labelBgStyle:x.labelBgStyle,labelBgPadding:x.labelBgPadding,labelBgBorderRadius:x.labelBgBorderRadius,sourceX:R,sourceY:B,targetX:ee,targetY:V,sourcePosition:H,targetPosition:U,data:x.data,style:x.style,sourceHandleId:x.sourceHandle,targetHandleId:x.targetHandle,markerStart:W,markerEnd:te,pathOptions:`pathOptions`in x?x.pathOptions:void 0,interactionWidth:x.interactionWidth}),D&&I(df,{edge:x,isReconnectable:D,reconnectRadius:d,onReconnect:f,onReconnectStart:p,onReconnectEnd:m,sourceX:R,sourceY:B,targetX:ee,targetY:V,sourcePosition:H,targetPosition:U,setUpdateHover:j,setReconnecting:P})]})})}var pf=G(ff),mf=e=>({edgesFocusable:e.edgesFocusable,edgesReconnectable:e.edgesReconnectable,elementsSelectable:e.elementsSelectable,connectionMode:e.connectionMode,onError:e.onError});function hf({defaultMarkerColor:e,onlyRenderVisibleElements:t,rfId:n,edgeTypes:r,noPanClassName:i,onReconnect:a,onEdgeContextMenu:o,onEdgeMouseEnter:s,onEdgeMouseMove:c,onEdgeMouseLeave:l,onEdgeClick:u,reconnectRadius:d,onEdgeDoubleClick:f,onReconnectStart:p,onReconnectEnd:m,disableKeyboardA11y:h}){let{edgesFocusable:g,edgesReconnectable:_,elementsSelectable:v,onError:y}=Z(mf,X),b=Ad(t);return z(`div`,{className:`react-flow__edges`,children:[I(Ld,{defaultColor:e,rfId:n}),b.map(e=>I(pf,{id:e,edgesFocusable:g,edgesReconnectable:_,elementsSelectable:v,noPanClassName:i,onReconnect:a,onContextMenu:o,onMouseEnter:s,onMouseMove:c,onMouseLeave:l,onClick:u,reconnectRadius:d,onDoubleClick:f,onReconnectStart:p,onReconnectEnd:m,rfId:n,onError:y,edgeTypes:r,disableKeyboardA11y:h},e))]})}hf.displayName=`EdgeRenderer`;var gf=G(hf),_f=e=>`translate(${e[0]}px,${e[1]}px) scale(${e[2]})`;function vf({children:e}){let t=Q(),n=v(null),[r]=M(()=>t.getState().transform);return Eu(()=>{let e=null,r=()=>{let r=t.getState().transform;e&&r[0]===e[0]&&r[1]===e[1]&&r[2]===e[2]||(e=r,n.current&&(n.current.style.transform=_f(r)))};return r(),t.subscribe(r)},[t]),I(`div`,{ref:n,className:`react-flow__viewport xyflow__viewport react-flow__container`,style:{transform:_f(r)},children:e})}function yf(e){let t=Nu(),n=v(!1);a(()=>{!n.current&&t.viewportInitialized&&e&&(setTimeout(()=>e(t),1),n.current=!0)},[e,t.viewportInitialized])}var bf=e=>{var t;return(t=e.panZoom)==null?void 0:t.syncViewport};function xf(e){let t=Z(bf),n=Q();return a(()=>{e&&(t==null||t(e),n.setState({transform:[e.x,e.y,e.zoom]}))},[e,t]),null}function Sf(e){return e.connection.inProgress?{...e.connection,to:_s(e.connection.to,e.transform)}:{...e.connection}}function Cf(e){return e?t=>e(Sf(t)):Sf}function wf(e){return Z(Cf(e),X)}var Tf=e=>({nodesConnectable:e.nodesConnectable,isValid:e.connection.isValid,inProgress:e.connection.inProgress,width:e.width,height:e.height});function Ef({containerStyle:e,style:t,type:n,component:r}){let{nodesConnectable:i,width:a,height:o,isValid:s,inProgress:c}=Z(Tf,X);return a&&i&&c?I(`svg`,{style:e,width:a,height:o,className:`react-flow__connectionline react-flow__container`,children:I(`g`,{className:J([`react-flow__connection`,Ns(s)]),children:I(Df,{style:t,type:n,CustomComponent:r,isValid:s})})}):null}var Df=({style:e,type:t=zo.Bezier,CustomComponent:n,isValid:r})=>{let{inProgress:i,from:a,fromNode:o,fromHandle:s,fromPosition:c,to:l,toNode:u,toHandle:d,toPosition:f,pointer:p}=wf();if(!i)return;if(n)return I(n,{connectionLineType:t,connectionLineStyle:e,fromNode:o,fromHandle:s,fromX:a.x,fromY:a.y,toX:l.x,toY:l.y,fromPosition:c,toPosition:f,connectionStatus:Ns(r),toNode:u,toHandle:d,pointer:p});let m=``,h={sourceX:a.x,sourceY:a.y,sourcePosition:c,targetX:l.x,targetY:l.y,targetPosition:f};switch(t){case zo.Bezier:[m]=Gs(h);break;case zo.SimpleBezier:[m]=Hd(h);break;case zo.Step:[m]=ic({...h,borderRadius:0});break;case zo.SmoothStep:[m]=ic(h);break;default:[m]=Qs(h)}return I(`path`,{d:m,fill:`none`,className:`react-flow__connection-path`,style:e})};Df.displayName=`ConnectionLine`;var Of={};function kf(e=Of){v(e),Q(),a(()=>{},[e])}function Af(){Q(),v(!1),a(()=>{},[])}function jf({nodeTypes:e,edgeTypes:t,onInit:n,onNodeClick:r,onEdgeClick:i,onNodeDoubleClick:a,onEdgeDoubleClick:o,onNodeMouseEnter:s,onNodeMouseMove:c,onNodeMouseLeave:l,onNodeContextMenu:u,onSelectionContextMenu:d,onSelectionStart:f,onSelectionEnd:p,connectionLineType:m,connectionLineStyle:h,connectionLineComponent:g,connectionLineContainerStyle:_,selectionKeyCode:v,selectionOnDrag:y,selectionMode:b,multiSelectionKeyCode:x,panActivationKeyCode:S,zoomActivationKeyCode:C,deleteKeyCode:w,onlyRenderVisibleElements:T,elementsSelectable:E,defaultViewport:D,translateExtent:O,minZoom:k,maxZoom:A,preventScrolling:j,defaultMarkerColor:M,zoomOnScroll:N,zoomOnPinch:P,panOnScroll:F,panOnScrollSpeed:L,panOnScrollMode:R,zoomOnDoubleClick:B,panOnDrag:ee,autoPanOnSelection:V,onPaneClick:H,onPaneMouseEnter:U,onPaneMouseMove:W,onPaneMouseLeave:te,onPaneScroll:ne,onPaneContextMenu:G,paneClickDistance:re,nodeClickDistance:K,onEdgeContextMenu:q,onEdgeMouseEnter:ie,onEdgeMouseMove:ae,onEdgeMouseLeave:oe,reconnectRadius:se,onReconnect:ce,onReconnectStart:le,onReconnectEnd:ue,noDragClassName:de,noWheelClassName:fe,noPanClassName:pe,disableKeyboardA11y:me,nodeExtent:he,rfId:ge,viewport:_e,onViewportChange:ve,nodesDraggable:ye}){return kf(e),kf(t),Af(),yf(n),xf(_e),I(yd,{onPaneClick:H,onPaneMouseEnter:U,onPaneMouseMove:W,onPaneMouseLeave:te,onPaneContextMenu:G,onPaneScroll:ne,paneClickDistance:re,deleteKeyCode:w,selectionKeyCode:v,selectionOnDrag:y,selectionMode:b,onSelectionStart:f,onSelectionEnd:p,multiSelectionKeyCode:x,panActivationKeyCode:S,zoomActivationKeyCode:C,elementsSelectable:E,zoomOnScroll:N,zoomOnPinch:P,zoomOnDoubleClick:B,panOnScroll:F,panOnScrollSpeed:L,panOnScrollMode:R,panOnDrag:ee,autoPanOnSelection:V,defaultViewport:D,translateExtent:O,minZoom:k,maxZoom:A,onSelectionContextMenu:d,preventScrolling:j,noDragClassName:de,noWheelClassName:fe,noPanClassName:pe,disableKeyboardA11y:me,onViewportChange:ve,isControlledViewport:!!_e,children:z(vf,{children:[I(gf,{edgeTypes:t,onEdgeClick:i,onEdgeDoubleClick:o,onReconnect:ce,onReconnectStart:le,onReconnectEnd:ue,onlyRenderVisibleElements:T,onEdgeContextMenu:q,onEdgeMouseEnter:ie,onEdgeMouseMove:ae,onEdgeMouseLeave:oe,reconnectRadius:se,defaultMarkerColor:M,noPanClassName:pe,disableKeyboardA11y:me,rfId:ge}),I(Ef,{style:h,type:m,component:g,containerStyle:_}),I(`div`,{className:`react-flow__edgelabel-renderer`}),I(kd,{nodeTypes:e,onNodeClick:r,onNodeDoubleClick:a,onNodeMouseEnter:s,onNodeMouseMove:c,onNodeMouseLeave:l,onNodeContextMenu:u,nodeClickDistance:K,onlyRenderVisibleElements:T,noPanClassName:pe,noDragClassName:de,disableKeyboardA11y:me,nodeExtent:he,rfId:ge,nodesDraggable:ye}),I(`div`,{className:`react-flow__viewport-portal`})]})})}jf.displayName=`GraphView`;var Mf=G(jf),Nf=hs(`React Flow`,`https://reactflow.dev/`),Pf=({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,width:i,height:a,fitView:o,fitViewOptions:s,minZoom:c=.5,maxZoom:l=2,nodeOrigin:u,nodeExtent:d,zIndexMode:f=`basic`}={})=>{let p=new Map,m=new Map,h=new Map,g=new Map,_=r??t??[],v=n??e??[],y=u??[0,0],b=d??Mo;kc(h,g,_);let{nodesInitialized:x}=bc(v,p,m,{nodeOrigin:y,nodeExtent:b,zIndexMode:f}),S=[0,0,1];if(o&&i&&a){let{x:e,y:t,zoom:n}=Ss(qo(p,{filter:e=>!(!e.width&&!e.initialWidth||!e.height&&!e.initialHeight)}),i,a,c,l,(s==null?void 0:s.padding)??.1);S=[e,t,n]}return{rfId:`1`,width:i??0,height:a??0,transform:S,nodes:v,nodesInitialized:x,nodeLookup:p,parentLookup:m,edges:_,edgeLookup:g,connectionLookup:h,onNodesChange:null,onEdgesChange:null,hasDefaultNodes:n!==void 0,hasDefaultEdges:r!==void 0,panZoom:null,minZoom:c,maxZoom:l,translateExtent:Mo,nodeExtent:b,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionMode:Fo.Strict,domNode:null,paneDragging:!1,noPanClassName:`nopan`,nodeOrigin:y,nodeDragThreshold:1,connectionDragThreshold:1,snapGrid:[15,15],snapToGrid:!1,nodesDraggable:!0,nodesConnectable:!0,nodesFocusable:!0,edgesFocusable:!0,edgesReconnectable:!0,elementsSelectable:!0,elevateNodesOnSelect:!0,elevateEdgesOnSelect:!0,selectNodesOnDrag:!0,multiSelectionActive:!1,fitViewQueued:o??!1,fitViewOptions:s,fitViewResolver:null,connection:{...Ro},connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:``,autoPanOnConnect:!0,autoPanOnNodeDrag:!0,autoPanOnNodeFocus:!0,autoPanSpeed:15,connectionRadius:20,onError:Nf,isValidConnection:void 0,onSelectionChangeHandlers:[],lib:`react`,debug:!1,ariaLabelConfig:Po,zIndexMode:f,defaultEdgeOptions:void 0,onNodesChangeMiddlewareMap:new Map,onEdgesChangeMiddlewareMap:new Map,onNodesDelete:void 0,onEdgesDelete:void 0,onDelete:void 0,onBeforeDelete:void 0,onViewportChangeStart:void 0,onViewportChange:void 0,onViewportChangeEnd:void 0,onNodeDragStart:void 0,onNodeDrag:void 0,onNodeDragStop:void 0,onSelectionDragStart:void 0,onSelectionDrag:void 0,onSelectionDragStop:void 0,onMoveStart:void 0,onMove:void 0,onMoveEnd:void 0,onConnect:void 0,onConnectStart:void 0,onConnectEnd:void 0,onClickConnectStart:void 0,onClickConnectEnd:void 0}},Ff=({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,width:i,height:a,fitView:o,fitViewOptions:s,minZoom:c,maxZoom:l,nodeOrigin:u,nodeExtent:d,zIndexMode:f})=>Ml((p,m)=>{async function h(){let{nodeLookup:e,panZoom:t,fitViewOptions:n,fitViewResolver:r,width:i,height:a,minZoom:o,maxZoom:s}=m();t&&(await Zo({nodes:e,width:i,height:a,panZoom:t,minZoom:o,maxZoom:s},n),r==null||r.resolve(!0),p({fitViewResolver:null}))}return{...Pf({nodes:e,edges:t,width:i,height:a,fitView:o,fitViewOptions:s,minZoom:c,maxZoom:l,nodeOrigin:u,nodeExtent:d,defaultNodes:n,defaultEdges:r,zIndexMode:f}),setNodes:e=>{let{nodeLookup:t,parentLookup:n,nodeOrigin:r,nodeExtent:i,elevateNodesOnSelect:a,fitViewQueued:o,zIndexMode:s,nodesSelectionActive:c}=m(),{nodesInitialized:l,hasSelectedNodes:u}=bc(e,t,n,{nodeOrigin:r,nodeExtent:i,elevateNodesOnSelect:a,checkEquality:!0,zIndexMode:s}),d=c&&u;o&&l?(h(),p({nodes:e,nodesInitialized:l,fitViewQueued:!1,fitViewOptions:void 0,nodesSelectionActive:d})):p({nodes:e,nodesInitialized:l,nodesSelectionActive:d})},setEdges:e=>{let{connectionLookup:t,edgeLookup:n}=m();kc(t,n,e),p({edges:e})},setDefaultNodesAndEdges:(e,t)=>{if(e){let{setNodes:t}=m();t(e),p({hasDefaultNodes:!0})}if(t){let{setEdges:e}=m();e(t),p({hasDefaultEdges:!0})}},updateNodeInternals:e=>{let{triggerNodeChanges:t,nodeLookup:n,parentLookup:r,domNode:i,nodeOrigin:a,nodeExtent:o,debug:s,fitViewQueued:c,zIndexMode:l}=m(),{changes:u,updatedInternals:d}=Ec(e,n,r,i,a,o,l);d&&(_c(n,r,{nodeOrigin:a,nodeExtent:o,zIndexMode:l}),c?(h(),p({fitViewQueued:!1,fitViewOptions:void 0})):p({}),(u==null?void 0:u.length)>0&&(s&&console.log(`React Flow: trigger node changes`,u),t==null||t(u)))},updateNodePositions:(e,t=!1)=>{let n=[],r=[],{nodeLookup:i,triggerNodeChanges:a,connection:o,updateConnection:s,onNodesChangeMiddlewareMap:c}=m();for(let[a,c]of e){let e=i.get(a),l=!!(e!=null&&e.expandParent&&e!=null&&e.parentId&&c!=null&&c.position),u={id:a,type:`position`,position:l?{x:Math.max(0,c.position.x),y:Math.max(0,c.position.y)}:c.position,dragging:t};if(e&&o.inProgress&&o.fromNode.id===e.id){let t=cc(e,o.fromHandle,Y.Left,!0);s({...o,from:t})}l&&e.parentId&&n.push({id:a,parentId:e.parentId,rect:{...c.internals.positionAbsolute,width:c.measured.width??0,height:c.measured.height??0}}),r.push(u)}if(n.length>0){let{parentLookup:e,nodeOrigin:t}=m(),a=Tc(n,i,e,t);r.push(...a)}for(let e of c.values())r=e(r);a(r)},triggerNodeChanges:e=>{let{onNodesChange:t,setNodes:n,nodes:r,hasDefaultNodes:i,debug:a}=m();e!=null&&e.length&&(i&&n(hu(e,r)),a&&console.log(`React Flow: trigger node changes`,e),t==null||t(e))},triggerEdgeChanges:e=>{let{onEdgesChange:t,setEdges:n,edges:r,hasDefaultEdges:i,debug:a}=m();e!=null&&e.length&&(i&&n(gu(e,r)),a&&console.log(`React Flow: trigger edge changes`,e),t==null||t(e))},addSelectedNodes:e=>{let{multiSelectionActive:t,edgeLookup:n,nodeLookup:r,triggerNodeChanges:i,triggerEdgeChanges:a}=m();if(t){i(e.map(e=>_u(e,!0)));return}i(vu(r,new Set([...e]),!0)),a(vu(n))},addSelectedEdges:e=>{let{multiSelectionActive:t,edgeLookup:n,nodeLookup:r,triggerNodeChanges:i,triggerEdgeChanges:a}=m();if(t){a(e.map(e=>_u(e,!0)));return}a(vu(n,new Set([...e]))),i(vu(r,new Set,!0))},unselectNodesAndEdges:({nodes:e,edges:t}={})=>{let{edges:n,nodes:r,nodeLookup:i,triggerNodeChanges:a,triggerEdgeChanges:o}=m(),s=e||r,c=t||n,l=[];for(let e of s){if(!e.selected)continue;let t=i.get(e.id);t&&(t.selected=!1),l.push(_u(e.id,!1))}let u=[];for(let e of c)e.selected&&u.push(_u(e.id,!1));a(l),o(u)},setMinZoom:e=>{let{panZoom:t,maxZoom:n}=m();t==null||t.setScaleExtent([e,n]),p({minZoom:e})},setMaxZoom:e=>{let{panZoom:t,minZoom:n}=m();t==null||t.setScaleExtent([n,e]),p({maxZoom:e})},setTranslateExtent:e=>{var t;(t=m().panZoom)==null||t.setTranslateExtent(e),p({translateExtent:e})},resetSelectedElements:()=>{let{edges:e,nodes:t,triggerNodeChanges:n,triggerEdgeChanges:r,elementsSelectable:i}=m();if(!i)return;let a=t.reduce((e,t)=>t.selected?[...e,_u(t.id,!1)]:e,[]),o=e.reduce((e,t)=>t.selected?[...e,_u(t.id,!1)]:e,[]);n(a),r(o)},setNodeExtent:e=>{let{nodes:t,nodeLookup:n,parentLookup:r,nodeOrigin:i,elevateNodesOnSelect:a,nodeExtent:o,zIndexMode:s}=m();(e[0][0]!==o[0][0]||e[0][1]!==o[0][1]||e[1][0]!==o[1][0]||e[1][1]!==o[1][1])&&(bc(t,n,r,{nodeOrigin:i,nodeExtent:e,elevateNodesOnSelect:a,checkEquality:!1,zIndexMode:s}),p({nodeExtent:e}))},panBy:e=>{let{transform:t,width:n,height:r,panZoom:i,translateExtent:a}=m();return Dc({delta:e,panZoom:i,transform:t,translateExtent:a,width:n,height:r})},setCenter:async(e,t,n)=>{let{width:r,height:i,maxZoom:a,panZoom:o}=m();if(!o)return!1;let s=(n==null?void 0:n.zoom)===void 0?a:n.zoom;return await o.setViewport({x:r/2-e*s,y:i/2-t*s,zoom:s},{duration:n==null?void 0:n.duration,ease:n==null?void 0:n.ease,interpolate:n==null?void 0:n.interpolate}),!0},cancelConnection:()=>{p({connection:{...Ro}})},updateConnection:e=>{p({connection:e})},reset:()=>p({...Pf()})}},Object.is);function If({initialNodes:e,initialEdges:t,defaultNodes:n,defaultEdges:r,initialWidth:i,initialHeight:a,initialMinZoom:o,initialMaxZoom:s,initialFitViewOptions:c,fitView:l,nodeOrigin:u,nodeExtent:d,zIndexMode:f,children:p}){let[m]=M(()=>Ff({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,width:i,height:a,fitView:l,minZoom:o,maxZoom:s,fitViewOptions:c,nodeOrigin:u,nodeExtent:d,zIndexMode:f}));return I(Pl,{value:m,children:I(Au,{children:I(td,{children:p})})})}function Lf({children:e,nodes:t,edges:n,defaultNodes:r,defaultEdges:i,width:a,height:o,fitView:s,fitViewOptions:c,minZoom:l,maxZoom:u,nodeOrigin:d,nodeExtent:f,zIndexMode:p}){return W(Nl)?I(w,{children:e}):I(If,{initialNodes:t,initialEdges:n,defaultNodes:r,defaultEdges:i,initialWidth:a,initialHeight:o,fitView:s,initialFitViewOptions:c,initialMinZoom:l,initialMaxZoom:u,nodeOrigin:d,nodeExtent:f,zIndexMode:p,children:e})}var Rf={width:`100%`,height:`100%`,overflow:`hidden`,position:`relative`,zIndex:0};function zf({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,className:i,nodeTypes:a,edgeTypes:o,onNodeClick:s,onEdgeClick:c,onInit:l,onMove:u,onMoveStart:d,onMoveEnd:f,onConnect:p,onConnectStart:m,onConnectEnd:h,onClickConnectStart:g,onClickConnectEnd:_,onNodeMouseEnter:v,onNodeMouseMove:y,onNodeMouseLeave:b,onNodeContextMenu:x,onNodeDoubleClick:S,onNodeDragStart:C,onNodeDrag:w,onNodeDragStop:E,onNodesDelete:D,onEdgesDelete:O,onDelete:k,onSelectionChange:A,onSelectionDragStart:j,onSelectionDrag:M,onSelectionDragStop:N,onSelectionContextMenu:P,onSelectionStart:F,onSelectionEnd:L,onBeforeDelete:R,connectionMode:B,connectionLineType:ee=zo.Bezier,connectionLineStyle:V,connectionLineComponent:H,connectionLineContainerStyle:U,deleteKeyCode:W=`Backspace`,selectionKeyCode:te=`Shift`,selectionOnDrag:ne=!1,selectionMode:G=Lo.Full,panActivationKeyCode:re=`Space`,multiSelectionKeyCode:K=Cs()?`Meta`:`Control`,zoomActivationKeyCode:q=Cs()?`Meta`:`Control`,snapToGrid:ie,snapGrid:ae,onlyRenderVisibleElements:oe=!1,selectNodesOnDrag:se,nodesDraggable:ce,autoPanOnNodeFocus:le,nodesConnectable:ue,nodesFocusable:de,nodeOrigin:fe=eu,edgesFocusable:pe,edgesReconnectable:me,elementsSelectable:he=!0,defaultViewport:ge=tu,minZoom:_e=.5,maxZoom:ve=2,translateExtent:ye=Mo,preventScrolling:be=!0,nodeExtent:xe,defaultMarkerColor:Se=`#b1b1b7`,zoomOnScroll:Ce=!0,zoomOnPinch:we=!0,panOnScroll:Te=!1,panOnScrollSpeed:Ee=.5,panOnScrollMode:De=Io.Free,zoomOnDoubleClick:Oe=!0,panOnDrag:ke=!0,onPaneClick:Ae,onPaneMouseEnter:je,onPaneMouseMove:Me,onPaneMouseLeave:Ne,onPaneScroll:Pe,onPaneContextMenu:Fe,paneClickDistance:Ie=1,nodeClickDistance:Le=0,children:Re,onReconnect:ze,onReconnectStart:Be,onReconnectEnd:Ve,onEdgeContextMenu:He,onEdgeDoubleClick:Ue,onEdgeMouseEnter:We,onEdgeMouseMove:Ge,onEdgeMouseLeave:Ke,reconnectRadius:qe=10,onNodesChange:Je,onEdgesChange:Ye,noDragClassName:Xe=`nodrag`,noWheelClassName:Ze=`nowheel`,noPanClassName:Qe=`nopan`,fitView:$e,fitViewOptions:et,connectOnClick:tt,attributionPosition:nt,proOptions:rt,defaultEdgeOptions:it,elevateNodesOnSelect:at=!0,elevateEdgesOnSelect:ot=!1,disableKeyboardA11y:st=!1,autoPanOnConnect:ct,autoPanOnNodeDrag:lt,autoPanOnSelection:ut=!0,autoPanSpeed:dt,connectionRadius:ft,isValidConnection:pt,onError:mt,style:ht,id:gt,nodeDragThreshold:_t,connectionDragThreshold:vt,viewport:yt,onViewportChange:bt,width:xt,height:St,colorMode:Ct=`light`,debug:wt,onScroll:Tt,ariaLabelConfig:Et,zIndexMode:Dt=`basic`,...Ot},kt){let At=gt||`1`,jt=su(Ct),Mt=T(e=>{e.currentTarget.scrollTo({top:0,left:0,behavior:`instant`}),Tt==null||Tt(e)},[Tt]);return I(`div`,{"data-testid":`rf__wrapper`,...Ot,onScroll:Mt,style:{...ht,...Rf},ref:kt,className:J([`react-flow`,i,jt]),id:gt,role:`application`,children:z(Lf,{nodes:e,edges:t,width:xt,height:St,fitView:$e,fitViewOptions:et,minZoom:_e,maxZoom:ve,nodeOrigin:fe,nodeExtent:xe,zIndexMode:Dt,children:[I(au,{nodes:e,edges:t,defaultNodes:n,defaultEdges:r,onConnect:p,onConnectStart:m,onConnectEnd:h,onClickConnectStart:g,onClickConnectEnd:_,nodesDraggable:ce,autoPanOnNodeFocus:le,nodesConnectable:ue,nodesFocusable:de,edgesFocusable:pe,edgesReconnectable:me,elementsSelectable:he,elevateNodesOnSelect:at,elevateEdgesOnSelect:ot,minZoom:_e,maxZoom:ve,nodeExtent:xe,onNodesChange:Je,onEdgesChange:Ye,snapToGrid:ie,snapGrid:ae,connectionMode:B,translateExtent:ye,connectOnClick:tt,defaultEdgeOptions:it,fitView:$e,fitViewOptions:et,onNodesDelete:D,onEdgesDelete:O,onDelete:k,onNodeDragStart:C,onNodeDrag:w,onNodeDragStop:E,onSelectionDrag:M,onSelectionDragStart:j,onSelectionDragStop:N,onMove:u,onMoveStart:d,onMoveEnd:f,noPanClassName:Qe,nodeOrigin:fe,rfId:At,autoPanOnConnect:ct,autoPanOnNodeDrag:lt,autoPanSpeed:dt,onError:mt,connectionRadius:ft,isValidConnection:pt,selectNodesOnDrag:se,nodeDragThreshold:_t,connectionDragThreshold:vt,onBeforeDelete:R,debug:wt,ariaLabelConfig:Et,zIndexMode:Dt}),I(Mf,{onInit:l,onNodeClick:s,onEdgeClick:c,onNodeMouseEnter:v,onNodeMouseMove:y,onNodeMouseLeave:b,onNodeContextMenu:x,onNodeDoubleClick:S,nodeTypes:a,edgeTypes:o,connectionLineType:ee,connectionLineStyle:V,connectionLineComponent:H,connectionLineContainerStyle:U,selectionKeyCode:te,selectionOnDrag:ne,selectionMode:G,deleteKeyCode:W,multiSelectionKeyCode:K,panActivationKeyCode:re,zoomActivationKeyCode:q,onlyRenderVisibleElements:oe,defaultViewport:ge,translateExtent:ye,minZoom:_e,maxZoom:ve,preventScrolling:be,zoomOnScroll:Ce,zoomOnPinch:we,zoomOnDoubleClick:Oe,panOnScroll:Te,panOnScrollSpeed:Ee,panOnScrollMode:De,panOnDrag:ke,autoPanOnSelection:ut,onPaneClick:Ae,onPaneMouseEnter:je,onPaneMouseMove:Me,onPaneMouseLeave:Ne,onPaneScroll:Pe,onPaneContextMenu:Fe,paneClickDistance:Ie,nodeClickDistance:Le,onSelectionContextMenu:P,onSelectionStart:F,onSelectionEnd:L,onReconnect:ze,onReconnectStart:Be,onReconnectEnd:Ve,onEdgeContextMenu:He,onEdgeDoubleClick:Ue,onEdgeMouseEnter:We,onEdgeMouseMove:Ge,onEdgeMouseLeave:Ke,reconnectRadius:qe,defaultMarkerColor:Se,noDragClassName:Xe,noWheelClassName:Ze,noPanClassName:Qe,rfId:At,disableKeyboardA11y:st,nodeExtent:xe,viewport:yt,onViewportChange:bt,nodesDraggable:ce}),I($l,{onSelectionChange:A}),Re,I(ql,{proOptions:rt,position:nt}),I(Wl,{rfId:At,disableKeyboardA11y:st})]})})}var Bf=Tu(zf);function Vf(){let e=Q();return T(t=>{let{domNode:n,updateNodeInternals:r}=e.getState(),i=Array.isArray(t)?t:[t],a=new Map;i.forEach(e=>{let t=n==null?void 0:n.querySelector(`.react-flow__node[data-id="${e}"]`);t&&a.set(e,{id:e,nodeElement:t,force:!0})}),requestAnimationFrame(()=>r(a,{triggerFitView:!1}))},[])}var Hf=e=>({x:e.transform[0],y:e.transform[1],zoom:e.transform[2]});function Uf(){return Z(Hf,X)}function Wf(e){let[t,n]=M(e);return[t,n,T(e=>n(t=>hu(e,t)),[])]}function Gf(e){let[t,n]=M(e);return[t,n,T(e=>n(t=>gu(e,t)),[])]}var Kf=jo.error014();function qf({id:e,handleType:t,handleId:n,onConnect:r,onDisconnect:i}={}){let o=Qu(),c=e??o;if(!c)throw Error(Kf);let l=v(null),u=Z(e=>e.connectionLookup.get(`${c}${t?n?`-${t}-${n}`:`-${t}`:``}`),js);return a(()=>{if(l.current&&l.current!==u){let e=u??new Map;Ms(l.current,e,i),Ms(e,l.current,r)}l.current=u??new Map},[u,r,i]),s(()=>Array.from((u==null?void 0:u.values())??[]),[u])}function Jf({dimensions:e,lineWidth:t,variant:n,className:r}){return I(`path`,{strokeWidth:t,d:`M${e[0]/2} 0 V${e[1]} M0 ${e[1]/2} H${e[0]}`,className:J([`react-flow__background-pattern`,n,r])})}function Yf({radius:e,className:t}){return I(`circle`,{cx:e,cy:e,r:e,className:J([`react-flow__background-pattern`,`dots`,t])})}var Xf;(function(e){e.Lines=`lines`,e.Dots=`dots`,e.Cross=`cross`})(Xf||={});var Zf={[Xf.Dots]:1,[Xf.Lines]:1,[Xf.Cross]:6},Qf=e=>({transform:e.transform,patternId:`pattern-${e.rfId}`});function $f({id:e,variant:t=Xf.Dots,gap:n=20,size:r,lineWidth:i=1,offset:a=0,color:o,bgColor:s,style:c,className:l,patternClassName:u}){let d=v(null),{transform:f,patternId:p}=Z(Qf,X),m=r||Zf[t],h=t===Xf.Dots,g=t===Xf.Cross,_=Array.isArray(n)?n:[n,n],y=[_[0]*f[2]||1,_[1]*f[2]||1],b=m*f[2],x=Array.isArray(a)?a:[a,a],S=g?[b,b]:y,C=[x[0]*f[2]+S[0]/2,x[1]*f[2]+S[1]/2],w=`${p}${e||``}`;return z(`svg`,{className:J([`react-flow__background`,l]),style:{...c,...Ru,"--xy-background-color-props":s,"--xy-background-pattern-color-props":o},ref:d,"data-testid":`rf__background`,children:[I(`pattern`,{id:w,x:f[0]%y[0],y:f[1]%y[1],width:y[0],height:y[1],patternUnits:`userSpaceOnUse`,patternTransform:`translate(-${C[0]},-${C[1]})`,children:h?I(Yf,{radius:b/2,className:u}):I(Jf,{dimensions:S,lineWidth:i,variant:t,className:u})}),I(`rect`,{x:`0`,y:`0`,width:`100%`,height:`100%`,fill:`url(#${w})`})]})}$f.displayName=`Background`;var ep=G($f);function tp(){return I(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 32 32`,children:I(`path`,{d:`M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z`})})}function np(){return I(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 32 5`,children:I(`path`,{d:`M0 0h32v4.2H0z`})})}function rp(){return I(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 32 30`,children:I(`path`,{d:`M3.692 4.63c0-.53.4-.938.939-.938h5.215V0H4.708C2.13 0 0 2.054 0 4.63v5.216h3.692V4.631zM27.354 0h-5.2v3.692h5.17c.53 0 .984.4.984.939v5.215H32V4.631A4.624 4.624 0 0027.354 0zm.954 24.83c0 .532-.4.94-.939.94h-5.215v3.768h5.215c2.577 0 4.631-2.13 4.631-4.707v-5.139h-3.692v5.139zm-23.677.94c-.531 0-.939-.4-.939-.94v-5.138H0v5.139c0 2.577 2.13 4.707 4.708 4.707h5.138V25.77H4.631z`})})}function ip(){return I(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 25 32`,children:I(`path`,{d:`M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0 8 0 4.571 3.429 4.571 7.619v3.048H3.048A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047zm4.724-13.866H7.467V7.619c0-2.59 2.133-4.724 4.723-4.724 2.591 0 4.724 2.133 4.724 4.724v3.048z`})})}function ap(){return I(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 25 32`,children:I(`path`,{d:`M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0c-4.114 1.828-1.37 2.133.305 2.438 1.676.305 4.42 2.59 4.42 5.181v3.048H3.047A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047z`})})}function op({children:e,className:t,...n}){return I(`button`,{type:`button`,className:J([`react-flow__controls-button`,t]),...n,children:e})}var sp=e=>({isInteractive:e.nodesDraggable||e.nodesConnectable||e.elementsSelectable,minZoomReached:e.transform[2]<=e.minZoom,maxZoomReached:e.transform[2]>=e.maxZoom,ariaLabelConfig:e.ariaLabelConfig});function cp({style:e,showZoom:t=!0,showFitView:n=!0,showInteractive:r=!0,fitViewOptions:i,onZoomIn:a,onZoomOut:o,onFitView:s,onInteractiveChange:c,className:l,children:u,position:d=`bottom-left`,orientation:f=`vertical`,"aria-label":p}){let m=Q(),{isInteractive:h,minZoomReached:g,maxZoomReached:_,ariaLabelConfig:v}=Z(sp,X),{zoomIn:y,zoomOut:b,fitView:x}=Nu();return z(Gl,{className:J([`react-flow__controls`,f===`horizontal`?`horizontal`:`vertical`,l]),position:d,style:e,"data-testid":`rf__controls`,"aria-label":p??v[`controls.ariaLabel`],children:[t&&z(w,{children:[I(op,{onClick:()=>{y(),a==null||a()},className:`react-flow__controls-zoomin`,title:v[`controls.zoomIn.ariaLabel`],"aria-label":v[`controls.zoomIn.ariaLabel`],disabled:_,children:I(tp,{})}),I(op,{onClick:()=>{b(),o==null||o()},className:`react-flow__controls-zoomout`,title:v[`controls.zoomOut.ariaLabel`],"aria-label":v[`controls.zoomOut.ariaLabel`],disabled:g,children:I(np,{})})]}),n&&I(op,{className:`react-flow__controls-fitview`,onClick:()=>{x(i),s==null||s()},title:v[`controls.fitView.ariaLabel`],"aria-label":v[`controls.fitView.ariaLabel`],children:I(rp,{})}),r&&I(op,{className:`react-flow__controls-interactive`,onClick:()=>{m.setState({nodesDraggable:!h,nodesConnectable:!h,elementsSelectable:!h}),c==null||c(!h)},title:v[`controls.interactive.ariaLabel`],"aria-label":v[`controls.interactive.ariaLabel`],children:I(h?ap:ip,{})}),u]})}cp.displayName=`Controls`;var lp=G(cp);function up({id:e,x:t,y:n,width:r,height:i,style:a,color:o,strokeColor:s,strokeWidth:c,className:l,borderRadius:u,shapeRendering:d,selected:f,onClick:p}){let{background:m,backgroundColor:h}=a||{},g=o||m||h;return I(`rect`,{className:J([`react-flow__minimap-node`,{selected:f},l]),x:t,y:n,rx:u,ry:u,width:r,height:i,style:{fill:g,stroke:s,strokeWidth:c},shapeRendering:d,onClick:p?t=>p(t,e):void 0})}var dp=G(up),fp=e=>e.nodes.map(e=>e.id),pp=e=>e instanceof Function?e:()=>e;function mp({nodeStrokeColor:e,nodeColor:t,nodeClassName:n=``,nodeBorderRadius:r=5,nodeStrokeWidth:i,nodeComponent:a=dp,onClick:o}){let s=Z(fp,X),c=pp(t),l=pp(e),u=pp(n),d=typeof window>`u`||window.chrome?`crispEdges`:`geometricPrecision`;return I(w,{children:s.map(e=>I(gp,{id:e,nodeColorFunc:c,nodeStrokeColorFunc:l,nodeClassNameFunc:u,nodeBorderRadius:r,nodeStrokeWidth:i,NodeComponent:a,onClick:o,shapeRendering:d},e))})}function hp({id:e,nodeColorFunc:t,nodeStrokeColorFunc:n,nodeClassNameFunc:r,nodeBorderRadius:i,nodeStrokeWidth:a,shapeRendering:o,NodeComponent:s,onClick:c}){let{node:l,x:u,y:d,width:f,height:p}=Z(t=>{let n=t.nodeLookup.get(e);if(!n)return{node:void 0,x:0,y:0,width:0,height:0};let r=n.internals.userNode,{x:i,y:a}=n.internals.positionAbsolute,{width:o,height:s}=Ts(r);return{node:r,x:i,y:a,width:o,height:s}},X);return!l||l.hidden||!Es(l)?null:I(s,{x:u,y:d,width:f,height:p,style:l.style,selected:!!l.selected,className:r(l),color:t(l),borderRadius:i,strokeColor:n(l),strokeWidth:a,shapeRendering:o,onClick:c,id:l.id})}var gp=G(hp),_p=G(mp),vp=200,yp=150,bp=e=>!e.hidden,xp=e=>{let t={x:-e.transform[0]/e.transform[2],y:-e.transform[1]/e.transform[2],width:e.width/e.transform[2],height:e.height/e.transform[2]},n=!1;for(let t of e.nodeLookup.values())if(!t.hidden){n=!0;break}return{viewBB:t,boundingRect:n?us(qo(e.nodeLookup,{filter:bp}),t):t,rfId:e.rfId,panZoom:e.panZoom,translateExtent:e.translateExtent,flowWidth:e.width,flowHeight:e.height,ariaLabelConfig:e.ariaLabelConfig}},Sp=(e,t)=>e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height,Cp=(e,t)=>Sp(e.viewBB,t.viewBB)&&Sp(e.boundingRect,t.boundingRect)&&e.rfId===t.rfId&&e.panZoom===t.panZoom&&e.translateExtent===t.translateExtent&&e.flowWidth===t.flowWidth&&e.flowHeight===t.flowHeight&&e.ariaLabelConfig===t.ariaLabelConfig,wp=`react-flow__minimap-desc`;function Tp({style:e,className:t,nodeStrokeColor:n,nodeColor:r,nodeClassName:i=``,nodeBorderRadius:o=5,nodeStrokeWidth:s,nodeComponent:c,bgColor:l,maskColor:u,maskStrokeColor:d,maskStrokeWidth:f,position:p=`bottom-right`,onClick:m,onNodeClick:h,pannable:g=!1,zoomable:_=!1,ariaLabel:y,inversePan:b,zoomStep:x=1,offsetScale:S=5}){let C=Q(),w=v(null),{boundingRect:E,panZoom:D,viewBB:O,rfId:k,translateExtent:A,flowWidth:j,flowHeight:M,ariaLabelConfig:N}=Z(xp,Cp),P=(e==null?void 0:e.width)??vp,F=(e==null?void 0:e.height)??yp,L=E.width/P,R=E.height/F,B=Math.max(L,R),ee=B*P,V=B*F,H=S*B,U=E.x-(ee-E.width)/2-H,W=E.y-(V-E.height)/2-H,te=ee+H*2,ne=V+H*2,G=`${wp}-${k}`,re=v(0),K=v();re.current=B,a(()=>{let e=C.getState().panZoom;if(w.current&&e)return K.current=Kc({domNode:w.current,panZoom:e,getTransform:()=>C.getState().transform,getViewScale:()=>re.current}),()=>{var e;(e=K.current)==null||e.destroy()}},[D]),a(()=>{var e;(e=K.current)==null||e.update({translateExtent:A,width:j,height:M,inversePan:b,pannable:g,zoomStep:x,zoomable:_})},[g,_,b,x,A,j,M]);let q=m?e=>{var t;let[n,r]=((t=K.current)==null?void 0:t.pointer(e))||[0,0];m(e,{x:n,y:r})}:void 0,ie=T((e,t)=>{let n=C.getState().nodeLookup.get(t).internals.userNode;h==null||h(e,n)},[h]),ae=h?ie:void 0,oe=y??N[`minimap.ariaLabel`];return I(Gl,{position:p,style:{...e,"--xy-minimap-background-color-props":typeof l==`string`?l:void 0,"--xy-minimap-mask-background-color-props":typeof u==`string`?u:void 0,"--xy-minimap-mask-stroke-color-props":typeof d==`string`?d:void 0,"--xy-minimap-mask-stroke-width-props":typeof f==`number`?f*B:void 0,"--xy-minimap-node-background-color-props":typeof r==`string`?r:void 0,"--xy-minimap-node-stroke-color-props":typeof n==`string`?n:void 0,"--xy-minimap-node-stroke-width-props":typeof s==`number`?s:void 0},className:J([`react-flow__minimap`,t]),"data-testid":`rf__minimap`,children:z(`svg`,{width:P,height:F,viewBox:`${U} ${W} ${te} ${ne}`,className:`react-flow__minimap-svg`,role:`img`,"aria-labelledby":G,ref:w,onClick:q,children:[oe&&I(`title`,{id:G,children:oe}),I(_p,{onClick:ae,nodeColor:r,nodeStrokeColor:n,nodeBorderRadius:o,nodeClassName:i,nodeStrokeWidth:s,nodeComponent:c}),I(`path`,{className:`react-flow__minimap-mask`,d:`M${U-H},${W-H}h${te+H*2}v${ne+H*2}h${-te-H*2}z
7
- M${O.x},${O.y}h${O.width}v${O.height}h${-O.width}z`,fillRule:`evenodd`,pointerEvents:`none`})]})})}Tp.displayName=`MiniMap`;var Ep=G(Tp),Dp=e=>t=>e?`${Math.max(1/t.transform[2],1)}`:void 0,Op={[sl.Line]:`right`,[sl.Handle]:`bottom-right`};function kp({nodeId:e,position:t,variant:n=sl.Handle,className:r,style:i=void 0,children:o,color:s,minWidth:c=10,minHeight:l=10,maxWidth:u=Number.MAX_VALUE,maxHeight:d=Number.MAX_VALUE,keepAspectRatio:f=!1,resizeDirection:p,autoScale:m=!0,shouldResize:h,onResizeStart:g,onResize:_,onResizeEnd:y}){let b=Qu(),x=typeof e==`string`?e:b,S=Q(),C=v(null),w=n===sl.Handle,E=Z(T(Dp(w&&m),[w,m]),X),D=v(null),O=t??Op[n];a(()=>{if(C.current&&x)return D.current||=bl({domNode:C.current,nodeId:x,getStoreItems:()=>{let{nodeLookup:e,transform:t,snapGrid:n,snapToGrid:r,nodeOrigin:i,domNode:a}=S.getState();return{nodeLookup:e,transform:t,snapGrid:n,snapToGrid:r,nodeOrigin:i,paneDomNode:a}},onChange:(e,t)=>{let{triggerNodeChanges:n,nodeLookup:r,parentLookup:i,nodeOrigin:a}=S.getState(),o=[],s={x:e.x,y:e.y},c=r.get(x);if(c&&c.expandParent&&c.parentId){let t=c.origin??a,n=e.width??c.measured.width??0,l=e.height??c.measured.height??0,u=Tc([{id:c.id,parentId:c.parentId,rect:{width:n,height:l,...Ds({x:e.x??c.position.x,y:e.y??c.position.y},{width:n,height:l},c.parentId,r,t)}}],r,i,a);o.push(...u),s.x=e.x?Math.max(t[0]*n,e.x):void 0,s.y=e.y?Math.max(t[1]*l,e.y):void 0}if(s.x!==void 0&&s.y!==void 0){let e={id:x,type:`position`,position:{...s}};o.push(e)}if(e.width!==void 0&&e.height!==void 0){let t={id:x,type:`dimensions`,resizing:!0,setAttributes:p?p===`horizontal`?`width`:`height`:!0,dimensions:{width:e.width,height:e.height}};o.push(t)}for(let e of t){let t={...e,type:`position`};o.push(t)}n(o)},onEnd:({width:e,height:t})=>{let n={id:x,type:`dimensions`,resizing:!1,dimensions:{width:e,height:t}};S.getState().triggerNodeChanges([n])}}),D.current.update({controlPosition:O,boundaries:{minWidth:c,minHeight:l,maxWidth:u,maxHeight:d},keepAspectRatio:f,resizeDirection:p,onResizeStart:g,onResize:_,onResizeEnd:y,shouldResize:h}),()=>{var e;(e=D.current)==null||e.destroy()}},[O,c,l,u,d,f,g,_,y,h]);let k=O.split(`-`);return I(`div`,{className:J([`react-flow__resize-control`,`nodrag`,...k,n,r]),ref:C,style:{...i,scale:E,...s&&{[w?`backgroundColor`:`borderColor`]:s}},children:o})}var Ap=G(kp);function jp({nodeId:e,isVisible:t=!0,handleClassName:n,handleStyle:r,lineClassName:i,lineStyle:a,color:o,minWidth:s=10,minHeight:c=10,maxWidth:l=Number.MAX_VALUE,maxHeight:u=Number.MAX_VALUE,keepAspectRatio:d=!1,autoScale:f=!0,shouldResize:p,onResizeStart:m,onResize:h,onResizeEnd:g}){return t?z(w,{children:[ll.map(t=>I(Ap,{className:i,style:a,nodeId:e,position:t,variant:sl.Line,color:o,minWidth:s,minHeight:c,maxWidth:l,maxHeight:u,onResizeStart:m,keepAspectRatio:d,autoScale:f,shouldResize:p,onResize:h,onResizeEnd:g},t)),cl.map(t=>I(Ap,{className:n,style:r,nodeId:e,position:t,color:o,minWidth:s,minHeight:c,maxWidth:l,maxHeight:u,onResizeStart:m,keepAspectRatio:d,autoScale:f,shouldResize:p,onResize:h,onResizeEnd:g},t))]}):null}var Mp={ms:1,s:1e3,m:6e4,h:36e5,d:864e5},Np=Mp.d;function Pp(e){if(typeof e==`number`)return Number.isFinite(e)&&e>=0?Math.round(e):null;if(typeof e!=`string`)return null;let t=e.trim().toLowerCase().replace(/_/g,``);if(/^(t|time|tod|timeofday)#/.test(t)&&(t=t.substring(t.indexOf(`#`)+1)),!t)return null;let n=t.match(/^(\d{1,2}):(\d{2})(?::(\d{2}))?$/);if(n){let[e,t,r]=[n[1],n[2],n[3]||`0`].map(Number);return t<60&&r<60?((e*60+t)*60+r)*1e3:null}if(/^\d+(\.\d+)?$/.test(t))return Math.round(Number(t));let r=t.match(/(\d+(?:\.\d+)?)(ms|s|m|h|d)/g);return!r||r.join(``)!==t?null:Math.round(r.reduce((e,t)=>{let[,n,r]=t.match(/(\d+(?:\.\d+)?)(ms|s|m|h|d)/);return e+Number(n)*Mp[r]},0))}function Fp(e){if(!e)return`0ms`;if(e<Mp.m)return e>=1e3?`${Math.round(e/100)/10}s`:`${Math.round(e)}ms`;let t=Math.round(e),n=[];for(let e of[`d`,`h`,`m`]){let r=Math.floor(t/Mp[e]);r&&(n.push(`${r}${e}`),t-=r*Mp[e])}return t&&n.push(t%1e3?`${Math.round(t/100)/10}s`:`${t/1e3}s`),n.join(``)}function Ip(e){let t=Math.round((e%Np+Np)%Np/1e3),n=e=>String(e).padStart(2,`0`),r=`${n(Math.floor(t/3600))}:${n(Math.floor(t/60)%60)}`;return t%60?`${r}:${n(t%60)}`:r}var Lp=n({BLINK:()=>Im,BlinkBlock:()=>pm,CLOCK:()=>jm,CTD:()=>Pm,CTU:()=>Nm,CTUD:()=>Fm,ClockBlock:()=>Zp,CtdBlock:()=>dm,CtuBlock:()=>um,CtudBlock:()=>fm,FTrigBlock:()=>nm,F_TRIG:()=>bm,HYST:()=>wm,HystBlock:()=>om,JS:()=>Lm,JsBlock:()=>gm,LOG:()=>Om,LOG_LIMIT:()=>20,MESSAGE_LIMIT:()=>5,MessageBlock:()=>hm,NOTIFY:()=>km,PID:()=>Dm,PT1:()=>Em,PidBlock:()=>lm,Pt1Block:()=>cm,RAMP:()=>Tm,RS:()=>_m,RTrigBlock:()=>tm,R_TRIG:()=>ym,RampBlock:()=>sm,RsBlock:()=>$p,SCHEDULE:()=>Mm,SENDTO:()=>Am,SR:()=>vm,ScheduleBlock:()=>Qp,SrBlock:()=>em,TOF:()=>Sm,TON:()=>xm,TP:()=>Cm,TofBlock:()=>im,TonBlock:()=>rm,TpBlock:()=>am,concat:()=>Gp,div:()=>Bp,inWindow:()=>Jp,round:()=>Kp,timeOfDay:()=>qp,timeWindow:()=>Xp,toBool:()=>Rp,toInt:()=>Hp,toNum:()=>zp,toReal:()=>Vp,toStr:()=>Wp,toTime:()=>Up});function Rp(e){if(typeof e==`string`){let t=e.trim().toLowerCase();return t===`true`||t===`on`||t===`1`||t===`yes`}return!!e}function zp(e){if(typeof e==`boolean`)return+!!e;let t=typeof e==`number`?e:parseFloat(String(e));return Number.isFinite(t)?t:NaN}function Bp(e,t){return t?e/t:0}function Vp(e){let t=zp(typeof e==`string`?e.replace(`,`,`.`):e);return Number.isNaN(t)?0:t}function Hp(e){return Math.round(Vp(e))}function Up(e){return typeof e==`string`?Pp(e)??Pp(Vp(e))??0:Pp(Vp(e))??0}function Wp(e){switch(typeof e){case`string`:return e;case`number`:case`boolean`:return e.toString();case`undefined`:return``;default:return e===null?``:JSON.stringify(e)}}function Gp(...e){return e.map(Wp).join(``)}function Kp(e,t){let n=Math.max(0,Math.min(10,Math.round(t)||0));if(!Number.isFinite(e))return 0;let r=Number(`${Math.round(Number(`${e}e${n}`))}e-${n}`);return Number.isFinite(r)?r:Math.round(e*10**n)/10**n}function qp(e=Date.now()){let t=new Date(e);return((t.getHours()*60+t.getMinutes())*60+t.getSeconds())*1e3+t.getMilliseconds()}function Jp(e,t,n){return t<=n?e>=t&&e<n:e>=t||e<n}var Yp={all:()=>!0,weekdays:e=>e>=1&&e<=5,weekend:e=>e===0||e===6};function Xp(e,t,n,r=Date.now()){let i=qp(r);if(!Jp(i,e,t))return!1;let a=new Date(r).getDay();return(Yp[n]||Yp.all)(e>t&&i<t?(a+6)%7:a)}var Zp=class{constructor(){R(this,`TOD`,0),R(this,`HOUR`,0),R(this,`MIN`,0),R(this,`WDAY`,1),R(this,`DAY`,1),R(this,`MONTH`,1),R(this,`YEAR`,1970)}run(e=Date.now()){let t=new Date(e);this.TOD=qp(e),this.HOUR=t.getHours(),this.MIN=t.getMinutes(),this.WDAY=t.getDay()||7,this.DAY=t.getDate(),this.MONTH=t.getMonth()+1,this.YEAR=t.getFullYear()}},Qp=class{constructor(){R(this,`Q`,!1),R(this,`pending`,0)}run(){this.Q=this.pending>0,this.pending=0}},$p=class{constructor(){R(this,`Q1`,!1)}run(e,t){this.Q1=!t&&(e||this.Q1)}},em=class{constructor(){R(this,`Q1`,!1)}run(e,t){this.Q1=e||!t&&this.Q1}},tm=class{constructor(){R(this,`Q`,!1),R(this,`last`,!1)}run(e,t){this.Q=!t&&e&&!this.last,this.last=e}},nm=class{constructor(){R(this,`Q`,!1),R(this,`last`,!1)}run(e,t){this.Q=!t&&!e&&this.last,this.last=e}},rm=class{constructor(){R(this,`Q`,!1),R(this,`ET`,0),R(this,`last`,!1)}run(e,t,n){e?(this.last&&(this.ET=Math.min(this.ET+n,t)),this.Q=this.ET>=t):(this.ET=0,this.Q=!1),this.last=e}},im=class{constructor(){R(this,`Q`,!1),R(this,`ET`,0),R(this,`last`,!1)}run(e,t,n){e?(this.ET=0,this.Q=!0):this.Q&&=(this.last||(this.ET=Math.min(this.ET+n,t)),this.ET<t),this.last=e}},am=class{constructor(){R(this,`Q`,!1),R(this,`ET`,0),R(this,`last`,!1)}run(e,t,n){this.Q?(this.ET=Math.min(this.ET+n,t),this.ET>=t&&(this.Q=!1)):e&&!this.last?(this.Q=!0,this.ET=0):!e&&this.ET>=t&&(this.ET=0),this.last=e}},om=class{constructor(){R(this,`Q`,!1)}run(e,t,n){e>t?this.Q=!0:e<n&&(this.Q=!1)}},sm=class{constructor(){R(this,`OUT`,0)}run(e,t,n,r,i){i?this.OUT=e:e>this.OUT?this.OUT=t>0?Math.min(e,this.OUT+t*r/1e3):e:e<this.OUT&&(this.OUT=n>0?Math.max(e,this.OUT-n*r/1e3):e)}},cm=class{constructor(){R(this,`OUT`,0)}run(e,t,n,r){r||t<=0?this.OUT=e:this.OUT+=(e-this.OUT)*(1-Math.exp(-n/t))}},lm=class{constructor(){R(this,`Y`,0),R(this,`integral`,0),R(this,`derivative`,0),R(this,`lastPV`,0)}run(e,t,n,r,i,a,o,s,c,l){let u=Math.min(a,o),d=Math.max(a,o),f=e-t,p=n*f;if(l||s)this.integral=0,this.derivative=0;else if(c>0){if(i>0){let e=-n*i*(t-this.lastPV)/c;this.derivative+=(e-this.derivative)*(1-Math.exp(-c/(i/10)))}else this.derivative=0;if(r>0){let e=this.integral+n*f*c/r,t=p+this.derivative;this.integral=e>this.integral?Math.min(e,Math.max(this.integral,d-t)):Math.max(e,Math.min(this.integral,u-t))}else this.integral=0}this.lastPV=t,this.Y=Math.min(d,Math.max(u,p+this.integral+this.derivative))}},um=class{constructor(){R(this,`Q`,!1),R(this,`CV`,0),R(this,`last`,!1)}run(e,t,n,r){t?this.CV=0:e&&!this.last&&!r&&this.CV++,this.last=e,this.Q=this.CV>=n}},dm=class{constructor(){R(this,`Q`,!0),R(this,`CV`,0),R(this,`last`,!1)}run(e,t,n,r){t?this.CV=n:e&&!this.last&&!r&&this.CV--,this.last=e,this.Q=this.CV<=0}},fm=class{constructor(){R(this,`QU`,!1),R(this,`QD`,!0),R(this,`CV`,0),R(this,`lastUp`,!1),R(this,`lastDown`,!1)}run(e,t,n,r,i,a){if(n)this.CV=0;else if(r)this.CV=i;else if(!a){let n=e&&!this.lastUp,r=t&&!this.lastDown;n&&!r?this.CV++:r&&!n&&this.CV--}this.lastUp=e,this.lastDown=t,this.QU=this.CV>=i,this.QD=this.CV<=0}},pm=class{constructor(){R(this,`Q`,!1),R(this,`elapsed`,0),R(this,`running`,!1)}run(e,t,n,r){if(!e){this.Q=!1,this.running=!1;return}if(!this.running){this.running=!0,this.Q=!0,this.elapsed=0;return}this.elapsed+=r;let i=t+n;i>0&&this.elapsed>=i&&(this.elapsed%=i);let a=this.Q?t:n;this.elapsed>=a&&(this.elapsed-=a,this.Q=!this.Q)}},mm=6e4,hm=class{constructor(e,t=`lines`){R(this,`limit`,void 0),R(this,`noun`,void 0),R(this,`text`,``),R(this,`last`,!1),R(this,`lastTrig`,!1),R(this,`lastValue`,void 0),R(this,`window`,0),R(this,`count`,0),this.limit=e,this.noun=t}get line(){return this.last?`${this.text} (${this.note()})`:this.text}note(){return`${this.limit} ${this.noun} a minute at most - more are left out until the minute is over`}run(e,t,n,r,i,a){this.window+=i,this.window>=mm&&(this.window=0,this.count=0);let o=!a&&(r===`change`?!Object.is(t,this.lastValue):e&&!this.lastTrig);return this.lastTrig=e,this.lastValue=t,!o||this.count>=this.limit?!1:(this.count++,this.text=n.includes(`%s`)?n.split(`%s`).join(t==null?String(t):Wp(t)):n,this.last=this.count===this.limit,!0)}},gm=class{constructor(e,t=1){R(this,`fn`,void 0),R(this,`out`,void 0),R(this,`state`,{}),this.fn=e,this.out=Array(t).fill(0)}run(e,t,n){let r=this.fn(...e,t,n,this.state);(Array.isArray(r)?r:[r]).forEach((e,t)=>{e!==void 0&&t<this.out.length&&(this.out[t]=e)})}},_m=()=>new $p,vm=()=>new em,ym=()=>new tm,bm=()=>new nm,xm=()=>new rm,Sm=()=>new im,Cm=()=>new am,wm=()=>new om,Tm=()=>new sm,Em=()=>new cm,Dm=()=>new lm,Om=()=>new hm(20),km=()=>new hm(5,`messages`),Am=()=>new hm(5,`messages`),jm=()=>new Zp,Mm=()=>new Qp,Nm=()=>new um,Pm=()=>new dm,Fm=()=>new fm,Im=()=>new pm,Lm=(e,t)=>new gm(e,t),Rm=`1.5.0`,zm=`@iobroker/fb-runtime`,Bm=`@userFb/`,Vm=[`nightEnd`,`nauticalDawn`,`dawn`,`sunrise`,`sunriseEnd`,`goldenHourEnd`,`solarNoon`,`goldenHour`,`sunsetStart`,`sunset`,`dusk`,`nauticalDusk`,`night`,`nadir`],Hm=[{type:`AND`,category:`logic`,inputs:[],outputs:[{id:`OUT`,type:`BOOL`}],extensible:{prefix:`IN`,type:`BOOL`,default:!0,min:2,max:16},code:`{OUT} = {IN*: && };`},{type:`OR`,category:`logic`,inputs:[],outputs:[{id:`OUT`,type:`BOOL`}],extensible:{prefix:`IN`,type:`BOOL`,default:!1,min:2,max:16},code:`{OUT} = {IN*: || };`},{type:`XOR`,category:`logic`,inputs:[],outputs:[{id:`OUT`,type:`BOOL`}],extensible:{prefix:`IN`,type:`BOOL`,default:!1,min:2,max:16},code:`{OUT} = {IN*: !== };`},{type:`NOT`,category:`logic`,inputs:[{id:`IN`,type:`BOOL`,default:!1}],outputs:[{id:`OUT`,type:`BOOL`}],code:`{OUT} = !{IN};`},{type:`RS`,category:`memory`,inputs:[{id:`S`,type:`BOOL`,default:!1},{id:`R1`,type:`BOOL`,default:!1}],outputs:[{id:`Q1`,type:`BOOL`}],stateful:!0,code:`{I}.run({S}, {R1}); {Q1} = {I}.Q1;`},{type:`SR`,category:`memory`,inputs:[{id:`S1`,type:`BOOL`,default:!1},{id:`R`,type:`BOOL`,default:!1}],outputs:[{id:`Q1`,type:`BOOL`}],stateful:!0,code:`{I}.run({S1}, {R}); {Q1} = {I}.Q1;`},{type:`R_TRIG`,category:`memory`,inputs:[{id:`CLK`,type:`BOOL`,default:!1}],outputs:[{id:`Q`,type:`BOOL`}],stateful:!0,code:`{I}.run({CLK}, firstScan); {Q} = {I}.Q;`},{type:`F_TRIG`,category:`memory`,inputs:[{id:`CLK`,type:`BOOL`,default:!1}],outputs:[{id:`Q`,type:`BOOL`}],stateful:!0,code:`{I}.run({CLK}, firstScan); {Q} = {I}.Q;`},{type:`TON`,category:`timers`,inputs:[{id:`IN`,type:`BOOL`,default:!1},{id:`PT`,type:`TIME`,param:!0,default:1e3}],outputs:[{id:`Q`,type:`BOOL`},{id:`ET`,type:`TIME`}],stateful:!0,timeDependent:!0,code:`{I}.run({IN}, {PT}, dt); {Q} = {I}.Q; {ET} = {I}.ET;`},{type:`TOF`,category:`timers`,inputs:[{id:`IN`,type:`BOOL`,default:!1},{id:`PT`,type:`TIME`,param:!0,default:1e3}],outputs:[{id:`Q`,type:`BOOL`},{id:`ET`,type:`TIME`}],stateful:!0,timeDependent:!0,code:`{I}.run({IN}, {PT}, dt); {Q} = {I}.Q; {ET} = {I}.ET;`},{type:`TP`,category:`timers`,inputs:[{id:`IN`,type:`BOOL`,default:!1},{id:`PT`,type:`TIME`,param:!0,default:1e3}],outputs:[{id:`Q`,type:`BOOL`},{id:`ET`,type:`TIME`}],stateful:!0,timeDependent:!0,code:`{I}.run({IN}, {PT}, dt); {Q} = {I}.Q; {ET} = {I}.ET;`},{type:`BLINK`,category:`timers`,inputs:[{id:`EN`,type:`BOOL`,default:!0},{id:`TH`,type:`TIME`,param:!0,default:1e3},{id:`TL`,type:`TIME`,param:!0,default:1e3}],outputs:[{id:`Q`,type:`BOOL`}],stateful:!0,timeDependent:!0,code:`{I}.run({EN}, {TH}, {TL}, dt); {Q} = {I}.Q;`},{type:`CTU`,category:`counters`,inputs:[{id:`CU`,type:`BOOL`,default:!1},{id:`R`,type:`BOOL`,default:!1},{id:`PV`,type:`INT`,param:!0,default:10}],outputs:[{id:`Q`,type:`BOOL`},{id:`CV`,type:`INT`}],stateful:!0,code:`{I}.run({CU}, {R}, {PV}, firstScan); {Q} = {I}.Q; {CV} = {I}.CV;`},{type:`CTD`,category:`counters`,inputs:[{id:`CD`,type:`BOOL`,default:!1},{id:`LD`,type:`BOOL`,default:!1},{id:`PV`,type:`INT`,param:!0,default:10}],outputs:[{id:`Q`,type:`BOOL`},{id:`CV`,type:`INT`}],stateful:!0,code:`{I}.run({CD}, {LD}, {PV}, firstScan); {Q} = {I}.Q; {CV} = {I}.CV;`},{type:`CTUD`,category:`counters`,inputs:[{id:`CU`,type:`BOOL`,default:!1},{id:`CD`,type:`BOOL`,default:!1},{id:`R`,type:`BOOL`,default:!1},{id:`LD`,type:`BOOL`,default:!1},{id:`PV`,type:`INT`,param:!0,default:10}],outputs:[{id:`QU`,type:`BOOL`},{id:`QD`,type:`BOOL`},{id:`CV`,type:`INT`}],stateful:!0,code:`{I}.run({CU}, {CD}, {R}, {LD}, {PV}, firstScan); {QU} = {I}.QU; {QD} = {I}.QD; {CV} = {I}.CV;`},...[[`GT`,`>`],[`GE`,`>=`],[`LT`,`<`],[`LE`,`<=`]].map(([e,t])=>({type:e,category:`compare`,inputs:[{id:`IN1`,type:`REAL`,default:0},{id:`IN2`,type:`REAL`,default:0}],outputs:[{id:`OUT`,type:`BOOL`}],code:`{OUT} = {IN1} ${t} {IN2};`})),...[[`EQ`,`===`],[`NE`,`!==`]].map(([e,t])=>({type:e,category:`compare`,inputs:[{id:`IN1`,type:`ANY`,default:0},{id:`IN2`,type:`ANY`,default:0}],outputs:[{id:`OUT`,type:`BOOL`}],code:`{OUT} = {IN1} ${t} {IN2};`})),{type:`ADD`,category:`arithmetic`,inputs:[],outputs:[{id:`OUT`,type:`REAL`}],extensible:{prefix:`IN`,type:`REAL`,default:0,min:2,max:16},code:`{OUT} = {IN*: + };`},{type:`MUL`,category:`arithmetic`,inputs:[],outputs:[{id:`OUT`,type:`REAL`}],extensible:{prefix:`IN`,type:`REAL`,default:1,min:2,max:16},code:`{OUT} = {IN*: * };`},{type:`SUB`,category:`arithmetic`,inputs:[{id:`IN1`,type:`REAL`,default:0},{id:`IN2`,type:`REAL`,default:0}],outputs:[{id:`OUT`,type:`REAL`}],code:`{OUT} = {IN1} - {IN2};`},{type:`DIV`,category:`arithmetic`,inputs:[{id:`IN1`,type:`REAL`,default:0},{id:`IN2`,type:`REAL`,default:1}],outputs:[{id:`OUT`,type:`REAL`}],code:`{OUT} = fb.div({IN1}, {IN2});`},{type:`MIN`,category:`arithmetic`,inputs:[],outputs:[{id:`OUT`,type:`REAL`}],extensible:{prefix:`IN`,type:`REAL`,default:0,min:2,max:16},code:`{OUT} = Math.min({IN*:, });`},{type:`MAX`,category:`arithmetic`,inputs:[],outputs:[{id:`OUT`,type:`REAL`}],extensible:{prefix:`IN`,type:`REAL`,default:0,min:2,max:16},code:`{OUT} = Math.max({IN*:, });`},{type:`ROUND`,category:`arithmetic`,inputs:[{id:`IN`,type:`REAL`,default:0},{id:`DIGITS`,type:`INT`,param:!0,default:0}],outputs:[{id:`OUT`,type:`REAL`}],code:`{OUT} = fb.round({IN}, {DIGITS});`},...[[`TO_BOOL`,`BOOL`,`toBool`],[`TO_INT`,`INT`,`toInt`],[`TO_REAL`,`REAL`,`toReal`],[`TO_TIME`,`TIME`,`toTime`],[`TO_STRING`,`STRING`,`toStr`]].map(([e,t,n])=>({type:e,category:`convert`,inputs:[{id:`IN`,type:`ANY`,default:t===`STRING`?``:0}],outputs:[{id:`OUT`,type:t}],code:`{OUT} = fb.${n}({IN});`})),{type:`CONCAT`,category:`convert`,inputs:[],outputs:[{id:`OUT`,type:`STRING`}],extensible:{prefix:`IN`,type:`ANY`,default:``,min:2,max:16},code:`{OUT} = fb.concat({IN*:, });`},{type:`HYST`,category:`control`,inputs:[{id:`IN`,type:`REAL`,default:0},{id:`HIGH`,type:`REAL`,param:!0,default:1},{id:`LOW`,type:`REAL`,param:!0,default:0}],outputs:[{id:`Q`,type:`BOOL`}],stateful:!0,code:`{I}.run({IN}, {HIGH}, {LOW}); {Q} = {I}.Q;`},{type:`RAMP`,category:`control`,inputs:[{id:`IN`,type:`REAL`,default:0},{id:`UP`,type:`REAL`,param:!0,default:1},{id:`DOWN`,type:`REAL`,param:!0,default:1}],outputs:[{id:`OUT`,type:`REAL`}],stateful:!0,timeDependent:!0,code:`{I}.run({IN}, {UP}, {DOWN}, dt, firstScan); {OUT} = {I}.OUT;`},{type:`PT1`,category:`control`,inputs:[{id:`IN`,type:`REAL`,default:0},{id:`T`,type:`TIME`,param:!0,default:1e4}],outputs:[{id:`OUT`,type:`REAL`}],stateful:!0,timeDependent:!0,code:`{I}.run({IN}, {T}, dt, firstScan); {OUT} = {I}.OUT;`},{type:`PID`,category:`control`,inputs:[{id:`SP`,type:`REAL`,default:0},{id:`PV`,type:`REAL`,default:0},{id:`KP`,type:`REAL`,param:!0,default:1},{id:`TN`,type:`TIME`,param:!0,default:0},{id:`TV`,type:`TIME`,param:!0,default:0},{id:`YMIN`,type:`REAL`,param:!0,default:0},{id:`YMAX`,type:`REAL`,param:!0,default:100},{id:`RST`,type:`BOOL`,default:!1}],outputs:[{id:`Y`,type:`REAL`}],stateful:!0,timeDependent:!0,code:`{I}.run({SP}, {PV}, {KP}, {TN}, {TV}, {YMIN}, {YMAX}, {RST}, dt, firstScan); {Y} = {I}.Y;`},{type:`STATE_IN`,category:`iobroker`,inputs:[],outputs:[{id:`Q`,type:{param:`type`}}],params:[{id:`oid`,type:`OID`,required:!0},{id:`type`,type:`ENUM`,options:[`BOOL`,`INT`,`REAL`,`STRING`],default:`REAL`}],code:`{Q} = rt.input({$oid}, {$type});`},{type:`STATE_OUT`,category:`iobroker`,inputs:[{id:`IN`,type:`ANY`,default:!1}],outputs:[],params:[{id:`oid`,type:`OID`,required:!0},{id:`ack`,type:`BOOL`,default:!1},{id:`minInterval`,type:`TIME`,default:0}],code:`rt.output({$oid}, {IN}, {$ack}, {$minInterval});`},{type:`CONST`,category:`iobroker`,inputs:[],outputs:[{id:`Q`,type:{param:`type`}}],params:[{id:`type`,type:`ENUM`,options:[`BOOL`,`INT`,`REAL`,`TIME`,`STRING`],default:`REAL`},{id:`value`,type:{param:`type`},default:0}],code:`{Q} = {$value};`},{type:`CLOCK`,category:`calendar`,inputs:[],outputs:[{id:`TOD`,type:`TIME`,clock:!0},{id:`HOUR`,type:`INT`},{id:`MIN`,type:`INT`},{id:`WDAY`,type:`INT`},{id:`DAY`,type:`INT`},{id:`MONTH`,type:`INT`},{id:`YEAR`,type:`INT`}],stateful:!0,timeDependent:!0,code:`{I}.run(); {TOD} = {I}.TOD; {HOUR} = {I}.HOUR; {MIN} = {I}.MIN; {WDAY} = {I}.WDAY; {DAY} = {I}.DAY; {MONTH} = {I}.MONTH; {YEAR} = {I}.YEAR;`},{type:`TIMEWINDOW`,category:`calendar`,inputs:[{id:`START`,type:`TIME`,param:!0,default:288e5,clock:!0},{id:`END`,type:`TIME`,param:!0,default:792e5,clock:!0}],outputs:[{id:`Q`,type:`BOOL`}],params:[{id:`days`,type:`ENUM`,options:[`all`,`weekdays`,`weekend`],default:`all`}],timeDependent:!0,code:`{Q} = fb.timeWindow({START}, {END}, {$days});`},{type:`SCHEDULE`,category:`calendar`,inputs:[],outputs:[{id:`Q`,type:`BOOL`}],params:[{id:`cron`,type:`CRON`,default:`0 8 * * *`,required:!0}],stateful:!0,code:`{Q} = rt.cron({I}, {$cron});`},{type:`ASTRO`,category:`calendar`,inputs:[],outputs:[{id:`Q`,type:`BOOL`},{id:`START`,type:`TIME`,clock:!0},{id:`END`,type:`TIME`,clock:!0}],params:[{id:`start`,type:`ENUM`,options:Vm,default:`sunset`},{id:`startOffset`,type:`INT`,default:0},{id:`end`,type:`ENUM`,options:Vm,default:`sunrise`},{id:`endOffset`,type:`INT`,default:0}],timeDependent:!0,code:`{START} = rt.astro({$start}, {$startOffset}); {END} = rt.astro({$end}, {$endOffset}); {Q} = fb.inWindow(fb.timeOfDay(), {START}, {END});`},{type:`LOG`,category:`messages`,inputs:[{id:`TRIG`,type:`BOOL`,default:!1},{id:`IN`,type:`ANY`,default:``}],outputs:[],params:[{id:`text`,type:`STRING`,default:`%s`},{id:`level`,type:`ENUM`,options:[`info`,`warn`,`error`,`debug`],default:`info`},{id:`when`,type:`ENUM`,options:[`edge`,`change`],default:`edge`}],stateful:!0,code:`if ({I}.run({TRIG}, {IN}, {$text}, {$when}, dt, firstScan)) log({I}.line, {$level});`},{type:`NOTIFY`,category:`messages`,inputs:[{id:`TRIG`,type:`BOOL`,default:!1},{id:`IN`,type:`ANY`,default:``}],outputs:[],params:[{id:`text`,type:`STRING`,default:`%s`},{id:`category`,type:`ENUM`,options:[`message`,`alert`],default:`message`},{id:`when`,type:`ENUM`,options:[`edge`,`change`],default:`edge`}],stateful:!0,code:`if ({I}.run({TRIG}, {IN}, {$text}, {$when}, dt, firstScan)) rt.notify({I}, {$category});`},{type:`SENDTO`,category:`messages`,inputs:[{id:`TRIG`,type:`BOOL`,default:!1},{id:`IN`,type:`ANY`,default:``}],outputs:[],params:[{id:`instance`,type:`INSTANCE`,required:!0},{id:`text`,type:`STRING`,default:`%s`},{id:`title`,type:`STRING`,default:``},{id:`command`,type:`STRING`,default:`send`},{id:`when`,type:`ENUM`,options:[`edge`,`change`],default:`edge`}],stateful:!0,code:`if ({I}.run({TRIG}, {IN}, {$text}, {$when}, dt, firstScan)) rt.send({I}, {$instance}, {$command}, {$title});`},{type:`JS`,category:`expert`,inputs:[],outputs:[],extensible:{prefix:`IN`,type:`ANY`,default:0,min:0,max:8,count:2},extensibleOutputs:{prefix:`OUT`,type:`ANY`,min:1,max:8},params:[{id:`code`,type:`CODE`,default:`return IN1;`}],stateful:!0,code:``},{type:`FB_IN`,category:`interface`,inputs:[],outputs:[{id:`Q`,type:{param:`type`}}],params:[{id:`pin`,type:`NAME`,required:!0},{id:`type`,type:`ENUM`,options:[`BOOL`,`INT`,`REAL`,`TIME`,`STRING`],default:`BOOL`},{id:`value`,type:{param:`type`},default:!1}],code:`{Q} = self[{$pin}];`},{type:`FB_OUT`,category:`interface`,inputs:[{id:`IN`,type:{param:`type`},default:!1}],outputs:[],params:[{id:`pin`,type:`NAME`,required:!0},{id:`type`,type:`ENUM`,options:[`BOOL`,`INT`,`REAL`,`TIME`,`STRING`],default:`BOOL`}],code:`self[{$pin}] = {IN};`}],Um=[`iobroker`,`logic`,`memory`,`timers`,`counters`,`compare`,`arithmetic`,`convert`,`control`,`calendar`,`messages`,`expert`],Wm=new Map(Hm.map(e=>[e.type,e])),Gm=[`BOOL`,`INT`,`REAL`,`TIME`,`STRING`];function Km(e,t){return e.graph.blocks.filter(e=>{var n;return e.type===t&&typeof((n=e.params)==null?void 0:n.pin)==`string`&&e.params.pin}).sort((e,t)=>e.pos[1]-t.pos[1]||e.pos[0]-t.pos[0])}function qm(e){var t;let n=(t=e.params)==null?void 0:t.type;return Gm.includes(n)?n:`BOOL`}function Jm(e,t,n){return n.add(e.type),e.graph.blocks.some(e=>{var r;let i=t[e.type];return i?!n.has(i.type)&&Jm(i,t,n):!!((r=Wm.get(e.type))!=null&&r.timeDependent)})}function Ym(e,t){return{type:e.type,category:`user`,inputs:Km(e,`FB_IN`).map(e=>{var t;return{id:String(e.params.pin),type:qm(e),default:(t=e.params)==null?void 0:t.value}}),outputs:Km(e,`FB_OUT`).map(e=>({id:String(e.params.pin),type:qm(e)})),stateful:!0,timeDependent:Jm(e,t,new Set),code:``,user:e}}function Xm(e,t){let n=Wm.get(e);if(n)return n;let r=t==null?void 0:t[e];return r?Ym(r,t):void 0}var Zm=`//#fbd:`,Qm=1e4,$m=/^[A-Za-z_][A-Za-z0-9_]*$/,eh=[`BOOL`,`INT`,`REAL`,`TIME`,`STRING`];function th(){return{format:1,runtime:Rm,cycle:{mode:`auto`,ms:200},blocks:[],links:[],comments:[]}}function nh(e,t,n){if(typeof t==`object`){var r,i;let a=((r=e.params)==null?void 0:r[t.param])??(n==null||(i=n.params)==null||(i=i.find(e=>e.id===t.param))==null?void 0:i.default);return eh.includes(a)?a:`REAL`}return t}function rh(e,t){var n;if(!t.extensible)return t.inputs.length;let r=Number((n=e.params)==null?void 0:n.inputs);return Math.max(t.extensible.min,Math.min(t.extensible.max,Math.round(Number.isFinite(r)?r:t.extensible.min)))}function ih(e,t=Xm(e.type)){if(!t)return[];let n=t.inputs.map(n=>({...n,type:nh(e,n.type,t)}));if(t.extensible){let{prefix:r,type:i,default:a}=t.extensible;for(let o=1;o<=rh(e,t);o++)n.push({id:`${r}${o}`,type:nh(e,i,t),default:a})}return n}function ah(e,t){var n;if(!t.extensibleOutputs)return t.outputs.length;let{min:r,max:i}=t.extensibleOutputs,a=Number((n=e.params)==null?void 0:n.outputs);return Math.max(r,Math.min(i,Math.round(Number.isFinite(a)?a:r)))}function oh(e,t=Xm(e.type)){if(!t)return[];let n=t.outputs.map(n=>({...n,type:nh(e,n.type,t)}));if(t.extensibleOutputs){let{prefix:r,type:i}=t.extensibleOutputs;for(let a=1;a<=ah(e,t);a++)n.push({id:`${r}${a}`,type:nh(e,i,t)})}return n}function sh(e,t){return t===`ANY`||e===`ANY`||e===t||e===`INT`&&t===`REAL`}function ch(e,t){let n=new Set(t),r=0;for(let t of n)if(t.startsWith(e)){let n=Number(t.substring(e.length));Number.isInteger(n)&&n>r&&(r=n)}return`${e}${r+1}`}function lh(e,t,n){var r;let i=Xm(e,n.userBlocks),a={id:ch(`b`,n.blocks.map(e=>e.id)),type:e,name:ch(`${i!=null&&i.user?i.user.name.trim().replace(/\s+/g,`_`):e}_`,n.blocks.map(e=>e.name)),pos:t},o={};return i==null||(r=i.params)==null||r.forEach(e=>{e.default!==void 0&&(o[e.id]=e.default)}),i!=null&&i.extensible&&(o.inputs=i.extensible.count??i.extensible.min),i!=null&&i.extensibleOutputs&&(o.outputs=i.extensibleOutputs.count??i.extensibleOutputs.min),Object.keys(o).length&&(a.params=o),a}function uh(e){let t=th();if(!e||typeof e!=`object`)return t;t.format=typeof e.format==`number`?e.format:1,t.runtime=typeof e.runtime==`string`?e.runtime:Rm,e.cycle&&typeof e.cycle==`object`&&(t.cycle={mode:[`auto`,`cyclic`,`event`].includes(e.cycle.mode)?e.cycle.mode:`auto`,ms:typeof e.cycle.ms==`number`?e.cycle.ms:200}),t.blocks=Array.isArray(e.blocks)?e.blocks.filter(e=>e&&typeof e==`object`):[],t.blocks.forEach(e=>{(!Array.isArray(e.pos)||e.pos.length!==2)&&(e.pos=[0,0]),typeof e.name!=`string`&&(e.name=String(e.id))}),t.links=Array.isArray(e.links)?e.links.filter(e=>e&&Array.isArray(e.from)&&Array.isArray(e.to)).map(e=>{let t={id:e.id,from:e.from,to:e.to};return e.mark===!0&&(t.mark=!0),typeof e.label==`string`&&e.label.trim()&&(t.label=e.label.trim()),t}):[],t.comments=Array.isArray(e.comments)?e.comments.filter(e=>e==null?void 0:e.id):[];let n=e=>e&&typeof e.type==`string`&&typeof e.name==`string`?{type:e.type,name:e.name,version:typeof e.version==`number`?e.version:1,...typeof e.description==`string`?{description:e.description}:{}}:null,r=n(e.block);if(r&&(t.block=r),e.userBlocks&&typeof e.userBlocks==`object`){let r={};for(let[t,i]of Object.entries(e.userBlocks)){let e=n(i);if(e&&e.type===t&&i.graph){let{block:n,userBlocks:a,...o}=uh(i.graph);r[t]={...e,graph:o}}}Object.keys(r).length&&(t.userBlocks=r)}return t}function dh(e){if(!(e!=null&&e.trim()))return th();let t=e.lastIndexOf(Zm);if(t===-1||t>0&&e[t-1]!==`
6
+ `));return[t,t.reduce((e,t)=>e.concat(...t),[])]}return[[],[]]},[e]);return S(()=>{let n=(t==null?void 0:t.target)??cu,i=(t==null?void 0:t.actInsideInputWithModifier)??!0;if(e!==null){let e=e=>{if(a.current=e.ctrlKey||e.metaKey||e.shiftKey||e.altKey,(!a.current||a.current&&!i)&&Rs(e))return!1;let n=du(e.code,c);if(o.current.add(e[n]),uu(s,o.current,!1)){var l;let n=((l=e.composedPath)==null||(l=l.call(e))==null?void 0:l[0])||e.target,i=(n==null?void 0:n.nodeName)===`BUTTON`||(n==null?void 0:n.nodeName)===`A`;t.preventDefault!==!1&&(a.current||!i)&&e.preventDefault(),r(!0)}},l=e=>{let t=du(e.code,c);uu(s,o.current,!0)?(r(!1),o.current.clear()):o.current.delete(e[t]),e.key===`Meta`&&o.current.clear(),a.current=!1},u=()=>{o.current.clear(),r(!1)};return n==null||n.addEventListener(`keydown`,e),n==null||n.addEventListener(`keyup`,l),window.addEventListener(`blur`,u),window.addEventListener(`contextmenu`,u),()=>{n==null||n.removeEventListener(`keydown`,e),n==null||n.removeEventListener(`keyup`,l),window.removeEventListener(`blur`,u),window.removeEventListener(`contextmenu`,u)}}},[e,r]),n}function uu(e,t,n){return e.filter(e=>n||e.length===t.size).some(e=>e.every(e=>t.has(e)))}function du(e,t){return t.includes(e)?`code`:`key`}var fu=()=>{let e=Q();return _(()=>({zoomIn:async t=>{let{panZoom:n}=e.getState();return n?n.scaleBy(1.2,t):!1},zoomOut:async t=>{let{panZoom:n}=e.getState();return n?n.scaleBy(1/1.2,t):!1},zoomTo:async(t,n)=>{let{panZoom:r}=e.getState();return r?r.scaleTo(t,n):!1},getZoom:()=>e.getState().transform[2],setViewport:async(t,n)=>{let{transform:[r,i,a],panZoom:o}=e.getState();return o?(await o.setViewport({x:t.x??r,y:t.y??i,zoom:t.zoom??a},n),!0):!1},getViewport:()=>{let[t,n,r]=e.getState().transform;return{x:t,y:n,zoom:r}},setCenter:async(t,n,r)=>e.getState().setCenter(t,n,r),fitBounds:async(t,n)=>{let{width:r,height:i,minZoom:a,maxZoom:o,panZoom:s}=e.getState(),c=Ss(t,r,i,a,o,(n==null?void 0:n.padding)??.1);return s?(await s.setViewport(c,{duration:n==null?void 0:n.duration,ease:n==null?void 0:n.ease,interpolate:n==null?void 0:n.interpolate}),!0):!1},screenToFlowPosition:(t,n={})=>{let{transform:r,snapGrid:i,snapToGrid:a,domNode:o}=e.getState();if(!o)return t;let{x:s,y:c}=o.getBoundingClientRect(),l={x:t.x-s,y:t.y-c},u=n.snapGrid??i;return _s(l,r,n.snapToGrid??a,u)},flowToScreenPosition:t=>{let{transform:n,domNode:r}=e.getState();if(!r)return t;let{x:i,y:a}=r.getBoundingClientRect(),o=vs(t,n);return{x:o.x+i,y:o.y+a}}}),[])};function pu(e,t){let n=[],r=new Map,i=[];for(let t of e)if(t.type===`add`){i.push(t);continue}else if(t.type===`remove`||t.type===`replace`)r.set(t.id,[t]);else{let e=r.get(t.id);e?e.push(t):r.set(t.id,[t])}for(let e of t){let t=r.get(e.id);if(!t){n.push(e);continue}if(t[0].type===`remove`)continue;if(t[0].type===`replace`){n.push({...t[0].item});continue}let i={...e};for(let e of t)mu(e,i);n.push(i)}return i.length&&i.forEach(e=>{e.index===void 0?n.push({...e.item}):n.splice(e.index,0,{...e.item})}),n}function mu(e,t){switch(e.type){case`select`:t.selected=e.selected;break;case`position`:e.position!==void 0&&(t.position=e.position),e.dragging!==void 0&&(t.dragging=e.dragging);break;case`dimensions`:e.dimensions!==void 0&&(t.measured={...e.dimensions},e.setAttributes&&((e.setAttributes===!0||e.setAttributes===`width`)&&(t.width=e.dimensions.width),(e.setAttributes===!0||e.setAttributes===`height`)&&(t.height=e.dimensions.height))),typeof e.resizing==`boolean`&&(t.resizing=e.resizing)}}function hu(e,t){return pu(e,t)}function gu(e,t){return pu(e,t)}function _u(e,t){return{id:e,type:`select`,selected:t}}function vu(e,t=new Set,n=!1){let r=[];for(let[i,a]of e){let e=t.has(i);(a.selected!==void 0||e)&&a.selected!==e&&(n&&(a.selected=e),r.push(_u(a.id,e)))}return r}function yu({items:e=[],lookup:t}){let n=[],r=new Map(e.map(e=>[e.id,e]));for(let[r,a]of e.entries()){var i;let e=t.get(a.id),o=(e==null||(i=e.internals)==null?void 0:i.userNode)??e;o!==void 0&&o!==a&&n.push({id:a.id,item:a,type:`replace`}),o===void 0&&n.push({item:a,type:`add`,index:r})}for(let[e]of t)r.get(e)===void 0&&n.push({id:e,type:`remove`});return n}function bu(e){return{id:e.id,type:`remove`}}var xu=hs(`React Flow`,`https://reactflow.dev/`);function Su(e,t,n={}){return Zs(e,t,{...n,onError:n.onError??xu})}var Cu=e=>Uo(e),wu=e=>Ho(e);function Tu(e){return H(e)}var Eu=typeof window<`u`?c:S;function Du(e){let[t,n]=N(BigInt(0)),[r]=N(()=>Ou(()=>n(e=>e+BigInt(1))));return Eu(()=>{let t=r.get();t.length&&(e(t),r.reset())},[t]),r}function Ou(e){let t=[];return{get:()=>t,reset:()=>{t=[]},push:n=>{t.push(n),e()}}}var ku=j(null);function Au({children:e}){let t=Q(),n=Du(x(e=>{let{nodes:n=[],setNodes:r,hasDefaultNodes:i,onNodesChange:a,nodeLookup:o,fitViewQueued:s,onNodesChangeMiddlewareMap:c}=t.getState(),l=n;for(let t of e)l=typeof t==`function`?t(l):t;let u=yu({items:l,lookup:o});for(let e of c.values())u=e(u);i&&r(l),u.length>0?a==null||a(u):s&&window.requestAnimationFrame(()=>{let{fitViewQueued:e,nodes:n,setNodes:r}=t.getState();e&&r(n)})},[])),r=Du(x(e=>{let{edges:n=[],setEdges:r,hasDefaultEdges:i,onEdgesChange:a,edgeLookup:o}=t.getState(),s=n;for(let t of e)s=typeof t==`function`?t(s):t;i?r(s):a&&a(yu({items:s,lookup:o}))},[])),i=_(()=>({nodeQueue:n,edgeQueue:r}),[]);return O(ku.Provider,{value:i,children:e})}function ju(){let e=o(ku);if(!e)throw Error(`useBatchContext must be used within a BatchProvider`);return e}var Mu=e=>!!e.panZoom;function Nu(){let e=fu(),t=Q(),n=ju(),r=Z(Mu),i=_(()=>{let e=e=>t.getState().nodeLookup.get(e),r=e=>{n.nodeQueue.push(e)},i=e=>{n.edgeQueue.push(e)},a=e=>{var n,r;let{nodeLookup:i,nodeOrigin:a}=t.getState(),o=Cu(e)?e:i.get(e.id),s=o.parentId?Ds(o.position,o.measured,o.parentId,i,a):o.position;return cs({...o,position:s,width:((n=o.measured)==null?void 0:n.width)??o.width,height:((r=o.measured)==null?void 0:r.height)??o.height})},o=(e,t,n={replace:!1})=>{r(r=>r.map(r=>{if(r.id===e){let e=typeof t==`function`?t(r):t;return n.replace&&Cu(e)?e:{...r,...e}}return r}))},s=(e,t,n={replace:!1})=>{i(r=>r.map(r=>{if(r.id===e){let e=typeof t==`function`?t(r):t;return n.replace&&wu(e)?e:{...r,...e}}return r}))};return{getNodes:()=>t.getState().nodes.map(e=>({...e})),getNode:t=>{var n;return(n=e(t))==null?void 0:n.internals.userNode},getInternalNode:e,getEdges:()=>{let{edges:e=[]}=t.getState();return e.map(e=>({...e}))},getEdge:e=>t.getState().edgeLookup.get(e),setNodes:r,setEdges:i,addNodes:e=>{let t=Array.isArray(e)?e:[e];n.nodeQueue.push(e=>[...e,...t])},addEdges:e=>{let t=Array.isArray(e)?e:[e];n.edgeQueue.push(e=>[...e,...t])},toObject:()=>{let{nodes:e=[],edges:n=[],transform:r}=t.getState(),[i,a,o]=r;return{nodes:e.map(e=>({...e})),edges:n.map(e=>({...e})),viewport:{x:i,y:a,zoom:o}}},deleteElements:async({nodes:e=[],edges:n=[]})=>{let{nodes:r,edges:i,onNodesDelete:a,onEdgesDelete:o,triggerNodeChanges:s,triggerEdgeChanges:c,onDelete:l,onBeforeDelete:u}=t.getState(),{nodes:d,edges:f}=await $o({nodesToRemove:e,edgesToRemove:n,nodes:r,edges:i,onBeforeDelete:u}),p=f.length>0,m=d.length>0;if(p){let e=f.map(bu);o==null||o(f),c(e)}if(m){let e=d.map(bu);a==null||a(d),s(e)}return(m||p)&&(l==null||l({nodes:d,edges:f})),{deletedNodes:d,deletedEdges:f}},getIntersectingNodes:(e,n=!0,r)=>{let i=ps(e),o=i?e:a(e),s=r!==void 0;return o?(r||t.getState().nodes).filter(r=>{let a=t.getState().nodeLookup.get(r.id);if(a&&!i&&(r.id===e.id||!a.internals.positionAbsolute))return!1;let c=cs(s?r:a),l=fs(c,o);return n&&l>0||l>=c.width*c.height||l>=o.width*o.height}):[]},isNodeIntersecting:(e,t,n=!0)=>{let r=ps(e)?e:a(e);if(!r)return!1;let i=fs(r,t);return n&&i>0||i>=t.width*t.height||i>=r.width*r.height},updateNode:o,updateNodeData:(e,t,n={replace:!1})=>{o(e,e=>{let r=typeof t==`function`?t(e):t;return n.replace?{...e,data:r}:{...e,data:{...e.data,...r}}},n)},updateEdge:s,updateEdgeData:(e,t,n={replace:!1})=>{s(e,e=>{let r=typeof t==`function`?t(e):t;return n.replace?{...e,data:r}:{...e,data:{...e.data,...r}}},n)},getNodesBounds:e=>{let{nodeLookup:n,nodeOrigin:r}=t.getState();return Ko(e,{nodeLookup:n,nodeOrigin:r})},getHandleConnections:({type:e,id:n,nodeId:r})=>{var i;return Array.from(((i=t.getState().connectionLookup.get(`${r}-${e}${n?`-${n}`:``}`))==null?void 0:i.values())??[])},getNodeConnections:({type:e,handleId:n,nodeId:r})=>{var i;return Array.from(((i=t.getState().connectionLookup.get(`${r}${e?n?`-${e}-${n}`:`-${e}`:``}`))==null?void 0:i.values())??[])},fitView:async e=>{let r=t.getState().fitViewResolver??ks();return t.setState({fitViewQueued:!0,fitViewOptions:e,fitViewResolver:r}),n.nodeQueue.push(e=>[...e]),r.promise}}},[]);return _(()=>({...i,...e,viewportInitialized:r}),[r])}var Pu=e=>e.selected,Fu=typeof window<`u`?window:void 0;function Iu({deleteKeyCode:e,multiSelectionKeyCode:t}){let n=Q(),{deleteElements:r}=Nu(),i=lu(e,{actInsideInputWithModifier:!1}),a=lu(t,{target:Fu});S(()=>{if(i){let{edges:e,nodes:t}=n.getState();r({nodes:t.filter(Pu),edges:e.filter(Pu)}),n.setState({nodesSelectionActive:!1})}},[i]),S(()=>{n.setState({multiSelectionActive:a})},[a])}function Lu(e){let t=Q();S(()=>{let n=()=>{var n,r;if(!e.current||!(((n=(r=e.current).checkVisibility)==null?void 0:n.call(r))??!0))return!1;let i=Fs(e.current);if(i.height===0||i.width===0){var a,o;(a=(o=t.getState()).onError)==null||a.call(o,`004`,jo.error004())}t.setState({width:i.width||500,height:i.height||500})};if(e.current){n(),window.addEventListener(`resize`,n);let t=new ResizeObserver(()=>n());return t.observe(e.current),()=>{window.removeEventListener(`resize`,n),t&&e.current&&t.unobserve(e.current)}}},[])}var Ru={position:`absolute`,width:`100%`,height:`100%`,top:0,left:0},zu=e=>({userSelectionActive:e.userSelectionActive,lib:e.lib,connectionInProgress:e.connection.inProgress});function Bu({onPaneContextMenu:e,zoomOnScroll:t=!0,zoomOnPinch:n=!0,panOnScroll:r=!1,panActivationKeyPressed:a,panOnScrollSpeed:o=.5,panOnScrollMode:s=Io.Free,zoomOnDoubleClick:c=!0,panOnDrag:l=!0,defaultViewport:u,translateExtent:d,minZoom:f,maxZoom:p,zoomActivationKeyCode:m,preventScrolling:h=!0,children:g,noWheelClassName:_,noPanClassName:v,onViewportChange:y,isControlledViewport:b,paneClickDistance:C,selectionOnDrag:w}){let T=Q(),E=i(null),{userSelectionActive:D,lib:k,connectionInProgress:A}=Z(zu,X),j=lu(m),M=i();Lu(E);let N=x(e=>{y==null||y({x:e[0],y:e[1],zoom:e[2]}),b||T.setState({transform:e})},[y,b]);return S(()=>{if(E.current){M.current=ol({domNode:E.current,minZoom:f,maxZoom:p,translateExtent:d,viewport:u,onDraggingChange:e=>T.setState(t=>t.paneDragging===e?t:{paneDragging:e}),onPanZoomStart:(e,t)=>{let{onViewportChangeStart:n,onMoveStart:r}=T.getState();r==null||r(e,t),n==null||n(t)},onPanZoom:(e,t)=>{let{onViewportChange:n,onMove:r}=T.getState();r==null||r(e,t),n==null||n(t)},onPanZoomEnd:(e,t)=>{let{onViewportChangeEnd:n,onMoveEnd:r}=T.getState();r==null||r(e,t),n==null||n(t)}});let{x:e,y:t,zoom:n}=M.current.getViewport();return T.setState({panZoom:M.current,transform:[e,t,n],domNode:E.current.closest(`.react-flow`)}),()=>{var e;(e=M.current)==null||e.destroy()}}},[]),S(()=>{var i;(i=M.current)==null||i.update({onPaneContextMenu:e,zoomOnScroll:t,zoomOnPinch:n,panOnScroll:r,panActivationKeyPressed:a,panOnScrollSpeed:o,panOnScrollMode:s,zoomOnDoubleClick:c,panOnDrag:l,zoomActivationKeyPressed:j,preventScrolling:h,noPanClassName:v,userSelectionActive:D,noWheelClassName:_,lib:k,onTransformChange:N,connectionInProgress:A,selectionOnDrag:w,paneClickDistance:C})},[e,t,n,r,a,o,s,c,l,j,h,v,D,_,k,N,A,w,C]),O(`div`,{className:`react-flow__renderer`,ref:E,style:Ru,children:g})}var Vu=e=>({userSelectionActive:e.userSelectionActive,userSelectionRect:e.userSelectionRect});function Hu(){let{userSelectionActive:e,userSelectionRect:t}=Z(Vu,X);return e&&t?O(`div`,{className:`react-flow__selection react-flow__container`,style:{width:t.width,height:t.height,transform:`translate(${t.x}px, ${t.y}px)`}}):null}var Uu=(e,t)=>n=>{n.target===t.current&&(e==null||e(n))},Wu=e=>({userSelectionActive:e.userSelectionActive,elementsSelectable:e.elementsSelectable,dragging:e.paneDragging,panBy:e.panBy,autoPanSpeed:e.autoPanSpeed});function Gu({isSelecting:e,selectionKeyPressed:t,selectionMode:n=Lo.Full,panOnDrag:r,autoPanOnSelection:a,paneClickDistance:o,selectionOnDrag:s,onSelectionStart:c,onSelectionEnd:l,onPaneClick:u,onPaneContextMenu:d,onPaneScroll:f,onPaneMouseEnter:p,onPaneMouseMove:m,onPaneMouseLeave:h,children:g}){let _=i(0),v=Q(),{userSelectionActive:y,elementsSelectable:b,dragging:x,panBy:C,autoPanSpeed:w}=Z(Wu,X),T=b&&(e||y),E=i(null),D=i(),k=i(new Set),A=i(new Set),j=i(!1),M=i(!1),N=i({x:0,y:0}),P=i(!1),F=e=>{if(M.current||j.current||v.getState().connection.inProgress){M.current=!1,j.current=!1;return}u==null||u(e),v.getState().resetSelectedElements(),v.setState({nodesSelectionActive:!1})},L=e=>{if(Array.isArray(r)&&r!=null&&r.includes(2)){e.preventDefault();return}d==null||d(e)},ee=f?e=>f(e):void 0,R=e=>{M.current&&=(e.stopPropagation(),!1)},z=n=>{var i,a;if(n.pointerType===`touch`&&r!==!1&&!t)return;let{domNode:o,transform:c}=v.getState();if(D.current=o==null?void 0:o.getBoundingClientRect(),!D.current)return;let l=n.target===E.current;if(!l&&n.target.closest(`.nokey`)||!e||!(s&&l||t)||n.button!==0||!n.isPrimary)return;(i=n.target)==null||(a=i.setPointerCapture)==null||a.call(i,n.pointerId),M.current=!1;let{x:u,y:d}=Bs(n.nativeEvent,D.current),f=_s({x:u,y:d},c);v.setState({userSelectionRect:{width:0,height:0,startX:f.x,startY:f.y,x:u,y:d}}),l||(n.stopPropagation(),n.preventDefault())};function te(e,t){let{userSelectionRect:r}=v.getState();if(!r)return;let{transform:i,nodeLookup:a,edgeLookup:o,connectionLookup:s,triggerNodeChanges:c,triggerEdgeChanges:l,defaultEdgeOptions:u}=v.getState(),d={x:r.startX,y:r.startY},{x:f,y:p}=vs(d,i),m={startX:d.x,startY:d.y,x:e<f?e:f,y:t<p?t:p,width:Math.abs(e-f),height:Math.abs(t-p)},h=k.current,g=A.current;k.current=new Set(Jo(a,m,i,n===Lo.Partial,!0).map(e=>e.id)),A.current=new Set;let _=(u==null?void 0:u.selectable)??!0;for(let e of k.current){let t=s.get(e);if(t)for(let{edgeId:e}of t.values()){let t=o.get(e);t&&(t.selectable??_)&&A.current.add(e)}}Os(h,k.current)||c(vu(a,k.current,!0)),Os(g,A.current)||l(vu(o,A.current)),v.setState({userSelectionRect:m,userSelectionActive:!0,nodesSelectionActive:!1})}function B(){if(!a||!D.current)return;let[e,t]=is(N.current,D.current,w);C({x:e,y:t}).then(e=>{if(!M.current||!e){_.current=requestAnimationFrame(B);return}let{x:t,y:n}=N.current;te(t,n),_.current=requestAnimationFrame(B)})}let V=()=>{cancelAnimationFrame(_.current),_.current=0,P.current=!1};S(()=>()=>V(),[]);let H=e=>{let{userSelectionRect:n,transform:r,resetSelectedElements:i}=v.getState();if(!D.current||!n)return;let{x:a,y:s}=Bs(e.nativeEvent,D.current);N.current={x:a,y:s};let l=vs({x:n.startX,y:n.startY},r);if(!M.current){let n=t?0:o;if(Math.hypot(a-l.x,s-l.y)<=n)return;i(),c==null||c(e)}M.current=!0,P.current||=(B(),!0),te(a,s)},U=e=>{var t,n;if(!T){e.target===E.current&&v.getState().connection.inProgress&&(j.current=!0);return}e.button===0&&((t=e.target)==null||(n=t.releasePointerCapture)==null||n.call(t,e.pointerId),!y&&e.target===E.current&&v.getState().userSelectionRect&&(F==null||F(e)),v.setState({userSelectionActive:!1,userSelectionRect:null}),M.current&&(l==null||l(e),v.setState({nodesSelectionActive:k.current.size>0})),V())},ne=e=>{var t,n;(t=e.target)==null||(n=t.releasePointerCapture)==null||n.call(t,e.pointerId),V()},re=r===!0||Array.isArray(r)&&r.includes(0);return I(`div`,{className:J([`react-flow__pane`,{draggable:re,dragging:x,selection:e}]),onClick:T?void 0:Uu(F,E),onContextMenu:Uu(L,E),onWheel:Uu(ee,E),onPointerEnter:T?void 0:p,onPointerMove:T?H:m,onPointerUp:U,onPointerCancel:T?ne:void 0,onPointerDownCapture:T?z:void 0,onClickCapture:T?R:void 0,onPointerLeave:h,ref:E,style:Ru,children:[g,O(Hu,{})]})}function Ku({id:e,store:t,unselect:n=!1,nodeRef:r}){let{addSelectedNodes:i,unselectNodesAndEdges:a,multiSelectionActive:o,nodeLookup:s,onError:c}=t.getState(),l=s.get(e);if(!l){c==null||c(`012`,jo.error012(e));return}t.setState({nodesSelectionActive:!1}),l.selected?(n||l.selected&&o)&&(a({nodes:[l],edges:[]}),requestAnimationFrame(()=>{var e;return r==null||(e=r.current)==null?void 0:e.blur()})):i([e])}function qu({nodeRef:e,disabled:t=!1,noDragClassName:n,handleSelector:r,nodeId:a,isSelectable:o,nodeClickDistance:s}){let c=Q(),[l,u]=N(!1),d=i();return S(()=>{if(!t)return d.current=Fc({getStoreItems:()=>c.getState(),onNodeMouseDown:t=>{Ku({id:t,store:c,nodeRef:e})},onDragStart:()=>{u(!0)},onDragStop:()=>{u(!1)}}),()=>{var e;(e=d.current)==null||e.destroy(),d.current=void 0}},[t,c,e]),S(()=>{!t&&e.current&&d.current&&d.current.update({noDragClassName:n,handleSelector:r,domNode:e.current,isSelectable:o,nodeId:a,nodeClickDistance:s})},[n,r,t,o,e,a,s]),l}var Ju=e=>t=>t.selected&&(t.draggable||e&&t.draggable===void 0);function Yu(){let e=Q();return x(t=>{let{nodeExtent:n,snapToGrid:r,snapGrid:i,nodesDraggable:a,onError:o,updateNodePositions:s,nodeLookup:c,nodeOrigin:l}=e.getState(),u=new Map,d=Ju(a),f=r?i[0]:5,p=r?i[1]:5,m=t.direction.x*f*t.factor,h=t.direction.y*p*t.factor;for(let[,e]of c){if(!d(e))continue;let t={x:e.internals.positionAbsolute.x+m,y:e.internals.positionAbsolute.y+h};r&&(t=gs(t,i));let{position:a,positionAbsolute:s}=Qo({nodeId:e.id,nextPosition:t,nodeLookup:c,nodeExtent:n,nodeOrigin:l,onError:o});e.position=a,e.internals.positionAbsolute=s,u.set(e.id,e)}s(u)},[])}var Xu=j(null),Zu=Xu.Provider;Xu.Consumer;var Qu=()=>o(Xu),$u=e=>({connectOnClick:e.connectOnClick,noPanClassName:e.noPanClassName,rfId:e.rfId}),ed=j(null);function td({children:e}){let t=Z($u,X);return O(ed.Provider,{value:t,children:e})}function nd(){let e=o(ed);if(!e)throw Error(`useHandleConfig must be used within a HandleConfigProvider`);return e}var rd={connectingFrom:!1,connectingTo:!1,clickConnecting:!1,isPossibleEndHandle:!0,connectionInProcess:!1,clickConnectionInProcess:!1,valid:!1},id=(e,t,n)=>r=>{let{connectionClickStartHandle:i,connectionMode:a,connection:o}=r,{fromHandle:s,toHandle:c,isValid:l}=o;if(!s&&!i)return rd;let u=(c==null?void 0:c.nodeId)===e&&(c==null?void 0:c.id)===t&&(c==null?void 0:c.type)===n;return{connectingFrom:(s==null?void 0:s.nodeId)===e&&(s==null?void 0:s.id)===t&&(s==null?void 0:s.type)===n,connectingTo:u,clickConnecting:(i==null?void 0:i.nodeId)===e&&(i==null?void 0:i.id)===t&&(i==null?void 0:i.type)===n,isPossibleEndHandle:a===Fo.Strict?(s==null?void 0:s.type)!==n:e!==(s==null?void 0:s.nodeId)||t!==(s==null?void 0:s.id),connectionInProcess:!!s,clickConnectionInProcess:!!i,valid:u&&l}};function ad({type:e=`source`,position:t=Y.Top,isValidConnection:n,isConnectable:r=!0,isConnectableStart:i=!0,isConnectableEnd:a=!0,id:o,onConnect:s,children:c,className:l,onMouseDown:u,onTouchStart:d,...f},p){let m=o||null,h=e===`target`,g=Q(),_=Qu(),{connectOnClick:v,noPanClassName:y,rfId:b}=nd(),{connectingFrom:x,connectingTo:S,clickConnecting:C,isPossibleEndHandle:w,connectionInProcess:T,clickConnectionInProcess:E,valid:D}=Z(id(_,m,e),X);if(!_){var k,A;(k=(A=g.getState()).onError)==null||k.call(A,`010`,jo.error010())}let j=e=>{let{defaultEdgeOptions:t,onConnect:n,hasDefaultEdges:r}=g.getState(),i={...t,...e};if(r){let{edges:e,setEdges:t,onError:n}=g.getState();t(Su(i,e,{onError:n}))}n==null||n(i),s==null||s(i)},M=e=>{if(!_)return;let t=zs(e.nativeEvent);if(i&&(t&&e.button===0||!t)){let t=g.getState();Gc.onPointerDown(e.nativeEvent,{handleDomNode:e.currentTarget,autoPanOnConnect:t.autoPanOnConnect,connectionMode:t.connectionMode,connectionRadius:t.connectionRadius,domNode:t.domNode,nodeLookup:t.nodeLookup,lib:t.lib,isTarget:h,handleId:m,nodeId:_,flowId:t.rfId,panBy:t.panBy,cancelConnection:t.cancelConnection,onConnectStart:t.onConnectStart,onConnectEnd:(...e)=>{var t,n;return(t=(n=g.getState()).onConnectEnd)==null?void 0:t.call(n,...e)},updateConnection:t.updateConnection,onConnect:j,isValidConnection:n||((...e)=>{var t,n;return((t=(n=g.getState()).isValidConnection)==null?void 0:t.call(n,...e))??!0}),getTransform:()=>g.getState().transform,getFromHandle:()=>g.getState().connection.fromHandle,autoPanSpeed:t.autoPanSpeed,dragThreshold:t.connectionDragThreshold})}t?u==null||u(e):d==null||d(e)};return O(`div`,{"data-handleid":m,"data-nodeid":_,"data-handlepos":t,"data-id":`${b}-${_}-${m}-${e}`,className:J([`react-flow__handle`,`react-flow__handle-${t}`,`nodrag`,y,l,{source:!h,target:h,connectable:r,connectablestart:i,connectableend:a,clickconnecting:C,connectingfrom:x,connectingto:S,valid:D,connectionindicator:r&&(!T||w)&&(T||E?a:i)}]),onMouseDown:M,onTouchStart:M,onClick:v?t=>{let{onClickConnectStart:r,onClickConnectEnd:a,connectionClickStartHandle:o,connectionMode:s,isValidConnection:c,lib:l,rfId:u,nodeLookup:d,connection:f}=g.getState();if(!_||!o&&!i)return;if(!o){r==null||r(t.nativeEvent,{nodeId:_,handleId:m,handleType:e}),g.setState({connectionClickStartHandle:{nodeId:_,type:e,id:m}});return}let p=Is(t.target),h=n||c,{connection:v,isValid:y}=Gc.isValid(t.nativeEvent,{handle:{nodeId:_,id:m,type:e},connectionMode:s,fromNodeId:o.nodeId,fromHandleId:o.id||null,fromType:o.type,isValidConnection:h,flowId:u,doc:p,lib:l,nodeLookup:d});y&&v&&j(v);let b=structuredClone(f);delete b.inProgress,b.toPosition=b.toHandle?b.toHandle.position:null,a==null||a(t,b),g.setState({connectionClickStartHandle:null})}:void 0,ref:p,...f,children:c})}var od=W(Tu(ad));function sd({data:e,isConnectable:t,sourcePosition:n=Y.Bottom}){return I(V,{children:[e==null?void 0:e.label,O(od,{type:`source`,position:n,isConnectable:t})]})}function cd({data:e,isConnectable:t,targetPosition:n=Y.Top,sourcePosition:r=Y.Bottom}){return I(V,{children:[O(od,{type:`target`,position:n,isConnectable:t}),e==null?void 0:e.label,O(od,{type:`source`,position:r,isConnectable:t})]})}function ld(){return null}function ud({data:e,isConnectable:t,targetPosition:n=Y.Top}){return I(V,{children:[O(od,{type:`target`,position:n,isConnectable:t}),e==null?void 0:e.label]})}var dd={ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1},ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0}},fd={input:sd,default:cd,output:ud,group:ld};function pd(e){var t,n;if(e.internals.handleBounds===void 0){var r,i;return{width:e.width??e.initialWidth??((r=e.style)==null?void 0:r.width),height:e.height??e.initialHeight??((i=e.style)==null?void 0:i.height)}}return{width:e.width??((t=e.style)==null?void 0:t.width),height:e.height??((n=e.style)==null?void 0:n.height)}}var md=e=>{let{width:t,height:n,x:r,y:i}=qo(e.nodeLookup,{filter:e=>!!e.selected});return{width:ms(t)?t:null,height:ms(n)?n:null,userSelectionActive:e.userSelectionActive,transformString:`translate(${e.transform[0]}px,${e.transform[1]}px) scale(${e.transform[2]}) translate(${r}px,${i}px)`}};function hd({onSelectionContextMenu:e,noPanClassName:t,disableKeyboardA11y:n}){let r=Q(),{width:a,height:o,transformString:s,userSelectionActive:c}=Z(md,X),l=Yu(),u=i(null);S(()=>{if(!n){var e;(e=u.current)==null||e.focus({preventScroll:!0})}},[n]);let d=!c&&a!==null&&o!==null;if(qu({nodeRef:u,disabled:!d}),!d)return null;let f=e?t=>{e(t,r.getState().nodes.filter(e=>e.selected))}:void 0;return O(`div`,{className:J([`react-flow__nodesselection`,`react-flow__container`,t]),style:{transform:s},children:O(`div`,{ref:u,className:`react-flow__nodesselection-rect`,onContextMenu:f,tabIndex:n?void 0:-1,onKeyDown:n?void 0:e=>{Object.prototype.hasOwnProperty.call(dd,e.key)&&(e.preventDefault(),l({direction:dd[e.key],factor:e.shiftKey?4:1}))},style:{width:a,height:o}})})}var gd=typeof window<`u`?window:void 0,_d=e=>({nodesSelectionActive:e.nodesSelectionActive,userSelectionActive:e.userSelectionActive});function vd({children:e,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:i,onPaneContextMenu:a,onPaneScroll:o,paneClickDistance:s,deleteKeyCode:c,selectionKeyCode:l,selectionOnDrag:u,selectionMode:d,onSelectionStart:f,onSelectionEnd:p,multiSelectionKeyCode:m,panActivationKeyCode:h,zoomActivationKeyCode:g,elementsSelectable:_,zoomOnScroll:v,zoomOnPinch:y,panOnScroll:b,panOnScrollSpeed:x,panOnScrollMode:S,zoomOnDoubleClick:C,panOnDrag:w,autoPanOnSelection:T,defaultViewport:E,translateExtent:D,minZoom:k,maxZoom:A,preventScrolling:j,onSelectionContextMenu:M,noWheelClassName:N,noPanClassName:P,disableKeyboardA11y:F,onViewportChange:L,isControlledViewport:ee}){let{nodesSelectionActive:R,userSelectionActive:z}=Z(_d,X),te=lu(l,{target:gd}),B=lu(h,{target:gd}),V=B||w,H=B||b,U=u&&V!==!0,ne=te||z||U;return Iu({deleteKeyCode:c,multiSelectionKeyCode:m}),O(Bu,{onPaneContextMenu:a,elementsSelectable:_,zoomOnScroll:v,zoomOnPinch:y,panOnScroll:H,panActivationKeyPressed:B,panOnScrollSpeed:x,panOnScrollMode:S,zoomOnDoubleClick:C,panOnDrag:!te&&V,defaultViewport:E,translateExtent:D,minZoom:k,maxZoom:A,zoomActivationKeyCode:g,preventScrolling:j,noWheelClassName:N,noPanClassName:P,onViewportChange:L,isControlledViewport:ee,paneClickDistance:s,selectionOnDrag:U,children:I(Gu,{onSelectionStart:f,onSelectionEnd:p,onPaneClick:t,onPaneMouseEnter:n,onPaneMouseMove:r,onPaneMouseLeave:i,onPaneContextMenu:a,onPaneScroll:o,panOnDrag:V,autoPanOnSelection:T,isSelecting:!!ne,selectionMode:d,selectionKeyPressed:te,paneClickDistance:s,selectionOnDrag:U,children:[e,R&&O(hd,{onSelectionContextMenu:M,noPanClassName:P,disableKeyboardA11y:F})]})})}vd.displayName=`FlowRenderer`;var yd=W(vd),bd=e=>t=>e?Jo(t.nodeLookup,{x:0,y:0,width:t.width,height:t.height},t.transform,!0).map(e=>e.id):Array.from(t.nodeLookup.keys());function xd(e){return Z(x(bd(e),[e]),X)}var Sd=e=>e.updateNodeInternals;function Cd(){let e=Z(Sd),[t]=N(()=>typeof ResizeObserver>`u`?null:new ResizeObserver(t=>{let n=new Map;t.forEach(e=>{let t=e.target.getAttribute(`data-id`);n.set(t,{id:t,nodeElement:e.target,force:!0})}),e(n)}));return S(()=>()=>{t==null||t.disconnect()},[t]),t}function wd({node:e,nodeType:t,hasDimensions:n,resizeObserver:r}){let a=Q(),o=i(null),s=i(null),c=i(e.sourcePosition),l=i(e.targetPosition),u=i(t),d=n&&!!e.internals.handleBounds;return S(()=>{o.current&&!e.hidden&&(!d||s.current!==o.current)&&(s.current&&(r==null||r.unobserve(s.current)),r==null||r.observe(o.current),s.current=o.current)},[d,e.hidden]),S(()=>()=>{s.current&&=(r==null||r.unobserve(s.current),null)},[]),S(()=>{if(o.current){let n=u.current!==t,r=c.current!==e.sourcePosition,i=l.current!==e.targetPosition;(n||r||i)&&(u.current=t,c.current=e.sourcePosition,l.current=e.targetPosition,a.getState().updateNodeInternals(new Map([[e.id,{id:e.id,nodeElement:o.current,force:!0}]])))}},[e.id,t,e.sourcePosition,e.targetPosition]),o}function Td({id:e,onClick:t,onMouseEnter:n,onMouseMove:r,onMouseLeave:i,onContextMenu:a,onDoubleClick:o,nodesDraggable:s,elementsSelectable:c,nodesConnectable:l,nodesFocusable:u,resizeObserver:d,noDragClassName:f,noPanClassName:p,disableKeyboardA11y:m,rfId:h,nodeTypes:g,nodeClickDistance:_,onError:v}){let{node:y,internals:b,isParent:x}=Z(t=>{let n=t.nodeLookup.get(e),r=t.parentLookup.has(e);return{node:n,internals:n.internals,isParent:r}},X),S=y.type||`default`,C=(g==null?void 0:g[S])||fd[S];C===void 0&&(v==null||v(`003`,jo.error003(S)),S=`default`,C=(g==null?void 0:g.default)||fd.default);let w=!!(y.draggable||s&&y.draggable===void 0),T=!!(y.selectable||c&&y.selectable===void 0),E=!!(y.connectable||l&&y.connectable===void 0),D=!!(y.focusable||u&&y.focusable===void 0),k=Q(),A=Es(y),j=wd({node:y,nodeType:S,hasDimensions:A,resizeObserver:d}),M=qu({nodeRef:j,disabled:y.hidden||!w,noDragClassName:f,handleSelector:y.dragHandle,nodeId:e,isSelectable:T,nodeClickDistance:_}),N=Yu();if(y.hidden)return null;let P=Ts(y),F=pd(y),I=T||w||t||n||r||i,L=n?e=>n(e,{...b.userNode}):void 0,ee=r?e=>r(e,{...b.userNode}):void 0,R=i?e=>i(e,{...b.userNode}):void 0,z=a?e=>a(e,{...b.userNode}):void 0,te=o?e=>o(e,{...b.userNode}):void 0,B=n=>{let{selectNodesOnDrag:r,nodeDragThreshold:i}=k.getState();T&&(!r||!w||i>0)&&Ku({id:e,store:k,nodeRef:j}),t&&t(n,{...b.userNode})},V=t=>{if(!(Rs(t.nativeEvent)||m)){if(No.includes(t.key)&&T){let n=t.key===`Escape`;Ku({id:e,store:k,unselect:n,nodeRef:j})}else if(w&&y.selected&&Object.prototype.hasOwnProperty.call(dd,t.key)){t.preventDefault();let{ariaLabelConfig:e}=k.getState();k.setState({ariaLiveMessage:e[`node.a11yDescription.ariaLiveMessage`]({direction:t.key.replace(`Arrow`,``).toLowerCase(),x:~~b.positionAbsolute.x,y:~~b.positionAbsolute.y})}),N({direction:dd[t.key],factor:t.shiftKey?4:1})}}},H=()=>{var t;if(m||!((t=j.current)!=null&&t.matches(`:focus-visible`)))return;let{transform:n,width:r,height:i,autoPanOnNodeFocus:a,setCenter:o}=k.getState();a&&(Jo(new Map([[e,y]]),{x:0,y:0,width:r,height:i},n,!0).length>0||o(y.position.x+P.width/2,y.position.y+P.height/2,{zoom:n[2]}))};return O(`div`,{className:J([`react-flow__node`,`react-flow__node-${S}`,{[p]:w},y.className,{selected:y.selected,selectable:T,parent:x,draggable:w,dragging:M}]),ref:j,style:{zIndex:b.z,transform:`translate(${b.positionAbsolute.x}px,${b.positionAbsolute.y}px)`,pointerEvents:I?`all`:`none`,visibility:A?`visible`:`hidden`,...y.style,...F},"data-id":e,"data-testid":`rf__node-${e}`,onMouseEnter:L,onMouseMove:ee,onMouseLeave:R,onContextMenu:z,onClick:B,onDoubleClick:te,onKeyDown:D?V:void 0,tabIndex:D?0:void 0,onFocus:D?H:void 0,role:y.ariaRole??(D?`group`:void 0),"aria-roledescription":`node`,"aria-describedby":m?void 0:`${Rl}-${h}`,"aria-label":y.ariaLabel,...y.domAttributes,children:O(Zu,{value:e,children:O(C,{id:e,data:y.data,type:S,positionAbsoluteX:b.positionAbsolute.x,positionAbsoluteY:b.positionAbsolute.y,selected:y.selected??!1,selectable:T,draggable:w,deletable:y.deletable??!0,isConnectable:E,sourcePosition:y.sourcePosition,targetPosition:y.targetPosition,dragging:M,dragHandle:y.dragHandle,zIndex:b.z,parentId:y.parentId,...P})})})}var Ed=W(Td),Dd=e=>({nodesConnectable:e.nodesConnectable,nodesFocusable:e.nodesFocusable,elementsSelectable:e.elementsSelectable,onError:e.onError});function Od(e){let{nodesConnectable:t,nodesFocusable:n,elementsSelectable:r,onError:i}=Z(Dd,X),a=xd(e.onlyRenderVisibleElements),o=Cd();return O(`div`,{className:`react-flow__nodes`,style:Ru,children:a.map(a=>O(Ed,{id:a,nodeTypes:e.nodeTypes,nodeExtent:e.nodeExtent,onClick:e.onNodeClick,onMouseEnter:e.onNodeMouseEnter,onMouseMove:e.onNodeMouseMove,onMouseLeave:e.onNodeMouseLeave,onContextMenu:e.onNodeContextMenu,onDoubleClick:e.onNodeDoubleClick,noDragClassName:e.noDragClassName,noPanClassName:e.noPanClassName,rfId:e.rfId,disableKeyboardA11y:e.disableKeyboardA11y,resizeObserver:o,nodesDraggable:e.nodesDraggable??!0,nodesConnectable:t,nodesFocusable:n,elementsSelectable:r,nodeClickDistance:e.nodeClickDistance,onError:i},a))})}Od.displayName=`NodeRenderer`;var kd=W(Od);function Ad(e){return Z(x(t=>{if(!e)return t.edges.map(e=>e.id);let n=[];if(t.width&&t.height)for(let e of t.edges){let r=t.nodeLookup.get(e.source),i=t.nodeLookup.get(e.target);r&&i&&Js({sourceNode:r,targetNode:i,width:t.width,height:t.height,transform:t.transform})&&n.push(e.id)}return n},[e]),X)}var jd=({color:e=`none`,strokeWidth:t=1})=>{let n={strokeWidth:t,...e&&{stroke:e}};return O(`polyline`,{className:`arrow`,style:n,strokeLinecap:`round`,fill:`none`,strokeLinejoin:`round`,points:`-5,-4 0,0 -5,4`})},Md=({color:e=`none`,strokeWidth:t=1})=>{let n={strokeWidth:t,...e&&{stroke:e,fill:e}};return O(`polyline`,{className:`arrowclosed`,style:n,strokeLinecap:`round`,strokeLinejoin:`round`,points:`-5,-4 0,0 -5,4 -5,-4`})},Nd={[Bo.Arrow]:jd,[Bo.ArrowClosed]:Md};function Pd(e){let t=Q();return _(()=>{if(!Object.prototype.hasOwnProperty.call(Nd,e)){var n,r;return(n=(r=t.getState()).onError)==null||n.call(r,`009`,jo.error009(e)),null}return Nd[e]},[e])}var Fd=({id:e,type:t,color:n,width:r=12.5,height:i=12.5,markerUnits:a=`strokeWidth`,strokeWidth:o,orient:s=`auto-start-reverse`})=>{let c=Pd(t);return c?O(`marker`,{className:`react-flow__arrowhead`,id:e,markerWidth:`${r}`,markerHeight:`${i}`,viewBox:`-10 -10 20 20`,markerUnits:a,orient:s,refX:`0`,refY:`0`,children:O(c,{color:n,strokeWidth:o})}):null},Id=({defaultColor:e,rfId:t})=>{let n=Z(e=>e.edges),r=Z(e=>e.defaultEdgeOptions),i=_(()=>dc(n,{id:t,defaultColor:e,defaultMarkerStart:r==null?void 0:r.markerStart,defaultMarkerEnd:r==null?void 0:r.markerEnd}),[n,r,t,e]);return i.length?O(`svg`,{className:`react-flow__marker`,"aria-hidden":`true`,children:O(`defs`,{children:i.map(e=>O(Fd,{id:e.id,type:e.type,color:e.color,width:e.width,height:e.height,markerUnits:e.markerUnits,strokeWidth:e.strokeWidth,orient:e.orient},e.id))})}):null};Id.displayName=`MarkerDefinitions`;var Ld=W(Id);function Rd({x:e,y:t,label:n,labelStyle:r,labelShowBg:a=!0,labelBgStyle:o,labelBgPadding:s=[2,4],labelBgBorderRadius:c=2,children:l,className:u,...d}){let[f,p]=N({x:1,y:0,width:0,height:0}),m=J([`react-flow__edge-textwrapper`,u]),h=i(null);return S(()=>{if(h.current){let e=h.current.getBBox();p({x:e.x,y:e.y,width:e.width,height:e.height})}},[n]),n?I(`g`,{transform:`translate(${e-f.width/2} ${t-f.height/2})`,className:m,visibility:f.width?`visible`:`hidden`,...d,children:[a&&O(`rect`,{width:f.width+2*s[0],x:-s[0],y:-s[1],height:f.height+2*s[1],className:`react-flow__edge-textbg`,style:o,rx:c,ry:c}),O(`text`,{className:`react-flow__edge-text`,y:f.height/2,dy:`0.3em`,ref:h,style:r,children:n}),l]}):null}Rd.displayName=`EdgeText`;var zd=W(Rd);function Bd({path:e,labelX:t,labelY:n,label:r,labelStyle:i,labelShowBg:a,labelBgStyle:o,labelBgPadding:s,labelBgBorderRadius:c,interactionWidth:l=20,...u}){return I(V,{children:[O(`path`,{...u,d:e,fill:`none`,className:J([`react-flow__edge-path`,u.className])}),l?O(`path`,{d:e,fill:`none`,strokeOpacity:0,strokeWidth:l,className:`react-flow__edge-interaction`}):null,r&&ms(t)&&ms(n)?O(zd,{x:t,y:n,label:r,labelStyle:i,labelShowBg:a,labelBgStyle:o,labelBgPadding:s,labelBgBorderRadius:c}):null]})}function Vd({pos:e,x1:t,y1:n,x2:r,y2:i}){return e===Y.Left||e===Y.Right?[.5*(t+r),n]:[t,.5*(n+i)]}function Hd({sourceX:e,sourceY:t,sourcePosition:n=Y.Bottom,targetX:r,targetY:i,targetPosition:a=Y.Top}){let[o,s]=Vd({pos:n,x1:e,y1:t,x2:r,y2:i}),[c,l]=Vd({pos:a,x1:r,y1:i,x2:e,y2:t}),[u,d,f,p]=Hs({sourceX:e,sourceY:t,targetX:r,targetY:i,sourceControlX:o,sourceControlY:s,targetControlX:c,targetControlY:l});return[`M${e},${t} C${o},${s} ${c},${l} ${r},${i}`,u,d,f,p]}function Ud(e){return W(({id:t,sourceX:n,sourceY:r,targetX:i,targetY:a,sourcePosition:o,targetPosition:s,label:c,labelStyle:l,labelShowBg:u,labelBgStyle:d,labelBgPadding:f,labelBgBorderRadius:p,style:m,markerEnd:h,markerStart:g,interactionWidth:_})=>{let[v,y,b]=Hd({sourceX:n,sourceY:r,sourcePosition:o,targetX:i,targetY:a,targetPosition:s}),x=e.isInternal?void 0:t;return O(Bd,{id:x,path:v,labelX:y,labelY:b,label:c,labelStyle:l,labelShowBg:u,labelBgStyle:d,labelBgPadding:f,labelBgBorderRadius:p,style:m,markerEnd:h,markerStart:g,interactionWidth:_})})}var Wd=Ud({isInternal:!1}),Gd=Ud({isInternal:!0});Wd.displayName=`SimpleBezierEdge`,Gd.displayName=`SimpleBezierEdgeInternal`;function Kd(e){return W(({id:t,sourceX:n,sourceY:r,targetX:i,targetY:a,label:o,labelStyle:s,labelShowBg:c,labelBgStyle:l,labelBgPadding:u,labelBgBorderRadius:d,style:f,sourcePosition:p=Y.Bottom,targetPosition:m=Y.Top,markerEnd:h,markerStart:g,pathOptions:_,interactionWidth:v})=>{let[y,b,x]=ic({sourceX:n,sourceY:r,sourcePosition:p,targetX:i,targetY:a,targetPosition:m,borderRadius:_==null?void 0:_.borderRadius,offset:_==null?void 0:_.offset,stepPosition:_==null?void 0:_.stepPosition}),S=e.isInternal?void 0:t;return O(Bd,{id:S,path:y,labelX:b,labelY:x,label:o,labelStyle:s,labelShowBg:c,labelBgStyle:l,labelBgPadding:u,labelBgBorderRadius:d,style:f,markerEnd:h,markerStart:g,interactionWidth:v})})}var qd=Kd({isInternal:!1}),Jd=Kd({isInternal:!0});qd.displayName=`SmoothStepEdge`,Jd.displayName=`SmoothStepEdgeInternal`;function Yd(e){return W(({id:t,...n})=>{var r;let i=e.isInternal?void 0:t;return O(qd,{...n,id:i,pathOptions:_(()=>{var e;return{borderRadius:0,offset:(e=n.pathOptions)==null?void 0:e.offset}},[(r=n.pathOptions)==null?void 0:r.offset])})})}var Xd=Yd({isInternal:!1}),Zd=Yd({isInternal:!0});Xd.displayName=`StepEdge`,Zd.displayName=`StepEdgeInternal`;function Qd(e){return W(({id:t,sourceX:n,sourceY:r,targetX:i,targetY:a,label:o,labelStyle:s,labelShowBg:c,labelBgStyle:l,labelBgPadding:u,labelBgBorderRadius:d,style:f,markerEnd:p,markerStart:m,interactionWidth:h})=>{let[g,_,v]=Qs({sourceX:n,sourceY:r,targetX:i,targetY:a}),y=e.isInternal?void 0:t;return O(Bd,{id:y,path:g,labelX:_,labelY:v,label:o,labelStyle:s,labelShowBg:c,labelBgStyle:l,labelBgPadding:u,labelBgBorderRadius:d,style:f,markerEnd:p,markerStart:m,interactionWidth:h})})}var $d=Qd({isInternal:!1}),ef=Qd({isInternal:!0});$d.displayName=`StraightEdge`,ef.displayName=`StraightEdgeInternal`;function tf(e){return W(({id:t,sourceX:n,sourceY:r,targetX:i,targetY:a,sourcePosition:o=Y.Bottom,targetPosition:s=Y.Top,label:c,labelStyle:l,labelShowBg:u,labelBgStyle:d,labelBgPadding:f,labelBgBorderRadius:p,style:m,markerEnd:h,markerStart:g,pathOptions:_,interactionWidth:v})=>{let[y,b,x]=Gs({sourceX:n,sourceY:r,sourcePosition:o,targetX:i,targetY:a,targetPosition:s,curvature:_==null?void 0:_.curvature}),S=e.isInternal?void 0:t;return O(Bd,{id:S,path:y,labelX:b,labelY:x,label:c,labelStyle:l,labelShowBg:u,labelBgStyle:d,labelBgPadding:f,labelBgBorderRadius:p,style:m,markerEnd:h,markerStart:g,interactionWidth:v})})}var nf=tf({isInternal:!1}),rf=tf({isInternal:!0});nf.displayName=`BezierEdge`,rf.displayName=`BezierEdgeInternal`;var af={default:rf,straight:ef,step:Zd,smoothstep:Jd,simplebezier:Gd},of={sourceX:null,sourceY:null,targetX:null,targetY:null,sourcePosition:null,targetPosition:null,zIndex:void 0},sf=(e,t,n)=>n===Y.Left?e-t:n===Y.Right?e+t:e,cf=(e,t,n)=>n===Y.Top?e-t:n===Y.Bottom?e+t:e,lf=`react-flow__edgeupdater`;function uf({position:e,centerX:t,centerY:n,radius:r=10,onMouseDown:i,onMouseEnter:a,onMouseOut:o,type:s}){return O(`circle`,{onMouseDown:i,onMouseEnter:a,onMouseOut:o,className:J([lf,`${lf}-${s}`]),cx:sf(t,r,e),cy:cf(n,r,e),r,stroke:`transparent`,fill:`transparent`})}function df({isReconnectable:e,reconnectRadius:t,edge:n,sourceX:r,sourceY:i,targetX:a,targetY:o,sourcePosition:s,targetPosition:c,onReconnect:l,onReconnectStart:u,onReconnectEnd:d,setReconnecting:f,setUpdateHover:p}){let m=Q(),h=(e,t)=>{if(e.button!==0)return;let{autoPanOnConnect:r,domNode:i,connectionMode:a,connectionRadius:o,lib:s,onConnectStart:c,cancelConnection:p,nodeLookup:h,rfId:g,panBy:_,updateConnection:v}=m.getState(),y=t.type===`target`;Gc.onPointerDown(e.nativeEvent,{autoPanOnConnect:r,connectionMode:a,connectionRadius:o,domNode:i,handleId:t.id,nodeId:t.nodeId,nodeLookup:h,isTarget:y,edgeUpdaterType:t.type,lib:s,flowId:g,cancelConnection:p,panBy:_,isValidConnection:(...e)=>{var t,n;return((t=(n=m.getState()).isValidConnection)==null?void 0:t.call(n,...e))??!0},onConnect:e=>l==null?void 0:l(n,e),onConnectStart:(r,i)=>{f(!0),u==null||u(e,n,t.type),c==null||c(r,i)},onConnectEnd:(...e)=>{var t,n;return(t=(n=m.getState()).onConnectEnd)==null?void 0:t.call(n,...e)},onReconnectEnd:(e,r)=>{f(!1),d==null||d(e,n,t.type,r)},updateConnection:v,getTransform:()=>m.getState().transform,getFromHandle:()=>m.getState().connection.fromHandle,dragThreshold:m.getState().connectionDragThreshold,handleDomNode:e.currentTarget})},g=e=>h(e,{nodeId:n.target,id:n.targetHandle??null,type:`target`}),_=e=>h(e,{nodeId:n.source,id:n.sourceHandle??null,type:`source`}),v=()=>p(!0),y=()=>p(!1);return I(V,{children:[(e===!0||e===`source`)&&O(uf,{position:s,centerX:r,centerY:i,radius:t,onMouseDown:g,onMouseEnter:v,onMouseOut:y,type:`source`}),(e===!0||e===`target`)&&O(uf,{position:c,centerX:a,centerY:o,radius:t,onMouseDown:_,onMouseEnter:v,onMouseOut:y,type:`target`})]})}function ff({id:e,edgesFocusable:t,edgesReconnectable:n,elementsSelectable:r,onClick:a,onDoubleClick:o,onContextMenu:s,onMouseEnter:c,onMouseMove:l,onMouseLeave:u,reconnectRadius:d,onReconnect:f,onReconnectStart:p,onReconnectEnd:m,rfId:h,edgeTypes:g,noPanClassName:v,onError:y,disableKeyboardA11y:b}){let S=Z(t=>t.edgeLookup.get(e)),C=Z(e=>e.defaultEdgeOptions);S=C?{...C,...S}:S;let w=S.type||`default`,T=(g==null?void 0:g[w])||af[w];T===void 0&&(y==null||y(`011`,jo.error011(w)),w=`default`,T=(g==null?void 0:g.default)||af.default);let E=!!(S.focusable||t&&S.focusable===void 0),D=f!==void 0&&(S.reconnectable||n&&S.reconnectable===void 0),k=!!(S.selectable||r&&S.selectable===void 0),A=i(null),[j,M]=N(!1),[P,F]=N(!1),L=Q(),{zIndex:ee=S.zIndex,sourceX:R,sourceY:z,targetX:te,targetY:B,sourcePosition:V,targetPosition:H}=Z(x(t=>{let n=t.nodeLookup.get(S.source),r=t.nodeLookup.get(S.target);if(!n||!r)return of;let i=oc({id:e,sourceNode:n,targetNode:r,sourceHandle:S.sourceHandle||null,targetHandle:S.targetHandle||null,connectionMode:t.connectionMode,onError:y}),a=qs({selected:S.selected,zIndex:S.zIndex,sourceNode:n,targetNode:r,elevateOnSelect:t.elevateEdgesOnSelect,zIndexMode:t.zIndexMode});return{...i||of,zIndex:a}},[S.source,S.target,S.sourceHandle,S.targetHandle,S.selected,S.zIndex,y]),X),U=_(()=>S.markerStart?`url('#${uc(S.markerStart,h)}')`:void 0,[S.markerStart,h]),ne=_(()=>S.markerEnd?`url('#${uc(S.markerEnd,h)}')`:void 0,[S.markerEnd,h]);if(S.hidden||R===null||z===null||te===null||B===null)return null;let re=t=>{let{addSelectedEdges:n,unselectNodesAndEdges:r,multiSelectionActive:i}=L.getState();if(k){if(L.setState({nodesSelectionActive:!1}),S.selected&&i){var o;r({nodes:[],edges:[S]}),(o=A.current)==null||o.blur()}else n([e])}a&&a(t,S)},W=o?e=>{o(e,{...S})}:void 0,ie=s?e=>{s(e,{...S})}:void 0,G=c?e=>{c(e,{...S})}:void 0,K=l?e=>{l(e,{...S})}:void 0,ae=u?e=>{u(e,{...S})}:void 0;return O(`svg`,{style:{zIndex:ee},children:I(`g`,{className:J([`react-flow__edge`,`react-flow__edge-${w}`,S.className,v,{selected:S.selected,animated:S.animated,inactive:!k&&!a,updating:j,selectable:k}]),onClick:re,onDoubleClick:W,onContextMenu:ie,onMouseEnter:G,onMouseMove:K,onMouseLeave:ae,onKeyDown:E?t=>{if(!b&&No.includes(t.key)&&k){let{unselectNodesAndEdges:r,addSelectedEdges:i}=L.getState();if(t.key===`Escape`){var n;(n=A.current)==null||n.blur(),r({edges:[S]})}else i([e])}}:void 0,tabIndex:E?0:void 0,role:S.ariaRole??(E?`group`:`img`),"aria-roledescription":`edge`,"data-id":e,"data-testid":`rf__edge-${e}`,"aria-label":S.ariaLabel===null?void 0:S.ariaLabel||`Edge from ${S.source} to ${S.target}`,"aria-describedby":E?`${zl}-${h}`:void 0,ref:A,...S.domAttributes,children:[!P&&O(T,{id:e,source:S.source,target:S.target,type:S.type,selected:S.selected,animated:S.animated,selectable:k,deletable:S.deletable??!0,label:S.label,labelStyle:S.labelStyle,labelShowBg:S.labelShowBg,labelBgStyle:S.labelBgStyle,labelBgPadding:S.labelBgPadding,labelBgBorderRadius:S.labelBgBorderRadius,sourceX:R,sourceY:z,targetX:te,targetY:B,sourcePosition:V,targetPosition:H,data:S.data,style:S.style,sourceHandleId:S.sourceHandle,targetHandleId:S.targetHandle,markerStart:U,markerEnd:ne,pathOptions:`pathOptions`in S?S.pathOptions:void 0,interactionWidth:S.interactionWidth}),D&&O(df,{edge:S,isReconnectable:D,reconnectRadius:d,onReconnect:f,onReconnectStart:p,onReconnectEnd:m,sourceX:R,sourceY:z,targetX:te,targetY:B,sourcePosition:V,targetPosition:H,setUpdateHover:M,setReconnecting:F})]})})}var pf=W(ff),mf=e=>({edgesFocusable:e.edgesFocusable,edgesReconnectable:e.edgesReconnectable,elementsSelectable:e.elementsSelectable,connectionMode:e.connectionMode,onError:e.onError});function hf({defaultMarkerColor:e,onlyRenderVisibleElements:t,rfId:n,edgeTypes:r,noPanClassName:i,onReconnect:a,onEdgeContextMenu:o,onEdgeMouseEnter:s,onEdgeMouseMove:c,onEdgeMouseLeave:l,onEdgeClick:u,reconnectRadius:d,onEdgeDoubleClick:f,onReconnectStart:p,onReconnectEnd:m,disableKeyboardA11y:h}){let{edgesFocusable:g,edgesReconnectable:_,elementsSelectable:v,onError:y}=Z(mf,X),b=Ad(t);return I(`div`,{className:`react-flow__edges`,children:[O(Ld,{defaultColor:e,rfId:n}),b.map(e=>O(pf,{id:e,edgesFocusable:g,edgesReconnectable:_,elementsSelectable:v,noPanClassName:i,onReconnect:a,onContextMenu:o,onMouseEnter:s,onMouseMove:c,onMouseLeave:l,onClick:u,reconnectRadius:d,onDoubleClick:f,onReconnectStart:p,onReconnectEnd:m,rfId:n,onError:y,edgeTypes:r,disableKeyboardA11y:h},e))]})}hf.displayName=`EdgeRenderer`;var gf=W(hf),_f=e=>`translate(${e[0]}px,${e[1]}px) scale(${e[2]})`;function vf({children:e}){let t=Q(),n=i(null),[r]=N(()=>t.getState().transform);return Eu(()=>{let e=null,r=()=>{let r=t.getState().transform;e&&r[0]===e[0]&&r[1]===e[1]&&r[2]===e[2]||(e=r,n.current&&(n.current.style.transform=_f(r)))};return r(),t.subscribe(r)},[t]),O(`div`,{ref:n,className:`react-flow__viewport xyflow__viewport react-flow__container`,style:{transform:_f(r)},children:e})}function yf(e){let t=Nu(),n=i(!1);S(()=>{!n.current&&t.viewportInitialized&&e&&(setTimeout(()=>e(t),1),n.current=!0)},[e,t.viewportInitialized])}var bf=e=>{var t;return(t=e.panZoom)==null?void 0:t.syncViewport};function xf(e){let t=Z(bf),n=Q();return S(()=>{e&&(t==null||t(e),n.setState({transform:[e.x,e.y,e.zoom]}))},[e,t]),null}function Sf(e){return e.connection.inProgress?{...e.connection,to:_s(e.connection.to,e.transform)}:{...e.connection}}function Cf(e){return e?t=>e(Sf(t)):Sf}function wf(e){return Z(Cf(e),X)}var Tf=e=>({nodesConnectable:e.nodesConnectable,isValid:e.connection.isValid,inProgress:e.connection.inProgress,width:e.width,height:e.height});function Ef({containerStyle:e,style:t,type:n,component:r}){let{nodesConnectable:i,width:a,height:o,isValid:s,inProgress:c}=Z(Tf,X);return a&&i&&c?O(`svg`,{style:e,width:a,height:o,className:`react-flow__connectionline react-flow__container`,children:O(`g`,{className:J([`react-flow__connection`,Ns(s)]),children:O(Df,{style:t,type:n,CustomComponent:r,isValid:s})})}):null}var Df=({style:e,type:t=zo.Bezier,CustomComponent:n,isValid:r})=>{let{inProgress:i,from:a,fromNode:o,fromHandle:s,fromPosition:c,to:l,toNode:u,toHandle:d,toPosition:f,pointer:p}=wf();if(!i)return;if(n)return O(n,{connectionLineType:t,connectionLineStyle:e,fromNode:o,fromHandle:s,fromX:a.x,fromY:a.y,toX:l.x,toY:l.y,fromPosition:c,toPosition:f,connectionStatus:Ns(r),toNode:u,toHandle:d,pointer:p});let m=``,h={sourceX:a.x,sourceY:a.y,sourcePosition:c,targetX:l.x,targetY:l.y,targetPosition:f};switch(t){case zo.Bezier:[m]=Gs(h);break;case zo.SimpleBezier:[m]=Hd(h);break;case zo.Step:[m]=ic({...h,borderRadius:0});break;case zo.SmoothStep:[m]=ic(h);break;default:[m]=Qs(h)}return O(`path`,{d:m,fill:`none`,className:`react-flow__connection-path`,style:e})};Df.displayName=`ConnectionLine`;var Of={};function kf(e=Of){i(e),Q(),S(()=>{},[e])}function Af(){Q(),i(!1),S(()=>{},[])}function jf({nodeTypes:e,edgeTypes:t,onInit:n,onNodeClick:r,onEdgeClick:i,onNodeDoubleClick:a,onEdgeDoubleClick:o,onNodeMouseEnter:s,onNodeMouseMove:c,onNodeMouseLeave:l,onNodeContextMenu:u,onSelectionContextMenu:d,onSelectionStart:f,onSelectionEnd:p,connectionLineType:m,connectionLineStyle:h,connectionLineComponent:g,connectionLineContainerStyle:_,selectionKeyCode:v,selectionOnDrag:y,selectionMode:b,multiSelectionKeyCode:x,panActivationKeyCode:S,zoomActivationKeyCode:C,deleteKeyCode:w,onlyRenderVisibleElements:T,elementsSelectable:E,defaultViewport:D,translateExtent:k,minZoom:A,maxZoom:j,preventScrolling:M,defaultMarkerColor:N,zoomOnScroll:P,zoomOnPinch:F,panOnScroll:L,panOnScrollSpeed:ee,panOnScrollMode:R,zoomOnDoubleClick:z,panOnDrag:te,autoPanOnSelection:B,onPaneClick:V,onPaneMouseEnter:H,onPaneMouseMove:U,onPaneMouseLeave:ne,onPaneScroll:re,onPaneContextMenu:W,paneClickDistance:ie,nodeClickDistance:G,onEdgeContextMenu:K,onEdgeMouseEnter:ae,onEdgeMouseMove:oe,onEdgeMouseLeave:se,reconnectRadius:ce,onReconnect:le,onReconnectStart:ue,onReconnectEnd:de,noDragClassName:fe,noWheelClassName:q,noPanClassName:pe,disableKeyboardA11y:me,nodeExtent:he,rfId:ge,viewport:_e,onViewportChange:ve,nodesDraggable:ye}){return kf(e),kf(t),Af(),yf(n),xf(_e),O(yd,{onPaneClick:V,onPaneMouseEnter:H,onPaneMouseMove:U,onPaneMouseLeave:ne,onPaneContextMenu:W,onPaneScroll:re,paneClickDistance:ie,deleteKeyCode:w,selectionKeyCode:v,selectionOnDrag:y,selectionMode:b,onSelectionStart:f,onSelectionEnd:p,multiSelectionKeyCode:x,panActivationKeyCode:S,zoomActivationKeyCode:C,elementsSelectable:E,zoomOnScroll:P,zoomOnPinch:F,zoomOnDoubleClick:z,panOnScroll:L,panOnScrollSpeed:ee,panOnScrollMode:R,panOnDrag:te,autoPanOnSelection:B,defaultViewport:D,translateExtent:k,minZoom:A,maxZoom:j,onSelectionContextMenu:d,preventScrolling:M,noDragClassName:fe,noWheelClassName:q,noPanClassName:pe,disableKeyboardA11y:me,onViewportChange:ve,isControlledViewport:!!_e,children:I(vf,{children:[O(gf,{edgeTypes:t,onEdgeClick:i,onEdgeDoubleClick:o,onReconnect:le,onReconnectStart:ue,onReconnectEnd:de,onlyRenderVisibleElements:T,onEdgeContextMenu:K,onEdgeMouseEnter:ae,onEdgeMouseMove:oe,onEdgeMouseLeave:se,reconnectRadius:ce,defaultMarkerColor:N,noPanClassName:pe,disableKeyboardA11y:me,rfId:ge}),O(Ef,{style:h,type:m,component:g,containerStyle:_}),O(`div`,{className:`react-flow__edgelabel-renderer`}),O(kd,{nodeTypes:e,onNodeClick:r,onNodeDoubleClick:a,onNodeMouseEnter:s,onNodeMouseMove:c,onNodeMouseLeave:l,onNodeContextMenu:u,nodeClickDistance:G,onlyRenderVisibleElements:T,noPanClassName:pe,noDragClassName:fe,disableKeyboardA11y:me,nodeExtent:he,rfId:ge,nodesDraggable:ye}),O(`div`,{className:`react-flow__viewport-portal`})]})})}jf.displayName=`GraphView`;var Mf=W(jf),Nf=hs(`React Flow`,`https://reactflow.dev/`),Pf=({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,width:i,height:a,fitView:o,fitViewOptions:s,minZoom:c=.5,maxZoom:l=2,nodeOrigin:u,nodeExtent:d,zIndexMode:f=`basic`}={})=>{let p=new Map,m=new Map,h=new Map,g=new Map,_=r??t??[],v=n??e??[],y=u??[0,0],b=d??Mo;kc(h,g,_);let{nodesInitialized:x}=bc(v,p,m,{nodeOrigin:y,nodeExtent:b,zIndexMode:f}),S=[0,0,1];if(o&&i&&a){let{x:e,y:t,zoom:n}=Ss(qo(p,{filter:e=>!(!e.width&&!e.initialWidth||!e.height&&!e.initialHeight)}),i,a,c,l,(s==null?void 0:s.padding)??.1);S=[e,t,n]}return{rfId:`1`,width:i??0,height:a??0,transform:S,nodes:v,nodesInitialized:x,nodeLookup:p,parentLookup:m,edges:_,edgeLookup:g,connectionLookup:h,onNodesChange:null,onEdgesChange:null,hasDefaultNodes:n!==void 0,hasDefaultEdges:r!==void 0,panZoom:null,minZoom:c,maxZoom:l,translateExtent:Mo,nodeExtent:b,nodesSelectionActive:!1,userSelectionActive:!1,userSelectionRect:null,connectionMode:Fo.Strict,domNode:null,paneDragging:!1,noPanClassName:`nopan`,nodeOrigin:y,nodeDragThreshold:1,connectionDragThreshold:1,snapGrid:[15,15],snapToGrid:!1,nodesDraggable:!0,nodesConnectable:!0,nodesFocusable:!0,edgesFocusable:!0,edgesReconnectable:!0,elementsSelectable:!0,elevateNodesOnSelect:!0,elevateEdgesOnSelect:!0,selectNodesOnDrag:!0,multiSelectionActive:!1,fitViewQueued:o??!1,fitViewOptions:s,fitViewResolver:null,connection:{...Ro},connectionClickStartHandle:null,connectOnClick:!0,ariaLiveMessage:``,autoPanOnConnect:!0,autoPanOnNodeDrag:!0,autoPanOnNodeFocus:!0,autoPanSpeed:15,connectionRadius:20,onError:Nf,isValidConnection:void 0,onSelectionChangeHandlers:[],lib:`react`,debug:!1,ariaLabelConfig:Po,zIndexMode:f,defaultEdgeOptions:void 0,onNodesChangeMiddlewareMap:new Map,onEdgesChangeMiddlewareMap:new Map,onNodesDelete:void 0,onEdgesDelete:void 0,onDelete:void 0,onBeforeDelete:void 0,onViewportChangeStart:void 0,onViewportChange:void 0,onViewportChangeEnd:void 0,onNodeDragStart:void 0,onNodeDrag:void 0,onNodeDragStop:void 0,onSelectionDragStart:void 0,onSelectionDrag:void 0,onSelectionDragStop:void 0,onMoveStart:void 0,onMove:void 0,onMoveEnd:void 0,onConnect:void 0,onConnectStart:void 0,onConnectEnd:void 0,onClickConnectStart:void 0,onClickConnectEnd:void 0}},Ff=({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,width:i,height:a,fitView:o,fitViewOptions:s,minZoom:c,maxZoom:l,nodeOrigin:u,nodeExtent:d,zIndexMode:f})=>Ml((p,m)=>{async function h(){let{nodeLookup:e,panZoom:t,fitViewOptions:n,fitViewResolver:r,width:i,height:a,minZoom:o,maxZoom:s}=m();t&&(await Zo({nodes:e,width:i,height:a,panZoom:t,minZoom:o,maxZoom:s},n),r==null||r.resolve(!0),p({fitViewResolver:null}))}return{...Pf({nodes:e,edges:t,width:i,height:a,fitView:o,fitViewOptions:s,minZoom:c,maxZoom:l,nodeOrigin:u,nodeExtent:d,defaultNodes:n,defaultEdges:r,zIndexMode:f}),setNodes:e=>{let{nodeLookup:t,parentLookup:n,nodeOrigin:r,nodeExtent:i,elevateNodesOnSelect:a,fitViewQueued:o,zIndexMode:s,nodesSelectionActive:c}=m(),{nodesInitialized:l,hasSelectedNodes:u}=bc(e,t,n,{nodeOrigin:r,nodeExtent:i,elevateNodesOnSelect:a,checkEquality:!0,zIndexMode:s}),d=c&&u;o&&l?(h(),p({nodes:e,nodesInitialized:l,fitViewQueued:!1,fitViewOptions:void 0,nodesSelectionActive:d})):p({nodes:e,nodesInitialized:l,nodesSelectionActive:d})},setEdges:e=>{let{connectionLookup:t,edgeLookup:n}=m();kc(t,n,e),p({edges:e})},setDefaultNodesAndEdges:(e,t)=>{if(e){let{setNodes:t}=m();t(e),p({hasDefaultNodes:!0})}if(t){let{setEdges:e}=m();e(t),p({hasDefaultEdges:!0})}},updateNodeInternals:e=>{let{triggerNodeChanges:t,nodeLookup:n,parentLookup:r,domNode:i,nodeOrigin:a,nodeExtent:o,debug:s,fitViewQueued:c,zIndexMode:l}=m(),{changes:u,updatedInternals:d}=Ec(e,n,r,i,a,o,l);d&&(_c(n,r,{nodeOrigin:a,nodeExtent:o,zIndexMode:l}),c?(h(),p({fitViewQueued:!1,fitViewOptions:void 0})):p({}),(u==null?void 0:u.length)>0&&(s&&console.log(`React Flow: trigger node changes`,u),t==null||t(u)))},updateNodePositions:(e,t=!1)=>{let n=[],r=[],{nodeLookup:i,triggerNodeChanges:a,connection:o,updateConnection:s,onNodesChangeMiddlewareMap:c}=m();for(let[a,c]of e){let e=i.get(a),l=!!(e!=null&&e.expandParent&&e!=null&&e.parentId&&c!=null&&c.position),u={id:a,type:`position`,position:l?{x:Math.max(0,c.position.x),y:Math.max(0,c.position.y)}:c.position,dragging:t};if(e&&o.inProgress&&o.fromNode.id===e.id){let t=cc(e,o.fromHandle,Y.Left,!0);s({...o,from:t})}l&&e.parentId&&n.push({id:a,parentId:e.parentId,rect:{...c.internals.positionAbsolute,width:c.measured.width??0,height:c.measured.height??0}}),r.push(u)}if(n.length>0){let{parentLookup:e,nodeOrigin:t}=m(),a=Tc(n,i,e,t);r.push(...a)}for(let e of c.values())r=e(r);a(r)},triggerNodeChanges:e=>{let{onNodesChange:t,setNodes:n,nodes:r,hasDefaultNodes:i,debug:a}=m();e!=null&&e.length&&(i&&n(hu(e,r)),a&&console.log(`React Flow: trigger node changes`,e),t==null||t(e))},triggerEdgeChanges:e=>{let{onEdgesChange:t,setEdges:n,edges:r,hasDefaultEdges:i,debug:a}=m();e!=null&&e.length&&(i&&n(gu(e,r)),a&&console.log(`React Flow: trigger edge changes`,e),t==null||t(e))},addSelectedNodes:e=>{let{multiSelectionActive:t,edgeLookup:n,nodeLookup:r,triggerNodeChanges:i,triggerEdgeChanges:a}=m();if(t){i(e.map(e=>_u(e,!0)));return}i(vu(r,new Set([...e]),!0)),a(vu(n))},addSelectedEdges:e=>{let{multiSelectionActive:t,edgeLookup:n,nodeLookup:r,triggerNodeChanges:i,triggerEdgeChanges:a}=m();if(t){a(e.map(e=>_u(e,!0)));return}a(vu(n,new Set([...e]))),i(vu(r,new Set,!0))},unselectNodesAndEdges:({nodes:e,edges:t}={})=>{let{edges:n,nodes:r,nodeLookup:i,triggerNodeChanges:a,triggerEdgeChanges:o}=m(),s=e||r,c=t||n,l=[];for(let e of s){if(!e.selected)continue;let t=i.get(e.id);t&&(t.selected=!1),l.push(_u(e.id,!1))}let u=[];for(let e of c)e.selected&&u.push(_u(e.id,!1));a(l),o(u)},setMinZoom:e=>{let{panZoom:t,maxZoom:n}=m();t==null||t.setScaleExtent([e,n]),p({minZoom:e})},setMaxZoom:e=>{let{panZoom:t,minZoom:n}=m();t==null||t.setScaleExtent([n,e]),p({maxZoom:e})},setTranslateExtent:e=>{var t;(t=m().panZoom)==null||t.setTranslateExtent(e),p({translateExtent:e})},resetSelectedElements:()=>{let{edges:e,nodes:t,triggerNodeChanges:n,triggerEdgeChanges:r,elementsSelectable:i}=m();if(!i)return;let a=t.reduce((e,t)=>t.selected?[...e,_u(t.id,!1)]:e,[]),o=e.reduce((e,t)=>t.selected?[...e,_u(t.id,!1)]:e,[]);n(a),r(o)},setNodeExtent:e=>{let{nodes:t,nodeLookup:n,parentLookup:r,nodeOrigin:i,elevateNodesOnSelect:a,nodeExtent:o,zIndexMode:s}=m();(e[0][0]!==o[0][0]||e[0][1]!==o[0][1]||e[1][0]!==o[1][0]||e[1][1]!==o[1][1])&&(bc(t,n,r,{nodeOrigin:i,nodeExtent:e,elevateNodesOnSelect:a,checkEquality:!1,zIndexMode:s}),p({nodeExtent:e}))},panBy:e=>{let{transform:t,width:n,height:r,panZoom:i,translateExtent:a}=m();return Dc({delta:e,panZoom:i,transform:t,translateExtent:a,width:n,height:r})},setCenter:async(e,t,n)=>{let{width:r,height:i,maxZoom:a,panZoom:o}=m();if(!o)return!1;let s=(n==null?void 0:n.zoom)===void 0?a:n.zoom;return await o.setViewport({x:r/2-e*s,y:i/2-t*s,zoom:s},{duration:n==null?void 0:n.duration,ease:n==null?void 0:n.ease,interpolate:n==null?void 0:n.interpolate}),!0},cancelConnection:()=>{p({connection:{...Ro}})},updateConnection:e=>{p({connection:e})},reset:()=>p({...Pf()})}},Object.is);function If({initialNodes:e,initialEdges:t,defaultNodes:n,defaultEdges:r,initialWidth:i,initialHeight:a,initialMinZoom:o,initialMaxZoom:s,initialFitViewOptions:c,fitView:l,nodeOrigin:u,nodeExtent:d,zIndexMode:f,children:p}){let[m]=N(()=>Ff({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,width:i,height:a,fitView:l,minZoom:o,maxZoom:s,fitViewOptions:c,nodeOrigin:u,nodeExtent:d,zIndexMode:f}));return O(Pl,{value:m,children:O(Au,{children:O(td,{children:p})})})}function Lf({children:e,nodes:t,edges:n,defaultNodes:r,defaultEdges:i,width:a,height:s,fitView:c,fitViewOptions:l,minZoom:u,maxZoom:d,nodeOrigin:f,nodeExtent:p,zIndexMode:m}){return o(Nl)?O(V,{children:e}):O(If,{initialNodes:t,initialEdges:n,defaultNodes:r,defaultEdges:i,initialWidth:a,initialHeight:s,fitView:c,initialFitViewOptions:l,initialMinZoom:u,initialMaxZoom:d,nodeOrigin:f,nodeExtent:p,zIndexMode:m,children:e})}var Rf={width:`100%`,height:`100%`,overflow:`hidden`,position:`relative`,zIndex:0};function zf({nodes:e,edges:t,defaultNodes:n,defaultEdges:r,className:i,nodeTypes:a,edgeTypes:o,onNodeClick:s,onEdgeClick:c,onInit:l,onMove:u,onMoveStart:d,onMoveEnd:f,onConnect:p,onConnectStart:m,onConnectEnd:h,onClickConnectStart:g,onClickConnectEnd:_,onNodeMouseEnter:v,onNodeMouseMove:y,onNodeMouseLeave:b,onNodeContextMenu:S,onNodeDoubleClick:C,onNodeDragStart:w,onNodeDrag:T,onNodeDragStop:E,onNodesDelete:D,onEdgesDelete:k,onDelete:A,onSelectionChange:j,onSelectionDragStart:M,onSelectionDrag:N,onSelectionDragStop:P,onSelectionContextMenu:F,onSelectionStart:L,onSelectionEnd:ee,onBeforeDelete:R,connectionMode:z,connectionLineType:te=zo.Bezier,connectionLineStyle:B,connectionLineComponent:V,connectionLineContainerStyle:H,deleteKeyCode:U=`Backspace`,selectionKeyCode:ne=`Shift`,selectionOnDrag:re=!1,selectionMode:W=Lo.Full,panActivationKeyCode:ie=`Space`,multiSelectionKeyCode:G=Cs()?`Meta`:`Control`,zoomActivationKeyCode:K=Cs()?`Meta`:`Control`,snapToGrid:ae,snapGrid:oe,onlyRenderVisibleElements:se=!1,selectNodesOnDrag:ce,nodesDraggable:le,autoPanOnNodeFocus:ue,nodesConnectable:de,nodesFocusable:fe,nodeOrigin:q=eu,edgesFocusable:pe,edgesReconnectable:me,elementsSelectable:he=!0,defaultViewport:ge=tu,minZoom:_e=.5,maxZoom:ve=2,translateExtent:ye=Mo,preventScrolling:be=!0,nodeExtent:xe,defaultMarkerColor:Se=`#b1b1b7`,zoomOnScroll:Ce=!0,zoomOnPinch:we=!0,panOnScroll:Te=!1,panOnScrollSpeed:Ee=.5,panOnScrollMode:De=Io.Free,zoomOnDoubleClick:Oe=!0,panOnDrag:ke=!0,onPaneClick:Ae,onPaneMouseEnter:je,onPaneMouseMove:Me,onPaneMouseLeave:Ne,onPaneScroll:Pe,onPaneContextMenu:Fe,paneClickDistance:Ie=1,nodeClickDistance:Le=0,children:Re,onReconnect:ze,onReconnectStart:Be,onReconnectEnd:Ve,onEdgeContextMenu:He,onEdgeDoubleClick:Ue,onEdgeMouseEnter:We,onEdgeMouseMove:Ge,onEdgeMouseLeave:Ke,reconnectRadius:qe=10,onNodesChange:Je,onEdgesChange:Ye,noDragClassName:Xe=`nodrag`,noWheelClassName:Ze=`nowheel`,noPanClassName:Qe=`nopan`,fitView:$e,fitViewOptions:et,connectOnClick:tt,attributionPosition:nt,proOptions:rt,defaultEdgeOptions:it,elevateNodesOnSelect:at=!0,elevateEdgesOnSelect:ot=!1,disableKeyboardA11y:st=!1,autoPanOnConnect:ct,autoPanOnNodeDrag:lt,autoPanOnSelection:ut=!0,autoPanSpeed:dt,connectionRadius:ft,isValidConnection:pt,onError:mt,style:ht,id:gt,nodeDragThreshold:_t,connectionDragThreshold:vt,viewport:yt,onViewportChange:bt,width:xt,height:St,colorMode:Ct=`light`,debug:wt,onScroll:Tt,ariaLabelConfig:Et,zIndexMode:Dt=`basic`,...Ot},kt){let At=gt||`1`,jt=su(Ct),Mt=x(e=>{e.currentTarget.scrollTo({top:0,left:0,behavior:`instant`}),Tt==null||Tt(e)},[Tt]);return O(`div`,{"data-testid":`rf__wrapper`,...Ot,onScroll:Mt,style:{...ht,...Rf},ref:kt,className:J([`react-flow`,i,jt]),id:gt,role:`application`,children:I(Lf,{nodes:e,edges:t,width:xt,height:St,fitView:$e,fitViewOptions:et,minZoom:_e,maxZoom:ve,nodeOrigin:q,nodeExtent:xe,zIndexMode:Dt,children:[O(au,{nodes:e,edges:t,defaultNodes:n,defaultEdges:r,onConnect:p,onConnectStart:m,onConnectEnd:h,onClickConnectStart:g,onClickConnectEnd:_,nodesDraggable:le,autoPanOnNodeFocus:ue,nodesConnectable:de,nodesFocusable:fe,edgesFocusable:pe,edgesReconnectable:me,elementsSelectable:he,elevateNodesOnSelect:at,elevateEdgesOnSelect:ot,minZoom:_e,maxZoom:ve,nodeExtent:xe,onNodesChange:Je,onEdgesChange:Ye,snapToGrid:ae,snapGrid:oe,connectionMode:z,translateExtent:ye,connectOnClick:tt,defaultEdgeOptions:it,fitView:$e,fitViewOptions:et,onNodesDelete:D,onEdgesDelete:k,onDelete:A,onNodeDragStart:w,onNodeDrag:T,onNodeDragStop:E,onSelectionDrag:N,onSelectionDragStart:M,onSelectionDragStop:P,onMove:u,onMoveStart:d,onMoveEnd:f,noPanClassName:Qe,nodeOrigin:q,rfId:At,autoPanOnConnect:ct,autoPanOnNodeDrag:lt,autoPanSpeed:dt,onError:mt,connectionRadius:ft,isValidConnection:pt,selectNodesOnDrag:ce,nodeDragThreshold:_t,connectionDragThreshold:vt,onBeforeDelete:R,debug:wt,ariaLabelConfig:Et,zIndexMode:Dt}),O(Mf,{onInit:l,onNodeClick:s,onEdgeClick:c,onNodeMouseEnter:v,onNodeMouseMove:y,onNodeMouseLeave:b,onNodeContextMenu:S,onNodeDoubleClick:C,nodeTypes:a,edgeTypes:o,connectionLineType:te,connectionLineStyle:B,connectionLineComponent:V,connectionLineContainerStyle:H,selectionKeyCode:ne,selectionOnDrag:re,selectionMode:W,deleteKeyCode:U,multiSelectionKeyCode:G,panActivationKeyCode:ie,zoomActivationKeyCode:K,onlyRenderVisibleElements:se,defaultViewport:ge,translateExtent:ye,minZoom:_e,maxZoom:ve,preventScrolling:be,zoomOnScroll:Ce,zoomOnPinch:we,zoomOnDoubleClick:Oe,panOnScroll:Te,panOnScrollSpeed:Ee,panOnScrollMode:De,panOnDrag:ke,autoPanOnSelection:ut,onPaneClick:Ae,onPaneMouseEnter:je,onPaneMouseMove:Me,onPaneMouseLeave:Ne,onPaneScroll:Pe,onPaneContextMenu:Fe,paneClickDistance:Ie,nodeClickDistance:Le,onSelectionContextMenu:F,onSelectionStart:L,onSelectionEnd:ee,onReconnect:ze,onReconnectStart:Be,onReconnectEnd:Ve,onEdgeContextMenu:He,onEdgeDoubleClick:Ue,onEdgeMouseEnter:We,onEdgeMouseMove:Ge,onEdgeMouseLeave:Ke,reconnectRadius:qe,defaultMarkerColor:Se,noDragClassName:Xe,noWheelClassName:Ze,noPanClassName:Qe,rfId:At,disableKeyboardA11y:st,nodeExtent:xe,viewport:yt,onViewportChange:bt,nodesDraggable:le}),O($l,{onSelectionChange:j}),Re,O(ql,{proOptions:rt,position:nt}),O(Wl,{rfId:At,disableKeyboardA11y:st})]})})}var Bf=Tu(zf);function Vf(){let e=Q();return x(t=>{let{domNode:n,updateNodeInternals:r}=e.getState(),i=Array.isArray(t)?t:[t],a=new Map;i.forEach(e=>{let t=n==null?void 0:n.querySelector(`.react-flow__node[data-id="${e}"]`);t&&a.set(e,{id:e,nodeElement:t,force:!0})}),requestAnimationFrame(()=>r(a,{triggerFitView:!1}))},[])}var Hf=e=>({x:e.transform[0],y:e.transform[1],zoom:e.transform[2]});function Uf(){return Z(Hf,X)}function Wf(e){let[t,n]=N(e);return[t,n,x(e=>n(t=>hu(e,t)),[])]}function Gf(e){let[t,n]=N(e);return[t,n,x(e=>n(t=>gu(e,t)),[])]}var Kf=jo.error014();function qf({id:e,handleType:t,handleId:n,onConnect:r,onDisconnect:a}={}){let o=Qu(),s=e??o;if(!s)throw Error(Kf);let c=i(null),l=Z(e=>e.connectionLookup.get(`${s}${t?n?`-${t}-${n}`:`-${t}`:``}`),js);return S(()=>{if(c.current&&c.current!==l){let e=l??new Map;Ms(c.current,e,a),Ms(e,c.current,r)}c.current=l??new Map},[l,r,a]),_(()=>Array.from((l==null?void 0:l.values())??[]),[l])}function Jf({dimensions:e,lineWidth:t,variant:n,className:r}){return O(`path`,{strokeWidth:t,d:`M${e[0]/2} 0 V${e[1]} M0 ${e[1]/2} H${e[0]}`,className:J([`react-flow__background-pattern`,n,r])})}function Yf({radius:e,className:t}){return O(`circle`,{cx:e,cy:e,r:e,className:J([`react-flow__background-pattern`,`dots`,t])})}var Xf;(function(e){e.Lines=`lines`,e.Dots=`dots`,e.Cross=`cross`})(Xf||={});var Zf={[Xf.Dots]:1,[Xf.Lines]:1,[Xf.Cross]:6},Qf=e=>({transform:e.transform,patternId:`pattern-${e.rfId}`});function $f({id:e,variant:t=Xf.Dots,gap:n=20,size:r,lineWidth:a=1,offset:o=0,color:s,bgColor:c,style:l,className:u,patternClassName:d}){let f=i(null),{transform:p,patternId:m}=Z(Qf,X),h=r||Zf[t],g=t===Xf.Dots,_=t===Xf.Cross,v=Array.isArray(n)?n:[n,n],y=[v[0]*p[2]||1,v[1]*p[2]||1],b=h*p[2],x=Array.isArray(o)?o:[o,o],S=_?[b,b]:y,C=[x[0]*p[2]+S[0]/2,x[1]*p[2]+S[1]/2],w=`${m}${e||``}`;return I(`svg`,{className:J([`react-flow__background`,u]),style:{...l,...Ru,"--xy-background-color-props":c,"--xy-background-pattern-color-props":s},ref:f,"data-testid":`rf__background`,children:[O(`pattern`,{id:w,x:p[0]%y[0],y:p[1]%y[1],width:y[0],height:y[1],patternUnits:`userSpaceOnUse`,patternTransform:`translate(-${C[0]},-${C[1]})`,children:g?O(Yf,{radius:b/2,className:d}):O(Jf,{dimensions:S,lineWidth:a,variant:t,className:d})}),O(`rect`,{x:`0`,y:`0`,width:`100%`,height:`100%`,fill:`url(#${w})`})]})}$f.displayName=`Background`;var ep=W($f);function tp(){return O(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 32 32`,children:O(`path`,{d:`M32 18.133H18.133V32h-4.266V18.133H0v-4.266h13.867V0h4.266v13.867H32z`})})}function np(){return O(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 32 5`,children:O(`path`,{d:`M0 0h32v4.2H0z`})})}function rp(){return O(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 32 30`,children:O(`path`,{d:`M3.692 4.63c0-.53.4-.938.939-.938h5.215V0H4.708C2.13 0 0 2.054 0 4.63v5.216h3.692V4.631zM27.354 0h-5.2v3.692h5.17c.53 0 .984.4.984.939v5.215H32V4.631A4.624 4.624 0 0027.354 0zm.954 24.83c0 .532-.4.94-.939.94h-5.215v3.768h5.215c2.577 0 4.631-2.13 4.631-4.707v-5.139h-3.692v5.139zm-23.677.94c-.531 0-.939-.4-.939-.94v-5.138H0v5.139c0 2.577 2.13 4.707 4.708 4.707h5.138V25.77H4.631z`})})}function ip(){return O(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 25 32`,children:O(`path`,{d:`M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0 8 0 4.571 3.429 4.571 7.619v3.048H3.048A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047zm4.724-13.866H7.467V7.619c0-2.59 2.133-4.724 4.723-4.724 2.591 0 4.724 2.133 4.724 4.724v3.048z`})})}function ap(){return O(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 25 32`,children:O(`path`,{d:`M21.333 10.667H19.81V7.619C19.81 3.429 16.38 0 12.19 0c-4.114 1.828-1.37 2.133.305 2.438 1.676.305 4.42 2.59 4.42 5.181v3.048H3.047A3.056 3.056 0 000 13.714v15.238A3.056 3.056 0 003.048 32h18.285a3.056 3.056 0 003.048-3.048V13.714a3.056 3.056 0 00-3.048-3.047zM12.19 24.533a3.056 3.056 0 01-3.047-3.047 3.056 3.056 0 013.047-3.048 3.056 3.056 0 013.048 3.048 3.056 3.056 0 01-3.048 3.047z`})})}function op({children:e,className:t,...n}){return O(`button`,{type:`button`,className:J([`react-flow__controls-button`,t]),...n,children:e})}var sp=e=>({isInteractive:e.nodesDraggable||e.nodesConnectable||e.elementsSelectable,minZoomReached:e.transform[2]<=e.minZoom,maxZoomReached:e.transform[2]>=e.maxZoom,ariaLabelConfig:e.ariaLabelConfig});function cp({style:e,showZoom:t=!0,showFitView:n=!0,showInteractive:r=!0,fitViewOptions:i,onZoomIn:a,onZoomOut:o,onFitView:s,onInteractiveChange:c,className:l,children:u,position:d=`bottom-left`,orientation:f=`vertical`,"aria-label":p}){let m=Q(),{isInteractive:h,minZoomReached:g,maxZoomReached:_,ariaLabelConfig:v}=Z(sp,X),{zoomIn:y,zoomOut:b,fitView:x}=Nu();return I(Gl,{className:J([`react-flow__controls`,f===`horizontal`?`horizontal`:`vertical`,l]),position:d,style:e,"data-testid":`rf__controls`,"aria-label":p??v[`controls.ariaLabel`],children:[t&&I(V,{children:[O(op,{onClick:()=>{y(),a==null||a()},className:`react-flow__controls-zoomin`,title:v[`controls.zoomIn.ariaLabel`],"aria-label":v[`controls.zoomIn.ariaLabel`],disabled:_,children:O(tp,{})}),O(op,{onClick:()=>{b(),o==null||o()},className:`react-flow__controls-zoomout`,title:v[`controls.zoomOut.ariaLabel`],"aria-label":v[`controls.zoomOut.ariaLabel`],disabled:g,children:O(np,{})})]}),n&&O(op,{className:`react-flow__controls-fitview`,onClick:()=>{x(i),s==null||s()},title:v[`controls.fitView.ariaLabel`],"aria-label":v[`controls.fitView.ariaLabel`],children:O(rp,{})}),r&&O(op,{className:`react-flow__controls-interactive`,onClick:()=>{m.setState({nodesDraggable:!h,nodesConnectable:!h,elementsSelectable:!h}),c==null||c(!h)},title:v[`controls.interactive.ariaLabel`],"aria-label":v[`controls.interactive.ariaLabel`],children:O(h?ap:ip,{})}),u]})}cp.displayName=`Controls`;var lp=W(cp);function up({id:e,x:t,y:n,width:r,height:i,style:a,color:o,strokeColor:s,strokeWidth:c,className:l,borderRadius:u,shapeRendering:d,selected:f,onClick:p}){let{background:m,backgroundColor:h}=a||{},g=o||m||h;return O(`rect`,{className:J([`react-flow__minimap-node`,{selected:f},l]),x:t,y:n,rx:u,ry:u,width:r,height:i,style:{fill:g,stroke:s,strokeWidth:c},shapeRendering:d,onClick:p?t=>p(t,e):void 0})}var dp=W(up),fp=e=>e.nodes.map(e=>e.id),pp=e=>e instanceof Function?e:()=>e;function mp({nodeStrokeColor:e,nodeColor:t,nodeClassName:n=``,nodeBorderRadius:r=5,nodeStrokeWidth:i,nodeComponent:a=dp,onClick:o}){let s=Z(fp,X),c=pp(t),l=pp(e),u=pp(n),d=typeof window>`u`||window.chrome?`crispEdges`:`geometricPrecision`;return O(V,{children:s.map(e=>O(gp,{id:e,nodeColorFunc:c,nodeStrokeColorFunc:l,nodeClassNameFunc:u,nodeBorderRadius:r,nodeStrokeWidth:i,NodeComponent:a,onClick:o,shapeRendering:d},e))})}function hp({id:e,nodeColorFunc:t,nodeStrokeColorFunc:n,nodeClassNameFunc:r,nodeBorderRadius:i,nodeStrokeWidth:a,shapeRendering:o,NodeComponent:s,onClick:c}){let{node:l,x:u,y:d,width:f,height:p}=Z(t=>{let n=t.nodeLookup.get(e);if(!n)return{node:void 0,x:0,y:0,width:0,height:0};let r=n.internals.userNode,{x:i,y:a}=n.internals.positionAbsolute,{width:o,height:s}=Ts(r);return{node:r,x:i,y:a,width:o,height:s}},X);return!l||l.hidden||!Es(l)?null:O(s,{x:u,y:d,width:f,height:p,style:l.style,selected:!!l.selected,className:r(l),color:t(l),borderRadius:i,strokeColor:n(l),strokeWidth:a,shapeRendering:o,onClick:c,id:l.id})}var gp=W(hp),_p=W(mp),vp=200,yp=150,bp=e=>!e.hidden,xp=e=>{let t={x:-e.transform[0]/e.transform[2],y:-e.transform[1]/e.transform[2],width:e.width/e.transform[2],height:e.height/e.transform[2]},n=!1;for(let t of e.nodeLookup.values())if(!t.hidden){n=!0;break}return{viewBB:t,boundingRect:n?us(qo(e.nodeLookup,{filter:bp}),t):t,rfId:e.rfId,panZoom:e.panZoom,translateExtent:e.translateExtent,flowWidth:e.width,flowHeight:e.height,ariaLabelConfig:e.ariaLabelConfig}},Sp=(e,t)=>e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height,Cp=(e,t)=>Sp(e.viewBB,t.viewBB)&&Sp(e.boundingRect,t.boundingRect)&&e.rfId===t.rfId&&e.panZoom===t.panZoom&&e.translateExtent===t.translateExtent&&e.flowWidth===t.flowWidth&&e.flowHeight===t.flowHeight&&e.ariaLabelConfig===t.ariaLabelConfig,wp=`react-flow__minimap-desc`;function Tp({style:e,className:t,nodeStrokeColor:n,nodeColor:r,nodeClassName:a=``,nodeBorderRadius:o=5,nodeStrokeWidth:s,nodeComponent:c,bgColor:l,maskColor:u,maskStrokeColor:d,maskStrokeWidth:f,position:p=`bottom-right`,onClick:m,onNodeClick:h,pannable:g=!1,zoomable:_=!1,ariaLabel:v,inversePan:y,zoomStep:b=1,offsetScale:C=5}){let w=Q(),T=i(null),{boundingRect:E,panZoom:D,viewBB:k,rfId:A,translateExtent:j,flowWidth:M,flowHeight:N,ariaLabelConfig:P}=Z(xp,Cp),F=(e==null?void 0:e.width)??vp,L=(e==null?void 0:e.height)??yp,ee=E.width/F,R=E.height/L,z=Math.max(ee,R),te=z*F,B=z*L,V=C*z,H=E.x-(te-E.width)/2-V,U=E.y-(B-E.height)/2-V,ne=te+V*2,re=B+V*2,W=`${wp}-${A}`,ie=i(0),G=i();ie.current=z,S(()=>{let e=w.getState().panZoom;if(T.current&&e)return G.current=Kc({domNode:T.current,panZoom:e,getTransform:()=>w.getState().transform,getViewScale:()=>ie.current}),()=>{var e;(e=G.current)==null||e.destroy()}},[D]),S(()=>{var e;(e=G.current)==null||e.update({translateExtent:j,width:M,height:N,inversePan:y,pannable:g,zoomStep:b,zoomable:_})},[g,_,y,b,j,M,N]);let K=m?e=>{var t;let[n,r]=((t=G.current)==null?void 0:t.pointer(e))||[0,0];m(e,{x:n,y:r})}:void 0,ae=x((e,t)=>{let n=w.getState().nodeLookup.get(t).internals.userNode;h==null||h(e,n)},[h]),oe=h?ae:void 0,se=v??P[`minimap.ariaLabel`];return O(Gl,{position:p,style:{...e,"--xy-minimap-background-color-props":typeof l==`string`?l:void 0,"--xy-minimap-mask-background-color-props":typeof u==`string`?u:void 0,"--xy-minimap-mask-stroke-color-props":typeof d==`string`?d:void 0,"--xy-minimap-mask-stroke-width-props":typeof f==`number`?f*z:void 0,"--xy-minimap-node-background-color-props":typeof r==`string`?r:void 0,"--xy-minimap-node-stroke-color-props":typeof n==`string`?n:void 0,"--xy-minimap-node-stroke-width-props":typeof s==`number`?s:void 0},className:J([`react-flow__minimap`,t]),"data-testid":`rf__minimap`,children:I(`svg`,{width:F,height:L,viewBox:`${H} ${U} ${ne} ${re}`,className:`react-flow__minimap-svg`,role:`img`,"aria-labelledby":W,ref:T,onClick:K,children:[se&&O(`title`,{id:W,children:se}),O(_p,{onClick:oe,nodeColor:r,nodeStrokeColor:n,nodeBorderRadius:o,nodeClassName:a,nodeStrokeWidth:s,nodeComponent:c}),O(`path`,{className:`react-flow__minimap-mask`,d:`M${H-V},${U-V}h${ne+V*2}v${re+V*2}h${-ne-V*2}z
7
+ M${k.x},${k.y}h${k.width}v${k.height}h${-k.width}z`,fillRule:`evenodd`,pointerEvents:`none`})]})})}Tp.displayName=`MiniMap`;var Ep=W(Tp),Dp=e=>t=>e?`${Math.max(1/t.transform[2],1)}`:void 0,Op={[sl.Line]:`right`,[sl.Handle]:`bottom-right`};function kp({nodeId:e,position:t,variant:n=sl.Handle,className:r,style:a=void 0,children:o,color:s,minWidth:c=10,minHeight:l=10,maxWidth:u=Number.MAX_VALUE,maxHeight:d=Number.MAX_VALUE,keepAspectRatio:f=!1,resizeDirection:p,autoScale:m=!0,shouldResize:h,onResizeStart:g,onResize:_,onResizeEnd:v}){let y=Qu(),b=typeof e==`string`?e:y,C=Q(),w=i(null),T=n===sl.Handle,E=Z(x(Dp(T&&m),[T,m]),X),D=i(null),k=t??Op[n];S(()=>{if(w.current&&b)return D.current||=bl({domNode:w.current,nodeId:b,getStoreItems:()=>{let{nodeLookup:e,transform:t,snapGrid:n,snapToGrid:r,nodeOrigin:i,domNode:a}=C.getState();return{nodeLookup:e,transform:t,snapGrid:n,snapToGrid:r,nodeOrigin:i,paneDomNode:a}},onChange:(e,t)=>{let{triggerNodeChanges:n,nodeLookup:r,parentLookup:i,nodeOrigin:a}=C.getState(),o=[],s={x:e.x,y:e.y},c=r.get(b);if(c&&c.expandParent&&c.parentId){let t=c.origin??a,n=e.width??c.measured.width??0,l=e.height??c.measured.height??0,u=Tc([{id:c.id,parentId:c.parentId,rect:{width:n,height:l,...Ds({x:e.x??c.position.x,y:e.y??c.position.y},{width:n,height:l},c.parentId,r,t)}}],r,i,a);o.push(...u),s.x=e.x?Math.max(t[0]*n,e.x):void 0,s.y=e.y?Math.max(t[1]*l,e.y):void 0}if(s.x!==void 0&&s.y!==void 0){let e={id:b,type:`position`,position:{...s}};o.push(e)}if(e.width!==void 0&&e.height!==void 0){let t={id:b,type:`dimensions`,resizing:!0,setAttributes:p?p===`horizontal`?`width`:`height`:!0,dimensions:{width:e.width,height:e.height}};o.push(t)}for(let e of t){let t={...e,type:`position`};o.push(t)}n(o)},onEnd:({width:e,height:t})=>{let n={id:b,type:`dimensions`,resizing:!1,dimensions:{width:e,height:t}};C.getState().triggerNodeChanges([n])}}),D.current.update({controlPosition:k,boundaries:{minWidth:c,minHeight:l,maxWidth:u,maxHeight:d},keepAspectRatio:f,resizeDirection:p,onResizeStart:g,onResize:_,onResizeEnd:v,shouldResize:h}),()=>{var e;(e=D.current)==null||e.destroy()}},[k,c,l,u,d,f,g,_,v,h]);let A=k.split(`-`);return O(`div`,{className:J([`react-flow__resize-control`,`nodrag`,...A,n,r]),ref:w,style:{...a,scale:E,...s&&{[T?`backgroundColor`:`borderColor`]:s}},children:o})}var Ap=W(kp);function jp({nodeId:e,isVisible:t=!0,handleClassName:n,handleStyle:r,lineClassName:i,lineStyle:a,color:o,minWidth:s=10,minHeight:c=10,maxWidth:l=Number.MAX_VALUE,maxHeight:u=Number.MAX_VALUE,keepAspectRatio:d=!1,autoScale:f=!0,shouldResize:p,onResizeStart:m,onResize:h,onResizeEnd:g}){return t?I(V,{children:[ll.map(t=>O(Ap,{className:i,style:a,nodeId:e,position:t,variant:sl.Line,color:o,minWidth:s,minHeight:c,maxWidth:l,maxHeight:u,onResizeStart:m,keepAspectRatio:d,autoScale:f,shouldResize:p,onResize:h,onResizeEnd:g},t)),cl.map(t=>O(Ap,{className:n,style:r,nodeId:e,position:t,color:o,minWidth:s,minHeight:c,maxWidth:l,maxHeight:u,onResizeStart:m,keepAspectRatio:d,autoScale:f,shouldResize:p,onResize:h,onResizeEnd:g},t))]}):null}var Mp={ms:1,s:1e3,m:6e4,h:36e5,d:864e5},Np=Mp.d;function Pp(e){if(typeof e==`number`)return Number.isFinite(e)&&e>=0?Math.round(e):null;if(typeof e!=`string`)return null;let t=e.trim().toLowerCase().replace(/_/g,``);if(/^(t|time|tod|timeofday)#/.test(t)&&(t=t.substring(t.indexOf(`#`)+1)),!t)return null;let n=t.match(/^(\d{1,2}):(\d{2})(?::(\d{2}))?$/);if(n){let[e,t,r]=[n[1],n[2],n[3]||`0`].map(Number);return t<60&&r<60?((e*60+t)*60+r)*1e3:null}if(/^\d+(\.\d+)?$/.test(t))return Math.round(Number(t));let r=t.match(/(\d+(?:\.\d+)?)(ms|s|m|h|d)/g);return!r||r.join(``)!==t?null:Math.round(r.reduce((e,t)=>{let[,n,r]=t.match(/(\d+(?:\.\d+)?)(ms|s|m|h|d)/);return e+Number(n)*Mp[r]},0))}function Fp(e){if(!e)return`0ms`;if(e<Mp.m)return e>=1e3?`${Math.round(e/100)/10}s`:`${Math.round(e)}ms`;let t=Math.round(e),n=[];for(let e of[`d`,`h`,`m`]){let r=Math.floor(t/Mp[e]);r&&(n.push(`${r}${e}`),t-=r*Mp[e])}return t&&n.push(t%1e3?`${Math.round(t/100)/10}s`:`${t/1e3}s`),n.join(``)}function Ip(e){let t=Math.round((e%Np+Np)%Np/1e3),n=e=>String(e).padStart(2,`0`),r=`${n(Math.floor(t/3600))}:${n(Math.floor(t/60)%60)}`;return t%60?`${r}:${n(t%60)}`:r}var Lp=n({BLINK:()=>Im,BlinkBlock:()=>pm,CLOCK:()=>jm,CTD:()=>Pm,CTU:()=>Nm,CTUD:()=>Fm,ClockBlock:()=>Zp,CtdBlock:()=>dm,CtuBlock:()=>um,CtudBlock:()=>fm,FTrigBlock:()=>nm,F_TRIG:()=>bm,HYST:()=>wm,HystBlock:()=>om,JS:()=>Lm,JsBlock:()=>gm,LOG:()=>Om,LOG_LIMIT:()=>20,MESSAGE_LIMIT:()=>5,MessageBlock:()=>hm,NOTIFY:()=>km,PID:()=>Dm,PT1:()=>Em,PidBlock:()=>lm,Pt1Block:()=>cm,RAMP:()=>Tm,RS:()=>_m,RTrigBlock:()=>tm,R_TRIG:()=>ym,RampBlock:()=>sm,RsBlock:()=>$p,SCHEDULE:()=>Mm,SENDTO:()=>Am,SR:()=>vm,ScheduleBlock:()=>Qp,SrBlock:()=>em,TOF:()=>Sm,TON:()=>xm,TP:()=>Cm,TofBlock:()=>im,TonBlock:()=>rm,TpBlock:()=>am,concat:()=>Gp,div:()=>Bp,inWindow:()=>Jp,round:()=>Kp,timeOfDay:()=>qp,timeWindow:()=>Xp,toBool:()=>Rp,toInt:()=>Hp,toNum:()=>zp,toReal:()=>Vp,toStr:()=>Wp,toTime:()=>Up});function Rp(e){if(typeof e==`string`){let t=e.trim().toLowerCase();return t===`true`||t===`on`||t===`1`||t===`yes`}return!!e}function zp(e){if(typeof e==`boolean`)return+!!e;let t=typeof e==`number`?e:parseFloat(String(e));return Number.isFinite(t)?t:NaN}function Bp(e,t){return t?e/t:0}function Vp(e){let t=zp(typeof e==`string`?e.replace(`,`,`.`):e);return Number.isNaN(t)?0:t}function Hp(e){return Math.round(Vp(e))}function Up(e){return typeof e==`string`?Pp(e)??Pp(Vp(e))??0:Pp(Vp(e))??0}function Wp(e){switch(typeof e){case`string`:return e;case`number`:case`boolean`:return e.toString();case`undefined`:return``;default:return e===null?``:JSON.stringify(e)}}function Gp(...e){return e.map(Wp).join(``)}function Kp(e,t){let n=Math.max(0,Math.min(10,Math.round(t)||0));if(!Number.isFinite(e))return 0;let r=Number(`${Math.round(Number(`${e}e${n}`))}e-${n}`);return Number.isFinite(r)?r:Math.round(e*10**n)/10**n}function qp(e=Date.now()){let t=new Date(e);return((t.getHours()*60+t.getMinutes())*60+t.getSeconds())*1e3+t.getMilliseconds()}function Jp(e,t,n){return t<=n?e>=t&&e<n:e>=t||e<n}var Yp={all:()=>!0,weekdays:e=>e>=1&&e<=5,weekend:e=>e===0||e===6};function Xp(e,t,n,r=Date.now()){let i=qp(r);if(!Jp(i,e,t))return!1;let a=new Date(r).getDay();return(Yp[n]||Yp.all)(e>t&&i<t?(a+6)%7:a)}var Zp=class{constructor(){z(this,`TOD`,0),z(this,`HOUR`,0),z(this,`MIN`,0),z(this,`WDAY`,1),z(this,`DAY`,1),z(this,`MONTH`,1),z(this,`YEAR`,1970)}run(e=Date.now()){let t=new Date(e);this.TOD=qp(e),this.HOUR=t.getHours(),this.MIN=t.getMinutes(),this.WDAY=t.getDay()||7,this.DAY=t.getDate(),this.MONTH=t.getMonth()+1,this.YEAR=t.getFullYear()}},Qp=class{constructor(){z(this,`Q`,!1),z(this,`pending`,0)}run(){this.Q=this.pending>0,this.pending=0}},$p=class{constructor(){z(this,`Q1`,!1)}run(e,t){this.Q1=!t&&(e||this.Q1)}},em=class{constructor(){z(this,`Q1`,!1)}run(e,t){this.Q1=e||!t&&this.Q1}},tm=class{constructor(){z(this,`Q`,!1),z(this,`last`,!1)}run(e,t){this.Q=!t&&e&&!this.last,this.last=e}},nm=class{constructor(){z(this,`Q`,!1),z(this,`last`,!1)}run(e,t){this.Q=!t&&!e&&this.last,this.last=e}},rm=class{constructor(){z(this,`Q`,!1),z(this,`ET`,0),z(this,`last`,!1)}run(e,t,n){e?(this.last&&(this.ET=Math.min(this.ET+n,t)),this.Q=this.ET>=t):(this.ET=0,this.Q=!1),this.last=e}},im=class{constructor(){z(this,`Q`,!1),z(this,`ET`,0),z(this,`last`,!1)}run(e,t,n){e?(this.ET=0,this.Q=!0):this.Q&&=(this.last||(this.ET=Math.min(this.ET+n,t)),this.ET<t),this.last=e}},am=class{constructor(){z(this,`Q`,!1),z(this,`ET`,0),z(this,`last`,!1)}run(e,t,n){this.Q?(this.ET=Math.min(this.ET+n,t),this.ET>=t&&(this.Q=!1)):e&&!this.last?(this.Q=!0,this.ET=0):!e&&this.ET>=t&&(this.ET=0),this.last=e}},om=class{constructor(){z(this,`Q`,!1)}run(e,t,n){e>t?this.Q=!0:e<n&&(this.Q=!1)}},sm=class{constructor(){z(this,`OUT`,0)}run(e,t,n,r,i){i?this.OUT=e:e>this.OUT?this.OUT=t>0?Math.min(e,this.OUT+t*r/1e3):e:e<this.OUT&&(this.OUT=n>0?Math.max(e,this.OUT-n*r/1e3):e)}},cm=class{constructor(){z(this,`OUT`,0)}run(e,t,n,r){r||t<=0?this.OUT=e:this.OUT+=(e-this.OUT)*(1-Math.exp(-n/t))}},lm=class{constructor(){z(this,`Y`,0),z(this,`integral`,0),z(this,`derivative`,0),z(this,`lastPV`,0)}run(e,t,n,r,i,a,o,s,c,l){let u=Math.min(a,o),d=Math.max(a,o),f=e-t,p=n*f;if(l||s)this.integral=0,this.derivative=0;else if(c>0){if(i>0){let e=-n*i*(t-this.lastPV)/c;this.derivative+=(e-this.derivative)*(1-Math.exp(-c/(i/10)))}else this.derivative=0;if(r>0){let e=this.integral+n*f*c/r,t=p+this.derivative;this.integral=e>this.integral?Math.min(e,Math.max(this.integral,d-t)):Math.max(e,Math.min(this.integral,u-t))}else this.integral=0}this.lastPV=t,this.Y=Math.min(d,Math.max(u,p+this.integral+this.derivative))}},um=class{constructor(){z(this,`Q`,!1),z(this,`CV`,0),z(this,`last`,!1)}run(e,t,n,r){t?this.CV=0:e&&!this.last&&!r&&this.CV++,this.last=e,this.Q=this.CV>=n}},dm=class{constructor(){z(this,`Q`,!0),z(this,`CV`,0),z(this,`last`,!1)}run(e,t,n,r){t?this.CV=n:e&&!this.last&&!r&&this.CV--,this.last=e,this.Q=this.CV<=0}},fm=class{constructor(){z(this,`QU`,!1),z(this,`QD`,!0),z(this,`CV`,0),z(this,`lastUp`,!1),z(this,`lastDown`,!1)}run(e,t,n,r,i,a){if(n)this.CV=0;else if(r)this.CV=i;else if(!a){let n=e&&!this.lastUp,r=t&&!this.lastDown;n&&!r?this.CV++:r&&!n&&this.CV--}this.lastUp=e,this.lastDown=t,this.QU=this.CV>=i,this.QD=this.CV<=0}},pm=class{constructor(){z(this,`Q`,!1),z(this,`elapsed`,0),z(this,`running`,!1)}run(e,t,n,r){if(!e){this.Q=!1,this.running=!1;return}if(!this.running){this.running=!0,this.Q=!0,this.elapsed=0;return}this.elapsed+=r;let i=t+n;i>0&&this.elapsed>=i&&(this.elapsed%=i);let a=this.Q?t:n;this.elapsed>=a&&(this.elapsed-=a,this.Q=!this.Q)}},mm=6e4,hm=class{constructor(e,t=`lines`){z(this,`limit`,void 0),z(this,`noun`,void 0),z(this,`text`,``),z(this,`last`,!1),z(this,`lastTrig`,!1),z(this,`lastValue`,void 0),z(this,`window`,0),z(this,`count`,0),this.limit=e,this.noun=t}get line(){return this.last?`${this.text} (${this.note()})`:this.text}note(){return`${this.limit} ${this.noun} a minute at most - more are left out until the minute is over`}run(e,t,n,r,i,a){this.window+=i,this.window>=mm&&(this.window=0,this.count=0);let o=!a&&(r===`change`?!Object.is(t,this.lastValue):e&&!this.lastTrig);return this.lastTrig=e,this.lastValue=t,!o||this.count>=this.limit?!1:(this.count++,this.text=n.includes(`%s`)?n.split(`%s`).join(t==null?String(t):Wp(t)):n,this.last=this.count===this.limit,!0)}},gm=class{constructor(e,t=1){z(this,`fn`,void 0),z(this,`out`,void 0),z(this,`state`,{}),this.fn=e,this.out=Array(t).fill(0)}run(e,t,n){let r=this.fn(...e,t,n,this.state);(Array.isArray(r)?r:[r]).forEach((e,t)=>{e!==void 0&&t<this.out.length&&(this.out[t]=e)})}},_m=()=>new $p,vm=()=>new em,ym=()=>new tm,bm=()=>new nm,xm=()=>new rm,Sm=()=>new im,Cm=()=>new am,wm=()=>new om,Tm=()=>new sm,Em=()=>new cm,Dm=()=>new lm,Om=()=>new hm(20),km=()=>new hm(5,`messages`),Am=()=>new hm(5,`messages`),jm=()=>new Zp,Mm=()=>new Qp,Nm=()=>new um,Pm=()=>new dm,Fm=()=>new fm,Im=()=>new pm,Lm=(e,t)=>new gm(e,t),Rm=`1.5.0`,zm=`@iobroker/fb-runtime`,Bm=`@userFb/`,Vm=[`nightEnd`,`nauticalDawn`,`dawn`,`sunrise`,`sunriseEnd`,`goldenHourEnd`,`solarNoon`,`goldenHour`,`sunsetStart`,`sunset`,`dusk`,`nauticalDusk`,`night`,`nadir`],Hm=[{type:`AND`,category:`logic`,inputs:[],outputs:[{id:`OUT`,type:`BOOL`}],extensible:{prefix:`IN`,type:`BOOL`,default:!0,min:2,max:16},code:`{OUT} = {IN*: && };`},{type:`OR`,category:`logic`,inputs:[],outputs:[{id:`OUT`,type:`BOOL`}],extensible:{prefix:`IN`,type:`BOOL`,default:!1,min:2,max:16},code:`{OUT} = {IN*: || };`},{type:`XOR`,category:`logic`,inputs:[],outputs:[{id:`OUT`,type:`BOOL`}],extensible:{prefix:`IN`,type:`BOOL`,default:!1,min:2,max:16},code:`{OUT} = {IN*: !== };`},{type:`NOT`,category:`logic`,inputs:[{id:`IN`,type:`BOOL`,default:!1}],outputs:[{id:`OUT`,type:`BOOL`}],code:`{OUT} = !{IN};`},{type:`RS`,category:`memory`,inputs:[{id:`S`,type:`BOOL`,default:!1},{id:`R1`,type:`BOOL`,default:!1}],outputs:[{id:`Q1`,type:`BOOL`}],stateful:!0,code:`{I}.run({S}, {R1}); {Q1} = {I}.Q1;`},{type:`SR`,category:`memory`,inputs:[{id:`S1`,type:`BOOL`,default:!1},{id:`R`,type:`BOOL`,default:!1}],outputs:[{id:`Q1`,type:`BOOL`}],stateful:!0,code:`{I}.run({S1}, {R}); {Q1} = {I}.Q1;`},{type:`R_TRIG`,category:`memory`,inputs:[{id:`CLK`,type:`BOOL`,default:!1}],outputs:[{id:`Q`,type:`BOOL`}],stateful:!0,code:`{I}.run({CLK}, firstScan); {Q} = {I}.Q;`},{type:`F_TRIG`,category:`memory`,inputs:[{id:`CLK`,type:`BOOL`,default:!1}],outputs:[{id:`Q`,type:`BOOL`}],stateful:!0,code:`{I}.run({CLK}, firstScan); {Q} = {I}.Q;`},{type:`TON`,category:`timers`,inputs:[{id:`IN`,type:`BOOL`,default:!1},{id:`PT`,type:`TIME`,param:!0,default:1e3}],outputs:[{id:`Q`,type:`BOOL`},{id:`ET`,type:`TIME`}],stateful:!0,timeDependent:!0,code:`{I}.run({IN}, {PT}, dt); {Q} = {I}.Q; {ET} = {I}.ET;`},{type:`TOF`,category:`timers`,inputs:[{id:`IN`,type:`BOOL`,default:!1},{id:`PT`,type:`TIME`,param:!0,default:1e3}],outputs:[{id:`Q`,type:`BOOL`},{id:`ET`,type:`TIME`}],stateful:!0,timeDependent:!0,code:`{I}.run({IN}, {PT}, dt); {Q} = {I}.Q; {ET} = {I}.ET;`},{type:`TP`,category:`timers`,inputs:[{id:`IN`,type:`BOOL`,default:!1},{id:`PT`,type:`TIME`,param:!0,default:1e3}],outputs:[{id:`Q`,type:`BOOL`},{id:`ET`,type:`TIME`}],stateful:!0,timeDependent:!0,code:`{I}.run({IN}, {PT}, dt); {Q} = {I}.Q; {ET} = {I}.ET;`},{type:`BLINK`,category:`timers`,inputs:[{id:`EN`,type:`BOOL`,default:!0},{id:`TH`,type:`TIME`,param:!0,default:1e3},{id:`TL`,type:`TIME`,param:!0,default:1e3}],outputs:[{id:`Q`,type:`BOOL`}],stateful:!0,timeDependent:!0,code:`{I}.run({EN}, {TH}, {TL}, dt); {Q} = {I}.Q;`},{type:`CTU`,category:`counters`,inputs:[{id:`CU`,type:`BOOL`,default:!1},{id:`R`,type:`BOOL`,default:!1},{id:`PV`,type:`INT`,param:!0,default:10}],outputs:[{id:`Q`,type:`BOOL`},{id:`CV`,type:`INT`}],stateful:!0,code:`{I}.run({CU}, {R}, {PV}, firstScan); {Q} = {I}.Q; {CV} = {I}.CV;`},{type:`CTD`,category:`counters`,inputs:[{id:`CD`,type:`BOOL`,default:!1},{id:`LD`,type:`BOOL`,default:!1},{id:`PV`,type:`INT`,param:!0,default:10}],outputs:[{id:`Q`,type:`BOOL`},{id:`CV`,type:`INT`}],stateful:!0,code:`{I}.run({CD}, {LD}, {PV}, firstScan); {Q} = {I}.Q; {CV} = {I}.CV;`},{type:`CTUD`,category:`counters`,inputs:[{id:`CU`,type:`BOOL`,default:!1},{id:`CD`,type:`BOOL`,default:!1},{id:`R`,type:`BOOL`,default:!1},{id:`LD`,type:`BOOL`,default:!1},{id:`PV`,type:`INT`,param:!0,default:10}],outputs:[{id:`QU`,type:`BOOL`},{id:`QD`,type:`BOOL`},{id:`CV`,type:`INT`}],stateful:!0,code:`{I}.run({CU}, {CD}, {R}, {LD}, {PV}, firstScan); {QU} = {I}.QU; {QD} = {I}.QD; {CV} = {I}.CV;`},...[[`GT`,`>`],[`GE`,`>=`],[`LT`,`<`],[`LE`,`<=`]].map(([e,t])=>({type:e,category:`compare`,inputs:[{id:`IN1`,type:`REAL`,default:0},{id:`IN2`,type:`REAL`,default:0}],outputs:[{id:`OUT`,type:`BOOL`}],code:`{OUT} = {IN1} ${t} {IN2};`})),...[[`EQ`,`===`],[`NE`,`!==`]].map(([e,t])=>({type:e,category:`compare`,inputs:[{id:`IN1`,type:`ANY`,default:0},{id:`IN2`,type:`ANY`,default:0}],outputs:[{id:`OUT`,type:`BOOL`}],code:`{OUT} = {IN1} ${t} {IN2};`})),{type:`ADD`,category:`arithmetic`,inputs:[],outputs:[{id:`OUT`,type:`REAL`}],extensible:{prefix:`IN`,type:`REAL`,default:0,min:2,max:16},code:`{OUT} = {IN*: + };`},{type:`MUL`,category:`arithmetic`,inputs:[],outputs:[{id:`OUT`,type:`REAL`}],extensible:{prefix:`IN`,type:`REAL`,default:1,min:2,max:16},code:`{OUT} = {IN*: * };`},{type:`SUB`,category:`arithmetic`,inputs:[{id:`IN1`,type:`REAL`,default:0},{id:`IN2`,type:`REAL`,default:0}],outputs:[{id:`OUT`,type:`REAL`}],code:`{OUT} = {IN1} - {IN2};`},{type:`DIV`,category:`arithmetic`,inputs:[{id:`IN1`,type:`REAL`,default:0},{id:`IN2`,type:`REAL`,default:1}],outputs:[{id:`OUT`,type:`REAL`}],code:`{OUT} = fb.div({IN1}, {IN2});`},{type:`MIN`,category:`arithmetic`,inputs:[],outputs:[{id:`OUT`,type:`REAL`}],extensible:{prefix:`IN`,type:`REAL`,default:0,min:2,max:16},code:`{OUT} = Math.min({IN*:, });`},{type:`MAX`,category:`arithmetic`,inputs:[],outputs:[{id:`OUT`,type:`REAL`}],extensible:{prefix:`IN`,type:`REAL`,default:0,min:2,max:16},code:`{OUT} = Math.max({IN*:, });`},{type:`ROUND`,category:`arithmetic`,inputs:[{id:`IN`,type:`REAL`,default:0},{id:`DIGITS`,type:`INT`,param:!0,default:0}],outputs:[{id:`OUT`,type:`REAL`}],code:`{OUT} = fb.round({IN}, {DIGITS});`},...[[`TO_BOOL`,`BOOL`,`toBool`],[`TO_INT`,`INT`,`toInt`],[`TO_REAL`,`REAL`,`toReal`],[`TO_TIME`,`TIME`,`toTime`],[`TO_STRING`,`STRING`,`toStr`]].map(([e,t,n])=>({type:e,category:`convert`,inputs:[{id:`IN`,type:`ANY`,default:t===`STRING`?``:0}],outputs:[{id:`OUT`,type:t}],code:`{OUT} = fb.${n}({IN});`})),{type:`CONCAT`,category:`convert`,inputs:[],outputs:[{id:`OUT`,type:`STRING`}],extensible:{prefix:`IN`,type:`ANY`,default:``,min:2,max:16},code:`{OUT} = fb.concat({IN*:, });`},{type:`HYST`,category:`control`,inputs:[{id:`IN`,type:`REAL`,default:0},{id:`HIGH`,type:`REAL`,param:!0,default:1},{id:`LOW`,type:`REAL`,param:!0,default:0}],outputs:[{id:`Q`,type:`BOOL`}],stateful:!0,code:`{I}.run({IN}, {HIGH}, {LOW}); {Q} = {I}.Q;`},{type:`RAMP`,category:`control`,inputs:[{id:`IN`,type:`REAL`,default:0},{id:`UP`,type:`REAL`,param:!0,default:1},{id:`DOWN`,type:`REAL`,param:!0,default:1}],outputs:[{id:`OUT`,type:`REAL`}],stateful:!0,timeDependent:!0,code:`{I}.run({IN}, {UP}, {DOWN}, dt, firstScan); {OUT} = {I}.OUT;`},{type:`PT1`,category:`control`,inputs:[{id:`IN`,type:`REAL`,default:0},{id:`T`,type:`TIME`,param:!0,default:1e4}],outputs:[{id:`OUT`,type:`REAL`}],stateful:!0,timeDependent:!0,code:`{I}.run({IN}, {T}, dt, firstScan); {OUT} = {I}.OUT;`},{type:`PID`,category:`control`,inputs:[{id:`SP`,type:`REAL`,default:0},{id:`PV`,type:`REAL`,default:0},{id:`KP`,type:`REAL`,param:!0,default:1},{id:`TN`,type:`TIME`,param:!0,default:0},{id:`TV`,type:`TIME`,param:!0,default:0},{id:`YMIN`,type:`REAL`,param:!0,default:0},{id:`YMAX`,type:`REAL`,param:!0,default:100},{id:`RST`,type:`BOOL`,default:!1}],outputs:[{id:`Y`,type:`REAL`}],stateful:!0,timeDependent:!0,code:`{I}.run({SP}, {PV}, {KP}, {TN}, {TV}, {YMIN}, {YMAX}, {RST}, dt, firstScan); {Y} = {I}.Y;`},{type:`STATE_IN`,category:`iobroker`,inputs:[],outputs:[{id:`Q`,type:{param:`type`}}],params:[{id:`oid`,type:`OID`,required:!0},{id:`type`,type:`ENUM`,options:[`BOOL`,`INT`,`REAL`,`STRING`],default:`REAL`}],code:`{Q} = rt.input({$oid}, {$type});`},{type:`STATE_OUT`,category:`iobroker`,inputs:[{id:`IN`,type:`ANY`,default:!1}],outputs:[],params:[{id:`oid`,type:`OID`,required:!0},{id:`ack`,type:`BOOL`,default:!1},{id:`minInterval`,type:`TIME`,default:0}],code:`rt.output({$oid}, {IN}, {$ack}, {$minInterval});`},{type:`CONST`,category:`iobroker`,inputs:[],outputs:[{id:`Q`,type:{param:`type`}}],params:[{id:`type`,type:`ENUM`,options:[`BOOL`,`INT`,`REAL`,`TIME`,`STRING`],default:`REAL`},{id:`value`,type:{param:`type`},default:0}],code:`{Q} = {$value};`},{type:`CLOCK`,category:`calendar`,inputs:[],outputs:[{id:`TOD`,type:`TIME`,clock:!0},{id:`HOUR`,type:`INT`},{id:`MIN`,type:`INT`},{id:`WDAY`,type:`INT`},{id:`DAY`,type:`INT`},{id:`MONTH`,type:`INT`},{id:`YEAR`,type:`INT`}],stateful:!0,timeDependent:!0,code:`{I}.run(); {TOD} = {I}.TOD; {HOUR} = {I}.HOUR; {MIN} = {I}.MIN; {WDAY} = {I}.WDAY; {DAY} = {I}.DAY; {MONTH} = {I}.MONTH; {YEAR} = {I}.YEAR;`},{type:`TIMEWINDOW`,category:`calendar`,inputs:[{id:`START`,type:`TIME`,param:!0,default:288e5,clock:!0},{id:`END`,type:`TIME`,param:!0,default:792e5,clock:!0}],outputs:[{id:`Q`,type:`BOOL`}],params:[{id:`days`,type:`ENUM`,options:[`all`,`weekdays`,`weekend`],default:`all`}],timeDependent:!0,code:`{Q} = fb.timeWindow({START}, {END}, {$days});`},{type:`SCHEDULE`,category:`calendar`,inputs:[],outputs:[{id:`Q`,type:`BOOL`}],params:[{id:`cron`,type:`CRON`,default:`0 8 * * *`,required:!0}],stateful:!0,code:`{Q} = rt.cron({I}, {$cron});`},{type:`ASTRO`,category:`calendar`,inputs:[],outputs:[{id:`Q`,type:`BOOL`},{id:`START`,type:`TIME`,clock:!0},{id:`END`,type:`TIME`,clock:!0}],params:[{id:`start`,type:`ENUM`,options:Vm,default:`sunset`},{id:`startOffset`,type:`INT`,default:0},{id:`end`,type:`ENUM`,options:Vm,default:`sunrise`},{id:`endOffset`,type:`INT`,default:0}],timeDependent:!0,code:`{START} = rt.astro({$start}, {$startOffset}); {END} = rt.astro({$end}, {$endOffset}); {Q} = fb.inWindow(fb.timeOfDay(), {START}, {END});`},{type:`LOG`,category:`messages`,inputs:[{id:`TRIG`,type:`BOOL`,default:!1},{id:`IN`,type:`ANY`,default:``}],outputs:[],params:[{id:`text`,type:`STRING`,default:`%s`},{id:`level`,type:`ENUM`,options:[`info`,`warn`,`error`,`debug`],default:`info`},{id:`when`,type:`ENUM`,options:[`edge`,`change`],default:`edge`}],stateful:!0,code:`if ({I}.run({TRIG}, {IN}, {$text}, {$when}, dt, firstScan)) log({I}.line, {$level});`},{type:`NOTIFY`,category:`messages`,inputs:[{id:`TRIG`,type:`BOOL`,default:!1},{id:`IN`,type:`ANY`,default:``}],outputs:[],params:[{id:`text`,type:`STRING`,default:`%s`},{id:`category`,type:`ENUM`,options:[`message`,`alert`],default:`message`},{id:`when`,type:`ENUM`,options:[`edge`,`change`],default:`edge`}],stateful:!0,code:`if ({I}.run({TRIG}, {IN}, {$text}, {$when}, dt, firstScan)) rt.notify({I}, {$category});`},{type:`SENDTO`,category:`messages`,inputs:[{id:`TRIG`,type:`BOOL`,default:!1},{id:`IN`,type:`ANY`,default:``}],outputs:[],params:[{id:`instance`,type:`INSTANCE`,required:!0},{id:`text`,type:`STRING`,default:`%s`},{id:`title`,type:`STRING`,default:``},{id:`command`,type:`STRING`,default:`send`},{id:`when`,type:`ENUM`,options:[`edge`,`change`],default:`edge`}],stateful:!0,code:`if ({I}.run({TRIG}, {IN}, {$text}, {$when}, dt, firstScan)) rt.send({I}, {$instance}, {$command}, {$title});`},{type:`JS`,category:`expert`,inputs:[],outputs:[],extensible:{prefix:`IN`,type:`ANY`,default:0,min:0,max:8,count:2},extensibleOutputs:{prefix:`OUT`,type:`ANY`,min:1,max:8},params:[{id:`code`,type:`CODE`,default:`return IN1;`}],stateful:!0,code:``},{type:`FB_IN`,category:`interface`,inputs:[],outputs:[{id:`Q`,type:{param:`type`}}],params:[{id:`pin`,type:`NAME`,required:!0},{id:`type`,type:`ENUM`,options:[`BOOL`,`INT`,`REAL`,`TIME`,`STRING`],default:`BOOL`},{id:`value`,type:{param:`type`},default:!1}],code:`{Q} = self[{$pin}];`},{type:`FB_OUT`,category:`interface`,inputs:[{id:`IN`,type:{param:`type`},default:!1}],outputs:[],params:[{id:`pin`,type:`NAME`,required:!0},{id:`type`,type:`ENUM`,options:[`BOOL`,`INT`,`REAL`,`TIME`,`STRING`],default:`BOOL`}],code:`self[{$pin}] = {IN};`}],Um=[`iobroker`,`logic`,`memory`,`timers`,`counters`,`compare`,`arithmetic`,`convert`,`control`,`calendar`,`messages`,`expert`],Wm=new Map(Hm.map(e=>[e.type,e])),Gm=[`BOOL`,`INT`,`REAL`,`TIME`,`STRING`];function Km(e,t){return e.graph.blocks.filter(e=>{var n;return e.type===t&&typeof((n=e.params)==null?void 0:n.pin)==`string`&&e.params.pin}).sort((e,t)=>e.pos[1]-t.pos[1]||e.pos[0]-t.pos[0])}function qm(e){var t;let n=(t=e.params)==null?void 0:t.type;return Gm.includes(n)?n:`BOOL`}function Jm(e,t,n){return n.add(e.type),e.graph.blocks.some(e=>{var r;let i=t[e.type];return i?!n.has(i.type)&&Jm(i,t,n):!!((r=Wm.get(e.type))!=null&&r.timeDependent)})}function Ym(e,t){return{type:e.type,category:`user`,inputs:Km(e,`FB_IN`).map(e=>{var t;return{id:String(e.params.pin),type:qm(e),default:(t=e.params)==null?void 0:t.value}}),outputs:Km(e,`FB_OUT`).map(e=>({id:String(e.params.pin),type:qm(e)})),stateful:!0,timeDependent:Jm(e,t,new Set),code:``,user:e}}function Xm(e,t){let n=Wm.get(e);if(n)return n;let r=t==null?void 0:t[e];return r?Ym(r,t):void 0}var Zm=`//#fbd:`,Qm=1e4,$m=/^[A-Za-z_][A-Za-z0-9_]*$/,eh=[`BOOL`,`INT`,`REAL`,`TIME`,`STRING`];function th(){return{format:1,runtime:Rm,cycle:{mode:`auto`,ms:200},blocks:[],links:[],comments:[]}}function nh(e,t,n){if(typeof t==`object`){var r,i;let a=((r=e.params)==null?void 0:r[t.param])??(n==null||(i=n.params)==null||(i=i.find(e=>e.id===t.param))==null?void 0:i.default);return eh.includes(a)?a:`REAL`}return t}function rh(e,t){var n;if(!t.extensible)return t.inputs.length;let r=Number((n=e.params)==null?void 0:n.inputs);return Math.max(t.extensible.min,Math.min(t.extensible.max,Math.round(Number.isFinite(r)?r:t.extensible.min)))}function ih(e,t=Xm(e.type)){if(!t)return[];let n=t.inputs.map(n=>({...n,type:nh(e,n.type,t)}));if(t.extensible){let{prefix:r,type:i,default:a}=t.extensible;for(let o=1;o<=rh(e,t);o++)n.push({id:`${r}${o}`,type:nh(e,i,t),default:a})}return n}function ah(e,t){var n;if(!t.extensibleOutputs)return t.outputs.length;let{min:r,max:i}=t.extensibleOutputs,a=Number((n=e.params)==null?void 0:n.outputs);return Math.max(r,Math.min(i,Math.round(Number.isFinite(a)?a:r)))}function oh(e,t=Xm(e.type)){if(!t)return[];let n=t.outputs.map(n=>({...n,type:nh(e,n.type,t)}));if(t.extensibleOutputs){let{prefix:r,type:i}=t.extensibleOutputs;for(let a=1;a<=ah(e,t);a++)n.push({id:`${r}${a}`,type:nh(e,i,t)})}return n}function sh(e,t){return t===`ANY`||e===`ANY`||e===t||e===`INT`&&t===`REAL`}function ch(e,t){let n=new Set(t),r=0;for(let t of n)if(t.startsWith(e)){let n=Number(t.substring(e.length));Number.isInteger(n)&&n>r&&(r=n)}return`${e}${r+1}`}function lh(e,t,n){var r;let i=Xm(e,n.userBlocks),a={id:ch(`b`,n.blocks.map(e=>e.id)),type:e,name:ch(`${i!=null&&i.user?i.user.name.trim().replace(/\s+/g,`_`):e}_`,n.blocks.map(e=>e.name)),pos:t},o={};return i==null||(r=i.params)==null||r.forEach(e=>{e.default!==void 0&&(o[e.id]=e.default)}),i!=null&&i.extensible&&(o.inputs=i.extensible.count??i.extensible.min),i!=null&&i.extensibleOutputs&&(o.outputs=i.extensibleOutputs.count??i.extensibleOutputs.min),Object.keys(o).length&&(a.params=o),a}function uh(e){let t=th();if(!e||typeof e!=`object`)return t;t.format=typeof e.format==`number`?e.format:1,t.runtime=typeof e.runtime==`string`?e.runtime:Rm,e.cycle&&typeof e.cycle==`object`&&(t.cycle={mode:[`auto`,`cyclic`,`event`].includes(e.cycle.mode)?e.cycle.mode:`auto`,ms:typeof e.cycle.ms==`number`?e.cycle.ms:200}),t.blocks=Array.isArray(e.blocks)?e.blocks.filter(e=>e&&typeof e==`object`):[],t.blocks.forEach(e=>{(!Array.isArray(e.pos)||e.pos.length!==2)&&(e.pos=[0,0]),typeof e.name!=`string`&&(e.name=String(e.id))}),t.links=Array.isArray(e.links)?e.links.filter(e=>e&&Array.isArray(e.from)&&Array.isArray(e.to)).map(e=>{let t={id:e.id,from:e.from,to:e.to};return e.mark===!0&&(t.mark=!0),typeof e.label==`string`&&e.label.trim()&&(t.label=e.label.trim()),t}):[],t.comments=Array.isArray(e.comments)?e.comments.filter(e=>e==null?void 0:e.id):[];let n=e=>e&&typeof e.type==`string`&&typeof e.name==`string`?{type:e.type,name:e.name,version:typeof e.version==`number`?e.version:1,...typeof e.description==`string`?{description:e.description}:{}}:null,r=n(e.block);if(r&&(t.block=r),e.userBlocks&&typeof e.userBlocks==`object`){let r={};for(let[t,i]of Object.entries(e.userBlocks)){let e=n(i);if(e&&e.type===t&&i.graph){let{block:n,userBlocks:a,...o}=uh(i.graph);r[t]={...e,graph:o}}}Object.keys(r).length&&(t.userBlocks=r)}return t}function dh(e){if(!(e!=null&&e.trim()))return th();let t=e.lastIndexOf(Zm);if(t===-1||t>0&&e[t-1]!==`
8
8
  `)return null;let n=e.substring(t+7).split(`
9
- `)[0].trim();try{return uh(JSON.parse(n))}catch{return null}}function fh(e){return`${Zm}${JSON.stringify(e)}`}function ph(e,t){return[...ih(e,t).map(e=>e.id),`dt`,`firstScan`,`state`]}function mh(e,t){var n,r;let i=((n=e.params)==null?void 0:n.code)??((r=t.params)==null||(r=r.find(e=>e.id===`code`))==null?void 0:r.default);return typeof i==`string`?i:``}function hh(e,t){try{return Function(...t,e),null}catch(e){return(e==null?void 0:e.message)||String(e)}}var gh=/^@userFb\/[A-Za-z_][A-Za-z0-9_]*$/;function _h(e){let t=e.trim().replace(/[^A-Za-z0-9_]/g,`_`);return/^[A-Za-z_]/.test(t)?t:`_${t}`}function vh(e){return{type:`${Bm}${_h(e||`block`)}`,name:e||`block`,version:1}}function yh(e){return`UFB_${e.substring(Bm.length)}`}function bh(e){if(!e.block)return null;let{block:t,userBlocks:n,...r}=e,i=r.blocks.map(({order:e,...t})=>t);return{...t,graph:{...r,blocks:i}}}function xh(e,t,n){let r={...e};for(let[e,i]of Object.entries(t||{})){let t=r[e];(!t||t.version<i.version||n!=null&&n.includes(e))&&(r[e]=i)}return r}function Sh(e,t){let n=new Set,r=e=>{for(let i of e){let e=t==null?void 0:t[i.type];e&&!n.has(i.type)&&(n.add(i.type),r(e.graph.blocks))}};return r(e.blocks),[...n]}function Ch(e,t,n){let r=n==null?void 0:n[e];return!!r&&Sh(r.graph,n).includes(t)}function wh(e,t){let n=0,r=new Map,i=new Map,a=[],o=new Set,s=[],c=e=>{r.set(e,n),i.set(e,n),n++,a.push(e),o.add(e);for(let n of t.get(e)||[])r.has(n)?o.has(n)&&i.set(e,Math.min(i.get(e),r.get(n))):(c(n),i.set(e,Math.min(i.get(e),i.get(n))));if(i.get(e)===r.get(e)){let t=[],n;do n=a.pop(),o.delete(n),t.push(n);while(n!==e);s.push(t)}};return e.forEach(e=>!r.has(e)&&c(e)),s}function Th(e,t){var n;return e.length>1||!!((n=t.get(e[0]))!=null&&n.has(e[0]))}function Eh(e,t,n){let r=new Map(e.map(e=>[e,new Set]));for(let e of t)if(!(n!=null&&n(e))){var i;(i=r.get(e.from[0]))==null||i.add(e.to[0])}return r}var Dh=/^[A-Za-z_][A-Za-z0-9_]*$/,Oh=[`run`,`self`,`constructor`,`prototype`,`__proto__`];function kh(e){let t=0;return e.message.replace(/%s/g,()=>{var n;return((n=e.args)==null?void 0:n[t++])??``})}function Ah(e,t){if(t.visiting.has(e.type))return`The block %s contains itself`;let n=t.cache.get(e.type);return n||(t.visiting.add(e.type),n=jh(e.graph,{...t,isBlock:!0}),t.visiting.delete(e.type),t.cache.set(e.type,n)),n.issues.some(e=>e.severity===`error`)?`The block %s has errors: %s`:null}function jh(e,t){let n={userBlocks:(t==null?void 0:t.userBlocks)||e.userBlocks||{},isBlock:(t==null?void 0:t.isBlock)??!!e.block,visiting:(t==null?void 0:t.visiting)||new Set(e.block?[e.block.type]:[]),cache:(t==null?void 0:t.cache)||new Map},r=[],i=new Map;e.block&&!gh.test(e.block.type)&&r.push({severity:`error`,message:`Invalid block type %s`,args:[e.block.type]});let a=new Set;for(let t of e.blocks){if(!$m.test(t.id||``)){r.push({severity:`error`,message:`Invalid block ID %s`,args:[String(t.id)]});continue}if(i.has(t.id)){r.push({severity:`error`,message:`Duplicate block ID %s`,args:[t.id],blockId:t.id});continue}let e=Xm(t.type,n.userBlocks);if(!e){r.push({severity:`error`,message:`Unknown block type %s`,args:[t.type],blockId:t.id});continue}i.set(t.id,{block:t,def:e});for(let n of e.params||[]){var o;let e=((o=t.params)==null?void 0:o[n.id])??n.default;n.required&&(e==null||e===``)&&r.push({severity:`error`,message:`Parameter "%s" is not set`,args:[n.id],blockId:t.id})}if(e.category===`interface`){var s;n.isBlock||r.push({severity:`error`,message:`Inputs and outputs of a block only work in the diagram of a block`,blockId:t.id});let e=String(((s=t.params)==null?void 0:s.pin)??``);e&&(!Dh.test(e)||Oh.includes(e))?r.push({severity:`error`,message:`Invalid pin name %s`,args:[e],blockId:t.id}):e&&a.has(e)&&r.push({severity:`error`,message:`The pin name %s is used twice`,args:[e],blockId:t.id}),a.add(e)}else n.isBlock&&(t.type===`STATE_IN`||t.type===`STATE_OUT`)&&r.push({severity:`error`,message:`A block cannot read or write states - give it inputs and outputs instead`,blockId:t.id});if(e.user){let i=Ah(e.user,n);if(i){var c;let a=(c=n.cache.get(e.user.type))==null?void 0:c.issues.find(e=>e.severity===`error`);r.push({severity:`error`,message:i,args:a?[e.user.name,kh(a)]:[e.user.name],blockId:t.id})}}if(t.type===`JS`){let n=hh(mh(t,e),ph(t,e));n&&r.push({severity:`error`,message:`The code has an error: %s`,args:[n],blockId:t.id})}}let l=[],u=new Set;for(let t of e.links){let e=i.get(t.from[0]),n=i.get(t.to[0]),a=e&&oh(e.block,e.def).find(e=>e.id===t.from[1]),o=n&&ih(n.block,n.def).find(e=>e.id===t.to[1]);if(!a||!o){r.push({severity:`error`,message:`The connection refers to a missing block or pin`,linkId:t.id,blockId:n?t.to[0]:e?t.from[0]:void 0});continue}if(!sh(a.type,o.type)){r.push({severity:`error`,message:`Types do not match: %s cannot be connected to %s`,args:[a.type,o.type],linkId:t.id,blockId:t.to[0]});continue}let s=`${t.to[0]}.${t.to[1]}`;if(u.has(s)){r.push({severity:`error`,message:`Input %s is connected more than once`,args:[t.to[1]],linkId:t.id,blockId:t.to[0]});continue}u.add(s),l.push(t)}let d=[...i.keys()],f=Eh(d,l),p=new Map;wh(d,f).filter(e=>Th(e,f)).forEach((e,t)=>e.forEach(e=>p.set(e,t)));let m=Eh(d,l,e=>{var t;return!!((t=i.get(e.from[0]))!=null&&t.def.stateful)&&p.has(e.from[0])&&p.get(e.from[0])===p.get(e.to[0])});for(let e of wh(d,m))if(Th(e,m)){let t=e.map(e=>i.get(e).block).sort(Mh).map(e=>e.name||e.id);r.push({severity:`error`,message:`Loop without a block that stores a value: %s`,args:[t.join(`, `)],blockIds:e})}let h=new Map(d.map(e=>[e,0]));m.forEach(e=>e.forEach(e=>h.set(e,h.get(e)+1)));let g=d.filter(e=>!h.get(e)),_=[];for(;g.length;){g.sort((e,t)=>Mh(i.get(e).block,i.get(t).block));let e=g.shift();_.push(e);for(let t of m.get(e)){let e=h.get(t)-1;h.set(t,e),e||g.push(t)}}d.filter(e=>!_.includes(e)).sort((e,t)=>Mh(i.get(e).block,i.get(t).block)).forEach(e=>_.push(e));let v={};_.forEach((e,t)=>v[e]=(t+1)*10);let y=l.filter(e=>v[e.from[0]]>=v[e.to[0]]).map(e=>e.id),b=[...i.values()].some(e=>e.def.timeDependent),x=e.cycle.mode===`auto`?b?`cyclic`:`event`:e.cycle.mode,S=Math.max(50,Math.min(Qm,Math.round(Number(e.cycle.ms)||200)));return x===`event`&&b&&!n.isBlock&&r.push({severity:`warning`,message:`Timers need the cyclic mode, in the event mode they only run when an input changes`}),{issues:r,order:v,feedback:y,links:l,mode:x,ms:S}}function Mh(e,t){return e.pos[0]-t.pos[0]||e.pos[1]-t.pos[1]||(e.id<t.id?-1:+(e.id>t.id))}function Nh(e,t){switch(t){case`BOOL`:return e===!0||e===`true`||e===1||e===`1`?`true`:`false`;case`INT`:return String(Math.round(Number(e))||0);case`REAL`:{let t=Number(e);return String(Number.isFinite(t)?t:0)}case`TIME`:return String(Pp(e)??0);case`STRING`:return JSON.stringify(e==null?``:String(e));default:return typeof e==`boolean`||typeof e==`number`?String(e):e==null?`0`:e===`true`||e===`false`?e:e.trim()!==``&&Number.isFinite(Number(e))?String(Number(e)):JSON.stringify(e)}}var Ph=[`getStateAsync`,`setState`,`on`,`onStop`,`setInterval`,`clearInterval`,`setTimeout`,`clearTimeout`,`log`,`schedule`,`getAstroDate`,`sendTo`,`registerNotification`],Fh=[`OID`,`ENUM`,`NAME`,`INSTANCE`,`CRON`,`CODE`];function Ih(e){return e===`BOOL`?`false`:e===`STRING`?`''`:`0`}function Lh(e,t){return`S['${e}.${t}']`}var Rh=class{constructor(e,t,n){R(this,`block`,void 0),R(this,`def`,void 0),R(this,`drivers`,void 0),R(this,`inputs`,void 0),R(this,`outputs`,void 0),this.block=e,this.def=t,this.drivers=n,this.inputs=ih(e,t),this.outputs=oh(e,t)}input(e){var t,n;let r=e.type===`BOOL`&&!!((t=this.block.pins)!=null&&(t=t[e.id])!=null&&t.inverted),i=this.drivers.get(`${this.block.id}.${e.id}`);if(i)return r?`!${i}`:i;let a=Nh(((n=this.block.params)==null?void 0:n[e.id])??e.default,e.type);return r?a===`true`?`false`:`true`:a}param(e){var t,n;let r=(t=this.def.params)==null?void 0:t.find(t=>t.id===e);if(!r)throw Error(`Block type ${this.def.type} has no parameter "${e}"`);let i=((n=this.block.params)==null?void 0:n[e])??r.default,a=r.type;return typeof a==`string`&&Fh.includes(a)?JSON.stringify(i===void 0?``:String(i)):Nh(i,nh(this.block,a,this.def))}userLine(){let e=`I.${this.block.id}`;return[...this.inputs.map(t=>`${e}.${t.id} = ${this.input(t)};`),`${e}.run(dt, firstScan);`,...this.outputs.map(t=>`${Lh(this.block.id,t.id)} = ${e}.${t.id};`)].join(` `)}jsLine(){let e=`I.${this.block.id}`;return[`${e}.run([${this.inputs.map(e=>this.input(e)).join(`, `)}], dt, firstScan);`,...this.outputs.map((t,n)=>`${Lh(this.block.id,t.id)} = ${e}.out[${n}];`)].join(` `)}line(){return this.def.user?`${this.userLine()} /*#fb:${this.block.id}*/`:this.def.type===`JS`?`${this.jsLine()} /*#fb:${this.block.id}*/`:`${this.def.code.replace(/\{([A-Za-z_][A-Za-z0-9_]*)\*:([^}]*)\}|\{(\$?)([A-Za-z_][A-Za-z0-9_]*)\}/g,(e,t,n,r,i)=>{if(t)return this.inputs.filter(e=>e.id.startsWith(t)).map(e=>this.input(e)).join(n);if(r)return this.param(i);if(i===`I`)return`I.${this.block.id}`;let a=this.outputs.find(e=>e.id===i);if(a)return Lh(this.block.id,a.id);let o=this.inputs.find(e=>e.id===i);if(o)return this.input(o);throw Error(`Block type ${this.def.type} has no pin "${i}"`)})} /*#fb:${this.block.id}*/`}};function zh(e,t,n){let r=new Map;t.links.forEach(e=>r.set(`${e.to[0]}.${e.to[1]}`,Lh(e.from[0],e.from[1])));let i={blocks:e.blocks.filter(e=>t.order[e.id]!==void 0).sort((e,n)=>t.order[e.id]-t.order[n.id]),instances:[],signals:[],body:[],inputs:new Set,outputs:new Set};for(let e of i.blocks){let t=Xm(e.type,n);if(t.user?i.instances.push(`${e.id}: ${yh(t.type)}(), /*#fb:${e.id}*/`):t.type===`JS`?i.instances.push(`${e.id}: fb.JS(function (${ph(e,t).join(`, `)}) { /*#fb:${e.id}*/\n${mh(e,t)}`,`}, ${oh(e,t).length}),`):t.stateful&&i.instances.push(`${e.id}: fb.${t.type}(), /*#fb:${e.id}*/`),oh(e,t).forEach(t=>i.signals.push(`'${e.id}.${t.id}': ${Ih(t.type)},`)),i.body.push(new Rh(e,t,r).line()),e.type===`STATE_IN`){var a;i.inputs.add(String((a=e.params)==null?void 0:a.oid))}else if(e.type===`STATE_OUT`){var o;i.outputs.add(String((o=e.params)==null?void 0:o.oid))}}return i}function Bh(e,t){let n=` `.repeat(t*4);return e.map(e=>`${n}${e}`)}function Vh(e,t,n){return Bh(t.length?[`const ${e} = {`,...Bh(t,1),`};`]:[`const ${e} = {};`],n-1)}function Hh(e,t){let n=jh(e.graph,{userBlocks:t,isBlock:!0}),r=zh(e.graph,n,t),i=Xm(e.type,t),a=[...i.inputs.map(e=>`${e.id}: ${Nh(e.default,e.type)}`),...i.outputs.map(e=>`${e.id}: ${Ih(e.type)}`)];return[`// user block ${JSON.stringify(e.name)} (${e.type}), version ${e.version}`,`function ${yh(e.type)}() {`,` const self = { ${a.join(`, `)} };`,...Vh(`I`,r.instances,2),...Vh(`S`,r.signals,2),` // for the online view: the inside of the instance`,` self.$I = I;`,` self.$S = S;`,` self.run = function (dt, firstScan) {`,...Bh(r.body,2),` };`,` return self;`,`}`,``]}function Uh(e){let t=jh(e),n=Sh(e,e.userBlocks),r={};n.forEach(t=>r[t]=e.userBlocks[t]);let i={...e,format:1,runtime:Rm,blocks:e.blocks.map(e=>t.order[e.id]===void 0?e:{...e,order:t.order[e.id]})};n.length?i.userBlocks=r:delete i.userBlocks;let a=`/*#fb format:1 runtime:${Rm}*/`;if(i.block)return{source:[a,`// The diagram of the block ${JSON.stringify(i.block.name)} (${i.block.type}), version ${i.block.version}.`,`// It does not run on its own: the diagrams that use it carry a copy of it.`,fh(i)].join(`
9
+ `)[0].trim();try{return uh(JSON.parse(n))}catch{return null}}function fh(e){return`${Zm}${JSON.stringify(e)}`}function ph(e,t){return[...ih(e,t).map(e=>e.id),`dt`,`firstScan`,`state`]}function mh(e,t){var n,r;let i=((n=e.params)==null?void 0:n.code)??((r=t.params)==null||(r=r.find(e=>e.id===`code`))==null?void 0:r.default);return typeof i==`string`?i:``}function hh(e,t){try{return Function(...t,e),null}catch(e){return(e==null?void 0:e.message)||String(e)}}var gh=/^@userFb\/[A-Za-z_][A-Za-z0-9_]*$/;function _h(e){let t=e.trim().replace(/[^A-Za-z0-9_]/g,`_`);return/^[A-Za-z_]/.test(t)?t:`_${t}`}function vh(e){return{type:`${Bm}${_h(e||`block`)}`,name:e||`block`,version:1}}function yh(e){return`UFB_${e.substring(Bm.length)}`}function bh(e){if(!e.block)return null;let{block:t,userBlocks:n,...r}=e,i=r.blocks.map(({order:e,...t})=>t);return{...t,graph:{...r,blocks:i}}}function xh(e,t,n){let r={...e};for(let[e,i]of Object.entries(t||{})){let t=r[e];(!t||t.version<i.version||n!=null&&n.includes(e))&&(r[e]=i)}return r}function Sh(e,t){let n=new Set,r=e=>{for(let i of e){let e=t==null?void 0:t[i.type];e&&!n.has(i.type)&&(n.add(i.type),r(e.graph.blocks))}};return r(e.blocks),[...n]}function Ch(e,t,n){let r=n==null?void 0:n[e];return!!r&&Sh(r.graph,n).includes(t)}function wh(e,t){let n=0,r=new Map,i=new Map,a=[],o=new Set,s=[],c=e=>{r.set(e,n),i.set(e,n),n++,a.push(e),o.add(e);for(let n of t.get(e)||[])r.has(n)?o.has(n)&&i.set(e,Math.min(i.get(e),r.get(n))):(c(n),i.set(e,Math.min(i.get(e),i.get(n))));if(i.get(e)===r.get(e)){let t=[],n;do n=a.pop(),o.delete(n),t.push(n);while(n!==e);s.push(t)}};return e.forEach(e=>!r.has(e)&&c(e)),s}function Th(e,t){var n;return e.length>1||!!((n=t.get(e[0]))!=null&&n.has(e[0]))}function Eh(e,t,n){let r=new Map(e.map(e=>[e,new Set]));for(let e of t)if(!(n!=null&&n(e))){var i;(i=r.get(e.from[0]))==null||i.add(e.to[0])}return r}var Dh=/^[A-Za-z_][A-Za-z0-9_]*$/,Oh=[`run`,`self`,`constructor`,`prototype`,`__proto__`];function kh(e){let t=0;return e.message.replace(/%s/g,()=>{var n;return((n=e.args)==null?void 0:n[t++])??``})}function Ah(e,t){if(t.visiting.has(e.type))return`The block %s contains itself`;let n=t.cache.get(e.type);return n||(t.visiting.add(e.type),n=jh(e.graph,{...t,isBlock:!0}),t.visiting.delete(e.type),t.cache.set(e.type,n)),n.issues.some(e=>e.severity===`error`)?`The block %s has errors: %s`:null}function jh(e,t){let n={userBlocks:(t==null?void 0:t.userBlocks)||e.userBlocks||{},isBlock:(t==null?void 0:t.isBlock)??!!e.block,visiting:(t==null?void 0:t.visiting)||new Set(e.block?[e.block.type]:[]),cache:(t==null?void 0:t.cache)||new Map},r=[],i=new Map;e.block&&!gh.test(e.block.type)&&r.push({severity:`error`,message:`Invalid block type %s`,args:[e.block.type]});let a=new Set;for(let t of e.blocks){if(!$m.test(t.id||``)){r.push({severity:`error`,message:`Invalid block ID %s`,args:[String(t.id)]});continue}if(i.has(t.id)){r.push({severity:`error`,message:`Duplicate block ID %s`,args:[t.id],blockId:t.id});continue}let e=Xm(t.type,n.userBlocks);if(!e){r.push({severity:`error`,message:`Unknown block type %s`,args:[t.type],blockId:t.id});continue}i.set(t.id,{block:t,def:e});for(let n of e.params||[]){var o;let e=((o=t.params)==null?void 0:o[n.id])??n.default;n.required&&(e==null||e===``)&&r.push({severity:`error`,message:`Parameter "%s" is not set`,args:[n.id],blockId:t.id})}if(e.category===`interface`){var s;n.isBlock||r.push({severity:`error`,message:`Inputs and outputs of a block only work in the diagram of a block`,blockId:t.id});let e=String(((s=t.params)==null?void 0:s.pin)??``);e&&(!Dh.test(e)||Oh.includes(e))?r.push({severity:`error`,message:`Invalid pin name %s`,args:[e],blockId:t.id}):e&&a.has(e)&&r.push({severity:`error`,message:`The pin name %s is used twice`,args:[e],blockId:t.id}),a.add(e)}else n.isBlock&&(t.type===`STATE_IN`||t.type===`STATE_OUT`)&&r.push({severity:`error`,message:`A block cannot read or write states - give it inputs and outputs instead`,blockId:t.id});if(e.user){let i=Ah(e.user,n);if(i){var c;let a=(c=n.cache.get(e.user.type))==null?void 0:c.issues.find(e=>e.severity===`error`);r.push({severity:`error`,message:i,args:a?[e.user.name,kh(a)]:[e.user.name],blockId:t.id})}}if(t.type===`JS`){let n=hh(mh(t,e),ph(t,e));n&&r.push({severity:`error`,message:`The code has an error: %s`,args:[n],blockId:t.id})}}let l=[],u=new Set;for(let t of e.links){let e=i.get(t.from[0]),n=i.get(t.to[0]),a=e&&oh(e.block,e.def).find(e=>e.id===t.from[1]),o=n&&ih(n.block,n.def).find(e=>e.id===t.to[1]);if(!a||!o){r.push({severity:`error`,message:`The connection refers to a missing block or pin`,linkId:t.id,blockId:n?t.to[0]:e?t.from[0]:void 0});continue}if(!sh(a.type,o.type)){r.push({severity:`error`,message:`Types do not match: %s cannot be connected to %s`,args:[a.type,o.type],linkId:t.id,blockId:t.to[0]});continue}let s=`${t.to[0]}.${t.to[1]}`;if(u.has(s)){r.push({severity:`error`,message:`Input %s is connected more than once`,args:[t.to[1]],linkId:t.id,blockId:t.to[0]});continue}u.add(s),l.push(t)}let d=[...i.keys()],f=Eh(d,l),p=new Map;wh(d,f).filter(e=>Th(e,f)).forEach((e,t)=>e.forEach(e=>p.set(e,t)));let m=Eh(d,l,e=>{var t;return!!((t=i.get(e.from[0]))!=null&&t.def.stateful)&&p.has(e.from[0])&&p.get(e.from[0])===p.get(e.to[0])});for(let e of wh(d,m))if(Th(e,m)){let t=e.map(e=>i.get(e).block).sort(Mh).map(e=>e.name||e.id);r.push({severity:`error`,message:`Loop without a block that stores a value: %s`,args:[t.join(`, `)],blockIds:e})}let h=new Map(d.map(e=>[e,0]));m.forEach(e=>e.forEach(e=>h.set(e,h.get(e)+1)));let g=d.filter(e=>!h.get(e)),_=[];for(;g.length;){g.sort((e,t)=>Mh(i.get(e).block,i.get(t).block));let e=g.shift();_.push(e);for(let t of m.get(e)){let e=h.get(t)-1;h.set(t,e),e||g.push(t)}}d.filter(e=>!_.includes(e)).sort((e,t)=>Mh(i.get(e).block,i.get(t).block)).forEach(e=>_.push(e));let v={};_.forEach((e,t)=>v[e]=(t+1)*10);let y=l.filter(e=>v[e.from[0]]>=v[e.to[0]]).map(e=>e.id),b=[...i.values()].some(e=>e.def.timeDependent),x=e.cycle.mode===`auto`?b?`cyclic`:`event`:e.cycle.mode,S=Math.max(50,Math.min(Qm,Math.round(Number(e.cycle.ms)||200)));return x===`event`&&b&&!n.isBlock&&r.push({severity:`warning`,message:`Timers need the cyclic mode, in the event mode they only run when an input changes`}),{issues:r,order:v,feedback:y,links:l,mode:x,ms:S}}function Mh(e,t){return e.pos[0]-t.pos[0]||e.pos[1]-t.pos[1]||(e.id<t.id?-1:+(e.id>t.id))}function Nh(e,t){switch(t){case`BOOL`:return e===!0||e===`true`||e===1||e===`1`?`true`:`false`;case`INT`:return String(Math.round(Number(e))||0);case`REAL`:{let t=Number(e);return String(Number.isFinite(t)?t:0)}case`TIME`:return String(Pp(e)??0);case`STRING`:return JSON.stringify(e==null?``:String(e));default:return typeof e==`boolean`||typeof e==`number`?String(e):e==null?`0`:e===`true`||e===`false`?e:e.trim()!==``&&Number.isFinite(Number(e))?String(Number(e)):JSON.stringify(e)}}var Ph=[`getStateAsync`,`setState`,`on`,`onStop`,`setInterval`,`clearInterval`,`setTimeout`,`clearTimeout`,`log`,`schedule`,`getAstroDate`,`sendTo`,`registerNotification`],Fh=[`OID`,`ENUM`,`NAME`,`INSTANCE`,`CRON`,`CODE`];function Ih(e){return e===`BOOL`?`false`:e===`STRING`?`''`:`0`}function Lh(e,t){return`S['${e}.${t}']`}var Rh=class{constructor(e,t,n){z(this,`block`,void 0),z(this,`def`,void 0),z(this,`drivers`,void 0),z(this,`inputs`,void 0),z(this,`outputs`,void 0),this.block=e,this.def=t,this.drivers=n,this.inputs=ih(e,t),this.outputs=oh(e,t)}input(e){var t,n;let r=e.type===`BOOL`&&!!((t=this.block.pins)!=null&&(t=t[e.id])!=null&&t.inverted),i=this.drivers.get(`${this.block.id}.${e.id}`);if(i)return r?`!${i}`:i;let a=Nh(((n=this.block.params)==null?void 0:n[e.id])??e.default,e.type);return r?a===`true`?`false`:`true`:a}param(e){var t,n;let r=(t=this.def.params)==null?void 0:t.find(t=>t.id===e);if(!r)throw Error(`Block type ${this.def.type} has no parameter "${e}"`);let i=((n=this.block.params)==null?void 0:n[e])??r.default,a=r.type;return typeof a==`string`&&Fh.includes(a)?JSON.stringify(i===void 0?``:String(i)):Nh(i,nh(this.block,a,this.def))}userLine(){let e=`I.${this.block.id}`;return[...this.inputs.map(t=>`${e}.${t.id} = ${this.input(t)};`),`${e}.run(dt, firstScan);`,...this.outputs.map(t=>`${Lh(this.block.id,t.id)} = ${e}.${t.id};`)].join(` `)}jsLine(){let e=`I.${this.block.id}`;return[`${e}.run([${this.inputs.map(e=>this.input(e)).join(`, `)}], dt, firstScan);`,...this.outputs.map((t,n)=>`${Lh(this.block.id,t.id)} = ${e}.out[${n}];`)].join(` `)}line(){return this.def.user?`${this.userLine()} /*#fb:${this.block.id}*/`:this.def.type===`JS`?`${this.jsLine()} /*#fb:${this.block.id}*/`:`${this.def.code.replace(/\{([A-Za-z_][A-Za-z0-9_]*)\*:([^}]*)\}|\{(\$?)([A-Za-z_][A-Za-z0-9_]*)\}/g,(e,t,n,r,i)=>{if(t)return this.inputs.filter(e=>e.id.startsWith(t)).map(e=>this.input(e)).join(n);if(r)return this.param(i);if(i===`I`)return`I.${this.block.id}`;let a=this.outputs.find(e=>e.id===i);if(a)return Lh(this.block.id,a.id);let o=this.inputs.find(e=>e.id===i);if(o)return this.input(o);throw Error(`Block type ${this.def.type} has no pin "${i}"`)})} /*#fb:${this.block.id}*/`}};function zh(e,t,n){let r=new Map;t.links.forEach(e=>r.set(`${e.to[0]}.${e.to[1]}`,Lh(e.from[0],e.from[1])));let i={blocks:e.blocks.filter(e=>t.order[e.id]!==void 0).sort((e,n)=>t.order[e.id]-t.order[n.id]),instances:[],signals:[],body:[],inputs:new Set,outputs:new Set};for(let e of i.blocks){let t=Xm(e.type,n);if(t.user?i.instances.push(`${e.id}: ${yh(t.type)}(), /*#fb:${e.id}*/`):t.type===`JS`?i.instances.push(`${e.id}: fb.JS(function (${ph(e,t).join(`, `)}) { /*#fb:${e.id}*/\n${mh(e,t)}`,`}, ${oh(e,t).length}),`):t.stateful&&i.instances.push(`${e.id}: fb.${t.type}(), /*#fb:${e.id}*/`),oh(e,t).forEach(t=>i.signals.push(`'${e.id}.${t.id}': ${Ih(t.type)},`)),i.body.push(new Rh(e,t,r).line()),e.type===`STATE_IN`){var a;i.inputs.add(String((a=e.params)==null?void 0:a.oid))}else if(e.type===`STATE_OUT`){var o;i.outputs.add(String((o=e.params)==null?void 0:o.oid))}}return i}function Bh(e,t){let n=` `.repeat(t*4);return e.map(e=>`${n}${e}`)}function Vh(e,t,n){return Bh(t.length?[`const ${e} = {`,...Bh(t,1),`};`]:[`const ${e} = {};`],n-1)}function Hh(e,t){let n=jh(e.graph,{userBlocks:t,isBlock:!0}),r=zh(e.graph,n,t),i=Xm(e.type,t),a=[...i.inputs.map(e=>`${e.id}: ${Nh(e.default,e.type)}`),...i.outputs.map(e=>`${e.id}: ${Ih(e.type)}`)];return[`// user block ${JSON.stringify(e.name)} (${e.type}), version ${e.version}`,`function ${yh(e.type)}() {`,` const self = { ${a.join(`, `)} };`,...Vh(`I`,r.instances,2),...Vh(`S`,r.signals,2),` // for the online view: the inside of the instance`,` self.$I = I;`,` self.$S = S;`,` self.run = function (dt, firstScan) {`,...Bh(r.body,2),` };`,` return self;`,`}`,``]}function Uh(e){let t=jh(e),n=Sh(e,e.userBlocks),r={};n.forEach(t=>r[t]=e.userBlocks[t]);let i={...e,format:1,runtime:Rm,blocks:e.blocks.map(e=>t.order[e.id]===void 0?e:{...e,order:t.order[e.id]})};n.length?i.userBlocks=r:delete i.userBlocks;let a=`/*#fb format:1 runtime:${Rm}*/`;if(i.block)return{source:[a,`// The diagram of the block ${JSON.stringify(i.block.name)} (${i.block.type}), version ${i.block.version}.`,`// It does not run on its own: the diagrams that use it carry a copy of it.`,fh(i)].join(`
10
10
  `),graph:i,analysis:t};let o=t.issues.filter(e=>e.severity===`error`);if(o.length){let e=o.map(kh);return{source:[a,`// This function block diagram has errors and is not executed:`,...e.map(e=>`// - ${e}`),`log(${JSON.stringify(`The function block diagram has errors and is not executed: ${e.join(`; `)}`)}, 'error');`,fh(i)].join(`
11
11
  `),graph:i,analysis:t}}let s=zh(i,t,r),c=[a,`// Generated from a function block diagram - changes made here are overwritten by the editor`,`const fb = require('${zm}');`,`const rt = fb.runtime({ ${Ph.join(`, `)} }, '${Rm}');`,``,...n.flatMap(e=>Hh(r[e],r)),`// the blocks that keep a state from one cycle to the next`,...Vh(`I`,s.instances,1),"// signals `<block>.<pin>`: they keep their value too, so a link leading back reads the previous cycle",...Vh(`S`,s.signals,1),`// breakpoints of the online view: the cycle stops in front of a block whose entry is set`,`const B = [];`,``,"// one cycle, from block `at` on - after a stop the runtime goes on there, `go` passes that breakpoint",`function cycle(dt, firstScan, at = 0, go = -1) {`,` switch (at) {`].join(`
12
12
  `).split(`
13
13
  `),l=c.length+1,u={mode:t.mode,ms:t.ms,inputs:[...s.inputs],outputs:[...s.outputs],lines:{start:l+s.body.length+4,body:l},blocks:s.blocks.map(e=>e.id)};return{source:[...c,...Bh(s.body.map((e,t)=>`case ${t}: if (B[${t}] && go !== ${t}) return ${t}; ${e}`),2),` }`,` return -1;`,`}`,``,`rt.start(cycle, ${JSON.stringify(u)}, S, B, I);`,fh(i)].join(`
14
- `),graph:i,analysis:t}}var Wh={header:22,detail:18,pin:20,frame:6},Gh=160,Kh=100,qh=30,Jh=10,Yh=4;function Xh(e,t){var n;return t.header+(e!=null&&e.user||e!=null&&(n=e.params)!=null&&n.length?t.detail:0)}function Zh(e){let t=0,n=0;e.ids.forEach((r,i)=>{n+=e.wants[i]-t,t+=e.heights[i]+qh}),e.top=n/e.ids.length}function Qh(e){return e.heights.reduce((e,t)=>e+t+qh,0)-qh}function $h(e,t={}){if(!e.blocks.length)return{};let n=jh(e),r=new Set(n.feedback),i=n.links.filter(e=>!r.has(e.id)&&e.from[0]!==e.to[0]),a=t.metrics||Wh,o=a.pin,s=new Map;for(let n of e.blocks){var c;let r=Xm(n.type,e.userBlocks),i=Math.max(ih(n,r).length,oh(n,r).length,1),l=Xh(r,a),u=(c=t.sizes)==null?void 0:c[n.id];s.set(n.id,{id:n.id,block:n,def:r,width:(u==null?void 0:u.width)||Gh,height:(u==null?void 0:u.height)||l+i*o+a.frame,pinTop:l})}let l=new Map,u=new Map;for(let e of i)l.set(e.to[0],[...l.get(e.to[0])||[],e]),u.set(e.from[0],[...u.get(e.from[0])||[],e]);let d=e=>{let t=s.get(e.from[0]),n=oh(t.block,t.def).findIndex(t=>t.id===e.from[1]);return t.pinTop+Math.max(n,0)*o+o/2},f=e=>{let t=s.get(e.to[0]),n=ih(t.block,t.def).findIndex(t=>t.id===e.to[1]);return t.pinTop+Math.max(n,0)*o+o/2},p=e.blocks.map(e=>e.id).sort((e,t)=>(n.order[e]??1/0)-(n.order[t]??1/0)),m=new Map;for(let e of p){let t=0;for(let n of l.get(e)||[])t=Math.max(t,(m.get(n.from[0])??0)+1);m.set(e,t)}for(let e of[...p].reverse()){var h;let t=s.get(e).block.type,n=u.get(e)||[];!((h=l.get(e))!=null&&h.length)&&n.length&&t!==`STATE_IN`&&t!==`FB_IN`&&m.set(e,Math.max(0,Math.min(...n.map(e=>m.get(e.to[0])))-1))}let g=Math.max(...m.values());for(let e of p){var _;let t=s.get(e).block.type;(t===`STATE_OUT`||t===`FB_OUT`)&&!((_=u.get(e))!=null&&_.length)&&m.set(e,g)}let v=Array.from({length:g+1},()=>[]);e.blocks.slice().sort((e,t)=>e.pos[1]-t.pos[1]||e.pos[0]-t.pos[0]).forEach(e=>v[m.get(e.id)].push(e.id));let y=new Map;for(let e of v){let t=0;for(let n of e)y.set(n,t),t+=s.get(n).height+qh}let b=(e,t)=>{let n=e.map((e,n)=>({id:e,i:n,want:t(e)??y.get(e)})).sort((e,t)=>e.want-t.want||e.i-t.i),r=[];for(let e of n){let t={ids:[e.id],wants:[e.want],heights:[s.get(e.id).height],top:e.want};for(r.push(t);r.length>1;){let e=r[r.length-1],t=r[r.length-2];if(t.top+Qh(t)+qh<=e.top)break;t.ids.push(...e.ids),t.wants.push(...e.wants),t.heights.push(...e.heights),Zh(t),r.pop()}}e.length=0;for(let t of r){let n=t.top;t.ids.forEach((r,i)=>{y.set(r,n),n+=t.heights[i]+qh,e.push(r)})}},x=e=>e.length?e.reduce((e,t)=>e+t,0)/e.length:null,S=e=>x((l.get(e)||[]).map(e=>y.get(e.from[0])+d(e)-f(e))),C=e=>x((u.get(e)||[]).map(e=>y.get(e.to[0])+f(e)-d(e)));for(let e=0;e<Yh;e++){for(let e=1;e<v.length;e++)b(v[e],S);for(let e=v.length-2;e>=0;e--)b(v[e],C)}for(let e=1;e<v.length;e++)b(v[e],S);let w=Math.min(...e.blocks.map(e=>e.pos[0])),T=Math.min(...e.blocks.map(e=>e.pos[1])),E=Math.min(...y.values()),D={},O=Math.round(w/Jh)*Jh;for(let e of v)if(e.length){for(let t of e)D[t]=[O,Math.round(T+y.get(t)-E)];O+=Math.round((Math.max(...e.map(e=>s.get(e).width))+Kh)/Jh)*Jh}return D}Object.entries({en:{fbd_search:`Search`,fbd_category_iobroker:`ioBroker`,fbd_category_logic:`Logic`,fbd_category_timers:`Timers`,fbd_category_compare:`Comparison`,fbd_category_arithmetic:`Arithmetic`,fbd_category_structure:`Structure`,fbd_comment:`Comment`,fbd_comment_desc:`A note on the diagram; it is not executed`,fbd_no_state:`no state selected`,fbd_select_state:`Select state`,fbd_instance_name:`Instance name`,fbd_inputs:`Inputs`,fbd_connected:`connected`,fbd_inverted:`Invert %s`,fbd_invalid_time:`A time like 500ms, 2s, 1m30s`,fbd_invalid_number:`Not a number`,fbd_param_oid:`State`,fbd_param_type:`Type`,fbd_param_ack:`Write as acknowledged (ack)`,fbd_param_minInterval:`Minimum time between writes`,fbd_param_value:`Value`,fbd_param_inputs:`Number of inputs`,fbd_diagram:`Diagram`,fbd_cycle_mode:`Execution`,fbd_mode_auto:`Automatic`,fbd_mode_cyclic:`Cyclic`,fbd_mode_event:`When an input changes`,fbd_runs_cyclic:`The diagram runs cyclically`,fbd_runs_event:`The diagram runs when an input changes`,fbd_cycle_time:`Cycle time (ms)`,fbd_empty_hint:`Drag blocks from the left onto the canvas and connect an output with an input`,fbd_no_diagram:`This script does not contain a function block diagram`,"Unknown block type %s":`Unknown block type %s`,"Invalid block ID %s":`Invalid block ID %s`,"Duplicate block ID %s":`Duplicate block ID %s`,'Parameter "%s" is not set':`Parameter "%s" is not set`,"The connection refers to a missing block or pin":`The connection refers to a missing block or pin`,"Types do not match: %s cannot be connected to %s":`Types do not match: %s cannot be connected to %s`,"Input %s is connected more than once":`Input %s is connected more than once`,"Loop without a block that stores a value: %s":`Loop without a block that stores a value: %s`,"Timers need the cyclic mode, in the event mode they only run when an input changes":`Timers need the cyclic mode, in the event mode they only run when an input changes`,fbd_desc_AND:`AND: true if all inputs are true`,fbd_desc_OR:`OR: true if any input is true`,fbd_desc_XOR:`Exclusive OR: true for an odd number of true inputs`,fbd_desc_NOT:`NOT: inverts the input`,fbd_desc_RS:`Flip-flop, reset dominant`,fbd_desc_SR:`Flip-flop, set dominant`,fbd_desc_R_TRIG:`Rising edge: true for one cycle when the input becomes true`,fbd_desc_F_TRIG:`Falling edge: true for one cycle when the input becomes false`,fbd_desc_TON:`On delay: Q becomes true when IN was true for PT`,fbd_desc_TOF:`Off delay: Q stays true for PT after IN became false`,fbd_desc_TP:`Pulse: a rising edge of IN gives a pulse of length PT`,fbd_desc_GT:`Greater than`,fbd_desc_GE:`Greater than or equal`,fbd_desc_LT:`Less than`,fbd_desc_LE:`Less than or equal`,fbd_desc_EQ:`Equal`,fbd_desc_NE:`Not equal`,fbd_desc_ADD:`Addition`,fbd_desc_SUB:`Subtraction`,fbd_desc_MUL:`Multiplication`,fbd_desc_DIV:`Division (by 0 gives 0)`,fbd_desc_MIN:`Smallest input`,fbd_desc_MAX:`Largest input`,fbd_desc_STATE_IN:`Reads an ioBroker state`,fbd_desc_STATE_OUT:`Writes an ioBroker state when the value changes`,fbd_desc_CONST:`A constant value`,fbd_online:`Online`,fbd_online_tooltip:`Show the values of the running diagram`,fbd_online_waiting:`Waiting for data…`,fbd_online_no_data:`No data for %s s - is the script running?`,fbd_online_stalled:`The diagram does not run anymore (cycle %s)`,fbd_online_cycle:`Cycle %s`,fbd_online_event:`waits for inputs`,fbd_online_not_running:`The script does not run`,fbd_online_changed:`The diagram was changed - the values belong to the saved one`,fbd_runtime_error:`Error while running: %s`,fbd_online_no_values:`Cycle %s - save the diagram once to see its values`,fbd_category_interface:`Interface`,fbd_category_user:`Own blocks`,fbd_desc_FB_IN:`An input of this block`,fbd_desc_FB_OUT:`An output of this block`,fbd_param_pin:`Pin name`,fbd_invalid_name:`Letters, digits and _ only, not starting with a digit`,fbd_no_user_blocks:`No own blocks yet - a diagram becomes one with "This diagram is a block" in its settings`,fbd_is_block:`This diagram is a block`,fbd_block_hint:`A block is placed in other diagrams, as often as needed. Its FB_IN and FB_OUT blocks are its pins; every saved change is a new version.`,fbd_block_name:`Name of the block`,fbd_block_description:`Description`,fbd_block_type:`Type %s, version %s`,fbd_block_duplicate:`The diagram "%s" defines the same type`,fbd_block_newer:`Version %s is available`,fbd_block_update:`Update`,fbd_block_update_hint:`Takes the new version for all instances in this diagram`,fbd_block_open:`Open block`,fbd_block_outdated:`New version of "%s": %s (this diagram: %s)`,"Inputs and outputs of a block only work in the diagram of a block":`Inputs and outputs of a block only work in the diagram of a block`,"A block cannot read or write states - give it inputs and outputs instead":`A block cannot read or write states - give it inputs and outputs instead`,"Invalid pin name %s":`Invalid pin name %s`,"The pin name %s is used twice":`The pin name %s is used twice`,"The block %s contains itself":`The block %s contains itself`,"The block %s has errors: %s":`The block %s has errors: %s`,"Invalid block type %s":`Invalid block type %s`,fbd_category_control:`Control`,fbd_desc_HYST:`Two-point switch: Q becomes true when IN rises above HIGH and false when it falls below LOW`,fbd_desc_RAMP:`Ramp: OUT follows IN, by at most UP per second upwards and DOWN per second downwards (0: no limit)`,fbd_desc_PT1:`Low pass of the first order (PT1): OUT follows IN with the time constant T`,fbd_desc_PID:`PID controller: set point SP, process value PV, output Y between YMIN and YMAX; TN or TV 0 leaves that part out`,fbd_online_paused:`Paused (cycle %s)`,fbd_online_paused_at:`Paused in front of %s (cycle %s)`,fbd_debug_resume:`Run on (F8)`,fbd_debug_pause:`Pause (F8)`,fbd_debug_cycle:`One cycle`,fbd_debug_step:`One block (F10)`,fbd_debug_save_once:`Save the diagram once, then breakpoints and single steps work`,fbd_debug_forced_count:`Forced values: %s`,fbd_debug_release_all:`Release all`,fbd_debug_breakpoint_count:`Breakpoints: %s`,fbd_debug_remove_all:`Remove all`,fbd_debug_breakpoint_set:`Set a breakpoint (F9)`,fbd_debug_breakpoint_remove:`Remove the breakpoint (F9)`,fbd_debug_breakpoint:`Breakpoint`,fbd_debug_breakpoint_hint:`The diagram stops in front of this block (F9)`,fbd_debug_forced:`forced`,fbd_debug_force:`Force`,fbd_debug_release:`Release`,fbd_debug_force_hint:`A forced value holds until it is released or the online view ends - and it also reaches the states the diagram writes.`,fbd_link:`Link`,fbd_link_mark:`Show as a connection mark`,fbd_link_mark_hint:`Instead of a line through the diagram, both ends show a mark with a name; a double click jumps to the other end.`,fbd_link_label:`Name of the mark`,fbd_layout:`Arrange automatically`,fbd_find:`Find in the diagram (Ctrl+F)`,fbd_find_placeholder:`Name, type, state…`,fbd_find_none:`none`,fbd_find_previous:`Previous (Shift+Enter)`,fbd_find_next:`Next (Enter)`,fbd_find_close:`Close (Esc)`,"The diagram does not run":`The diagram does not run`,"The diagram is not shown online":`The diagram is not shown online`,"The diagram was saved before values could be forced - save it once":`The diagram was saved before values could be forced - save it once`,"The diagram was saved before it could stop at blocks - save it once":`The diagram was saved before it could stop at blocks - save it once`,fbd_instance_open:`Inside view`,fbd_instance_open_hint:`Shows this instance from inside - online with its own values (double click)`,fbd_instance_title:`Instance "%s" of "%s", version %s`,fbd_instance_readonly:`Read only: this is the block as this diagram carries it. It is changed in its own diagram. Values can be forced here, breakpoints only in the diagram itself.`,fbd_instance_save_once:`Save the diagram once, then the values inside the instances appear`,fbd_instance_back:`Back (Esc)`,fbd_link_refused_type:`Not connected: %s does not fit %s (%s). Only INT becomes REAL by itself.`,fbd_link_refused_taken:`Not connected: %s is connected already - an input takes one link`,fbd_category_memory:`Memory`,fbd_tab_blocks:`Blocks`,fbd_tab_variables:`Variables`,fbd_tab_favorites:`Favorites`,fbd_favorite_add:`Add to the favorites`,fbd_favorite_remove:`Remove from the favorites`,fbd_no_variables:`No states in the diagram yet - they come with STATE_IN and STATE_OUT`,fbd_no_favorites:`No favorites yet - the star at a block puts it here`,fbd_expand_all:`Open all`,fbd_collapse_all:`Close all`,fbd_menu:`More`,fbd_menu_properties:`Properties`,fbd_menu_duplicate:`Duplicate`,fbd_tab_properties:`Properties`,fbd_tab_docs:`Documentation`,fbd_section_general:`General`,fbd_section_params:`Parameters`,fbd_section_preview:`Preview`,fbd_section_block:`Block`,fbd_name:`Name`,fbd_type:`Type`,fbd_comment_field:`Comment`,fbd_comment_placeholder:`Comment…`,fbd_invert_short:`inverted`,fbd_is_block_short:`Is a block`,fbd_link_from_to:`From → to`,fbd_link_mark_short:`As a mark`,fbd_outputs:`Outputs`,fbd_doc_keys:`Keys`,fbd_key_undo:`Undo / redo`,fbd_key_copy:`Copy / cut / paste`,fbd_key_delete:`Delete what is selected`,fbd_key_find:`Find in the diagram`,fbd_key_pause:`Pause / run on (online)`,fbd_key_breakpoint:`Breakpoint at the selected block (online)`,fbd_key_step:`One block on (online)`,fbd_key_back:`Back out of an instance`,fbd_doc_double_click:`A double click on an instance of an own block shows it from inside; on a connection mark it jumps to the other end.`,fbd_doc_stateful:`Remembers its state from one cycle to the next`,fbd_doc_time:`Depends on time - a diagram with it runs cyclically`,fbd_instance:`Instance`,fbd_grid:`Grid`,fbd_links_curved:`Draw links as curves`,fbd_links_orthogonal:`Draw links at right angles`,fbd_zoom_in:`Zoom in`,fbd_zoom_out:`Zoom out`,fbd_zoom_reset:`To 100 %`,fbd_link_const_retyped:`%s is of type %s now (value %s)`,fbd_link_refused_const:`Not connected: %s feeds inputs already that take no %s (%s)`,fbd_state_type_taken:`%s reads the state as %s now, as its object says - change it in the properties if needed`,fbd_desc_LOG:`Writes a line into the log: on a rising edge of TRIG, or when IN changes. %s in the text is the value of IN`,fbd_param_text:`Text`,fbd_param_level:`Level`,fbd_param_when:`When`,fbd_option_edge:`on a rising edge of TRIG`,fbd_option_change:`when IN changes`,fbd_online_changed_short:`changed`,fbd_category_counters:`Counters`,fbd_category_convert:`Conversion`,fbd_category_calendar:`Calendar`,fbd_category_messages:`Messages`,fbd_category_expert:`Expert`,fbd_desc_BLINK:`Blinker: while EN is true, Q is true for TH and false for TL`,fbd_desc_CTU:`Up counter: counts the rising edges of CU, R sets CV to 0. Q: CV reached PV`,fbd_desc_CTD:`Down counter: counts the rising edges of CD down, LD loads PV. Q: CV reached 0`,fbd_desc_CTUD:`Up/down counter: CU counts up, CD down, R sets 0, LD loads PV. QU: CV reached PV, QD: CV reached 0`,fbd_desc_ROUND:`Rounds IN to DIGITS decimals`,fbd_desc_TO_BOOL:`Converts to BOOL: 0, empty text and "false" are false`,fbd_desc_TO_INT:`Converts to INT, rounded; a decimal comma counts as a point, what is no number gives 0`,fbd_desc_TO_REAL:`Converts to REAL; a decimal comma counts as a point, what is no number gives 0`,fbd_desc_TO_TIME:`Converts to TIME: a number is ms, a text may be "2s", "1m30s" or "08:30"`,fbd_desc_TO_STRING:`Converts to text`,fbd_desc_CONCAT:`Joins the inputs into one text - round numbers with ROUND before`,fbd_desc_CLOCK:`The local time: time of day, hour, minute, weekday (1 Monday ... 7 Sunday), day, month and year`,fbd_desc_TIMEWINDOW:`Time window: true from START to END on the chosen days; a window over midnight belongs to the day it starts`,fbd_desc_SCHEDULE:`Schedule: Q is true for one cycle when the time of the cron pattern comes`,fbd_desc_ASTRO:`Sun: Q is true from one event of the sun to another, like from sunset to sunrise; START and END are their times today`,fbd_desc_NOTIFY:`Sends a notification of ioBroker: on a rising edge of TRIG, or when IN changes. At most 5 a minute`,fbd_desc_SENDTO:`Sends a message to an adapter like telegram.0 or pushover.0 (text, message, title, subject): on a rising edge of TRIG, or when IN changes. At most 5 a minute`,fbd_desc_JS:`Own JavaScript: gets IN1 ... INn, dt, firstScan and state (kept between cycles), returns OUT1 or [OUT1, OUT2, ...]`,fbd_param_days:`Days`,fbd_param_cron:`Cron pattern`,fbd_param_start:`From`,fbd_param_end:`To`,fbd_param_startOffset:`Offset of the start`,fbd_param_endOffset:`Offset of the end`,fbd_offset_hint:`In minutes, negative is earlier`,fbd_param_category:`Kind`,fbd_param_instance:`Instance`,fbd_param_title:`Title`,fbd_param_command:`Command`,fbd_param_code:`Code`,fbd_param_outputs:`Number of outputs`,fbd_option_all:`every day`,fbd_option_weekdays:`Monday to Friday`,fbd_option_weekend:`Saturday and Sunday`,fbd_option_message:`Message`,fbd_option_alert:`Alert`,fbd_cron_dialog:`Set the time`,fbd_cron_hint:`Minute hour day month weekday, like "0 8 * * 1-5": at 8:00 from Monday to Friday. With seconds in front, "*/5 * * * * *" is every 5 seconds`,fbd_code_hint:`The code gets %s and returns the value of OUT1, or [OUT1, OUT2, ...]; undefined keeps an output as it is`,"The code has an error: %s":`The code has an error: %s`,fbd_option_nightEnd:`Night end`,fbd_option_nauticalDawn:`Nautical dawn`,fbd_option_dawn:`Dawn`,fbd_option_sunrise:`sunrise`,fbd_option_sunriseEnd:`Sunrise end`,fbd_option_goldenHourEnd:`End of golden hour`,fbd_option_solarNoon:`Solar noon`,fbd_option_goldenHour:`Golden hour`,fbd_option_sunsetStart:`Sunset start`,fbd_option_sunset:`Sunset`,fbd_option_dusk:`Dusk`,fbd_option_nauticalDusk:`Nautical dusk`,fbd_option_night:`Night`,fbd_option_nadir:`Nadir`},de:{fbd_search:`Suchen`,fbd_category_iobroker:`ioBroker`,fbd_category_logic:`Logik`,fbd_category_timers:`Zeit`,fbd_category_compare:`Vergleich`,fbd_category_arithmetic:`Arithmetik`,fbd_category_structure:`Struktur`,fbd_comment:`Kommentar`,fbd_comment_desc:`Eine Notiz im Plan; sie wird nicht ausgeführt`,fbd_no_state:`kein Datenpunkt gewählt`,fbd_select_state:`Datenpunkt auswählen`,fbd_instance_name:`Instanzname`,fbd_inputs:`Eingänge`,fbd_connected:`verbunden`,fbd_inverted:`%s invertieren`,fbd_invalid_time:`Eine Zeit wie 500ms, 2s, 1m30s`,fbd_invalid_number:`Keine Zahl`,fbd_param_oid:`Datenpunkt`,fbd_param_type:`Typ`,fbd_param_ack:`Als bestätigt schreiben (ack)`,fbd_param_minInterval:`Mindestzeit zwischen zwei Schreibvorgängen`,fbd_param_value:`Wert`,fbd_param_inputs:`Anzahl der Eingänge`,fbd_diagram:`Plan`,fbd_cycle_mode:`Ausführung`,fbd_mode_auto:`Automatisch`,fbd_mode_cyclic:`Zyklisch`,fbd_mode_event:`Bei Änderung eines Eingangs`,fbd_runs_cyclic:`Der Plan läuft zyklisch`,fbd_runs_event:`Der Plan läuft bei Änderung eines Eingangs`,fbd_cycle_time:`Zykluszeit (ms)`,fbd_empty_hint:`Bausteine von links auf die Fläche ziehen und einen Ausgang mit einem Eingang verbinden`,fbd_no_diagram:`Dieses Skript enthält keinen Funktionsplan`,"Unknown block type %s":`Unbekannter Bausteintyp %s`,"Invalid block ID %s":`Ungültige Baustein-ID %s`,"Duplicate block ID %s":`Doppelte Baustein-ID %s`,'Parameter "%s" is not set':`Parameter "%s" ist nicht gesetzt`,"The connection refers to a missing block or pin":`Die Verbindung verweist auf einen fehlenden Baustein oder Anschluss`,"Types do not match: %s cannot be connected to %s":`Typen passen nicht: %s kann nicht mit %s verbunden werden`,"Input %s is connected more than once":`Eingang %s ist mehrfach verbunden`,"Loop without a block that stores a value: %s":`Rückkopplung ohne speichernden Baustein: %s`,"Timers need the cyclic mode, in the event mode they only run when an input changes":`Timer brauchen den zyklischen Betrieb, ereignisgesteuert laufen sie nur bei Änderung eines Eingangs`,fbd_desc_AND:`UND: wahr, wenn alle Eingänge wahr sind`,fbd_desc_OR:`ODER: wahr, wenn ein Eingang wahr ist`,fbd_desc_XOR:`Exklusiv-ODER: wahr bei einer ungeraden Anzahl wahrer Eingänge`,fbd_desc_NOT:`NICHT: invertiert den Eingang`,fbd_desc_RS:`Flipflop, rücksetzdominant`,fbd_desc_SR:`Flipflop, setzdominant`,fbd_desc_R_TRIG:`Steigende Flanke: einen Zyklus lang wahr, wenn der Eingang wahr wird`,fbd_desc_F_TRIG:`Fallende Flanke: einen Zyklus lang wahr, wenn der Eingang falsch wird`,fbd_desc_TON:`Einschaltverzögerung: Q wird wahr, wenn IN für PT wahr war`,fbd_desc_TOF:`Ausschaltverzögerung: Q bleibt für PT wahr, nachdem IN falsch wurde`,fbd_desc_TP:`Impuls: eine steigende Flanke an IN erzeugt einen Impuls der Länge PT`,fbd_desc_GT:`Größer als`,fbd_desc_GE:`Größer oder gleich`,fbd_desc_LT:`Kleiner als`,fbd_desc_LE:`Kleiner oder gleich`,fbd_desc_EQ:`Gleich`,fbd_desc_NE:`Ungleich`,fbd_desc_ADD:`Addition`,fbd_desc_SUB:`Subtraktion`,fbd_desc_MUL:`Multiplikation`,fbd_desc_DIV:`Division (durch 0 ergibt 0)`,fbd_desc_MIN:`Kleinster Eingang`,fbd_desc_MAX:`Größter Eingang`,fbd_desc_STATE_IN:`Liest einen ioBroker-Datenpunkt`,fbd_desc_STATE_OUT:`Schreibt einen ioBroker-Datenpunkt, wenn sich der Wert ändert`,fbd_desc_CONST:`Ein fester Wert`,fbd_online:`Online`,fbd_online_tooltip:`Werte des laufenden Plans anzeigen`,fbd_online_waiting:`Warte auf Daten…`,fbd_online_no_data:`Seit %s s keine Daten - läuft das Skript?`,fbd_online_stalled:`Der Plan rechnet nicht mehr (Zyklus %s)`,fbd_online_cycle:`Zyklus %s`,fbd_online_event:`wartet auf Eingänge`,fbd_online_not_running:`Das Skript läuft nicht`,fbd_online_changed:`Der Plan wurde geändert - die Werte gehören zur gespeicherten Fassung`,fbd_runtime_error:`Fehler beim Ausführen: %s`,fbd_online_no_values:`Zyklus %s - den Plan einmal speichern, dann erscheinen die Werte`,fbd_category_interface:`Schnittstelle`,fbd_category_user:`Eigene Bausteine`,fbd_desc_FB_IN:`Ein Eingang dieses Bausteins`,fbd_desc_FB_OUT:`Ein Ausgang dieses Bausteins`,fbd_param_pin:`Name des Anschlusses`,fbd_invalid_name:`Nur Buchstaben, Ziffern und _, nicht mit einer Ziffer am Anfang`,fbd_no_user_blocks:`Noch keine eigenen Bausteine - ein Plan wird zu einem mit „Dieser Plan ist ein Baustein“ in seinen Einstellungen`,fbd_is_block:`Dieser Plan ist ein Baustein`,fbd_block_hint:`Ein Baustein wird in anderen Plänen eingesetzt, beliebig oft. Seine FB_IN- und FB_OUT-Bausteine sind seine Anschlüsse; jede gespeicherte Änderung ist eine neue Version.`,fbd_block_name:`Name des Bausteins`,fbd_block_description:`Beschreibung`,fbd_block_type:`Typ %s, Version %s`,fbd_block_duplicate:`Der Plan „%s“ definiert denselben Typ`,fbd_block_newer:`Version %s ist verfügbar`,fbd_block_update:`Aktualisieren`,fbd_block_update_hint:`Übernimmt die neue Version für alle Instanzen in diesem Plan`,fbd_block_open:`Baustein öffnen`,fbd_block_outdated:`Neue Version von „%s“: %s (in diesem Plan: %s)`,"Inputs and outputs of a block only work in the diagram of a block":`Ein- und Ausgänge eines Bausteins gibt es nur im Plan eines Bausteins`,"A block cannot read or write states - give it inputs and outputs instead":`Ein Baustein kann keine Datenpunkte lesen oder schreiben - dafür gibt es Ein- und Ausgänge`,"Invalid pin name %s":`Ungültiger Anschlussname %s`,"The pin name %s is used twice":`Der Anschlussname %s ist doppelt vergeben`,"The block %s contains itself":`Der Baustein %s enthält sich selbst`,"The block %s has errors: %s":`Der Baustein %s hat Fehler: %s`,"Invalid block type %s":`Ungültiger Bausteintyp %s`,fbd_category_control:`Regelung`,fbd_desc_HYST:`Zweipunktschalter: Q wird wahr, wenn IN über HIGH steigt, und falsch, wenn IN unter LOW fällt`,fbd_desc_RAMP:`Rampe: OUT folgt IN, um höchstens UP pro Sekunde aufwärts und DOWN pro Sekunde abwärts (0: unbegrenzt)`,fbd_desc_PT1:`Tiefpass erster Ordnung (PT1): OUT folgt IN mit der Zeitkonstante T`,fbd_desc_PID:`PID-Regler: Sollwert SP, Istwert PV, Stellgröße Y zwischen YMIN und YMAX; TN oder TV 0 lässt den Anteil weg`,fbd_online_paused:`Angehalten (Zyklus %s)`,fbd_online_paused_at:`Angehalten vor %s (Zyklus %s)`,fbd_debug_resume:`Fortsetzen (F8)`,fbd_debug_pause:`Anhalten (F8)`,fbd_debug_cycle:`Ein Zyklus`,fbd_debug_step:`Ein Baustein (F10)`,fbd_debug_save_once:`Den Plan einmal speichern, dann gehen Haltepunkte und Einzelschritte`,fbd_debug_forced_count:`Erzwungene Werte: %s`,fbd_debug_release_all:`Alle freigeben`,fbd_debug_breakpoint_count:`Haltepunkte: %s`,fbd_debug_remove_all:`Alle entfernen`,fbd_debug_breakpoint_set:`Haltepunkt setzen (F9)`,fbd_debug_breakpoint_remove:`Haltepunkt entfernen (F9)`,fbd_debug_breakpoint:`Haltepunkt`,fbd_debug_breakpoint_hint:`Der Plan hält vor diesem Baustein an (F9)`,fbd_debug_forced:`erzwungen`,fbd_debug_force:`Erzwingen`,fbd_debug_release:`Freigeben`,fbd_debug_force_hint:`Ein erzwungener Wert gilt, bis er freigegeben wird oder die Onlineansicht endet - und wirkt auch auf die Datenpunkte, die der Plan schreibt.`,fbd_link:`Verbindung`,fbd_link_mark:`Als Verbindungsmarke zeigen`,fbd_link_mark_hint:`Statt einer Linie durch den Plan zeigen beide Enden eine Marke mit einem Namen; ein Doppelklick springt zum anderen Ende.`,fbd_link_label:`Name der Marke`,fbd_layout:`Automatisch anordnen`,fbd_find:`Im Plan suchen (Strg+F)`,fbd_find_placeholder:`Name, Typ, Datenpunkt…`,fbd_find_none:`nichts`,fbd_find_previous:`Vorheriger (Umschalt+Enter)`,fbd_find_next:`Nächster (Enter)`,fbd_find_close:`Schließen (Esc)`,"The diagram does not run":`Der Plan läuft nicht`,"The diagram is not shown online":`Der Plan wird nicht online gezeigt`,"The diagram was saved before values could be forced - save it once":`Der Plan wurde gespeichert, bevor sich Werte erzwingen ließen - einmal speichern`,"The diagram was saved before it could stop at blocks - save it once":`Der Plan wurde gespeichert, bevor er an Bausteinen anhalten konnte - einmal speichern`,fbd_instance_open:`Innenansicht`,fbd_instance_open_hint:`Zeigt diese Instanz von innen - online mit ihren eigenen Werten (Doppelklick)`,fbd_instance_title:`Instanz „%s“ von „%s“, Version %s`,fbd_instance_readonly:`Nur lesbar: So steht der Baustein in diesem Plan. Geändert wird er in seinem eigenen Plan. Werte lassen sich hier erzwingen, Haltepunkte nur im Plan selbst.`,fbd_instance_save_once:`Den Plan einmal speichern, dann erscheinen die Werte in den Instanzen`,fbd_instance_back:`Zurück (Esc)`,fbd_link_refused_type:`Nicht verbunden: %s passt nicht zu %s (%s). Nur INT wird von selbst zu REAL.`,fbd_link_refused_taken:`Nicht verbunden: %s ist schon verbunden - ein Eingang nimmt nur eine Verbindung`,fbd_category_memory:`Speicher`,fbd_tab_blocks:`Blöcke`,fbd_tab_variables:`Variablen`,fbd_tab_favorites:`Favoriten`,fbd_favorite_add:`Zu den Favoriten`,fbd_favorite_remove:`Aus den Favoriten entfernen`,fbd_no_variables:`Noch keine Datenpunkte im Plan - sie kommen mit STATE_IN und STATE_OUT`,fbd_no_favorites:`Noch keine Favoriten - der Stern an einem Baustein legt ihn hierher`,fbd_expand_all:`Alle aufklappen`,fbd_collapse_all:`Alle zuklappen`,fbd_menu:`Mehr`,fbd_menu_properties:`Eigenschaften`,fbd_menu_duplicate:`Duplizieren`,fbd_tab_properties:`Eigenschaften`,fbd_tab_docs:`Dokumentation`,fbd_section_general:`Allgemein`,fbd_section_params:`Parameter`,fbd_section_preview:`Vorschau`,fbd_section_block:`Baustein`,fbd_name:`Name`,fbd_type:`Typ`,fbd_comment_field:`Kommentar`,fbd_comment_placeholder:`Kommentar…`,fbd_invert_short:`invertiert`,fbd_is_block_short:`Ist Baustein`,fbd_link_from_to:`Von → nach`,fbd_link_mark_short:`Als Marke`,fbd_outputs:`Ausgänge`,fbd_doc_keys:`Tastenkürzel`,fbd_key_undo:`Rückgängig / wiederholen`,fbd_key_copy:`Kopieren / ausschneiden / einfügen`,fbd_key_delete:`Ausgewähltes löschen`,fbd_key_find:`Im Plan suchen`,fbd_key_pause:`Anhalten / fortsetzen (online)`,fbd_key_breakpoint:`Haltepunkt am gewählten Baustein (online)`,fbd_key_step:`Einen Baustein weiter (online)`,fbd_key_back:`Aus einer Instanz zurück`,fbd_doc_double_click:`Ein Doppelklick auf eine Instanz eines eigenen Bausteins zeigt sie von innen; auf einer Verbindungsmarke springt er zum anderen Ende.`,fbd_doc_stateful:`Merkt sich seinen Zustand von Zyklus zu Zyklus`,fbd_doc_time:`Hängt von der Zeit ab - ein Plan mit ihm läuft zyklisch`,fbd_instance:`Instanz`,fbd_grid:`Raster`,fbd_links_curved:`Verbindungen als Kurven`,fbd_links_orthogonal:`Verbindungen rechtwinklig`,fbd_zoom_in:`Vergrößern`,fbd_zoom_out:`Verkleinern`,fbd_zoom_reset:`Auf 100 %`,fbd_link_const_retyped:`%s ist jetzt vom Typ %s (Wert %s)`,fbd_link_refused_const:`Nicht verbunden: %s speist schon Eingänge, die kein %s nehmen (%s)`,fbd_state_type_taken:`%s liest den Datenpunkt jetzt als %s, wie sein Objekt sagt - bei Bedarf in den Eigenschaften ändern`,fbd_desc_LOG:`Schreibt eine Zeile ins Protokoll: bei steigender Flanke an TRIG oder wenn sich IN ändert. %s im Text ist der Wert von IN`,fbd_param_text:`Text`,fbd_param_level:`Stufe`,fbd_param_when:`Wann`,fbd_option_edge:`bei steigender Flanke an TRIG`,fbd_option_change:`wenn sich IN ändert`,fbd_online_changed_short:`geändert`,fbd_category_counters:`Zähler`,fbd_category_convert:`Umwandlung`,fbd_category_calendar:`Kalender`,fbd_category_messages:`Meldungen`,fbd_category_expert:`Experte`,fbd_desc_BLINK:`Blinker: solange EN wahr ist, ist Q für TH wahr und für TL falsch`,fbd_desc_CTU:`Aufwärtszähler: zählt die steigenden Flanken an CU, R setzt CV auf 0. Q: CV hat PV erreicht`,fbd_desc_CTD:`Abwärtszähler: zählt bei steigenden Flanken an CD herunter, LD lädt PV. Q: CV hat 0 erreicht`,fbd_desc_CTUD:`Auf-/Abwärtszähler: CU zählt hoch, CD herunter, R setzt 0, LD lädt PV. QU: CV hat PV erreicht, QD: CV hat 0 erreicht`,fbd_desc_ROUND:`Rundet IN auf DIGITS Nachkommastellen`,fbd_desc_TO_BOOL:`Wandelt in BOOL: 0, leerer Text und "false" sind falsch`,fbd_desc_TO_INT:`Wandelt in INT, gerundet; ein Dezimalkomma gilt als Punkt, was keine Zahl ist, ergibt 0`,fbd_desc_TO_REAL:`Wandelt in REAL; ein Dezimalkomma gilt als Punkt, was keine Zahl ist, ergibt 0`,fbd_desc_TO_TIME:`Wandelt in TIME: eine Zahl sind ms, ein Text darf "2s", "1m30s" oder "08:30" sein`,fbd_desc_TO_STRING:`Wandelt in Text`,fbd_desc_CONCAT:`Fügt die Eingänge zu einem Text zusammen - Zahlen vorher mit ROUND runden`,fbd_desc_CLOCK:`Die Ortszeit: Uhrzeit, Stunde, Minute, Wochentag (1 Montag ... 7 Sonntag), Tag, Monat und Jahr`,fbd_desc_TIMEWINDOW:`Zeitfenster: wahr von START bis END an den gewählten Tagen; ein Fenster über Mitternacht gehört zum Tag, an dem es beginnt`,fbd_desc_SCHEDULE:`Zeitplan: Q ist einen Zyklus lang wahr, wenn die Zeit des Cron-Musters kommt`,fbd_desc_ASTRO:`Sonne: Q ist wahr von einem Sonnenereignis bis zu einem anderen, etwa von Sonnenuntergang bis Sonnenaufgang; START und END sind ihre Zeiten heute`,fbd_desc_NOTIFY:`Sendet eine ioBroker-Benachrichtigung: bei steigender Flanke an TRIG oder wenn sich IN ändert. Höchstens 5 pro Minute`,fbd_desc_SENDTO:`Sendet eine Nachricht an einen Adapter wie telegram.0 oder pushover.0 (text, message, title, subject): bei steigender Flanke an TRIG oder wenn sich IN ändert. Höchstens 5 pro Minute`,fbd_desc_JS:`Eigenes JavaScript: bekommt IN1 ... INn, dt, firstScan und state (bleibt zwischen den Zyklen), gibt OUT1 oder [OUT1, OUT2, ...] zurück`,fbd_param_days:`Tage`,fbd_param_cron:`Cron-Muster`,fbd_param_start:`Von`,fbd_param_end:`Bis`,fbd_param_startOffset:`Versatz des Beginns`,fbd_param_endOffset:`Versatz des Endes`,fbd_offset_hint:`In Minuten, negativ ist früher`,fbd_param_category:`Art`,fbd_param_instance:`Instanz`,fbd_param_title:`Titel`,fbd_param_command:`Befehl`,fbd_param_code:`Code`,fbd_param_outputs:`Anzahl der Ausgänge`,fbd_option_all:`jeden Tag`,fbd_option_weekdays:`Montag bis Freitag`,fbd_option_weekend:`Samstag und Sonntag`,fbd_option_message:`Meldung`,fbd_option_alert:`Alarm`,fbd_cron_dialog:`Zeit einstellen`,fbd_cron_hint:`Minute Stunde Tag Monat Wochentag, etwa "0 8 * * 1-5": um 8:00 von Montag bis Freitag. Mit Sekunden vorne ist "*/5 * * * * *" alle 5 Sekunden`,fbd_code_hint:`Der Code bekommt %s und gibt den Wert von OUT1 zurück oder [OUT1, OUT2, ...]; undefined lässt einen Ausgang, wie er ist`,"The code has an error: %s":`Der Code hat einen Fehler: %s`,fbd_option_nightEnd:`astronomische Morgendämmerung`,fbd_option_nauticalDawn:`nautische Morgendämmerung`,fbd_option_dawn:`Morgendämmerung`,fbd_option_sunrise:`Sonnenaufgang`,fbd_option_sunriseEnd:`Goldene Morgenstunde`,fbd_option_goldenHourEnd:`Vormittag`,fbd_option_solarNoon:`(Nach-)Mittag`,fbd_option_goldenHour:`Goldene Abendstunde`,fbd_option_sunsetStart:`Sonnenuntergang (Anfang)`,fbd_option_sunset:`Sonnenuntergang`,fbd_option_dusk:`Abenddämmerung`,fbd_option_nauticalDusk:`nautische Abenddämmerung`,fbd_option_night:`Nacht`,fbd_option_nadir:`Nadir`},es:{fbd_search:`Buscar`,fbd_category_iobroker:`ioBroker`,fbd_category_logic:`Lógica`,fbd_category_timers:`Temporizadores`,fbd_category_compare:`Comparación`,fbd_category_arithmetic:`Aritmética`,fbd_category_structure:`Estructura`,fbd_comment:`Comentario`,fbd_comment_desc:`Una nota en el diagrama; no se ejecuta`,fbd_no_state:`ningún estado seleccionado`,fbd_select_state:`Seleccionar estado`,fbd_instance_name:`Nombre de la instancia`,fbd_inputs:`Entradas`,fbd_connected:`conectado`,fbd_inverted:`Invertir %s`,fbd_invalid_time:`Un tiempo como 500ms, 2s, 1m30s`,fbd_invalid_number:`No es un número`,fbd_param_oid:`Estado`,fbd_param_type:`Tipo`,fbd_param_ack:`Escribir como confirmado (ack)`,fbd_param_minInterval:`Tiempo mínimo entre escrituras`,fbd_param_value:`Valor`,fbd_param_inputs:`Número de entradas`,fbd_diagram:`Diagrama`,fbd_cycle_mode:`Ejecución`,fbd_mode_auto:`Automático`,fbd_mode_cyclic:`Cíclico`,fbd_mode_event:`Cuando cambia una entrada`,fbd_runs_cyclic:`El diagrama se ejecuta cíclicamente`,fbd_runs_event:`El diagrama se ejecuta cuando cambia una entrada`,fbd_cycle_time:`Tiempo de ciclo (ms)`,fbd_empty_hint:`Arrastre bloques desde la izquierda al lienzo y conecte una salida con una entrada`,fbd_no_diagram:`Este script no contiene un diagrama de bloques de funciones`,"Unknown block type %s":`Tipo de bloque desconocido %s`,"Invalid block ID %s":`ID de bloque no válido %s`,"Duplicate block ID %s":`ID de bloque duplicado %s`,'Parameter "%s" is not set':`El parámetro "%s" no está definido`,"The connection refers to a missing block or pin":`La conexión hace referencia a un bloque o pin inexistente`,"Types do not match: %s cannot be connected to %s":`Los tipos no coinciden: %s no se puede conectar a %s`,"Input %s is connected more than once":`La entrada %s está conectada más de una vez`,"Loop without a block that stores a value: %s":`Bucle sin un bloque que almacene un valor: %s`,"Timers need the cyclic mode, in the event mode they only run when an input changes":`Los temporizadores necesitan el modo cíclico; en el modo por eventos solo funcionan cuando cambia una entrada`,fbd_desc_AND:`Y: verdadero si todas las entradas son verdaderas`,fbd_desc_OR:`O: verdadero si alguna entrada es verdadera`,fbd_desc_XOR:`O exclusivo: verdadero con un número impar de entradas verdaderas`,fbd_desc_NOT:`NO: invierte la entrada`,fbd_desc_RS:`Biestable con prioridad de reset`,fbd_desc_SR:`Biestable con prioridad de set`,fbd_desc_R_TRIG:`Flanco ascendente: verdadero durante un ciclo cuando la entrada se vuelve verdadera`,fbd_desc_F_TRIG:`Flanco descendente: verdadero durante un ciclo cuando la entrada se vuelve falsa`,fbd_desc_TON:`Retardo a la conexión: Q se vuelve verdadero cuando IN estuvo verdadero durante PT`,fbd_desc_TOF:`Retardo a la desconexión: Q sigue verdadero durante PT después de que IN pase a falso`,fbd_desc_TP:`Pulso: un flanco ascendente de IN genera un pulso de duración PT`,fbd_desc_GT:`Mayor que`,fbd_desc_GE:`Mayor o igual`,fbd_desc_LT:`Menor que`,fbd_desc_LE:`Menor o igual`,fbd_desc_EQ:`Igual`,fbd_desc_NE:`Distinto`,fbd_desc_ADD:`Suma`,fbd_desc_SUB:`Resta`,fbd_desc_MUL:`Multiplicación`,fbd_desc_DIV:`División (entre 0 da 0)`,fbd_desc_MIN:`Entrada menor`,fbd_desc_MAX:`Entrada mayor`,fbd_desc_STATE_IN:`Lee un estado de ioBroker`,fbd_desc_STATE_OUT:`Escribe un estado de ioBroker cuando cambia el valor`,fbd_desc_CONST:`Un valor constante`,fbd_online:`En línea`,fbd_online_tooltip:`Mostrar los valores del diagrama en ejecución`,fbd_online_waiting:`Esperando datos…`,fbd_online_no_data:`Sin datos desde hace %s s - ¿se está ejecutando el script?`,fbd_online_stalled:`El diagrama ya no se ejecuta (ciclo %s)`,fbd_online_cycle:`Ciclo %s`,fbd_online_event:`espera entradas`,fbd_online_not_running:`El script no se está ejecutando`,fbd_online_changed:`El diagrama se ha modificado - los valores pertenecen a la versión guardada`,fbd_runtime_error:`Error al ejecutar: %s`,fbd_online_no_values:`Ciclo %s - guarde el diagrama una vez para ver los valores`,fbd_category_interface:`Interfaz`,fbd_category_user:`Bloques propios`,fbd_desc_FB_IN:`Una entrada de este bloque`,fbd_desc_FB_OUT:`Una salida de este bloque`,fbd_param_pin:`Nombre del pin`,fbd_invalid_name:`Solo letras, dígitos y _, sin empezar por un dígito`,fbd_no_user_blocks:`Aún no hay bloques propios - un diagrama se convierte en uno con "Este diagrama es un bloque" en sus ajustes`,fbd_is_block:`Este diagrama es un bloque`,fbd_block_hint:`Un bloque se coloca en otros diagramas tantas veces como haga falta. Sus bloques FB_IN y FB_OUT son sus pines; cada cambio guardado es una nueva versión.`,fbd_block_name:`Nombre del bloque`,fbd_block_description:`Descripción`,fbd_block_type:`Tipo %s, versión %s`,fbd_block_duplicate:`El diagrama "%s" define el mismo tipo`,fbd_block_newer:`La versión %s está disponible`,fbd_block_update:`Actualizar`,fbd_block_update_hint:`Aplica la nueva versión a todas las instancias de este diagrama`,fbd_block_open:`Abrir bloque`,fbd_block_outdated:`Nueva versión de "%s": %s (en este diagrama: %s)`,"Inputs and outputs of a block only work in the diagram of a block":`Las entradas y salidas de un bloque solo funcionan en el diagrama de un bloque`,"A block cannot read or write states - give it inputs and outputs instead":`Un bloque no puede leer ni escribir estados - use entradas y salidas`,"Invalid pin name %s":`Nombre de pin no válido %s`,"The pin name %s is used twice":`El nombre de pin %s se usa dos veces`,"The block %s contains itself":`El bloque %s se contiene a sí mismo`,"The block %s has errors: %s":`El bloque %s tiene errores: %s`,"Invalid block type %s":`Tipo de bloque no válido %s`,fbd_category_control:`Regulación`,fbd_desc_HYST:`Interruptor de dos puntos: Q se vuelve verdadero cuando IN sube por encima de HIGH y falso cuando baja de LOW`,fbd_desc_RAMP:`Rampa: OUT sigue a IN, como máximo UP por segundo hacia arriba y DOWN por segundo hacia abajo (0: sin límite)`,fbd_desc_PT1:`Paso bajo de primer orden (PT1): OUT sigue a IN con la constante de tiempo T`,fbd_desc_PID:`Regulador PID: consigna SP, valor de proceso PV, salida Y entre YMIN y YMAX; TN o TV en 0 omite esa parte`,fbd_online_paused:`En pausa (ciclo %s)`,fbd_online_paused_at:`Detenido antes de %s (ciclo %s)`,fbd_debug_resume:`Continuar (F8)`,fbd_debug_pause:`Pausar (F8)`,fbd_debug_cycle:`Un ciclo`,fbd_debug_step:`Un bloque (F10)`,fbd_debug_save_once:`Guarde el diagrama una vez; después funcionan los puntos de parada y los pasos únicos`,fbd_debug_forced_count:`Valores forzados: %s`,fbd_debug_release_all:`Liberar todos`,fbd_debug_breakpoint_count:`Puntos de parada: %s`,fbd_debug_remove_all:`Quitar todos`,fbd_debug_breakpoint_set:`Poner punto de parada (F9)`,fbd_debug_breakpoint_remove:`Quitar punto de parada (F9)`,fbd_debug_breakpoint:`Punto de parada`,fbd_debug_breakpoint_hint:`El diagrama se detiene antes de este bloque (F9)`,fbd_debug_forced:`forzado`,fbd_debug_force:`Forzar`,fbd_debug_release:`Liberar`,fbd_debug_force_hint:`Un valor forzado vale hasta que se libera o termina la vista en línea, y también llega a los estados que escribe el diagrama.`,fbd_link:`Conexión`,fbd_link_mark:`Mostrar como marca de conexión`,fbd_link_mark_hint:`En lugar de una línea a través del diagrama, ambos extremos muestran una marca con un nombre; un doble clic salta al otro extremo.`,fbd_link_label:`Nombre de la marca`,fbd_layout:`Organizar automáticamente`,fbd_find:`Buscar en el diagrama (Ctrl+F)`,fbd_find_placeholder:`Nombre, tipo, estado…`,fbd_find_none:`nada`,fbd_find_previous:`Anterior (Mayús+Intro)`,fbd_find_next:`Siguiente (Intro)`,fbd_find_close:`Cerrar (Esc)`,"The diagram does not run":`El diagrama no se está ejecutando`,"The diagram is not shown online":`El diagrama no se muestra en línea`,"The diagram was saved before values could be forced - save it once":`El diagrama se guardó antes de que se pudieran forzar valores; guárdelo una vez`,"The diagram was saved before it could stop at blocks - save it once":`El diagrama se guardó antes de que pudiera detenerse en los bloques; guárdelo una vez`,fbd_instance_open:`Vista interior`,fbd_instance_open_hint:`Muestra esta instancia por dentro - en línea con sus propios valores (doble clic)`,fbd_instance_title:`Instancia "%s" de "%s", versión %s`,fbd_instance_readonly:`Solo lectura: es el bloque tal como lo lleva este diagrama. Se cambia en su propio diagrama. Aquí se pueden forzar valores; los puntos de parada, solo en el propio diagrama.`,fbd_instance_save_once:`Guarde el diagrama una vez; después aparecen los valores dentro de las instancias`,fbd_instance_back:`Atrás (Esc)`,fbd_link_refused_type:`No conectado: %s no encaja con %s (%s). Solo INT pasa a REAL por sí mismo.`,fbd_link_refused_taken:`No conectado: %s ya está conectado - una entrada solo admite una conexión`,fbd_category_memory:`Memoria`,fbd_tab_blocks:`Bloques`,fbd_tab_variables:`Variables`,fbd_tab_favorites:`Favoritos`,fbd_favorite_add:`Añadir a favoritos`,fbd_favorite_remove:`Quitar de favoritos`,fbd_no_variables:`Todavía no hay estados en el diagrama; llegan con STATE_IN y STATE_OUT`,fbd_no_favorites:`Todavía no hay favoritos; la estrella de un bloque lo pone aquí`,fbd_expand_all:`Desplegar todo`,fbd_collapse_all:`Plegar todo`,fbd_menu:`Más`,fbd_menu_properties:`Propiedades`,fbd_menu_duplicate:`Duplicar`,fbd_tab_properties:`Propiedades`,fbd_tab_docs:`Documentación`,fbd_section_general:`General`,fbd_section_params:`Parámetros`,fbd_section_preview:`Vista previa`,fbd_section_block:`Bloque`,fbd_name:`Nombre`,fbd_type:`Tipo`,fbd_comment_field:`Comentario`,fbd_comment_placeholder:`Comentario…`,fbd_invert_short:`invertido`,fbd_is_block_short:`Es un bloque`,fbd_link_from_to:`De → a`,fbd_link_mark_short:`Como marca`,fbd_outputs:`Salidas`,fbd_doc_keys:`Atajos`,fbd_key_undo:`Deshacer / rehacer`,fbd_key_copy:`Copiar / cortar / pegar`,fbd_key_delete:`Borrar lo seleccionado`,fbd_key_find:`Buscar en el diagrama`,fbd_key_pause:`Pausar / continuar (en línea)`,fbd_key_breakpoint:`Punto de parada en el bloque elegido (en línea)`,fbd_key_step:`Un bloque más (en línea)`,fbd_key_back:`Salir de una instancia`,fbd_doc_double_click:`Un doble clic en una instancia de un bloque propio la muestra por dentro; en una marca de conexión salta al otro extremo.`,fbd_doc_stateful:`Recuerda su estado de un ciclo al siguiente`,fbd_doc_time:`Depende del tiempo; un diagrama con él se ejecuta cíclicamente`,fbd_instance:`Instancia`,fbd_grid:`Cuadrícula`,fbd_links_curved:`Conexiones como curvas`,fbd_links_orthogonal:`Conexiones en ángulo recto`,fbd_zoom_in:`Acercar`,fbd_zoom_out:`Alejar`,fbd_zoom_reset:`Al 100 %`,fbd_link_const_retyped:`%s ahora es de tipo %s (valor %s)`,fbd_link_refused_const:`No conectado: %s ya alimenta entradas que no admiten %s (%s)`,fbd_state_type_taken:`%s lee ahora el estado como %s, como indica su objeto; cámbielo en las propiedades si hace falta`,fbd_desc_LOG:`Escribe una línea en el registro: en un flanco de subida de TRIG o cuando cambia IN. %s en el texto es el valor de IN`,fbd_param_text:`Texto`,fbd_param_level:`Nivel`,fbd_param_when:`Cuándo`,fbd_option_edge:`en flanco de subida de TRIG`,fbd_option_change:`cuando cambia IN`,fbd_online_changed_short:`modificado`,fbd_category_counters:`Contadores`,fbd_category_convert:`Conversión`,fbd_category_calendar:`Calendario`,fbd_category_messages:`Mensajes`,fbd_category_expert:`Experto`,fbd_desc_BLINK:`Intermitente: mientras EN es verdadero, Q es verdadero durante TH y falso durante TL`,fbd_desc_CTU:`Contador ascendente: cuenta los flancos de subida de CU, R pone CV a 0. Q: CV alcanzó PV`,fbd_desc_CTD:`Contador descendente: descuenta con los flancos de subida de CD, LD carga PV. Q: CV alcanzó 0`,fbd_desc_CTUD:`Contador ascendente/descendente: CU suma, CD resta, R pone 0, LD carga PV. QU: CV alcanzó PV, QD: CV alcanzó 0`,fbd_desc_ROUND:`Redondea IN a DIGITS decimales`,fbd_desc_TO_BOOL:`Convierte a BOOL: 0, texto vacío y "false" son falsos`,fbd_desc_TO_INT:`Convierte a INT, redondeado; una coma decimal cuenta como punto, lo que no es número da 0`,fbd_desc_TO_REAL:`Convierte a REAL; una coma decimal cuenta como punto, lo que no es número da 0`,fbd_desc_TO_TIME:`Convierte a TIME: un número son ms, un texto puede ser "2s", "1m30s" u "08:30"`,fbd_desc_TO_STRING:`Convierte a texto`,fbd_desc_CONCAT:`Une las entradas en un texto - redondee antes los números con ROUND`,fbd_desc_CLOCK:`La hora local: hora del día, hora, minuto, día de la semana (1 lunes ... 7 domingo), día, mes y año`,fbd_desc_TIMEWINDOW:`Franja horaria: verdadero de START a END en los días elegidos; una franja que pasa la medianoche pertenece al día en que empieza`,fbd_desc_SCHEDULE:`Programación: Q es verdadero durante un ciclo cuando llega la hora del patrón cron`,fbd_desc_ASTRO:`Sol: Q es verdadero de un evento solar a otro, como del atardecer al amanecer; START y END son sus horas de hoy`,fbd_desc_NOTIFY:`Envía una notificación de ioBroker: en un flanco de subida de TRIG o cuando IN cambia. Como máximo 5 por minuto`,fbd_desc_SENDTO:`Envía un mensaje a un adaptador como telegram.0 o pushover.0 (text, message, title, subject): en un flanco de subida de TRIG o cuando IN cambia. Como máximo 5 por minuto`,fbd_desc_JS:`JavaScript propio: recibe IN1 ... INn, dt, firstScan y state (se conserva entre ciclos), devuelve OUT1 o [OUT1, OUT2, ...]`,fbd_param_days:`Días`,fbd_param_cron:`Patrón cron`,fbd_param_start:`Desde`,fbd_param_end:`Hasta`,fbd_param_startOffset:`Desfase del inicio`,fbd_param_endOffset:`Desfase del final`,fbd_offset_hint:`En minutos, negativo es antes`,fbd_param_category:`Tipo`,fbd_param_instance:`Instancia`,fbd_param_title:`Título`,fbd_param_command:`Comando`,fbd_param_code:`Código`,fbd_param_outputs:`Número de salidas`,fbd_option_all:`todos los días`,fbd_option_weekdays:`de lunes a viernes`,fbd_option_weekend:`sábado y domingo`,fbd_option_message:`Mensaje`,fbd_option_alert:`Alerta`,fbd_cron_dialog:`Ajustar la hora`,fbd_cron_hint:`Minuto hora día mes día_semana, como "0 8 * * 1-5": a las 8:00 de lunes a viernes. Con segundos delante, "*/5 * * * * *" es cada 5 segundos`,fbd_code_hint:`El código recibe %s y devuelve el valor de OUT1, o [OUT1, OUT2, ...]; undefined deja una salida como está`,"The code has an error: %s":`El código tiene un error: %s`,fbd_option_nightEnd:`Fin de la noche`,fbd_option_nauticalDawn:`Amanecer náutico`,fbd_option_dawn:`Amanecer`,fbd_option_sunrise:`amanecer`,fbd_option_sunriseEnd:`Final del amanecer`,fbd_option_goldenHourEnd:`Fin de la hora dorada`,fbd_option_solarNoon:`Mediodía solar`,fbd_option_goldenHour:`hora dorada`,fbd_option_sunsetStart:`Inicio al atardecer`,fbd_option_sunset:`puesta de sol`,fbd_option_dusk:`Oscuridad`,fbd_option_nauticalDusk:`Atardecer náutico`,fbd_option_night:`Noche`,fbd_option_nadir:`nadir`},fr:{fbd_search:`Rechercher`,fbd_category_iobroker:`ioBroker`,fbd_category_logic:`Logique`,fbd_category_timers:`Temporisations`,fbd_category_compare:`Comparaison`,fbd_category_arithmetic:`Arithmétique`,fbd_category_structure:`Structure`,fbd_comment:`Commentaire`,fbd_comment_desc:`Une note sur le diagramme ; elle n'est pas exécutée`,fbd_no_state:`aucun état choisi`,fbd_select_state:`Choisir un état`,fbd_instance_name:`Nom de l'instance`,fbd_inputs:`Entrées`,fbd_connected:`connecté`,fbd_inverted:`Inverser %s`,fbd_invalid_time:`Une durée comme 500ms, 2s, 1m30s`,fbd_invalid_number:`Pas un nombre`,fbd_param_oid:`État`,fbd_param_type:`Type`,fbd_param_ack:`Écrire comme acquitté (ack)`,fbd_param_minInterval:`Durée minimale entre deux écritures`,fbd_param_value:`Valeur`,fbd_param_inputs:`Nombre d'entrées`,fbd_diagram:`Diagramme`,fbd_cycle_mode:`Exécution`,fbd_mode_auto:`Automatique`,fbd_mode_cyclic:`Cyclique`,fbd_mode_event:`Quand une entrée change`,fbd_runs_cyclic:`Le diagramme s'exécute cycliquement`,fbd_runs_event:`Le diagramme s'exécute quand une entrée change`,fbd_cycle_time:`Temps de cycle (ms)`,fbd_empty_hint:`Faites glisser des blocs depuis la gauche et reliez une sortie à une entrée`,fbd_no_diagram:`Ce script ne contient pas de diagramme de blocs fonctionnels`,"Unknown block type %s":`Type de bloc inconnu %s`,"Invalid block ID %s":`ID de bloc invalide %s`,"Duplicate block ID %s":`ID de bloc en double %s`,'Parameter "%s" is not set':`Le paramètre « %s » n'est pas défini`,"The connection refers to a missing block or pin":`La connexion fait référence à un bloc ou une broche manquant`,"Types do not match: %s cannot be connected to %s":`Types incompatibles : %s ne peut pas être relié à %s`,"Input %s is connected more than once":`L'entrée %s est connectée plusieurs fois`,"Loop without a block that stores a value: %s":`Boucle sans bloc mémorisant une valeur : %s`,"Timers need the cyclic mode, in the event mode they only run when an input changes":`Les temporisations ont besoin du mode cyclique, en mode événementiel elles ne tournent que lorsqu'une entrée change`,fbd_desc_AND:`ET : vrai si toutes les entrées sont vraies`,fbd_desc_OR:`OU : vrai si une entrée est vraie`,fbd_desc_XOR:`OU exclusif : vrai pour un nombre impair d'entrées vraies`,fbd_desc_NOT:`NON : inverse l'entrée`,fbd_desc_RS:`Bascule, reset prioritaire`,fbd_desc_SR:`Bascule, set prioritaire`,fbd_desc_R_TRIG:`Front montant : vrai pendant un cycle quand l'entrée devient vraie`,fbd_desc_F_TRIG:`Front descendant : vrai pendant un cycle quand l'entrée devient fausse`,fbd_desc_TON:`Retard à l'enclenchement : Q devient vrai quand IN a été vrai pendant PT`,fbd_desc_TOF:`Retard au déclenchement : Q reste vrai pendant PT après que IN soit devenu faux`,fbd_desc_TP:`Impulsion : un front montant de IN donne une impulsion de durée PT`,fbd_desc_GT:`Supérieur à`,fbd_desc_GE:`Supérieur ou égal`,fbd_desc_LT:`Inférieur à`,fbd_desc_LE:`Inférieur ou égal`,fbd_desc_EQ:`Égal`,fbd_desc_NE:`Différent`,fbd_desc_ADD:`Addition`,fbd_desc_SUB:`Soustraction`,fbd_desc_MUL:`Multiplication`,fbd_desc_DIV:`Division (par 0 donne 0)`,fbd_desc_MIN:`Plus petite entrée`,fbd_desc_MAX:`Plus grande entrée`,fbd_desc_STATE_IN:`Lit un état ioBroker`,fbd_desc_STATE_OUT:`Écrit un état ioBroker quand la valeur change`,fbd_desc_CONST:`Une valeur constante`,fbd_online:`En ligne`,fbd_online_tooltip:`Afficher les valeurs du diagramme en cours d'exécution`,fbd_online_waiting:`En attente de données…`,fbd_online_no_data:`Aucune donnée depuis %s s - le script tourne-t-il ?`,fbd_online_stalled:`Le diagramme ne calcule plus (cycle %s)`,fbd_online_cycle:`Cycle %s`,fbd_online_event:`attend les entrées`,fbd_online_not_running:`Le script ne tourne pas`,fbd_online_changed:`Le diagramme a été modifié - les valeurs sont celles de la version enregistrée`,fbd_runtime_error:`Erreur à l'exécution : %s`,fbd_online_no_values:`Cycle %s - enregistrez le diagramme une fois pour voir les valeurs`,fbd_category_interface:`Interface`,fbd_category_user:`Blocs personnels`,fbd_desc_FB_IN:`Une entrée de ce bloc`,fbd_desc_FB_OUT:`Une sortie de ce bloc`,fbd_param_pin:`Nom de la broche`,fbd_invalid_name:`Uniquement des lettres, chiffres et _, sans commencer par un chiffre`,fbd_no_user_blocks:`Pas encore de blocs personnels - un diagramme en devient un avec « Ce diagramme est un bloc » dans ses réglages`,fbd_is_block:`Ce diagramme est un bloc`,fbd_block_hint:`Un bloc se place dans d'autres diagrammes, autant de fois que nécessaire. Ses blocs FB_IN et FB_OUT sont ses broches ; chaque modification enregistrée est une nouvelle version.`,fbd_block_name:`Nom du bloc`,fbd_block_description:`Description`,fbd_block_type:`Type %s, version %s`,fbd_block_duplicate:`Le diagramme « %s » définit le même type`,fbd_block_newer:`La version %s est disponible`,fbd_block_update:`Mettre à jour`,fbd_block_update_hint:`Applique la nouvelle version à toutes les instances de ce diagramme`,fbd_block_open:`Ouvrir le bloc`,fbd_block_outdated:`Nouvelle version de « %s » : %s (dans ce diagramme : %s)`,"Inputs and outputs of a block only work in the diagram of a block":`Les entrées et sorties d'un bloc ne fonctionnent que dans le diagramme d'un bloc`,"A block cannot read or write states - give it inputs and outputs instead":`Un bloc ne peut ni lire ni écrire d'états - donnez-lui des entrées et des sorties`,"Invalid pin name %s":`Nom de broche invalide %s`,"The pin name %s is used twice":`Le nom de broche %s est utilisé deux fois`,"The block %s contains itself":`Le bloc %s se contient lui-même`,"The block %s has errors: %s":`Le bloc %s contient des erreurs : %s`,"Invalid block type %s":`Type de bloc invalide %s`,fbd_category_control:`Régulation`,fbd_desc_HYST:`Commutateur à deux points : Q devient vrai quand IN dépasse HIGH et faux quand il descend sous LOW`,fbd_desc_RAMP:`Rampe : OUT suit IN, d'au plus UP par seconde vers le haut et DOWN par seconde vers le bas (0 : sans limite)`,fbd_desc_PT1:`Passe-bas du premier ordre (PT1) : OUT suit IN avec la constante de temps T`,fbd_desc_PID:`Régulateur PID : consigne SP, valeur mesurée PV, sortie Y entre YMIN et YMAX ; TN ou TV à 0 supprime cette part`,fbd_online_paused:`En pause (cycle %s)`,fbd_online_paused_at:`Arrêté avant %s (cycle %s)`,fbd_debug_resume:`Continuer (F8)`,fbd_debug_pause:`Pause (F8)`,fbd_debug_cycle:`Un cycle`,fbd_debug_step:`Un bloc (F10)`,fbd_debug_save_once:`Enregistrez le schéma une fois, alors les points d'arrêt et le pas à pas fonctionnent`,fbd_debug_forced_count:`Valeurs forcées : %s`,fbd_debug_release_all:`Tout libérer`,fbd_debug_breakpoint_count:`Points d'arrêt : %s`,fbd_debug_remove_all:`Tout supprimer`,fbd_debug_breakpoint_set:`Placer un point d'arrêt (F9)`,fbd_debug_breakpoint_remove:`Retirer le point d'arrêt (F9)`,fbd_debug_breakpoint:`Point d'arrêt`,fbd_debug_breakpoint_hint:`Le schéma s'arrête avant ce bloc (F9)`,fbd_debug_forced:`forcé`,fbd_debug_force:`Forcer`,fbd_debug_release:`Libérer`,fbd_debug_force_hint:`Une valeur forcée vaut jusqu'à sa libération ou la fin de la vue en ligne - et agit aussi sur les états que le schéma écrit.`,fbd_link:`Liaison`,fbd_link_mark:`Afficher comme marque de liaison`,fbd_link_mark_hint:`Au lieu d'une ligne à travers le schéma, les deux extrémités montrent une marque nommée ; un double clic saute à l'autre extrémité.`,fbd_link_label:`Nom de la marque`,fbd_layout:`Disposer automatiquement`,fbd_find:`Rechercher dans le schéma (Ctrl+F)`,fbd_find_placeholder:`Nom, type, état…`,fbd_find_none:`rien`,fbd_find_previous:`Précédent (Maj+Entrée)`,fbd_find_next:`Suivant (Entrée)`,fbd_find_close:`Fermer (Échap)`,"The diagram does not run":`Le schéma ne tourne pas`,"The diagram is not shown online":`Le schéma n'est pas affiché en ligne`,"The diagram was saved before values could be forced - save it once":`Le schéma a été enregistré avant que l'on puisse forcer des valeurs - enregistrez-le une fois`,"The diagram was saved before it could stop at blocks - save it once":`Le schéma a été enregistré avant de pouvoir s'arrêter aux blocs - enregistrez-le une fois`,fbd_instance_open:`Vue intérieure`,fbd_instance_open_hint:`Montre cette instance de l'intérieur - en ligne avec ses propres valeurs (double clic)`,fbd_instance_title:`Instance « %s » de « %s », version %s`,fbd_instance_readonly:`Lecture seule : c'est le bloc tel que ce schéma le contient. Il se modifie dans son propre schéma. On peut forcer des valeurs ici, les points d'arrêt seulement dans le schéma lui-même.`,fbd_instance_save_once:`Enregistrez le schéma une fois, alors les valeurs dans les instances apparaissent`,fbd_instance_back:`Retour (Échap)`,fbd_link_refused_type:`Non relié : %s ne convient pas à %s (%s). Seul INT devient REAL tout seul.`,fbd_link_refused_taken:`Non relié : %s est déjà relié - une entrée ne prend qu'une liaison`,fbd_category_memory:`Mémoire`,fbd_tab_blocks:`Blocs`,fbd_tab_variables:`Variables`,fbd_tab_favorites:`Favoris`,fbd_favorite_add:`Ajouter aux favoris`,fbd_favorite_remove:`Retirer des favoris`,fbd_no_variables:`Pas encore d'états dans le schéma - ils viennent avec STATE_IN et STATE_OUT`,fbd_no_favorites:`Pas encore de favoris - l'étoile d'un bloc le place ici`,fbd_expand_all:`Tout déplier`,fbd_collapse_all:`Tout replier`,fbd_menu:`Plus`,fbd_menu_properties:`Propriétés`,fbd_menu_duplicate:`Dupliquer`,fbd_tab_properties:`Propriétés`,fbd_tab_docs:`Documentation`,fbd_section_general:`Général`,fbd_section_params:`Paramètres`,fbd_section_preview:`Aperçu`,fbd_section_block:`Bloc`,fbd_name:`Nom`,fbd_type:`Type`,fbd_comment_field:`Commentaire`,fbd_comment_placeholder:`Commentaire…`,fbd_invert_short:`inversé`,fbd_is_block_short:`Est un bloc`,fbd_link_from_to:`De → vers`,fbd_link_mark_short:`En marque`,fbd_outputs:`Sorties`,fbd_doc_keys:`Raccourcis`,fbd_key_undo:`Annuler / rétablir`,fbd_key_copy:`Copier / couper / coller`,fbd_key_delete:`Supprimer la sélection`,fbd_key_find:`Rechercher dans le schéma`,fbd_key_pause:`Pause / continuer (en ligne)`,fbd_key_breakpoint:`Point d'arrêt au bloc choisi (en ligne)`,fbd_key_step:`Un bloc plus loin (en ligne)`,fbd_key_back:`Sortir d'une instance`,fbd_doc_double_click:`Un double clic sur une instance d'un bloc personnel la montre de l'intérieur ; sur une marque de liaison, il saute à l'autre extrémité.`,fbd_doc_stateful:`Garde son état d'un cycle à l'autre`,fbd_doc_time:`Dépend du temps - un schéma qui le contient tourne cycliquement`,fbd_instance:`Instance`,fbd_grid:`Grille`,fbd_links_curved:`Liaisons en courbes`,fbd_links_orthogonal:`Liaisons à angle droit`,fbd_zoom_in:`Agrandir`,fbd_zoom_out:`Réduire`,fbd_zoom_reset:`À 100 %`,fbd_link_const_retyped:`%s est maintenant de type %s (valeur %s)`,fbd_link_refused_const:`Non relié : %s alimente déjà des entrées qui ne prennent pas de %s (%s)`,fbd_state_type_taken:`%s lit maintenant l'état en %s, comme l'indique son objet - à modifier dans les propriétés si besoin`,fbd_desc_LOG:`Écrit une ligne dans le journal : sur un front montant de TRIG ou quand IN change. %s dans le texte est la valeur de IN`,fbd_param_text:`Texte`,fbd_param_level:`Niveau`,fbd_param_when:`Quand`,fbd_option_edge:`sur front montant de TRIG`,fbd_option_change:`quand IN change`,fbd_online_changed_short:`modifié`,fbd_category_counters:`Compteurs`,fbd_category_convert:`Conversion`,fbd_category_calendar:`Calendrier`,fbd_category_messages:`Messages`,fbd_category_expert:`Expert`,fbd_desc_BLINK:`Clignotant : tant que EN est vrai, Q est vrai pendant TH et faux pendant TL`,fbd_desc_CTU:`Compteur : compte les fronts montants de CU, R remet CV à 0. Q : CV a atteint PV`,fbd_desc_CTD:`Décompteur : décompte sur les fronts montants de CD, LD charge PV. Q : CV a atteint 0`,fbd_desc_CTUD:`Compteur/décompteur : CU compte, CD décompte, R remet à 0, LD charge PV. QU : CV a atteint PV, QD : CV a atteint 0`,fbd_desc_ROUND:`Arrondit IN à DIGITS décimales`,fbd_desc_TO_BOOL:`Convertit en BOOL : 0, un texte vide et "false" sont faux`,fbd_desc_TO_INT:`Convertit en INT, arrondi ; une virgule décimale compte comme un point, ce qui n'est pas un nombre donne 0`,fbd_desc_TO_REAL:`Convertit en REAL ; une virgule décimale compte comme un point, ce qui n'est pas un nombre donne 0`,fbd_desc_TO_TIME:`Convertit en TIME : un nombre est en ms, un texte peut être "2s", "1m30s" ou "08:30"`,fbd_desc_TO_STRING:`Convertit en texte`,fbd_desc_CONCAT:`Assemble les entrées en un texte - arrondir les nombres avant avec ROUND`,fbd_desc_CLOCK:`L'heure locale : heure du jour, heure, minute, jour de la semaine (1 lundi ... 7 dimanche), jour, mois et année`,fbd_desc_TIMEWINDOW:`Plage horaire : vrai de START à END les jours choisis ; une plage qui passe minuit appartient au jour où elle commence`,fbd_desc_SCHEDULE:`Planification : Q est vrai pendant un cycle quand l'heure du motif cron arrive`,fbd_desc_ASTRO:`Soleil : Q est vrai d'un événement solaire à un autre, par exemple du coucher au lever du soleil ; START et END sont leurs heures aujourd'hui`,fbd_desc_NOTIFY:`Envoie une notification ioBroker : sur un front montant de TRIG ou quand IN change. Au plus 5 par minute`,fbd_desc_SENDTO:`Envoie un message à un adaptateur comme telegram.0 ou pushover.0 (text, message, title, subject) : sur un front montant de TRIG ou quand IN change. Au plus 5 par minute`,fbd_desc_JS:`JavaScript personnel : reçoit IN1 ... INn, dt, firstScan et state (conservé entre les cycles), renvoie OUT1 ou [OUT1, OUT2, ...]`,fbd_param_days:`Jours`,fbd_param_cron:`Motif cron`,fbd_param_start:`De`,fbd_param_end:`À`,fbd_param_startOffset:`Décalage du début`,fbd_param_endOffset:`Décalage de la fin`,fbd_offset_hint:`En minutes, négatif est plus tôt`,fbd_param_category:`Genre`,fbd_param_instance:`Instance`,fbd_param_title:`Titre`,fbd_param_command:`Commande`,fbd_param_code:`Code`,fbd_param_outputs:`Nombre de sorties`,fbd_option_all:`tous les jours`,fbd_option_weekdays:`du lundi au vendredi`,fbd_option_weekend:`samedi et dimanche`,fbd_option_message:`Message`,fbd_option_alert:`Alerte`,fbd_cron_dialog:`Régler l'heure`,fbd_cron_hint:`Minute heure jour mois jour_de_semaine, par exemple "0 8 * * 1-5" : à 8 h du lundi au vendredi. Avec les secondes devant, "*/5 * * * * *" est toutes les 5 secondes`,fbd_code_hint:`Le code reçoit %s et renvoie la valeur de OUT1, ou [OUT1, OUT2, ...] ; undefined laisse une sortie telle quelle`,"The code has an error: %s":`Le code contient une erreur : %s`,fbd_option_nightEnd:`Fin de nuit`,fbd_option_nauticalDawn:`Aube nautique`,fbd_option_dawn:`Aube`,fbd_option_sunrise:`lever du soleil`,fbd_option_sunriseEnd:`Fin du lever du soleil`,fbd_option_goldenHourEnd:`Fin de l'heure d'or`,fbd_option_solarNoon:`Midi solaire`,fbd_option_goldenHour:`Heure d'or`,fbd_option_sunsetStart:`Début du coucher du soleil`,fbd_option_sunset:`le coucher du soleil`,fbd_option_dusk:`Crépuscule`,fbd_option_nauticalDusk:`Crépuscule nautique`,fbd_option_night:`Nuit`,fbd_option_nadir:`nadir`},it:{fbd_search:`Cerca`,fbd_category_iobroker:`ioBroker`,fbd_category_logic:`Logica`,fbd_category_timers:`Timer`,fbd_category_compare:`Confronto`,fbd_category_arithmetic:`Aritmetica`,fbd_category_structure:`Struttura`,fbd_comment:`Commento`,fbd_comment_desc:`Una nota nel diagramma; non viene eseguita`,fbd_no_state:`nessuno stato selezionato`,fbd_select_state:`Seleziona stato`,fbd_instance_name:`Nome dell'istanza`,fbd_inputs:`Ingressi`,fbd_connected:`collegato`,fbd_inverted:`Inverti %s`,fbd_invalid_time:`Un tempo come 500ms, 2s, 1m30s`,fbd_invalid_number:`Non è un numero`,fbd_param_oid:`Stato`,fbd_param_type:`Tipo`,fbd_param_ack:`Scrivi come confermato (ack)`,fbd_param_minInterval:`Tempo minimo tra le scritture`,fbd_param_value:`Valore`,fbd_param_inputs:`Numero di ingressi`,fbd_diagram:`Diagramma`,fbd_cycle_mode:`Esecuzione`,fbd_mode_auto:`Automatica`,fbd_mode_cyclic:`Ciclica`,fbd_mode_event:`Quando cambia un ingresso`,fbd_runs_cyclic:`Il diagramma viene eseguito ciclicamente`,fbd_runs_event:`Il diagramma viene eseguito quando cambia un ingresso`,fbd_cycle_time:`Tempo di ciclo (ms)`,fbd_empty_hint:`Trascina i blocchi da sinistra sull'area e collega un'uscita a un ingresso`,fbd_no_diagram:`Questo script non contiene un diagramma a blocchi funzionali`,"Unknown block type %s":`Tipo di blocco sconosciuto %s`,"Invalid block ID %s":`ID blocco non valido %s`,"Duplicate block ID %s":`ID blocco duplicato %s`,'Parameter "%s" is not set':`Il parametro "%s" non è impostato`,"The connection refers to a missing block or pin":`Il collegamento fa riferimento a un blocco o pin mancante`,"Types do not match: %s cannot be connected to %s":`I tipi non corrispondono: %s non può essere collegato a %s`,"Input %s is connected more than once":`L'ingresso %s è collegato più di una volta`,"Loop without a block that stores a value: %s":`Anello senza un blocco che memorizza un valore: %s`,"Timers need the cyclic mode, in the event mode they only run when an input changes":`I timer richiedono la modalità ciclica, in quella a eventi funzionano solo quando cambia un ingresso`,fbd_desc_AND:`AND: vero se tutti gli ingressi sono veri`,fbd_desc_OR:`OR: vero se almeno un ingresso è vero`,fbd_desc_XOR:`OR esclusivo: vero per un numero dispari di ingressi veri`,fbd_desc_NOT:`NOT: inverte l'ingresso`,fbd_desc_RS:`Flip-flop a reset dominante`,fbd_desc_SR:`Flip-flop a set dominante`,fbd_desc_R_TRIG:`Fronte di salita: vero per un ciclo quando l'ingresso diventa vero`,fbd_desc_F_TRIG:`Fronte di discesa: vero per un ciclo quando l'ingresso diventa falso`,fbd_desc_TON:`Ritardo all'eccitazione: Q diventa vero quando IN è stato vero per PT`,fbd_desc_TOF:`Ritardo alla diseccitazione: Q resta vero per PT dopo che IN è diventato falso`,fbd_desc_TP:`Impulso: un fronte di salita di IN genera un impulso di durata PT`,fbd_desc_GT:`Maggiore di`,fbd_desc_GE:`Maggiore o uguale`,fbd_desc_LT:`Minore di`,fbd_desc_LE:`Minore o uguale`,fbd_desc_EQ:`Uguale`,fbd_desc_NE:`Diverso`,fbd_desc_ADD:`Addizione`,fbd_desc_SUB:`Sottrazione`,fbd_desc_MUL:`Moltiplicazione`,fbd_desc_DIV:`Divisione (per 0 dà 0)`,fbd_desc_MIN:`Ingresso minimo`,fbd_desc_MAX:`Ingresso massimo`,fbd_desc_STATE_IN:`Legge uno stato di ioBroker`,fbd_desc_STATE_OUT:`Scrive uno stato di ioBroker quando il valore cambia`,fbd_desc_CONST:`Un valore costante`,fbd_online:`Online`,fbd_online_tooltip:`Mostra i valori del diagramma in esecuzione`,fbd_online_waiting:`In attesa di dati…`,fbd_online_no_data:`Nessun dato da %s s - lo script è in esecuzione?`,fbd_online_stalled:`Il diagramma non viene più eseguito (ciclo %s)`,fbd_online_cycle:`Ciclo %s`,fbd_online_event:`attende gli ingressi`,fbd_online_not_running:`Lo script non è in esecuzione`,fbd_online_changed:`Il diagramma è stato modificato - i valori appartengono alla versione salvata`,fbd_runtime_error:`Errore durante l'esecuzione: %s`,fbd_online_no_values:`Ciclo %s - salva il diagramma una volta per vedere i valori`,fbd_category_interface:`Interfaccia`,fbd_category_user:`Blocchi propri`,fbd_desc_FB_IN:`Un ingresso di questo blocco`,fbd_desc_FB_OUT:`Un'uscita di questo blocco`,fbd_param_pin:`Nome del pin`,fbd_invalid_name:`Solo lettere, cifre e _, senza iniziare con una cifra`,fbd_no_user_blocks:`Ancora nessun blocco proprio - un diagramma lo diventa con "Questo diagramma è un blocco" nelle impostazioni`,fbd_is_block:`Questo diagramma è un blocco`,fbd_block_hint:`Un blocco si inserisce in altri diagrammi, tutte le volte che serve. I suoi blocchi FB_IN e FB_OUT sono i pin; ogni modifica salvata è una nuova versione.`,fbd_block_name:`Nome del blocco`,fbd_block_description:`Descrizione`,fbd_block_type:`Tipo %s, versione %s`,fbd_block_duplicate:`Il diagramma "%s" definisce lo stesso tipo`,fbd_block_newer:`È disponibile la versione %s`,fbd_block_update:`Aggiorna`,fbd_block_update_hint:`Applica la nuova versione a tutte le istanze di questo diagramma`,fbd_block_open:`Apri il blocco`,fbd_block_outdated:`Nuova versione di "%s": %s (in questo diagramma: %s)`,"Inputs and outputs of a block only work in the diagram of a block":`Ingressi e uscite di un blocco funzionano solo nel diagramma di un blocco`,"A block cannot read or write states - give it inputs and outputs instead":`Un blocco non può leggere o scrivere stati - usa ingressi e uscite`,"Invalid pin name %s":`Nome del pin non valido %s`,"The pin name %s is used twice":`Il nome del pin %s è usato due volte`,"The block %s contains itself":`Il blocco %s contiene se stesso`,"The block %s has errors: %s":`Il blocco %s contiene errori: %s`,"Invalid block type %s":`Tipo di blocco non valido %s`,fbd_category_control:`Regolazione`,fbd_desc_HYST:`Interruttore a due punti: Q diventa vero quando IN sale sopra HIGH e falso quando scende sotto LOW`,fbd_desc_RAMP:`Rampa: OUT segue IN, al massimo di UP al secondo in salita e DOWN al secondo in discesa (0: senza limite)`,fbd_desc_PT1:`Passa basso del primo ordine (PT1): OUT segue IN con la costante di tempo T`,fbd_desc_PID:`Regolatore PID: setpoint SP, valore di processo PV, uscita Y tra YMIN e YMAX; TN o TV a 0 esclude quella parte`,fbd_online_paused:`In pausa (ciclo %s)`,fbd_online_paused_at:`Fermo prima di %s (ciclo %s)`,fbd_debug_resume:`Continua (F8)`,fbd_debug_pause:`Pausa (F8)`,fbd_debug_cycle:`Un ciclo`,fbd_debug_step:`Un blocco (F10)`,fbd_debug_save_once:`Salva lo schema una volta, poi funzionano punti di interruzione e passi singoli`,fbd_debug_forced_count:`Valori forzati: %s`,fbd_debug_release_all:`Rilascia tutti`,fbd_debug_breakpoint_count:`Punti di interruzione: %s`,fbd_debug_remove_all:`Rimuovi tutti`,fbd_debug_breakpoint_set:`Imposta punto di interruzione (F9)`,fbd_debug_breakpoint_remove:`Rimuovi punto di interruzione (F9)`,fbd_debug_breakpoint:`Punto di interruzione`,fbd_debug_breakpoint_hint:`Lo schema si ferma prima di questo blocco (F9)`,fbd_debug_forced:`forzato`,fbd_debug_force:`Forza`,fbd_debug_release:`Rilascia`,fbd_debug_force_hint:`Un valore forzato vale finché non viene rilasciato o la vista online termina - e agisce anche sugli stati che lo schema scrive.`,fbd_link:`Collegamento`,fbd_link_mark:`Mostra come marcatore di collegamento`,fbd_link_mark_hint:`Invece di una linea attraverso lo schema, entrambe le estremità mostrano un marcatore con un nome; un doppio clic salta all'altra estremità.`,fbd_link_label:`Nome del marcatore`,fbd_layout:`Disponi automaticamente`,fbd_find:`Cerca nello schema (Ctrl+F)`,fbd_find_placeholder:`Nome, tipo, stato…`,fbd_find_none:`nulla`,fbd_find_previous:`Precedente (Maiusc+Invio)`,fbd_find_next:`Successivo (Invio)`,fbd_find_close:`Chiudi (Esc)`,"The diagram does not run":`Lo schema non è in esecuzione`,"The diagram is not shown online":`Lo schema non è mostrato online`,"The diagram was saved before values could be forced - save it once":`Lo schema è stato salvato prima che si potessero forzare valori - salvalo una volta`,"The diagram was saved before it could stop at blocks - save it once":`Lo schema è stato salvato prima che potesse fermarsi ai blocchi - salvalo una volta`,fbd_instance_open:`Vista interna`,fbd_instance_open_hint:`Mostra questa istanza dall'interno - online con i suoi valori (doppio clic)`,fbd_instance_title:`Istanza "%s" di "%s", versione %s`,fbd_instance_readonly:`Sola lettura: è il blocco come lo contiene questo schema. Si modifica nel suo schema. Qui si possono forzare valori, i punti di interruzione solo nello schema stesso.`,fbd_instance_save_once:`Salva lo schema una volta, poi compaiono i valori dentro le istanze`,fbd_instance_back:`Indietro (Esc)`,fbd_link_refused_type:`Non collegato: %s non si adatta a %s (%s). Solo INT diventa REAL da solo.`,fbd_link_refused_taken:`Non collegato: %s è già collegato - un ingresso accetta un solo collegamento`,fbd_category_memory:`Memoria`,fbd_tab_blocks:`Blocchi`,fbd_tab_variables:`Variabili`,fbd_tab_favorites:`Preferiti`,fbd_favorite_add:`Aggiungi ai preferiti`,fbd_favorite_remove:`Rimuovi dai preferiti`,fbd_no_variables:`Ancora nessuno stato nello schema - arrivano con STATE_IN e STATE_OUT`,fbd_no_favorites:`Ancora nessun preferito - la stella su un blocco lo mette qui`,fbd_expand_all:`Espandi tutto`,fbd_collapse_all:`Comprimi tutto`,fbd_menu:`Altro`,fbd_menu_properties:`Proprietà`,fbd_menu_duplicate:`Duplica`,fbd_tab_properties:`Proprietà`,fbd_tab_docs:`Documentazione`,fbd_section_general:`Generale`,fbd_section_params:`Parametri`,fbd_section_preview:`Anteprima`,fbd_section_block:`Blocco`,fbd_name:`Nome`,fbd_type:`Tipo`,fbd_comment_field:`Commento`,fbd_comment_placeholder:`Commento…`,fbd_invert_short:`invertito`,fbd_is_block_short:`È un blocco`,fbd_link_from_to:`Da → a`,fbd_link_mark_short:`Come marcatore`,fbd_outputs:`Uscite`,fbd_doc_keys:`Tasti`,fbd_key_undo:`Annulla / ripeti`,fbd_key_copy:`Copia / taglia / incolla`,fbd_key_delete:`Elimina la selezione`,fbd_key_find:`Cerca nello schema`,fbd_key_pause:`Pausa / continua (online)`,fbd_key_breakpoint:`Punto di interruzione sul blocco scelto (online)`,fbd_key_step:`Un blocco avanti (online)`,fbd_key_back:`Esci da un'istanza`,fbd_doc_double_click:`Un doppio clic su un'istanza di un blocco proprio la mostra dall'interno; su un marcatore di collegamento salta all'altra estremità.`,fbd_doc_stateful:`Ricorda il suo stato da un ciclo all'altro`,fbd_doc_time:`Dipende dal tempo - uno schema che lo contiene gira ciclicamente`,fbd_instance:`Istanza`,fbd_grid:`Griglia`,fbd_links_curved:`Collegamenti come curve`,fbd_links_orthogonal:`Collegamenti ad angolo retto`,fbd_zoom_in:`Ingrandisci`,fbd_zoom_out:`Riduci`,fbd_zoom_reset:`Al 100 %`,fbd_link_const_retyped:`%s ora è di tipo %s (valore %s)`,fbd_link_refused_const:`Non collegato: %s alimenta già ingressi che non accettano %s (%s)`,fbd_state_type_taken:`%s ora legge lo stato come %s, come indica il suo oggetto - modificalo nelle proprietà se serve`,fbd_desc_LOG:`Scrive una riga nel log: su un fronte di salita di TRIG o quando IN cambia. %s nel testo è il valore di IN`,fbd_param_text:`Testo`,fbd_param_level:`Livello`,fbd_param_when:`Quando`,fbd_option_edge:`sul fronte di salita di TRIG`,fbd_option_change:`quando IN cambia`,fbd_online_changed_short:`modificato`,fbd_category_counters:`Contatori`,fbd_category_convert:`Conversione`,fbd_category_calendar:`Calendario`,fbd_category_messages:`Messaggi`,fbd_category_expert:`Esperto`,fbd_desc_BLINK:`Lampeggiatore: finché EN è vero, Q è vero per TH e falso per TL`,fbd_desc_CTU:`Contatore in avanti: conta i fronti di salita di CU, R azzera CV. Q: CV ha raggiunto PV`,fbd_desc_CTD:`Contatore all'indietro: conta alla rovescia sui fronti di salita di CD, LD carica PV. Q: CV ha raggiunto 0`,fbd_desc_CTUD:`Contatore avanti/indietro: CU conta avanti, CD indietro, R azzera, LD carica PV. QU: CV ha raggiunto PV, QD: CV ha raggiunto 0`,fbd_desc_ROUND:`Arrotonda IN a DIGITS decimali`,fbd_desc_TO_BOOL:`Converte in BOOL: 0, testo vuoto e "false" sono falsi`,fbd_desc_TO_INT:`Converte in INT, arrotondato; la virgola decimale vale come punto, ciò che non è un numero dà 0`,fbd_desc_TO_REAL:`Converte in REAL; la virgola decimale vale come punto, ciò che non è un numero dà 0`,fbd_desc_TO_TIME:`Converte in TIME: un numero è in ms, un testo può essere "2s", "1m30s" o "08:30"`,fbd_desc_TO_STRING:`Converte in testo`,fbd_desc_CONCAT:`Unisce gli ingressi in un testo - arrotondare prima i numeri con ROUND`,fbd_desc_CLOCK:`L'ora locale: ora del giorno, ora, minuto, giorno della settimana (1 lunedì ... 7 domenica), giorno, mese e anno`,fbd_desc_TIMEWINDOW:`Finestra oraria: vero da START a END nei giorni scelti; una finestra oltre la mezzanotte appartiene al giorno in cui inizia`,fbd_desc_SCHEDULE:`Pianificazione: Q è vero per un ciclo quando arriva l'ora del modello cron`,fbd_desc_ASTRO:`Sole: Q è vero da un evento del sole a un altro, per esempio dal tramonto all'alba; START ed END sono i loro orari di oggi`,fbd_desc_NOTIFY:`Invia una notifica di ioBroker: su un fronte di salita di TRIG o quando IN cambia. Al massimo 5 al minuto`,fbd_desc_SENDTO:`Invia un messaggio a un adattatore come telegram.0 o pushover.0 (text, message, title, subject): su un fronte di salita di TRIG o quando IN cambia. Al massimo 5 al minuto`,fbd_desc_JS:`JavaScript proprio: riceve IN1 ... INn, dt, firstScan e state (mantenuto tra i cicli), restituisce OUT1 o [OUT1, OUT2, ...]`,fbd_param_days:`Giorni`,fbd_param_cron:`Modello cron`,fbd_param_start:`Da`,fbd_param_end:`A`,fbd_param_startOffset:`Scostamento dell'inizio`,fbd_param_endOffset:`Scostamento della fine`,fbd_offset_hint:`In minuti, negativo è prima`,fbd_param_category:`Tipo`,fbd_param_instance:`Istanza`,fbd_param_title:`Titolo`,fbd_param_command:`Comando`,fbd_param_code:`Codice`,fbd_param_outputs:`Numero di uscite`,fbd_option_all:`ogni giorno`,fbd_option_weekdays:`da lunedì a venerdì`,fbd_option_weekend:`sabato e domenica`,fbd_option_message:`Messaggio`,fbd_option_alert:`Allarme`,fbd_cron_dialog:`Impostare l'ora`,fbd_cron_hint:`Minuto ora giorno mese giorno_settimana, per esempio "0 8 * * 1-5": alle 8:00 da lunedì a venerdì. Con i secondi davanti, "*/5 * * * * *" è ogni 5 secondi`,fbd_code_hint:`Il codice riceve %s e restituisce il valore di OUT1, o [OUT1, OUT2, ...]; undefined lascia un'uscita com'è`,"The code has an error: %s":`Il codice contiene un errore: %s`,fbd_option_nightEnd:`Fine della notte`,fbd_option_nauticalDawn:`Alba nautica`,fbd_option_dawn:`alba`,fbd_option_sunrise:`Alba`,fbd_option_sunriseEnd:`Fine dell'alba`,fbd_option_goldenHourEnd:`Fine dell'ora d'oro`,fbd_option_solarNoon:`Mezzogiorno solare`,fbd_option_goldenHour:`Ora d'oro`,fbd_option_sunsetStart:`Inizio del tramonto`,fbd_option_sunset:`tramonto`,fbd_option_dusk:`crepuscolo`,fbd_option_nauticalDusk:`Crepuscolo nautico`,fbd_option_night:`Notte`,fbd_option_nadir:`nadir`},nl:{fbd_search:`Zoeken`,fbd_category_iobroker:`ioBroker`,fbd_category_logic:`Logica`,fbd_category_timers:`Timers`,fbd_category_compare:`Vergelijking`,fbd_category_arithmetic:`Rekenen`,fbd_category_structure:`Structuur`,fbd_comment:`Opmerking`,fbd_comment_desc:`Een notitie in het diagram; wordt niet uitgevoerd`,fbd_no_state:`geen state gekozen`,fbd_select_state:`State kiezen`,fbd_instance_name:`Instantienaam`,fbd_inputs:`Ingangen`,fbd_connected:`verbonden`,fbd_inverted:`%s inverteren`,fbd_invalid_time:`Een tijd zoals 500ms, 2s, 1m30s`,fbd_invalid_number:`Geen getal`,fbd_param_oid:`State`,fbd_param_type:`Type`,fbd_param_ack:`Als bevestigd schrijven (ack)`,fbd_param_minInterval:`Minimale tijd tussen schrijfacties`,fbd_param_value:`Waarde`,fbd_param_inputs:`Aantal ingangen`,fbd_diagram:`Diagram`,fbd_cycle_mode:`Uitvoering`,fbd_mode_auto:`Automatisch`,fbd_mode_cyclic:`Cyclisch`,fbd_mode_event:`Bij wijziging van een ingang`,fbd_runs_cyclic:`Het diagram draait cyclisch`,fbd_runs_event:`Het diagram draait bij wijziging van een ingang`,fbd_cycle_time:`Cyclustijd (ms)`,fbd_empty_hint:`Sleep blokken van links naar het canvas en verbind een uitgang met een ingang`,fbd_no_diagram:`Dit script bevat geen functieblokdiagram`,"Unknown block type %s":`Onbekend bloktype %s`,"Invalid block ID %s":`Ongeldige blok-ID %s`,"Duplicate block ID %s":`Dubbele blok-ID %s`,'Parameter "%s" is not set':`Parameter "%s" is niet ingesteld`,"The connection refers to a missing block or pin":`De verbinding verwijst naar een ontbrekend blok of aansluiting`,"Types do not match: %s cannot be connected to %s":`Types komen niet overeen: %s kan niet met %s verbonden worden`,"Input %s is connected more than once":`Ingang %s is meer dan eens verbonden`,"Loop without a block that stores a value: %s":`Terugkoppeling zonder geheugenblok: %s`,"Timers need the cyclic mode, in the event mode they only run when an input changes":`Timers hebben de cyclische modus nodig, in de event-modus lopen ze alleen bij wijziging van een ingang`,fbd_desc_AND:`EN: waar als alle ingangen waar zijn`,fbd_desc_OR:`OF: waar als een ingang waar is`,fbd_desc_XOR:`Exclusieve OF: waar bij een oneven aantal ware ingangen`,fbd_desc_NOT:`NIET: keert de ingang om`,fbd_desc_RS:`Flipflop, reset dominant`,fbd_desc_SR:`Flipflop, set dominant`,fbd_desc_R_TRIG:`Stijgende flank: één cyclus waar als de ingang waar wordt`,fbd_desc_F_TRIG:`Dalende flank: één cyclus waar als de ingang onwaar wordt`,fbd_desc_TON:`Inschakelvertraging: Q wordt waar als IN gedurende PT waar was`,fbd_desc_TOF:`Uitschakelvertraging: Q blijft PT lang waar nadat IN onwaar werd`,fbd_desc_TP:`Puls: een stijgende flank van IN geeft een puls van lengte PT`,fbd_desc_GT:`Groter dan`,fbd_desc_GE:`Groter dan of gelijk`,fbd_desc_LT:`Kleiner dan`,fbd_desc_LE:`Kleiner dan of gelijk`,fbd_desc_EQ:`Gelijk`,fbd_desc_NE:`Ongelijk`,fbd_desc_ADD:`Optellen`,fbd_desc_SUB:`Aftrekken`,fbd_desc_MUL:`Vermenigvuldigen`,fbd_desc_DIV:`Delen (door 0 geeft 0)`,fbd_desc_MIN:`Kleinste ingang`,fbd_desc_MAX:`Grootste ingang`,fbd_desc_STATE_IN:`Leest een ioBroker-state`,fbd_desc_STATE_OUT:`Schrijft een ioBroker-state als de waarde verandert`,fbd_desc_CONST:`Een vaste waarde`,fbd_online:`Online`,fbd_online_tooltip:`Waarden van het lopende diagram tonen`,fbd_online_waiting:`Wachten op gegevens…`,fbd_online_no_data:`Al %s s geen gegevens - draait het script?`,fbd_online_stalled:`Het diagram rekent niet meer (cyclus %s)`,fbd_online_cycle:`Cyclus %s`,fbd_online_event:`wacht op ingangen`,fbd_online_not_running:`Het script draait niet`,fbd_online_changed:`Het diagram is gewijzigd - de waarden horen bij de opgeslagen versie`,fbd_runtime_error:`Fout bij uitvoeren: %s`,fbd_online_no_values:`Cyclus %s - sla het diagram één keer op om de waarden te zien`,fbd_category_interface:`Interface`,fbd_category_user:`Eigen blokken`,fbd_desc_FB_IN:`Een ingang van dit blok`,fbd_desc_FB_OUT:`Een uitgang van dit blok`,fbd_param_pin:`Naam van de aansluiting`,fbd_invalid_name:`Alleen letters, cijfers en _, niet beginnend met een cijfer`,fbd_no_user_blocks:`Nog geen eigen blokken - een diagram wordt er een met "Dit diagram is een blok" in de instellingen`,fbd_is_block:`Dit diagram is een blok`,fbd_block_hint:`Een blok wordt in andere diagrammen geplaatst, zo vaak als nodig. De FB_IN- en FB_OUT-blokken zijn de aansluitingen; elke opgeslagen wijziging is een nieuwe versie.`,fbd_block_name:`Naam van het blok`,fbd_block_description:`Beschrijving`,fbd_block_type:`Type %s, versie %s`,fbd_block_duplicate:`Het diagram "%s" definieert hetzelfde type`,fbd_block_newer:`Versie %s is beschikbaar`,fbd_block_update:`Bijwerken`,fbd_block_update_hint:`Neemt de nieuwe versie over voor alle instanties in dit diagram`,fbd_block_open:`Blok openen`,fbd_block_outdated:`Nieuwe versie van "%s": %s (in dit diagram: %s)`,"Inputs and outputs of a block only work in the diagram of a block":`In- en uitgangen van een blok werken alleen in het diagram van een blok`,"A block cannot read or write states - give it inputs and outputs instead":`Een blok kan geen states lezen of schrijven - gebruik in- en uitgangen`,"Invalid pin name %s":`Ongeldige aansluitingsnaam %s`,"The pin name %s is used twice":`De aansluitingsnaam %s wordt twee keer gebruikt`,"The block %s contains itself":`Het blok %s bevat zichzelf`,"The block %s has errors: %s":`Het blok %s bevat fouten: %s`,"Invalid block type %s":`Ongeldig bloktype %s`,fbd_category_control:`Regeling`,fbd_desc_HYST:`Tweepuntsschakelaar: Q wordt waar als IN boven HIGH stijgt en onwaar als IN onder LOW daalt`,fbd_desc_RAMP:`Helling: OUT volgt IN, met hoogstens UP per seconde omhoog en DOWN per seconde omlaag (0: onbeperkt)`,fbd_desc_PT1:`Laagdoorlaatfilter van de eerste orde (PT1): OUT volgt IN met de tijdconstante T`,fbd_desc_PID:`PID-regelaar: gewenste waarde SP, proceswaarde PV, uitgang Y tussen YMIN en YMAX; TN of TV 0 laat dat deel weg`,fbd_online_paused:`Gepauzeerd (cyclus %s)`,fbd_online_paused_at:`Gestopt vóór %s (cyclus %s)`,fbd_debug_resume:`Doorgaan (F8)`,fbd_debug_pause:`Pauzeren (F8)`,fbd_debug_cycle:`Eén cyclus`,fbd_debug_step:`Eén blok (F10)`,fbd_debug_save_once:`Sla het diagram één keer op, dan werken breekpunten en losse stappen`,fbd_debug_forced_count:`Geforceerde waarden: %s`,fbd_debug_release_all:`Alle vrijgeven`,fbd_debug_breakpoint_count:`Breekpunten: %s`,fbd_debug_remove_all:`Alle verwijderen`,fbd_debug_breakpoint_set:`Breekpunt zetten (F9)`,fbd_debug_breakpoint_remove:`Breekpunt verwijderen (F9)`,fbd_debug_breakpoint:`Breekpunt`,fbd_debug_breakpoint_hint:`Het diagram stopt vóór dit blok (F9)`,fbd_debug_forced:`geforceerd`,fbd_debug_force:`Forceren`,fbd_debug_release:`Vrijgeven`,fbd_debug_force_hint:`Een geforceerde waarde geldt tot ze wordt vrijgegeven of de onlineweergave eindigt - en werkt ook door in de toestanden die het diagram schrijft.`,fbd_link:`Verbinding`,fbd_link_mark:`Als verbindingsmarkering tonen`,fbd_link_mark_hint:`In plaats van een lijn door het diagram tonen beide uiteinden een markering met een naam; dubbelklikken springt naar het andere uiteinde.`,fbd_link_label:`Naam van de markering`,fbd_layout:`Automatisch rangschikken`,fbd_find:`Zoeken in het diagram (Ctrl+F)`,fbd_find_placeholder:`Naam, type, toestand…`,fbd_find_none:`niets`,fbd_find_previous:`Vorige (Shift+Enter)`,fbd_find_next:`Volgende (Enter)`,fbd_find_close:`Sluiten (Esc)`,"The diagram does not run":`Het diagram draait niet`,"The diagram is not shown online":`Het diagram wordt niet online getoond`,"The diagram was saved before values could be forced - save it once":`Het diagram is opgeslagen voordat waarden geforceerd konden worden - sla het één keer op`,"The diagram was saved before it could stop at blocks - save it once":`Het diagram is opgeslagen voordat het bij blokken kon stoppen - sla het één keer op`,fbd_instance_open:`Binnenaanzicht`,fbd_instance_open_hint:`Toont deze instantie van binnen - online met haar eigen waarden (dubbelklik)`,fbd_instance_title:`Instantie "%s" van "%s", versie %s`,fbd_instance_readonly:`Alleen lezen: zo staat het blok in dit diagram. Het wordt in zijn eigen diagram gewijzigd. Waarden kunnen hier geforceerd worden, breekpunten alleen in het diagram zelf.`,fbd_instance_save_once:`Sla het diagram één keer op, dan verschijnen de waarden in de instanties`,fbd_instance_back:`Terug (Esc)`,fbd_link_refused_type:`Niet verbonden: %s past niet bij %s (%s). Alleen INT wordt vanzelf REAL.`,fbd_link_refused_taken:`Niet verbonden: %s is al verbonden - een ingang neemt maar één verbinding`,fbd_category_memory:`Geheugen`,fbd_tab_blocks:`Blokken`,fbd_tab_variables:`Variabelen`,fbd_tab_favorites:`Favorieten`,fbd_favorite_add:`Aan favorieten toevoegen`,fbd_favorite_remove:`Uit favorieten verwijderen`,fbd_no_variables:`Nog geen toestanden in het diagram - die komen met STATE_IN en STATE_OUT`,fbd_no_favorites:`Nog geen favorieten - de ster bij een blok zet het hier`,fbd_expand_all:`Alles openklappen`,fbd_collapse_all:`Alles dichtklappen`,fbd_menu:`Meer`,fbd_menu_properties:`Eigenschappen`,fbd_menu_duplicate:`Dupliceren`,fbd_tab_properties:`Eigenschappen`,fbd_tab_docs:`Documentatie`,fbd_section_general:`Algemeen`,fbd_section_params:`Parameters`,fbd_section_preview:`Voorbeeld`,fbd_section_block:`Blok`,fbd_name:`Naam`,fbd_type:`Type`,fbd_comment_field:`Opmerking`,fbd_comment_placeholder:`Opmerking…`,fbd_invert_short:`omgekeerd`,fbd_is_block_short:`Is een blok`,fbd_link_from_to:`Van → naar`,fbd_link_mark_short:`Als markering`,fbd_outputs:`Uitgangen`,fbd_doc_keys:`Sneltoetsen`,fbd_key_undo:`Ongedaan maken / opnieuw`,fbd_key_copy:`Kopiëren / knippen / plakken`,fbd_key_delete:`Selectie verwijderen`,fbd_key_find:`Zoeken in het diagram`,fbd_key_pause:`Pauzeren / doorgaan (online)`,fbd_key_breakpoint:`Breekpunt bij het gekozen blok (online)`,fbd_key_step:`Eén blok verder (online)`,fbd_key_back:`Terug uit een instantie`,fbd_doc_double_click:`Dubbelklikken op een instantie van een eigen blok toont die van binnen; op een verbindingsmarkering springt het naar het andere uiteinde.`,fbd_doc_stateful:`Onthoudt zijn toestand van cyclus tot cyclus`,fbd_doc_time:`Hangt af van de tijd - een diagram ermee draait cyclisch`,fbd_instance:`Instantie`,fbd_grid:`Raster`,fbd_links_curved:`Verbindingen als curven`,fbd_links_orthogonal:`Verbindingen haaks`,fbd_zoom_in:`Inzoomen`,fbd_zoom_out:`Uitzoomen`,fbd_zoom_reset:`Naar 100 %`,fbd_link_const_retyped:`%s is nu van het type %s (waarde %s)`,fbd_link_refused_const:`Niet verbonden: %s voedt al ingangen die geen %s nemen (%s)`,fbd_state_type_taken:`%s leest de toestand nu als %s, zoals het object zegt - zo nodig in de eigenschappen wijzigen`,fbd_desc_LOG:`Schrijft een regel in het logboek: bij een stijgende flank van TRIG of als IN verandert. %s in de tekst is de waarde van IN`,fbd_param_text:`Tekst`,fbd_param_level:`Niveau`,fbd_param_when:`Wanneer`,fbd_option_edge:`bij een stijgende flank van TRIG`,fbd_option_change:`als IN verandert`,fbd_online_changed_short:`gewijzigd`,fbd_category_counters:`Tellers`,fbd_category_convert:`Conversie`,fbd_category_calendar:`Kalender`,fbd_category_messages:`Berichten`,fbd_category_expert:`Expert`,fbd_desc_BLINK:`Knipperaar: zolang EN waar is, is Q waar gedurende TH en onwaar gedurende TL`,fbd_desc_CTU:`Opteller: telt de stijgende flanken van CU, R zet CV op 0. Q: CV heeft PV bereikt`,fbd_desc_CTD:`Afteller: telt af op de stijgende flanken van CD, LD laadt PV. Q: CV heeft 0 bereikt`,fbd_desc_CTUD:`Op-/afteller: CU telt op, CD af, R zet 0, LD laadt PV. QU: CV heeft PV bereikt, QD: CV heeft 0 bereikt`,fbd_desc_ROUND:`Rondt IN af op DIGITS decimalen`,fbd_desc_TO_BOOL:`Zet om naar BOOL: 0, lege tekst en "false" zijn onwaar`,fbd_desc_TO_INT:`Zet om naar INT, afgerond; een decimale komma telt als punt, wat geen getal is geeft 0`,fbd_desc_TO_REAL:`Zet om naar REAL; een decimale komma telt als punt, wat geen getal is geeft 0`,fbd_desc_TO_TIME:`Zet om naar TIME: een getal is ms, een tekst mag "2s", "1m30s" of "08:30" zijn`,fbd_desc_TO_STRING:`Zet om naar tekst`,fbd_desc_CONCAT:`Voegt de ingangen samen tot één tekst - rond getallen eerst af met ROUND`,fbd_desc_CLOCK:`De lokale tijd: tijdstip, uur, minuut, weekdag (1 maandag ... 7 zondag), dag, maand en jaar`,fbd_desc_TIMEWINDOW:`Tijdvenster: waar van START tot END op de gekozen dagen; een venster over middernacht hoort bij de dag waarop het begint`,fbd_desc_SCHEDULE:`Planning: Q is één cyclus waar wanneer de tijd van het cron-patroon komt`,fbd_desc_ASTRO:`Zon: Q is waar van de ene zonnegebeurtenis tot de andere, zoals van zonsondergang tot zonsopgang; START en END zijn hun tijden vandaag`,fbd_desc_NOTIFY:`Stuurt een ioBroker-melding: bij een stijgende flank van TRIG of wanneer IN verandert. Hoogstens 5 per minuut`,fbd_desc_SENDTO:`Stuurt een bericht naar een adapter zoals telegram.0 of pushover.0 (text, message, title, subject): bij een stijgende flank van TRIG of wanneer IN verandert. Hoogstens 5 per minuut`,fbd_desc_JS:`Eigen JavaScript: krijgt IN1 ... INn, dt, firstScan en state (blijft tussen cycli), geeft OUT1 of [OUT1, OUT2, ...] terug`,fbd_param_days:`Dagen`,fbd_param_cron:`Cron-patroon`,fbd_param_start:`Van`,fbd_param_end:`Tot`,fbd_param_startOffset:`Verschuiving van het begin`,fbd_param_endOffset:`Verschuiving van het einde`,fbd_offset_hint:`In minuten, negatief is eerder`,fbd_param_category:`Soort`,fbd_param_instance:`Instantie`,fbd_param_title:`Titel`,fbd_param_command:`Opdracht`,fbd_param_code:`Code`,fbd_param_outputs:`Aantal uitgangen`,fbd_option_all:`elke dag`,fbd_option_weekdays:`maandag tot vrijdag`,fbd_option_weekend:`zaterdag en zondag`,fbd_option_message:`Melding`,fbd_option_alert:`Alarm`,fbd_cron_dialog:`Tijd instellen`,fbd_cron_hint:`Minuut uur dag maand weekdag, zoals "0 8 * * 1-5": om 8:00 van maandag tot vrijdag. Met seconden vooraan is "*/5 * * * * *" elke 5 seconden`,fbd_code_hint:`De code krijgt %s en geeft de waarde van OUT1 terug, of [OUT1, OUT2, ...]; undefined laat een uitgang zoals hij is`,"The code has an error: %s":`De code bevat een fout: %s`,fbd_option_nightEnd:`Einde van de nacht`,fbd_option_nauticalDawn:`Nautische dageraad`,fbd_option_dawn:`dageraad`,fbd_option_sunrise:`zonsopkomst`,fbd_option_sunriseEnd:`Einde zonsopgang`,fbd_option_goldenHourEnd:`Einde van gouden uur`,fbd_option_solarNoon:`Zonne-middag`,fbd_option_goldenHour:`gouden uur`,fbd_option_sunsetStart:`Begin van de zonsondergang`,fbd_option_sunset:`zonsondergang`,fbd_option_dusk:`schemer`,fbd_option_nauticalDusk:`Nautische schemering`,fbd_option_night:`nacht`,fbd_option_nadir:`nadir`},pl:{fbd_search:`Szukaj`,fbd_category_iobroker:`ioBroker`,fbd_category_logic:`Logika`,fbd_category_timers:`Timery`,fbd_category_compare:`Porównanie`,fbd_category_arithmetic:`Arytmetyka`,fbd_category_structure:`Struktura`,fbd_comment:`Komentarz`,fbd_comment_desc:`Notatka na diagramie; nie jest wykonywana`,fbd_no_state:`nie wybrano stanu`,fbd_select_state:`Wybierz stan`,fbd_instance_name:`Nazwa instancji`,fbd_inputs:`Wejścia`,fbd_connected:`połączone`,fbd_inverted:`Odwróć %s`,fbd_invalid_time:`Czas, np. 500ms, 2s, 1m30s`,fbd_invalid_number:`To nie jest liczba`,fbd_param_oid:`Stan`,fbd_param_type:`Typ`,fbd_param_ack:`Zapisz jako potwierdzone (ack)`,fbd_param_minInterval:`Minimalny czas między zapisami`,fbd_param_value:`Wartość`,fbd_param_inputs:`Liczba wejść`,fbd_diagram:`Diagram`,fbd_cycle_mode:`Wykonywanie`,fbd_mode_auto:`Automatycznie`,fbd_mode_cyclic:`Cyklicznie`,fbd_mode_event:`Przy zmianie wejścia`,fbd_runs_cyclic:`Diagram działa cyklicznie`,fbd_runs_event:`Diagram działa przy zmianie wejścia`,fbd_cycle_time:`Czas cyklu (ms)`,fbd_empty_hint:`Przeciągnij bloki z lewej strony na obszar i połącz wyjście z wejściem`,fbd_no_diagram:`Ten skrypt nie zawiera diagramu bloków funkcyjnych`,"Unknown block type %s":`Nieznany typ bloku %s`,"Invalid block ID %s":`Nieprawidłowy identyfikator bloku %s`,"Duplicate block ID %s":`Zduplikowany identyfikator bloku %s`,'Parameter "%s" is not set':`Parametr "%s" nie jest ustawiony`,"The connection refers to a missing block or pin":`Połączenie odnosi się do brakującego bloku lub pinu`,"Types do not match: %s cannot be connected to %s":`Typy nie pasują: %s nie może być połączony z %s`,"Input %s is connected more than once":`Wejście %s jest połączone więcej niż raz`,"Loop without a block that stores a value: %s":`Pętla bez bloku przechowującego wartość: %s`,"Timers need the cyclic mode, in the event mode they only run when an input changes":`Timery wymagają trybu cyklicznego, w trybie zdarzeń działają tylko przy zmianie wejścia`,fbd_desc_AND:`I: prawda, gdy wszystkie wejścia są prawdziwe`,fbd_desc_OR:`LUB: prawda, gdy któreś wejście jest prawdziwe`,fbd_desc_XOR:`Alternatywa wykluczająca: prawda przy nieparzystej liczbie prawdziwych wejść`,fbd_desc_NOT:`NIE: odwraca wejście`,fbd_desc_RS:`Przerzutnik z dominującym resetem`,fbd_desc_SR:`Przerzutnik z dominującym ustawieniem`,fbd_desc_R_TRIG:`Zbocze narastające: prawda przez jeden cykl, gdy wejście staje się prawdziwe`,fbd_desc_F_TRIG:`Zbocze opadające: prawda przez jeden cykl, gdy wejście staje się fałszywe`,fbd_desc_TON:`Opóźnienie załączenia: Q staje się prawdą, gdy IN był prawdą przez PT`,fbd_desc_TOF:`Opóźnienie wyłączenia: Q pozostaje prawdą przez PT po tym, jak IN stał się fałszem`,fbd_desc_TP:`Impuls: zbocze narastające IN daje impuls o długości PT`,fbd_desc_GT:`Większe niż`,fbd_desc_GE:`Większe lub równe`,fbd_desc_LT:`Mniejsze niż`,fbd_desc_LE:`Mniejsze lub równe`,fbd_desc_EQ:`Równe`,fbd_desc_NE:`Różne`,fbd_desc_ADD:`Dodawanie`,fbd_desc_SUB:`Odejmowanie`,fbd_desc_MUL:`Mnożenie`,fbd_desc_DIV:`Dzielenie (przez 0 daje 0)`,fbd_desc_MIN:`Najmniejsze wejście`,fbd_desc_MAX:`Największe wejście`,fbd_desc_STATE_IN:`Odczytuje stan ioBroker`,fbd_desc_STATE_OUT:`Zapisuje stan ioBroker, gdy wartość się zmienia`,fbd_desc_CONST:`Stała wartość`,fbd_online:`Online`,fbd_online_tooltip:`Pokaż wartości działającego diagramu`,fbd_online_waiting:`Oczekiwanie na dane…`,fbd_online_no_data:`Brak danych od %s s - czy skrypt działa?`,fbd_online_stalled:`Diagram już nie działa (cykl %s)`,fbd_online_cycle:`Cykl %s`,fbd_online_event:`czeka na wejścia`,fbd_online_not_running:`Skrypt nie działa`,fbd_online_changed:`Diagram został zmieniony - wartości dotyczą zapisanej wersji`,fbd_runtime_error:`Błąd podczas wykonywania: %s`,fbd_online_no_values:`Cykl %s - zapisz diagram raz, aby zobaczyć wartości`,fbd_category_interface:`Interfejs`,fbd_category_user:`Własne bloki`,fbd_desc_FB_IN:`Wejście tego bloku`,fbd_desc_FB_OUT:`Wyjście tego bloku`,fbd_param_pin:`Nazwa pinu`,fbd_invalid_name:`Tylko litery, cyfry i _, bez cyfry na początku`,fbd_no_user_blocks:`Brak własnych bloków - diagram staje się blokiem przez „Ten diagram jest blokiem” w ustawieniach`,fbd_is_block:`Ten diagram jest blokiem`,fbd_block_hint:`Blok umieszcza się w innych diagramach dowolnie wiele razy. Jego bloki FB_IN i FB_OUT to jego piny; każda zapisana zmiana to nowa wersja.`,fbd_block_name:`Nazwa bloku`,fbd_block_description:`Opis`,fbd_block_type:`Typ %s, wersja %s`,fbd_block_duplicate:`Diagram „%s” definiuje ten sam typ`,fbd_block_newer:`Dostępna jest wersja %s`,fbd_block_update:`Aktualizuj`,fbd_block_update_hint:`Stosuje nową wersję do wszystkich instancji w tym diagramie`,fbd_block_open:`Otwórz blok`,fbd_block_outdated:`Nowa wersja „%s”: %s (w tym diagramie: %s)`,"Inputs and outputs of a block only work in the diagram of a block":`Wejścia i wyjścia bloku działają tylko w diagramie bloku`,"A block cannot read or write states - give it inputs and outputs instead":`Blok nie może odczytywać ani zapisywać stanów - użyj wejść i wyjść`,"Invalid pin name %s":`Nieprawidłowa nazwa pinu %s`,"The pin name %s is used twice":`Nazwa pinu %s jest użyta dwa razy`,"The block %s contains itself":`Blok %s zawiera sam siebie`,"The block %s has errors: %s":`Blok %s zawiera błędy: %s`,"Invalid block type %s":`Nieprawidłowy typ bloku %s`,fbd_category_control:`Regulacja`,fbd_desc_HYST:`Przełącznik dwupołożeniowy: Q staje się prawdą, gdy IN wzrośnie powyżej HIGH, i fałszem, gdy spadnie poniżej LOW`,fbd_desc_RAMP:`Rampa: OUT podąża za IN, najwyżej o UP na sekundę w górę i DOWN na sekundę w dół (0: bez ograniczenia)`,fbd_desc_PT1:`Filtr dolnoprzepustowy pierwszego rzędu (PT1): OUT podąża za IN ze stałą czasową T`,fbd_desc_PID:`Regulator PID: wartość zadana SP, wartość procesu PV, wyjście Y między YMIN a YMAX; TN lub TV równe 0 pomija ten człon`,fbd_online_paused:`Wstrzymano (cykl %s)`,fbd_online_paused_at:`Zatrzymano przed %s (cykl %s)`,fbd_debug_resume:`Kontynuuj (F8)`,fbd_debug_pause:`Wstrzymaj (F8)`,fbd_debug_cycle:`Jeden cykl`,fbd_debug_step:`Jeden blok (F10)`,fbd_debug_save_once:`Zapisz schemat raz, wtedy zadziałają punkty przerwania i pojedyncze kroki`,fbd_debug_forced_count:`Wymuszone wartości: %s`,fbd_debug_release_all:`Zwolnij wszystkie`,fbd_debug_breakpoint_count:`Punkty przerwania: %s`,fbd_debug_remove_all:`Usuń wszystkie`,fbd_debug_breakpoint_set:`Ustaw punkt przerwania (F9)`,fbd_debug_breakpoint_remove:`Usuń punkt przerwania (F9)`,fbd_debug_breakpoint:`Punkt przerwania`,fbd_debug_breakpoint_hint:`Schemat zatrzymuje się przed tym blokiem (F9)`,fbd_debug_forced:`wymuszone`,fbd_debug_force:`Wymuś`,fbd_debug_release:`Zwolnij`,fbd_debug_force_hint:`Wymuszona wartość obowiązuje do zwolnienia lub końca podglądu online - i wpływa też na stany zapisywane przez schemat.`,fbd_link:`Połączenie`,fbd_link_mark:`Pokaż jako znacznik połączenia`,fbd_link_mark_hint:`Zamiast linii przez cały schemat oba końce pokazują znacznik z nazwą; dwuklik przechodzi do drugiego końca.`,fbd_link_label:`Nazwa znacznika`,fbd_layout:`Rozmieść automatycznie`,fbd_find:`Szukaj w schemacie (Ctrl+F)`,fbd_find_placeholder:`Nazwa, typ, stan…`,fbd_find_none:`brak`,fbd_find_previous:`Poprzedni (Shift+Enter)`,fbd_find_next:`Następny (Enter)`,fbd_find_close:`Zamknij (Esc)`,"The diagram does not run":`Schemat nie działa`,"The diagram is not shown online":`Schemat nie jest pokazywany online`,"The diagram was saved before values could be forced - save it once":`Schemat zapisano, zanim można było wymuszać wartości - zapisz go raz`,"The diagram was saved before it could stop at blocks - save it once":`Schemat zapisano, zanim mógł zatrzymywać się na blokach - zapisz go raz`,fbd_instance_open:`Widok wnętrza`,fbd_instance_open_hint:`Pokazuje tę instancję od środka - online z jej własnymi wartościami (dwuklik)`,fbd_instance_title:`Instancja „%s” bloku „%s”, wersja %s`,fbd_instance_readonly:`Tylko do odczytu: tak blok jest zapisany w tym schemacie. Zmienia się go w jego własnym schemacie. Tu można wymuszać wartości, punkty przerwania tylko w samym schemacie.`,fbd_instance_save_once:`Zapisz schemat raz, wtedy pojawią się wartości wewnątrz instancji`,fbd_instance_back:`Wstecz (Esc)`,fbd_link_refused_type:`Nie połączono: %s nie pasuje do %s (%s). Tylko INT sam staje się REAL.`,fbd_link_refused_taken:`Nie połączono: %s jest już połączony - wejście przyjmuje tylko jedno połączenie`,fbd_category_memory:`Pamięć`,fbd_tab_blocks:`Bloki`,fbd_tab_variables:`Zmienne`,fbd_tab_favorites:`Ulubione`,fbd_favorite_add:`Dodaj do ulubionych`,fbd_favorite_remove:`Usuń z ulubionych`,fbd_no_variables:`Na schemacie nie ma jeszcze stanów - pojawiają się ze STATE_IN i STATE_OUT`,fbd_no_favorites:`Brak ulubionych - gwiazdka przy bloku umieszcza go tutaj`,fbd_expand_all:`Rozwiń wszystko`,fbd_collapse_all:`Zwiń wszystko`,fbd_menu:`Więcej`,fbd_menu_properties:`Właściwości`,fbd_menu_duplicate:`Duplikuj`,fbd_tab_properties:`Właściwości`,fbd_tab_docs:`Dokumentacja`,fbd_section_general:`Ogólne`,fbd_section_params:`Parametry`,fbd_section_preview:`Podgląd`,fbd_section_block:`Blok`,fbd_name:`Nazwa`,fbd_type:`Typ`,fbd_comment_field:`Komentarz`,fbd_comment_placeholder:`Komentarz…`,fbd_invert_short:`odwrócone`,fbd_is_block_short:`Jest blokiem`,fbd_link_from_to:`Z → do`,fbd_link_mark_short:`Jako znacznik`,fbd_outputs:`Wyjścia`,fbd_doc_keys:`Skróty`,fbd_key_undo:`Cofnij / ponów`,fbd_key_copy:`Kopiuj / wytnij / wklej`,fbd_key_delete:`Usuń zaznaczenie`,fbd_key_find:`Szukaj w schemacie`,fbd_key_pause:`Wstrzymaj / kontynuuj (online)`,fbd_key_breakpoint:`Punkt przerwania przy wybranym bloku (online)`,fbd_key_step:`O jeden blok dalej (online)`,fbd_key_back:`Wyjdź z instancji`,fbd_doc_double_click:`Dwuklik na instancji własnego bloku pokazuje ją od środka; na znaczniku połączenia przechodzi do drugiego końca.`,fbd_doc_stateful:`Pamięta swój stan z cyklu na cykl`,fbd_doc_time:`Zależy od czasu - schemat z nim działa cyklicznie`,fbd_instance:`Instancja`,fbd_grid:`Siatka`,fbd_links_curved:`Połączenia jako krzywe`,fbd_links_orthogonal:`Połączenia pod kątem prostym`,fbd_zoom_in:`Powiększ`,fbd_zoom_out:`Pomniejsz`,fbd_zoom_reset:`Do 100 %`,fbd_link_const_retyped:`%s ma teraz typ %s (wartość %s)`,fbd_link_refused_const:`Nie połączono: %s zasila już wejścia, które nie przyjmują %s (%s)`,fbd_state_type_taken:`%s czyta teraz stan jako %s, zgodnie z jego obiektem - w razie potrzeby zmień we właściwościach`,fbd_desc_LOG:`Zapisuje wiersz w dzienniku: przy zboczu narastającym TRIG lub gdy zmienia się IN. %s w tekście to wartość IN`,fbd_param_text:`Tekst`,fbd_param_level:`Poziom`,fbd_param_when:`Kiedy`,fbd_option_edge:`przy zboczu narastającym TRIG`,fbd_option_change:`gdy zmienia się IN`,fbd_online_changed_short:`zmieniono`,fbd_category_counters:`Liczniki`,fbd_category_convert:`Konwersja`,fbd_category_calendar:`Kalendarz`,fbd_category_messages:`Komunikaty`,fbd_category_expert:`Ekspert`,fbd_desc_BLINK:`Migacz: dopóki EN jest prawdą, Q jest prawdą przez TH i fałszem przez TL`,fbd_desc_CTU:`Licznik w górę: liczy zbocza narastające CU, R zeruje CV. Q: CV osiągnął PV`,fbd_desc_CTD:`Licznik w dół: odlicza przy zboczach narastających CD, LD ładuje PV. Q: CV osiągnął 0`,fbd_desc_CTUD:`Licznik góra/dół: CU liczy w górę, CD w dół, R zeruje, LD ładuje PV. QU: CV osiągnął PV, QD: CV osiągnął 0`,fbd_desc_ROUND:`Zaokrągla IN do DIGITS miejsc po przecinku`,fbd_desc_TO_BOOL:`Konwertuje na BOOL: 0, pusty tekst i "false" to fałsz`,fbd_desc_TO_INT:`Konwertuje na INT z zaokrągleniem; przecinek dziesiętny liczy się jak kropka, co nie jest liczbą daje 0`,fbd_desc_TO_REAL:`Konwertuje na REAL; przecinek dziesiętny liczy się jak kropka, co nie jest liczbą daje 0`,fbd_desc_TO_TIME:`Konwertuje na TIME: liczba to ms, tekst może być "2s", "1m30s" lub "08:30"`,fbd_desc_TO_STRING:`Konwertuje na tekst`,fbd_desc_CONCAT:`Łączy wejścia w jeden tekst - liczby najpierw zaokrąglij blokiem ROUND`,fbd_desc_CLOCK:`Czas lokalny: pora dnia, godzina, minuta, dzień tygodnia (1 poniedziałek ... 7 niedziela), dzień, miesiąc i rok`,fbd_desc_TIMEWINDOW:`Okno czasowe: prawda od START do END w wybrane dni; okno przez północ należy do dnia, w którym się zaczyna`,fbd_desc_SCHEDULE:`Harmonogram: Q jest prawdą przez jeden cykl, gdy nadejdzie czas wzorca cron`,fbd_desc_ASTRO:`Słońce: Q jest prawdą od jednego zdarzenia słońca do drugiego, np. od zachodu do wschodu; START i END to ich dzisiejsze godziny`,fbd_desc_NOTIFY:`Wysyła powiadomienie ioBroker: przy zboczu narastającym TRIG lub gdy zmienia się IN. Najwyżej 5 na minutę`,fbd_desc_SENDTO:`Wysyła wiadomość do adaptera, np. telegram.0 lub pushover.0 (text, message, title, subject): przy zboczu narastającym TRIG lub gdy zmienia się IN. Najwyżej 5 na minutę`,fbd_desc_JS:`Własny JavaScript: dostaje IN1 ... INn, dt, firstScan i state (zachowywany między cyklami), zwraca OUT1 lub [OUT1, OUT2, ...]`,fbd_param_days:`Dni`,fbd_param_cron:`Wzorzec cron`,fbd_param_start:`Od`,fbd_param_end:`Do`,fbd_param_startOffset:`Przesunięcie początku`,fbd_param_endOffset:`Przesunięcie końca`,fbd_offset_hint:`W minutach, ujemne oznacza wcześniej`,fbd_param_category:`Rodzaj`,fbd_param_instance:`Instancja`,fbd_param_title:`Tytuł`,fbd_param_command:`Polecenie`,fbd_param_code:`Kod`,fbd_param_outputs:`Liczba wyjść`,fbd_option_all:`codziennie`,fbd_option_weekdays:`od poniedziałku do piątku`,fbd_option_weekend:`sobota i niedziela`,fbd_option_message:`Komunikat`,fbd_option_alert:`Alarm`,fbd_cron_dialog:`Ustaw czas`,fbd_cron_hint:`Minuta godzina dzień miesiąc dzień_tygodnia, np. "0 8 * * 1-5": o 8:00 od poniedziałku do piątku. Z sekundami na początku "*/5 * * * * *" to co 5 sekund`,fbd_code_hint:`Kod dostaje %s i zwraca wartość OUT1 lub [OUT1, OUT2, ...]; undefined pozostawia wyjście bez zmian`,"The code has an error: %s":`Kod zawiera błąd: %s`,fbd_option_nightEnd:`Koniec nocy`,fbd_option_nauticalDawn:`Żeglarski świt`,fbd_option_dawn:`Świt`,fbd_option_sunrise:`Wschód słońca`,fbd_option_sunriseEnd:`Koniec wschodu słońca`,fbd_option_goldenHourEnd:`Koniec złotej godziny`,fbd_option_solarNoon:`Południe słoneczne`,fbd_option_goldenHour:`Złota godzina`,fbd_option_sunsetStart:`Początek zachodu słońca`,fbd_option_sunset:`Zachód słońca`,fbd_option_dusk:`Zmierzch`,fbd_option_nauticalDusk:`Żeglarski zmierzch`,fbd_option_night:`Noc`,fbd_option_nadir:`Północ słoneczna`},pt:{fbd_search:`Pesquisar`,fbd_category_iobroker:`ioBroker`,fbd_category_logic:`Lógica`,fbd_category_timers:`Temporizadores`,fbd_category_compare:`Comparação`,fbd_category_arithmetic:`Aritmética`,fbd_category_structure:`Estrutura`,fbd_comment:`Comentário`,fbd_comment_desc:`Uma nota no diagrama; não é executada`,fbd_no_state:`nenhum estado selecionado`,fbd_select_state:`Selecionar estado`,fbd_instance_name:`Nome da instância`,fbd_inputs:`Entradas`,fbd_connected:`ligado`,fbd_inverted:`Inverter %s`,fbd_invalid_time:`Um tempo como 500ms, 2s, 1m30s`,fbd_invalid_number:`Não é um número`,fbd_param_oid:`Estado`,fbd_param_type:`Tipo`,fbd_param_ack:`Escrever como confirmado (ack)`,fbd_param_minInterval:`Tempo mínimo entre escritas`,fbd_param_value:`Valor`,fbd_param_inputs:`Número de entradas`,fbd_diagram:`Diagrama`,fbd_cycle_mode:`Execução`,fbd_mode_auto:`Automático`,fbd_mode_cyclic:`Cíclico`,fbd_mode_event:`Quando uma entrada muda`,fbd_runs_cyclic:`O diagrama é executado ciclicamente`,fbd_runs_event:`O diagrama é executado quando uma entrada muda`,fbd_cycle_time:`Tempo de ciclo (ms)`,fbd_empty_hint:`Arraste blocos da esquerda para a área e ligue uma saída a uma entrada`,fbd_no_diagram:`Este script não contém um diagrama de blocos funcionais`,"Unknown block type %s":`Tipo de bloco desconhecido %s`,"Invalid block ID %s":`ID de bloco inválido %s`,"Duplicate block ID %s":`ID de bloco duplicado %s`,'Parameter "%s" is not set':`O parâmetro "%s" não está definido`,"The connection refers to a missing block or pin":`A ligação refere-se a um bloco ou pino inexistente`,"Types do not match: %s cannot be connected to %s":`Os tipos não correspondem: %s não pode ser ligado a %s`,"Input %s is connected more than once":`A entrada %s está ligada mais de uma vez`,"Loop without a block that stores a value: %s":`Laço sem um bloco que armazena um valor: %s`,"Timers need the cyclic mode, in the event mode they only run when an input changes":`Os temporizadores precisam do modo cíclico; no modo por eventos só funcionam quando uma entrada muda`,fbd_desc_AND:`E: verdadeiro se todas as entradas forem verdadeiras`,fbd_desc_OR:`OU: verdadeiro se alguma entrada for verdadeira`,fbd_desc_XOR:`OU exclusivo: verdadeiro para um número ímpar de entradas verdadeiras`,fbd_desc_NOT:`NÃO: inverte a entrada`,fbd_desc_RS:`Flip-flop com prioridade de reset`,fbd_desc_SR:`Flip-flop com prioridade de set`,fbd_desc_R_TRIG:`Flanco ascendente: verdadeiro por um ciclo quando a entrada se torna verdadeira`,fbd_desc_F_TRIG:`Flanco descendente: verdadeiro por um ciclo quando a entrada se torna falsa`,fbd_desc_TON:`Atraso na ligação: Q fica verdadeiro quando IN esteve verdadeiro durante PT`,fbd_desc_TOF:`Atraso no desligamento: Q permanece verdadeiro durante PT depois de IN ficar falso`,fbd_desc_TP:`Impulso: um flanco ascendente de IN gera um impulso de duração PT`,fbd_desc_GT:`Maior que`,fbd_desc_GE:`Maior ou igual`,fbd_desc_LT:`Menor que`,fbd_desc_LE:`Menor ou igual`,fbd_desc_EQ:`Igual`,fbd_desc_NE:`Diferente`,fbd_desc_ADD:`Adição`,fbd_desc_SUB:`Subtração`,fbd_desc_MUL:`Multiplicação`,fbd_desc_DIV:`Divisão (por 0 dá 0)`,fbd_desc_MIN:`Menor entrada`,fbd_desc_MAX:`Maior entrada`,fbd_desc_STATE_IN:`Lê um estado do ioBroker`,fbd_desc_STATE_OUT:`Escreve um estado do ioBroker quando o valor muda`,fbd_desc_CONST:`Um valor constante`,fbd_online:`Online`,fbd_online_tooltip:`Mostrar os valores do diagrama em execução`,fbd_online_waiting:`À espera de dados…`,fbd_online_no_data:`Sem dados há %s s - o script está a correr?`,fbd_online_stalled:`O diagrama deixou de ser executado (ciclo %s)`,fbd_online_cycle:`Ciclo %s`,fbd_online_event:`à espera de entradas`,fbd_online_not_running:`O script não está a correr`,fbd_online_changed:`O diagrama foi alterado - os valores pertencem à versão guardada`,fbd_runtime_error:`Erro durante a execução: %s`,fbd_online_no_values:`Ciclo %s - guarde o diagrama uma vez para ver os valores`,fbd_category_interface:`Interface`,fbd_category_user:`Blocos próprios`,fbd_desc_FB_IN:`Uma entrada deste bloco`,fbd_desc_FB_OUT:`Uma saída deste bloco`,fbd_param_pin:`Nome do pino`,fbd_invalid_name:`Apenas letras, dígitos e _, sem começar por um dígito`,fbd_no_user_blocks:`Ainda não há blocos próprios - um diagrama torna-se um com "Este diagrama é um bloco" nas definições`,fbd_is_block:`Este diagrama é um bloco`,fbd_block_hint:`Um bloco é colocado noutros diagramas, as vezes que forem precisas. Os seus blocos FB_IN e FB_OUT são os pinos; cada alteração guardada é uma nova versão.`,fbd_block_name:`Nome do bloco`,fbd_block_description:`Descrição`,fbd_block_type:`Tipo %s, versão %s`,fbd_block_duplicate:`O diagrama "%s" define o mesmo tipo`,fbd_block_newer:`A versão %s está disponível`,fbd_block_update:`Atualizar`,fbd_block_update_hint:`Aplica a nova versão a todas as instâncias deste diagrama`,fbd_block_open:`Abrir bloco`,fbd_block_outdated:`Nova versão de "%s": %s (neste diagrama: %s)`,"Inputs and outputs of a block only work in the diagram of a block":`As entradas e saídas de um bloco só funcionam no diagrama de um bloco`,"A block cannot read or write states - give it inputs and outputs instead":`Um bloco não pode ler nem escrever estados - use entradas e saídas`,"Invalid pin name %s":`Nome de pino inválido %s`,"The pin name %s is used twice":`O nome de pino %s é usado duas vezes`,"The block %s contains itself":`O bloco %s contém-se a si próprio`,"The block %s has errors: %s":`O bloco %s tem erros: %s`,"Invalid block type %s":`Tipo de bloco inválido %s`,fbd_category_control:`Controle`,fbd_desc_HYST:`Interruptor de dois pontos: Q fica verdadeiro quando IN sobe acima de HIGH e falso quando cai abaixo de LOW`,fbd_desc_RAMP:`Rampa: OUT segue IN, no máximo UP por segundo para cima e DOWN por segundo para baixo (0: sem limite)`,fbd_desc_PT1:`Passa-baixa de primeira ordem (PT1): OUT segue IN com a constante de tempo T`,fbd_desc_PID:`Controlador PID: referência SP, valor do processo PV, saída Y entre YMIN e YMAX; TN ou TV 0 omite essa parte`,fbd_online_paused:`Pausado (ciclo %s)`,fbd_online_paused_at:`Parado antes de %s (ciclo %s)`,fbd_debug_resume:`Continuar (F8)`,fbd_debug_pause:`Pausar (F8)`,fbd_debug_cycle:`Um ciclo`,fbd_debug_step:`Um bloco (F10)`,fbd_debug_save_once:`Salve o diagrama uma vez, então pontos de parada e passos únicos funcionam`,fbd_debug_forced_count:`Valores forçados: %s`,fbd_debug_release_all:`Liberar todos`,fbd_debug_breakpoint_count:`Pontos de parada: %s`,fbd_debug_remove_all:`Remover todos`,fbd_debug_breakpoint_set:`Definir ponto de parada (F9)`,fbd_debug_breakpoint_remove:`Remover ponto de parada (F9)`,fbd_debug_breakpoint:`Ponto de parada`,fbd_debug_breakpoint_hint:`O diagrama para antes deste bloco (F9)`,fbd_debug_forced:`forçado`,fbd_debug_force:`Forçar`,fbd_debug_release:`Liberar`,fbd_debug_force_hint:`Um valor forçado vale até ser liberado ou até a visão online terminar - e também atinge os estados que o diagrama escreve.`,fbd_link:`Ligação`,fbd_link_mark:`Mostrar como marca de ligação`,fbd_link_mark_hint:`Em vez de uma linha pelo diagrama, as duas pontas mostram uma marca com um nome; um clique duplo salta para a outra ponta.`,fbd_link_label:`Nome da marca`,fbd_layout:`Organizar automaticamente`,fbd_find:`Procurar no diagrama (Ctrl+F)`,fbd_find_placeholder:`Nome, tipo, estado…`,fbd_find_none:`nada`,fbd_find_previous:`Anterior (Shift+Enter)`,fbd_find_next:`Próximo (Enter)`,fbd_find_close:`Fechar (Esc)`,"The diagram does not run":`O diagrama não está em execução`,"The diagram is not shown online":`O diagrama não está sendo mostrado online`,"The diagram was saved before values could be forced - save it once":`O diagrama foi salvo antes de ser possível forçar valores - salve-o uma vez`,"The diagram was saved before it could stop at blocks - save it once":`O diagrama foi salvo antes de poder parar em blocos - salve-o uma vez`,fbd_instance_open:`Vista interna`,fbd_instance_open_hint:`Mostra esta instância por dentro - online com os seus próprios valores (clique duplo)`,fbd_instance_title:`Instância "%s" de "%s", versão %s`,fbd_instance_readonly:`Só leitura: é o bloco como este diagrama o guarda. É alterado no seu próprio diagrama. Aqui podem forçar-se valores; pontos de parada só no próprio diagrama.`,fbd_instance_save_once:`Salve o diagrama uma vez, então aparecem os valores dentro das instâncias`,fbd_instance_back:`Voltar (Esc)`,fbd_link_refused_type:`Não ligado: %s não combina com %s (%s). Só INT passa a REAL sozinho.`,fbd_link_refused_taken:`Não ligado: %s já está ligado - uma entrada aceita só uma ligação`,fbd_category_memory:`Memória`,fbd_tab_blocks:`Blocos`,fbd_tab_variables:`Variáveis`,fbd_tab_favorites:`Favoritos`,fbd_favorite_add:`Adicionar aos favoritos`,fbd_favorite_remove:`Remover dos favoritos`,fbd_no_variables:`Ainda não há estados no diagrama - eles vêm com STATE_IN e STATE_OUT`,fbd_no_favorites:`Ainda não há favoritos - a estrela num bloco coloca-o aqui`,fbd_expand_all:`Abrir todos`,fbd_collapse_all:`Fechar todos`,fbd_menu:`Mais`,fbd_menu_properties:`Propriedades`,fbd_menu_duplicate:`Duplicar`,fbd_tab_properties:`Propriedades`,fbd_tab_docs:`Documentação`,fbd_section_general:`Geral`,fbd_section_params:`Parâmetros`,fbd_section_preview:`Pré-visualização`,fbd_section_block:`Bloco`,fbd_name:`Nome`,fbd_type:`Tipo`,fbd_comment_field:`Comentário`,fbd_comment_placeholder:`Comentário…`,fbd_invert_short:`invertido`,fbd_is_block_short:`É um bloco`,fbd_link_from_to:`De → para`,fbd_link_mark_short:`Como marca`,fbd_outputs:`Saídas`,fbd_doc_keys:`Teclas`,fbd_key_undo:`Desfazer / refazer`,fbd_key_copy:`Copiar / recortar / colar`,fbd_key_delete:`Excluir o selecionado`,fbd_key_find:`Procurar no diagrama`,fbd_key_pause:`Pausar / continuar (online)`,fbd_key_breakpoint:`Ponto de parada no bloco selecionado (online)`,fbd_key_step:`Um bloco adiante (online)`,fbd_key_back:`Sair de uma instância`,fbd_doc_double_click:`Um clique duplo numa instância de um bloco próprio mostra-a por dentro; numa marca de ligação salta para a outra ponta.`,fbd_doc_stateful:`Lembra o seu estado de um ciclo para o outro`,fbd_doc_time:`Depende do tempo - um diagrama com ele corre ciclicamente`,fbd_instance:`Instância`,fbd_grid:`Grelha`,fbd_links_curved:`Ligações como curvas`,fbd_links_orthogonal:`Ligações em ângulo reto`,fbd_zoom_in:`Aproximar`,fbd_zoom_out:`Afastar`,fbd_zoom_reset:`Para 100 %`,fbd_link_const_retyped:`%s agora é do tipo %s (valor %s)`,fbd_link_refused_const:`Não ligado: %s já alimenta entradas que não aceitam %s (%s)`,fbd_state_type_taken:`%s agora lê o estado como %s, como diz o objeto - altere nas propriedades se necessário`,fbd_desc_LOG:`Escreve uma linha no registo: numa borda de subida de TRIG ou quando IN muda. %s no texto é o valor de IN`,fbd_param_text:`Texto`,fbd_param_level:`Nível`,fbd_param_when:`Quando`,fbd_option_edge:`na borda de subida de TRIG`,fbd_option_change:`quando IN muda`,fbd_online_changed_short:`alterado`,fbd_category_counters:`Contadores`,fbd_category_convert:`Conversão`,fbd_category_calendar:`Calendário`,fbd_category_messages:`Mensagens`,fbd_category_expert:`Especialista`,fbd_desc_BLINK:`Pisca: enquanto EN for verdadeiro, Q fica verdadeiro durante TH e falso durante TL`,fbd_desc_CTU:`Contador crescente: conta as bordas de subida de CU, R põe CV a 0. Q: CV atingiu PV`,fbd_desc_CTD:`Contador decrescente: desconta nas bordas de subida de CD, LD carrega PV. Q: CV atingiu 0`,fbd_desc_CTUD:`Contador crescente/decrescente: CU soma, CD subtrai, R põe 0, LD carrega PV. QU: CV atingiu PV, QD: CV atingiu 0`,fbd_desc_ROUND:`Arredonda IN a DIGITS casas decimais`,fbd_desc_TO_BOOL:`Converte para BOOL: 0, texto vazio e "false" são falsos`,fbd_desc_TO_INT:`Converte para INT, arredondado; uma vírgula decimal conta como ponto, o que não é número dá 0`,fbd_desc_TO_REAL:`Converte para REAL; uma vírgula decimal conta como ponto, o que não é número dá 0`,fbd_desc_TO_TIME:`Converte para TIME: um número são ms, um texto pode ser "2s", "1m30s" ou "08:30"`,fbd_desc_TO_STRING:`Converte para texto`,fbd_desc_CONCAT:`Junta as entradas num texto - arredonde os números antes com ROUND`,fbd_desc_CLOCK:`A hora local: hora do dia, hora, minuto, dia da semana (1 segunda ... 7 domingo), dia, mês e ano`,fbd_desc_TIMEWINDOW:`Janela horária: verdadeiro de START a END nos dias escolhidos; uma janela que passa a meia-noite pertence ao dia em que começa`,fbd_desc_SCHEDULE:`Agendamento: Q fica verdadeiro durante um ciclo quando chega a hora do padrão cron`,fbd_desc_ASTRO:`Sol: Q é verdadeiro de um evento do sol a outro, como do pôr ao nascer do sol; START e END são as suas horas de hoje`,fbd_desc_NOTIFY:`Envia uma notificação do ioBroker: numa borda de subida de TRIG ou quando IN muda. No máximo 5 por minuto`,fbd_desc_SENDTO:`Envia uma mensagem a um adaptador como telegram.0 ou pushover.0 (text, message, title, subject): numa borda de subida de TRIG ou quando IN muda. No máximo 5 por minuto`,fbd_desc_JS:`JavaScript próprio: recebe IN1 ... INn, dt, firstScan e state (mantido entre ciclos), devolve OUT1 ou [OUT1, OUT2, ...]`,fbd_param_days:`Dias`,fbd_param_cron:`Padrão cron`,fbd_param_start:`De`,fbd_param_end:`Até`,fbd_param_startOffset:`Desvio do início`,fbd_param_endOffset:`Desvio do fim`,fbd_offset_hint:`Em minutos, negativo é mais cedo`,fbd_param_category:`Tipo`,fbd_param_instance:`Instância`,fbd_param_title:`Título`,fbd_param_command:`Comando`,fbd_param_code:`Código`,fbd_param_outputs:`Número de saídas`,fbd_option_all:`todos os dias`,fbd_option_weekdays:`segunda a sexta`,fbd_option_weekend:`sábado e domingo`,fbd_option_message:`Mensagem`,fbd_option_alert:`Alerta`,fbd_cron_dialog:`Definir a hora`,fbd_cron_hint:`Minuto hora dia mês dia_da_semana, como "0 8 * * 1-5": às 8:00 de segunda a sexta. Com segundos à frente, "*/5 * * * * *" é a cada 5 segundos`,fbd_code_hint:`O código recebe %s e devolve o valor de OUT1, ou [OUT1, OUT2, ...]; undefined deixa uma saída como está`,"The code has an error: %s":`O código tem um erro: %s`,fbd_option_nightEnd:`Fim de noite`,fbd_option_nauticalDawn:`Madrugada náutica`,fbd_option_dawn:`alvorecer`,fbd_option_sunrise:`nascer do sol`,fbd_option_sunriseEnd:`Fim do nascer do sol`,fbd_option_goldenHourEnd:`Fim da hora de ouro`,fbd_option_solarNoon:`Meio-dia solar`,fbd_option_goldenHour:`Hora dourada`,fbd_option_sunsetStart:`Começo do pôr do sol`,fbd_option_sunset:`pôr do sol`,fbd_option_dusk:`Crepúsculo`,fbd_option_nauticalDusk:`Crepúsculo náutico`,fbd_option_night:`Noite`,fbd_option_nadir:`nadir`},ru:{fbd_search:`Поиск`,fbd_category_iobroker:`ioBroker`,fbd_category_logic:`Логика`,fbd_category_timers:`Таймеры`,fbd_category_compare:`Сравнение`,fbd_category_arithmetic:`Арифметика`,fbd_category_structure:`Структура`,fbd_comment:`Комментарий`,fbd_comment_desc:`Заметка на схеме; не выполняется`,fbd_no_state:`состояние не выбрано`,fbd_select_state:`Выбрать состояние`,fbd_instance_name:`Имя экземпляра`,fbd_inputs:`Входы`,fbd_connected:`подключён`,fbd_inverted:`Инвертировать %s`,fbd_invalid_time:`Время, например 500ms, 2s, 1m30s`,fbd_invalid_number:`Не число`,fbd_param_oid:`Состояние`,fbd_param_type:`Тип`,fbd_param_ack:`Записывать как подтверждённое (ack)`,fbd_param_minInterval:`Минимальный интервал между записями`,fbd_param_value:`Значение`,fbd_param_inputs:`Количество входов`,fbd_diagram:`Схема`,fbd_cycle_mode:`Выполнение`,fbd_mode_auto:`Автоматически`,fbd_mode_cyclic:`Циклически`,fbd_mode_event:`При изменении входа`,fbd_runs_cyclic:`Схема выполняется циклически`,fbd_runs_event:`Схема выполняется при изменении входа`,fbd_cycle_time:`Время цикла (мс)`,fbd_empty_hint:`Перетащите блоки слева на поле и соедините выход со входом`,fbd_no_diagram:`Этот скрипт не содержит функциональной блок-схемы`,"Unknown block type %s":`Неизвестный тип блока %s`,"Invalid block ID %s":`Недопустимый ID блока %s`,"Duplicate block ID %s":`Повторяющийся ID блока %s`,'Parameter "%s" is not set':`Параметр "%s" не задан`,"The connection refers to a missing block or pin":`Соединение ссылается на отсутствующий блок или вывод`,"Types do not match: %s cannot be connected to %s":`Типы не совпадают: %s нельзя соединить с %s`,"Input %s is connected more than once":`Вход %s подключён более одного раза`,"Loop without a block that stores a value: %s":`Петля без запоминающего блока: %s`,"Timers need the cyclic mode, in the event mode they only run when an input changes":`Таймерам нужен циклический режим, в событийном они работают только при изменении входа`,fbd_desc_AND:`И: истина, если все входы истинны`,fbd_desc_OR:`ИЛИ: истина, если хотя бы один вход истинен`,fbd_desc_XOR:`Исключающее ИЛИ: истина при нечётном числе истинных входов`,fbd_desc_NOT:`НЕ: инвертирует вход`,fbd_desc_RS:`Триггер с приоритетом сброса`,fbd_desc_SR:`Триггер с приоритетом установки`,fbd_desc_R_TRIG:`Передний фронт: истина один цикл, когда вход становится истинным`,fbd_desc_F_TRIG:`Задний фронт: истина один цикл, когда вход становится ложным`,fbd_desc_TON:`Задержка включения: Q становится истиной, если IN был истиной в течение PT`,fbd_desc_TOF:`Задержка выключения: Q остаётся истиной PT после того, как IN стал ложным`,fbd_desc_TP:`Импульс: передний фронт IN даёт импульс длительностью PT`,fbd_desc_GT:`Больше`,fbd_desc_GE:`Больше или равно`,fbd_desc_LT:`Меньше`,fbd_desc_LE:`Меньше или равно`,fbd_desc_EQ:`Равно`,fbd_desc_NE:`Не равно`,fbd_desc_ADD:`Сложение`,fbd_desc_SUB:`Вычитание`,fbd_desc_MUL:`Умножение`,fbd_desc_DIV:`Деление (на 0 даёт 0)`,fbd_desc_MIN:`Наименьший вход`,fbd_desc_MAX:`Наибольший вход`,fbd_desc_STATE_IN:`Читает состояние ioBroker`,fbd_desc_STATE_OUT:`Записывает состояние ioBroker при изменении значения`,fbd_desc_CONST:`Постоянное значение`,fbd_online:`Онлайн`,fbd_online_tooltip:`Показать значения работающей схемы`,fbd_online_waiting:`Ожидание данных…`,fbd_online_no_data:`Нет данных %s с - скрипт запущен?`,fbd_online_stalled:`Схема больше не выполняется (цикл %s)`,fbd_online_cycle:`Цикл %s`,fbd_online_event:`ждёт входов`,fbd_online_not_running:`Скрипт не запущен`,fbd_online_changed:`Схема изменена - значения относятся к сохранённой версии`,fbd_runtime_error:`Ошибка при выполнении: %s`,fbd_online_no_values:`Цикл %s - сохраните схему один раз, чтобы увидеть значения`,fbd_category_interface:`Интерфейс`,fbd_category_user:`Свои блоки`,fbd_desc_FB_IN:`Вход этого блока`,fbd_desc_FB_OUT:`Выход этого блока`,fbd_param_pin:`Имя вывода`,fbd_invalid_name:`Только буквы, цифры и _, не начиная с цифры`,fbd_no_user_blocks:`Своих блоков пока нет - схема становится блоком через «Эта схема является блоком» в её настройках`,fbd_is_block:`Эта схема является блоком`,fbd_block_hint:`Блок используется в других схемах сколько угодно раз. Его блоки FB_IN и FB_OUT - это его выводы; каждое сохранённое изменение - новая версия.`,fbd_block_name:`Имя блока`,fbd_block_description:`Описание`,fbd_block_type:`Тип %s, версия %s`,fbd_block_duplicate:`Схема «%s» определяет тот же тип`,fbd_block_newer:`Доступна версия %s`,fbd_block_update:`Обновить`,fbd_block_update_hint:`Применяет новую версию ко всем экземплярам в этой схеме`,fbd_block_open:`Открыть блок`,fbd_block_outdated:`Новая версия «%s»: %s (в этой схеме: %s)`,"Inputs and outputs of a block only work in the diagram of a block":`Входы и выходы блока возможны только в схеме блока`,"A block cannot read or write states - give it inputs and outputs instead":`Блок не может читать или записывать состояния - используйте входы и выходы`,"Invalid pin name %s":`Недопустимое имя вывода %s`,"The pin name %s is used twice":`Имя вывода %s используется дважды`,"The block %s contains itself":`Блок %s содержит сам себя`,"The block %s has errors: %s":`В блоке %s есть ошибки: %s`,"Invalid block type %s":`Недопустимый тип блока %s`,fbd_category_control:`Регулирование`,fbd_desc_HYST:`Двухпозиционный переключатель: Q становится истинным, когда IN поднимается выше HIGH, и ложным, когда опускается ниже LOW`,fbd_desc_RAMP:`Рампа: OUT следует за IN, не более чем на UP в секунду вверх и DOWN в секунду вниз (0: без ограничения)`,fbd_desc_PT1:`Фильтр нижних частот первого порядка (PT1): OUT следует за IN с постоянной времени T`,fbd_desc_PID:`ПИД-регулятор: уставка SP, текущее значение PV, выход Y между YMIN и YMAX; TN или TV 0 отключает эту составляющую`,fbd_online_paused:`Приостановлено (цикл %s)`,fbd_online_paused_at:`Остановлено перед %s (цикл %s)`,fbd_debug_resume:`Продолжить (F8)`,fbd_debug_pause:`Приостановить (F8)`,fbd_debug_cycle:`Один цикл`,fbd_debug_step:`Один блок (F10)`,fbd_debug_save_once:`Сохраните схему один раз, тогда заработают точки останова и пошаговое выполнение`,fbd_debug_forced_count:`Принудительных значений: %s`,fbd_debug_release_all:`Отпустить все`,fbd_debug_breakpoint_count:`Точек останова: %s`,fbd_debug_remove_all:`Удалить все`,fbd_debug_breakpoint_set:`Поставить точку останова (F9)`,fbd_debug_breakpoint_remove:`Убрать точку останова (F9)`,fbd_debug_breakpoint:`Точка останова`,fbd_debug_breakpoint_hint:`Схема останавливается перед этим блоком (F9)`,fbd_debug_forced:`задано принудительно`,fbd_debug_force:`Задать`,fbd_debug_release:`Отпустить`,fbd_debug_force_hint:`Принудительное значение действует, пока его не отпустят или пока не закончится онлайн-просмотр, и влияет также на записываемые схемой состояния.`,fbd_link:`Связь`,fbd_link_mark:`Показать как метку соединения`,fbd_link_mark_hint:`Вместо линии через всю схему на обоих концах показывается метка с именем; двойной щелчок переходит к другому концу.`,fbd_link_label:`Имя метки`,fbd_layout:`Упорядочить автоматически`,fbd_find:`Найти в схеме (Ctrl+F)`,fbd_find_placeholder:`Имя, тип, состояние…`,fbd_find_none:`нет`,fbd_find_previous:`Предыдущий (Shift+Enter)`,fbd_find_next:`Следующий (Enter)`,fbd_find_close:`Закрыть (Esc)`,"The diagram does not run":`Схема не выполняется`,"The diagram is not shown online":`Схема не показана онлайн`,"The diagram was saved before values could be forced - save it once":`Схема сохранена до появления принудительных значений - сохраните её один раз`,"The diagram was saved before it could stop at blocks - save it once":`Схема сохранена до появления остановок на блоках - сохраните её один раз`,fbd_instance_open:`Внутренний вид`,fbd_instance_open_hint:`Показывает этот экземпляр изнутри - онлайн с его собственными значениями (двойной щелчок)`,fbd_instance_title:`Экземпляр «%s» блока «%s», версия %s`,fbd_instance_readonly:`Только чтение: так блок хранится в этой схеме. Изменяется он в собственной схеме. Здесь можно задавать значения принудительно, точки останова - только в самой схеме.`,fbd_instance_save_once:`Сохраните схему один раз, тогда появятся значения внутри экземпляров`,fbd_instance_back:`Назад (Esc)`,fbd_link_refused_type:`Не соединено: %s не подходит к %s (%s). Автоматически только INT становится REAL.`,fbd_link_refused_taken:`Не соединено: %s уже соединён - вход принимает только одну связь`,fbd_category_memory:`Память`,fbd_tab_blocks:`Блоки`,fbd_tab_variables:`Переменные`,fbd_tab_favorites:`Избранное`,fbd_favorite_add:`В избранное`,fbd_favorite_remove:`Убрать из избранного`,fbd_no_variables:`В схеме пока нет состояний - они появляются с STATE_IN и STATE_OUT`,fbd_no_favorites:`Пока нет избранного - звёздочка у блока добавляет его сюда`,fbd_expand_all:`Раскрыть все`,fbd_collapse_all:`Свернуть все`,fbd_menu:`Ещё`,fbd_menu_properties:`Свойства`,fbd_menu_duplicate:`Дублировать`,fbd_tab_properties:`Свойства`,fbd_tab_docs:`Документация`,fbd_section_general:`Общее`,fbd_section_params:`Параметры`,fbd_section_preview:`Предпросмотр`,fbd_section_block:`Блок`,fbd_name:`Имя`,fbd_type:`Тип`,fbd_comment_field:`Комментарий`,fbd_comment_placeholder:`Комментарий…`,fbd_invert_short:`инверсия`,fbd_is_block_short:`Это блок`,fbd_link_from_to:`Откуда → куда`,fbd_link_mark_short:`Как метка`,fbd_outputs:`Выходы`,fbd_doc_keys:`Клавиши`,fbd_key_undo:`Отменить / повторить`,fbd_key_copy:`Копировать / вырезать / вставить`,fbd_key_delete:`Удалить выбранное`,fbd_key_find:`Найти в схеме`,fbd_key_pause:`Пауза / продолжить (онлайн)`,fbd_key_breakpoint:`Точка останова у выбранного блока (онлайн)`,fbd_key_step:`На один блок дальше (онлайн)`,fbd_key_back:`Назад из экземпляра`,fbd_doc_double_click:`Двойной щелчок по экземпляру собственного блока показывает его изнутри; по метке соединения - переходит к другому концу.`,fbd_doc_stateful:`Помнит своё состояние от цикла к циклу`,fbd_doc_time:`Зависит от времени - схема с ним выполняется циклически`,fbd_instance:`Экземпляр`,fbd_grid:`Сетка`,fbd_links_curved:`Связи кривыми`,fbd_links_orthogonal:`Связи под прямым углом`,fbd_zoom_in:`Приблизить`,fbd_zoom_out:`Отдалить`,fbd_zoom_reset:`100 %`,fbd_link_const_retyped:`%s теперь типа %s (значение %s)`,fbd_link_refused_const:`Не соединено: %s уже подаёт значение на входы, которые не принимают %s (%s)`,fbd_state_type_taken:`%s теперь читает состояние как %s, как указано в объекте - при необходимости измените в свойствах`,fbd_desc_LOG:`Пишет строку в журнал: по переднему фронту TRIG или при изменении IN. %s в тексте - значение IN`,fbd_param_text:`Текст`,fbd_param_level:`Уровень`,fbd_param_when:`Когда`,fbd_option_edge:`по переднему фронту TRIG`,fbd_option_change:`при изменении IN`,fbd_online_changed_short:`изменено`,fbd_category_counters:`Счётчики`,fbd_category_convert:`Преобразование`,fbd_category_calendar:`Календарь`,fbd_category_messages:`Сообщения`,fbd_category_expert:`Эксперт`,fbd_desc_BLINK:`Мигалка: пока EN истинно, Q истинно в течение TH и ложно в течение TL`,fbd_desc_CTU:`Счётчик вверх: считает передние фронты CU, R сбрасывает CV в 0. Q: CV достиг PV`,fbd_desc_CTD:`Счётчик вниз: уменьшает по передним фронтам CD, LD загружает PV. Q: CV достиг 0`,fbd_desc_CTUD:`Реверсивный счётчик: CU вверх, CD вниз, R сбрасывает в 0, LD загружает PV. QU: CV достиг PV, QD: CV достиг 0`,fbd_desc_ROUND:`Округляет IN до DIGITS знаков после запятой`,fbd_desc_TO_BOOL:`Преобразует в BOOL: 0, пустой текст и "false" - ложь`,fbd_desc_TO_INT:`Преобразует в INT с округлением; запятая считается точкой, не число даёт 0`,fbd_desc_TO_REAL:`Преобразует в REAL; запятая считается точкой, не число даёт 0`,fbd_desc_TO_TIME:`Преобразует в TIME: число - это мс, текст может быть "2s", "1m30s" или "08:30"`,fbd_desc_TO_STRING:`Преобразует в текст`,fbd_desc_CONCAT:`Соединяет входы в один текст - числа лучше сначала округлить через ROUND`,fbd_desc_CLOCK:`Местное время: время суток, час, минута, день недели (1 понедельник ... 7 воскресенье), день, месяц и год`,fbd_desc_TIMEWINDOW:`Временное окно: истинно с START до END в выбранные дни; окно через полночь относится ко дню начала`,fbd_desc_SCHEDULE:`Расписание: Q истинно один цикл, когда наступает время cron-шаблона`,fbd_desc_ASTRO:`Солнце: Q истинно от одного события солнца до другого, например от заката до восхода; START и END - их время сегодня`,fbd_desc_NOTIFY:`Отправляет уведомление ioBroker: по переднему фронту TRIG или при изменении IN. Не более 5 в минуту`,fbd_desc_SENDTO:`Отправляет сообщение адаптеру, например telegram.0 или pushover.0 (text, message, title, subject): по переднему фронту TRIG или при изменении IN. Не более 5 в минуту`,fbd_desc_JS:`Свой JavaScript: получает IN1 ... INn, dt, firstScan и state (сохраняется между циклами), возвращает OUT1 или [OUT1, OUT2, ...]`,fbd_param_days:`Дни`,fbd_param_cron:`Cron-шаблон`,fbd_param_start:`С`,fbd_param_end:`До`,fbd_param_startOffset:`Смещение начала`,fbd_param_endOffset:`Смещение конца`,fbd_offset_hint:`В минутах, отрицательное - раньше`,fbd_param_category:`Вид`,fbd_param_instance:`Экземпляр`,fbd_param_title:`Заголовок`,fbd_param_command:`Команда`,fbd_param_code:`Код`,fbd_param_outputs:`Количество выходов`,fbd_option_all:`каждый день`,fbd_option_weekdays:`с понедельника по пятницу`,fbd_option_weekend:`суббота и воскресенье`,fbd_option_message:`Сообщение`,fbd_option_alert:`Тревога`,fbd_cron_dialog:`Задать время`,fbd_cron_hint:`Минута час день месяц день_недели, например "0 8 * * 1-5": в 8:00 с понедельника по пятницу. С секундами впереди "*/5 * * * * *" - каждые 5 секунд`,fbd_code_hint:`Код получает %s и возвращает значение OUT1 или [OUT1, OUT2, ...]; undefined оставляет выход без изменений`,"The code has an error: %s":`В коде ошибка: %s`,fbd_option_nightEnd:`Конец ночи`,fbd_option_nauticalDawn:`Морской рассвет`,fbd_option_dawn:`Рассвет`,fbd_option_sunrise:`Восход солнца`,fbd_option_sunriseEnd:`Конец восхода`,fbd_option_goldenHourEnd:`Конец золотого часа`,fbd_option_solarNoon:`Солнечный полдень`,fbd_option_goldenHour:`Золотой час`,fbd_option_sunsetStart:`Начало заката`,fbd_option_sunset:`Закат солнца`,fbd_option_dusk:`Сумерки`,fbd_option_nauticalDusk:`Морские сумерки`,fbd_option_night:`Ночь`,fbd_option_nadir:`Надир`},uk:{fbd_search:`Пошук`,fbd_category_iobroker:`ioBroker`,fbd_category_logic:`Логіка`,fbd_category_timers:`Таймери`,fbd_category_compare:`Порівняння`,fbd_category_arithmetic:`Арифметика`,fbd_category_structure:`Структура`,fbd_comment:`Коментар`,fbd_comment_desc:`Примітка на схемі; не виконується`,fbd_no_state:`стан не вибрано`,fbd_select_state:`Вибрати стан`,fbd_instance_name:`Ім'я екземпляра`,fbd_inputs:`Входи`,fbd_connected:`підключено`,fbd_inverted:`Інвертувати %s`,fbd_invalid_time:`Час, наприклад 500ms, 2s, 1m30s`,fbd_invalid_number:`Не число`,fbd_param_oid:`Стан`,fbd_param_type:`Тип`,fbd_param_ack:`Записувати як підтверджене (ack)`,fbd_param_minInterval:`Мінімальний інтервал між записами`,fbd_param_value:`Значення`,fbd_param_inputs:`Кількість входів`,fbd_diagram:`Схема`,fbd_cycle_mode:`Виконання`,fbd_mode_auto:`Автоматично`,fbd_mode_cyclic:`Циклічно`,fbd_mode_event:`При зміні входу`,fbd_runs_cyclic:`Схема виконується циклічно`,fbd_runs_event:`Схема виконується при зміні входу`,fbd_cycle_time:`Час циклу (мс)`,fbd_empty_hint:`Перетягніть блоки зліва на поле та з'єднайте вихід зі входом`,fbd_no_diagram:`Цей скрипт не містить функціональної блок-схеми`,"Unknown block type %s":`Невідомий тип блоку %s`,"Invalid block ID %s":`Недійсний ID блоку %s`,"Duplicate block ID %s":`Повторюваний ID блоку %s`,'Parameter "%s" is not set':`Параметр "%s" не задано`,"The connection refers to a missing block or pin":`З'єднання посилається на відсутній блок або вивід`,"Types do not match: %s cannot be connected to %s":`Типи не збігаються: %s не можна з'єднати з %s`,"Input %s is connected more than once":`Вхід %s підключено більше одного разу`,"Loop without a block that stores a value: %s":`Петля без блоку, що зберігає значення: %s`,"Timers need the cyclic mode, in the event mode they only run when an input changes":`Таймерам потрібен циклічний режим, у подієвому вони працюють лише при зміні входу`,fbd_desc_AND:`І: істина, якщо всі входи істинні`,fbd_desc_OR:`АБО: істина, якщо хоча б один вхід істинний`,fbd_desc_XOR:`Виключне АБО: істина при непарній кількості істинних входів`,fbd_desc_NOT:`НЕ: інвертує вхід`,fbd_desc_RS:`Тригер з пріоритетом скидання`,fbd_desc_SR:`Тригер з пріоритетом встановлення`,fbd_desc_R_TRIG:`Передній фронт: істина один цикл, коли вхід стає істинним`,fbd_desc_F_TRIG:`Задній фронт: істина один цикл, коли вхід стає хибним`,fbd_desc_TON:`Затримка ввімкнення: Q стає істиною, якщо IN був істиною протягом PT`,fbd_desc_TOF:`Затримка вимкнення: Q залишається істиною PT після того, як IN став хибним`,fbd_desc_TP:`Імпульс: передній фронт IN дає імпульс тривалістю PT`,fbd_desc_GT:`Більше ніж`,fbd_desc_GE:`Більше або дорівнює`,fbd_desc_LT:`Менше ніж`,fbd_desc_LE:`Менше або дорівнює`,fbd_desc_EQ:`Дорівнює`,fbd_desc_NE:`Не дорівнює`,fbd_desc_ADD:`Додавання`,fbd_desc_SUB:`Віднімання`,fbd_desc_MUL:`Множення`,fbd_desc_DIV:`Ділення (на 0 дає 0)`,fbd_desc_MIN:`Найменший вхід`,fbd_desc_MAX:`Найбільший вхід`,fbd_desc_STATE_IN:`Читає стан ioBroker`,fbd_desc_STATE_OUT:`Записує стан ioBroker при зміні значення`,fbd_desc_CONST:`Постійне значення`,fbd_online:`Онлайн`,fbd_online_tooltip:`Показати значення робочої схеми`,fbd_online_waiting:`Очікування даних…`,fbd_online_no_data:`Немає даних %s с - скрипт запущено?`,fbd_online_stalled:`Схема більше не виконується (цикл %s)`,fbd_online_cycle:`Цикл %s`,fbd_online_event:`чекає на входи`,fbd_online_not_running:`Скрипт не запущено`,fbd_online_changed:`Схему змінено - значення належать до збереженої версії`,fbd_runtime_error:`Помилка під час виконання: %s`,fbd_online_no_values:`Цикл %s - збережіть схему один раз, щоб побачити значення`,fbd_category_interface:`Інтерфейс`,fbd_category_user:`Власні блоки`,fbd_desc_FB_IN:`Вхід цього блоку`,fbd_desc_FB_OUT:`Вихід цього блоку`,fbd_param_pin:`Ім'я виводу`,fbd_invalid_name:`Лише літери, цифри та _, не починаючи з цифри`,fbd_no_user_blocks:`Власних блоків ще немає - схема стає блоком через «Ця схема є блоком» у її налаштуваннях`,fbd_is_block:`Ця схема є блоком`,fbd_block_hint:`Блок використовується в інших схемах скільки завгодно разів. Його блоки FB_IN і FB_OUT - це його виводи; кожна збережена зміна - нова версія.`,fbd_block_name:`Ім'я блоку`,fbd_block_description:`Опис`,fbd_block_type:`Тип %s, версія %s`,fbd_block_duplicate:`Схема «%s» визначає той самий тип`,fbd_block_newer:`Доступна версія %s`,fbd_block_update:`Оновити`,fbd_block_update_hint:`Застосовує нову версію до всіх екземплярів у цій схемі`,fbd_block_open:`Відкрити блок`,fbd_block_outdated:`Нова версія «%s»: %s (у цій схемі: %s)`,"Inputs and outputs of a block only work in the diagram of a block":`Входи та виходи блоку можливі лише у схемі блоку`,"A block cannot read or write states - give it inputs and outputs instead":`Блок не може читати або записувати стани - використовуйте входи та виходи`,"Invalid pin name %s":`Недійсне ім'я виводу %s`,"The pin name %s is used twice":`Ім'я виводу %s використано двічі`,"The block %s contains itself":`Блок %s містить сам себе`,"The block %s has errors: %s":`У блоці %s є помилки: %s`,"Invalid block type %s":`Недійсний тип блоку %s`,fbd_category_control:`Регулювання`,fbd_desc_HYST:`Двопозиційний перемикач: Q стає істинним, коли IN піднімається вище HIGH, і хибним, коли опускається нижче LOW`,fbd_desc_RAMP:`Рампа: OUT слідує за IN, не більше ніж на UP за секунду вгору та DOWN за секунду вниз (0: без обмеження)`,fbd_desc_PT1:`Фільтр нижніх частот першого порядку (PT1): OUT слідує за IN зі сталою часу T`,fbd_desc_PID:`ПІД-регулятор: уставка SP, поточне значення PV, вихід Y між YMIN і YMAX; TN або TV 0 вимикає цю складову`,fbd_online_paused:`Призупинено (цикл %s)`,fbd_online_paused_at:`Зупинено перед %s (цикл %s)`,fbd_debug_resume:`Продовжити (F8)`,fbd_debug_pause:`Призупинити (F8)`,fbd_debug_cycle:`Один цикл`,fbd_debug_step:`Один блок (F10)`,fbd_debug_save_once:`Збережіть схему один раз, тоді запрацюють точки зупинки та покрокове виконання`,fbd_debug_forced_count:`Примусових значень: %s`,fbd_debug_release_all:`Відпустити всі`,fbd_debug_breakpoint_count:`Точок зупинки: %s`,fbd_debug_remove_all:`Видалити всі`,fbd_debug_breakpoint_set:`Поставити точку зупинки (F9)`,fbd_debug_breakpoint_remove:`Прибрати точку зупинки (F9)`,fbd_debug_breakpoint:`Точка зупинки`,fbd_debug_breakpoint_hint:`Схема зупиняється перед цим блоком (F9)`,fbd_debug_forced:`задано примусово`,fbd_debug_force:`Задати`,fbd_debug_release:`Відпустити`,fbd_debug_force_hint:`Примусове значення діє, доки його не відпустять або не завершиться онлайн-перегляд, і впливає також на стани, які записує схема.`,fbd_link:`Зв'язок`,fbd_link_mark:`Показати як мітку з'єднання`,fbd_link_mark_hint:`Замість лінії через усю схему обидва кінці показують мітку з назвою; подвійний клік переходить до іншого кінця.`,fbd_link_label:`Назва мітки`,fbd_layout:`Упорядкувати автоматично`,fbd_find:`Шукати в схемі (Ctrl+F)`,fbd_find_placeholder:`Назва, тип, стан…`,fbd_find_none:`немає`,fbd_find_previous:`Попередній (Shift+Enter)`,fbd_find_next:`Наступний (Enter)`,fbd_find_close:`Закрити (Esc)`,"The diagram does not run":`Схема не виконується`,"The diagram is not shown online":`Схема не показана онлайн`,"The diagram was saved before values could be forced - save it once":`Схему збережено до появи примусових значень - збережіть її один раз`,"The diagram was saved before it could stop at blocks - save it once":`Схему збережено до появи зупинок на блоках - збережіть її один раз`,fbd_instance_open:`Внутрішній вигляд`,fbd_instance_open_hint:`Показує цей екземпляр зсередини - онлайн з його власними значеннями (подвійний клік)`,fbd_instance_title:`Екземпляр «%s» блоку «%s», версія %s`,fbd_instance_readonly:`Лише читання: так блок збережено в цій схемі. Змінюють його у власній схемі. Тут можна задавати значення примусово, точки зупинки - лише в самій схемі.`,fbd_instance_save_once:`Збережіть схему один раз, тоді з'являться значення всередині екземплярів`,fbd_instance_back:`Назад (Esc)`,fbd_link_refused_type:`Не з'єднано: %s не підходить до %s (%s). Автоматично лише INT стає REAL.`,fbd_link_refused_taken:`Не з'єднано: %s уже з'єднано - вхід приймає лише один зв'язок`,fbd_category_memory:`Пам'ять`,fbd_tab_blocks:`Блоки`,fbd_tab_variables:`Змінні`,fbd_tab_favorites:`Обране`,fbd_favorite_add:`До обраного`,fbd_favorite_remove:`Прибрати з обраного`,fbd_no_variables:`У схемі ще немає станів - вони з'являються зі STATE_IN і STATE_OUT`,fbd_no_favorites:`Ще немає обраного - зірочка біля блоку додає його сюди`,fbd_expand_all:`Розгорнути все`,fbd_collapse_all:`Згорнути все`,fbd_menu:`Більше`,fbd_menu_properties:`Властивості`,fbd_menu_duplicate:`Дублювати`,fbd_tab_properties:`Властивості`,fbd_tab_docs:`Документація`,fbd_section_general:`Загальне`,fbd_section_params:`Параметри`,fbd_section_preview:`Попередній перегляд`,fbd_section_block:`Блок`,fbd_name:`Назва`,fbd_type:`Тип`,fbd_comment_field:`Коментар`,fbd_comment_placeholder:`Коментар…`,fbd_invert_short:`інверсія`,fbd_is_block_short:`Це блок`,fbd_link_from_to:`Звідки → куди`,fbd_link_mark_short:`Як мітка`,fbd_outputs:`Виходи`,fbd_doc_keys:`Клавіші`,fbd_key_undo:`Скасувати / повторити`,fbd_key_copy:`Копіювати / вирізати / вставити`,fbd_key_delete:`Видалити вибране`,fbd_key_find:`Шукати в схемі`,fbd_key_pause:`Пауза / продовжити (онлайн)`,fbd_key_breakpoint:`Точка зупинки на вибраному блоці (онлайн)`,fbd_key_step:`На один блок далі (онлайн)`,fbd_key_back:`Назад з екземпляра`,fbd_doc_double_click:`Подвійний клік на екземплярі власного блоку показує його зсередини; на мітці з'єднання - переходить до іншого кінця.`,fbd_doc_stateful:`Пам'ятає свій стан від циклу до циклу`,fbd_doc_time:`Залежить від часу - схема з ним виконується циклічно`,fbd_instance:`Екземпляр`,fbd_grid:`Сітка`,fbd_links_curved:`Зв'язки кривими`,fbd_links_orthogonal:`Зв'язки під прямим кутом`,fbd_zoom_in:`Наблизити`,fbd_zoom_out:`Віддалити`,fbd_zoom_reset:`До 100 %`,fbd_link_const_retyped:`%s тепер типу %s (значення %s)`,fbd_link_refused_const:`Не з'єднано: %s уже подає значення на входи, що не приймають %s (%s)`,fbd_state_type_taken:`%s тепер читає стан як %s, як зазначено в об'єкті - за потреби змініть у властивостях`,fbd_desc_LOG:`Пише рядок у журнал: за переднім фронтом TRIG або коли змінюється IN. %s у тексті - значення IN`,fbd_param_text:`Текст`,fbd_param_level:`Рівень`,fbd_param_when:`Коли`,fbd_option_edge:`за переднім фронтом TRIG`,fbd_option_change:`коли змінюється IN`,fbd_online_changed_short:`змінено`,fbd_category_counters:`Лічильники`,fbd_category_convert:`Перетворення`,fbd_category_calendar:`Календар`,fbd_category_messages:`Повідомлення`,fbd_category_expert:`Експерт`,fbd_desc_BLINK:`Блимач: поки EN істинне, Q істинне протягом TH і хибне протягом TL`,fbd_desc_CTU:`Лічильник уверх: рахує передні фронти CU, R скидає CV у 0. Q: CV досяг PV`,fbd_desc_CTD:`Лічильник униз: зменшує за передніми фронтами CD, LD завантажує PV. Q: CV досяг 0`,fbd_desc_CTUD:`Реверсивний лічильник: CU уверх, CD униз, R скидає в 0, LD завантажує PV. QU: CV досяг PV, QD: CV досяг 0`,fbd_desc_ROUND:`Округлює IN до DIGITS знаків після коми`,fbd_desc_TO_BOOL:`Перетворює на BOOL: 0, порожній текст і "false" - хиба`,fbd_desc_TO_INT:`Перетворює на INT з округленням; кома вважається крапкою, не число дає 0`,fbd_desc_TO_REAL:`Перетворює на REAL; кома вважається крапкою, не число дає 0`,fbd_desc_TO_TIME:`Перетворює на TIME: число - це мс, текст може бути "2s", "1m30s" або "08:30"`,fbd_desc_TO_STRING:`Перетворює на текст`,fbd_desc_CONCAT:`Об'єднує входи в один текст - числа краще спершу округлити через ROUND`,fbd_desc_CLOCK:`Місцевий час: час доби, година, хвилина, день тижня (1 понеділок ... 7 неділя), день, місяць і рік`,fbd_desc_TIMEWINDOW:`Часове вікно: істинне з START до END у вибрані дні; вікно через північ належить дню початку`,fbd_desc_SCHEDULE:`Розклад: Q істинне один цикл, коли настає час cron-шаблону`,fbd_desc_ASTRO:`Сонце: Q істинне від однієї події сонця до іншої, наприклад від заходу до сходу; START і END - їхній час сьогодні`,fbd_desc_NOTIFY:`Надсилає сповіщення ioBroker: за переднім фронтом TRIG або при зміні IN. Не більше 5 за хвилину`,fbd_desc_SENDTO:`Надсилає повідомлення адаптеру, наприклад telegram.0 або pushover.0 (text, message, title, subject): за переднім фронтом TRIG або при зміні IN. Не більше 5 за хвилину`,fbd_desc_JS:`Власний JavaScript: отримує IN1 ... INn, dt, firstScan і state (зберігається між циклами), повертає OUT1 або [OUT1, OUT2, ...]`,fbd_param_days:`Дні`,fbd_param_cron:`Cron-шаблон`,fbd_param_start:`З`,fbd_param_end:`До`,fbd_param_startOffset:`Зсув початку`,fbd_param_endOffset:`Зсув кінця`,fbd_offset_hint:`У хвилинах, від'ємне - раніше`,fbd_param_category:`Вид`,fbd_param_instance:`Екземпляр`,fbd_param_title:`Заголовок`,fbd_param_command:`Команда`,fbd_param_code:`Код`,fbd_param_outputs:`Кількість виходів`,fbd_option_all:`щодня`,fbd_option_weekdays:`з понеділка по п'ятницю`,fbd_option_weekend:`субота й неділя`,fbd_option_message:`Повідомлення`,fbd_option_alert:`Тривога`,fbd_cron_dialog:`Задати час`,fbd_cron_hint:`Хвилина година день місяць день_тижня, наприклад "0 8 * * 1-5": о 8:00 з понеділка по п'ятницю. Із секундами попереду "*/5 * * * * *" - кожні 5 секунд`,fbd_code_hint:`Код отримує %s і повертає значення OUT1 або [OUT1, OUT2, ...]; undefined залишає вихід без змін`,"The code has an error: %s":`У коді помилка: %s`,fbd_option_nightEnd:`Кінець ночі`,fbd_option_nauticalDawn:`Морський світанок`,fbd_option_dawn:`Світанок`,fbd_option_sunrise:`схід сонця`,fbd_option_sunriseEnd:`Кінець сходу сонця`,fbd_option_goldenHourEnd:`Кінець золотої години`,fbd_option_solarNoon:`Сонячний полудень`,fbd_option_goldenHour:`Золота година`,fbd_option_sunsetStart:`Початок заходу сонця`,fbd_option_sunset:`Захід сонця`,fbd_option_dusk:`Сутінки`,fbd_option_nauticalDusk:`Морські сутінки`,fbd_option_night:`ніч`,fbd_option_nadir:`Надір`},"zh-cn":{fbd_search:`搜索`,fbd_category_iobroker:`ioBroker`,fbd_category_logic:`逻辑`,fbd_category_timers:`定时器`,fbd_category_compare:`比较`,fbd_category_arithmetic:`算术`,fbd_category_structure:`结构`,fbd_comment:`注释`,fbd_comment_desc:`图中的注释,不会被执行`,fbd_no_state:`未选择状态`,fbd_select_state:`选择状态`,fbd_instance_name:`实例名称`,fbd_inputs:`输入`,fbd_connected:`已连接`,fbd_inverted:`取反 %s`,fbd_invalid_time:`时间,例如 500ms、2s、1m30s`,fbd_invalid_number:`不是数字`,fbd_param_oid:`状态`,fbd_param_type:`类型`,fbd_param_ack:`以已确认 (ack) 写入`,fbd_param_minInterval:`两次写入的最短间隔`,fbd_param_value:`值`,fbd_param_inputs:`输入数量`,fbd_diagram:`图`,fbd_cycle_mode:`执行方式`,fbd_mode_auto:`自动`,fbd_mode_cyclic:`循环`,fbd_mode_event:`输入变化时`,fbd_runs_cyclic:`该图循环执行`,fbd_runs_event:`该图在输入变化时执行`,fbd_cycle_time:`周期时间 (ms)`,fbd_empty_hint:`从左侧将功能块拖到画布上,并把输出连接到输入`,fbd_no_diagram:`此脚本不包含功能块图`,"Unknown block type %s":`未知的功能块类型 %s`,"Invalid block ID %s":`无效的功能块 ID %s`,"Duplicate block ID %s":`重复的功能块 ID %s`,'Parameter "%s" is not set':`未设置参数“%s”`,"The connection refers to a missing block or pin":`连接指向了不存在的功能块或引脚`,"Types do not match: %s cannot be connected to %s":`类型不匹配:%s 不能连接到 %s`,"Input %s is connected more than once":`输入 %s 被连接了多次`,"Loop without a block that stores a value: %s":`没有存储值的功能块的回路:%s`,"Timers need the cyclic mode, in the event mode they only run when an input changes":`定时器需要循环模式,在事件模式下只有输入变化时才会运行`,fbd_desc_AND:`与:所有输入为真时为真`,fbd_desc_OR:`或:任一输入为真时为真`,fbd_desc_XOR:`异或:真输入的个数为奇数时为真`,fbd_desc_NOT:`非:对输入取反`,fbd_desc_RS:`触发器,复位优先`,fbd_desc_SR:`触发器,置位优先`,fbd_desc_R_TRIG:`上升沿:输入变为真时保持一个周期为真`,fbd_desc_F_TRIG:`下降沿:输入变为假时保持一个周期为真`,fbd_desc_TON:`接通延时:IN 为真持续 PT 后 Q 变为真`,fbd_desc_TOF:`断开延时:IN 变为假后 Q 仍保持 PT 为真`,fbd_desc_TP:`脉冲:IN 的上升沿产生长度为 PT 的脉冲`,fbd_desc_GT:`大于`,fbd_desc_GE:`大于等于`,fbd_desc_LT:`小于`,fbd_desc_LE:`小于等于`,fbd_desc_EQ:`等于`,fbd_desc_NE:`不等于`,fbd_desc_ADD:`加法`,fbd_desc_SUB:`减法`,fbd_desc_MUL:`乘法`,fbd_desc_DIV:`除法(除以 0 得 0)`,fbd_desc_MIN:`最小输入`,fbd_desc_MAX:`最大输入`,fbd_desc_STATE_IN:`读取 ioBroker 状态`,fbd_desc_STATE_OUT:`值变化时写入 ioBroker 状态`,fbd_desc_CONST:`常量值`,fbd_online:`在线`,fbd_online_tooltip:`显示运行中图的数值`,fbd_online_waiting:`正在等待数据…`,fbd_online_no_data:`%s 秒没有数据 - 脚本在运行吗?`,fbd_online_stalled:`该图已停止运算(周期 %s)`,fbd_online_cycle:`周期 %s`,fbd_online_event:`等待输入`,fbd_online_not_running:`脚本未运行`,fbd_online_changed:`图已被修改 - 数值属于已保存的版本`,fbd_runtime_error:`运行时出错:%s`,fbd_online_no_values:`周期 %s - 保存一次该图即可看到数值`,fbd_category_interface:`接口`,fbd_category_user:`自定义功能块`,fbd_desc_FB_IN:`此功能块的一个输入`,fbd_desc_FB_OUT:`此功能块的一个输出`,fbd_param_pin:`引脚名称`,fbd_invalid_name:`只能使用字母、数字和 _,且不能以数字开头`,fbd_no_user_blocks:`还没有自定义功能块 - 在图的设置中打开“此图是一个功能块”即可`,fbd_is_block:`此图是一个功能块`,fbd_block_hint:`功能块可在其他图中多次使用。它的 FB_IN 和 FB_OUT 块就是它的引脚;每次保存的修改都是一个新版本。`,fbd_block_name:`功能块名称`,fbd_block_description:`描述`,fbd_block_type:`类型 %s,版本 %s`,fbd_block_duplicate:`图“%s”定义了相同的类型`,fbd_block_newer:`有可用的版本 %s`,fbd_block_update:`更新`,fbd_block_update_hint:`为此图中的所有实例采用新版本`,fbd_block_open:`打开功能块`,fbd_block_outdated:`“%s”有新版本:%s(此图中:%s)`,"Inputs and outputs of a block only work in the diagram of a block":`功能块的输入和输出只能用在功能块的图中`,"A block cannot read or write states - give it inputs and outputs instead":`功能块不能读写状态 - 请改用输入和输出`,"Invalid pin name %s":`无效的引脚名称 %s`,"The pin name %s is used twice":`引脚名称 %s 被使用了两次`,"The block %s contains itself":`功能块 %s 包含了它自己`,"The block %s has errors: %s":`功能块 %s 有错误:%s`,"Invalid block type %s":`无效的功能块类型 %s`,fbd_category_control:`控制`,fbd_desc_HYST:`两点开关:IN 高于 HIGH 时 Q 为真,低于 LOW 时 Q 为假`,fbd_desc_RAMP:`斜坡:OUT 跟随 IN,每秒最多上升 UP、下降 DOWN(0:不限制)`,fbd_desc_PT1:`一阶低通(PT1):OUT 以时间常数 T 跟随 IN`,fbd_desc_PID:`PID 控制器:设定值 SP,过程值 PV,输出 Y 介于 YMIN 与 YMAX 之间;TN 或 TV 为 0 时不含该部分`,fbd_online_paused:`已暂停(周期 %s)`,fbd_online_paused_at:`停在 %s 之前(周期 %s)`,fbd_debug_resume:`继续(F8)`,fbd_debug_pause:`暂停(F8)`,fbd_debug_cycle:`单个周期`,fbd_debug_step:`单个功能块(F10)`,fbd_debug_save_once:`先保存一次图,之后断点和单步即可使用`,fbd_debug_forced_count:`强制值:%s`,fbd_debug_release_all:`全部释放`,fbd_debug_breakpoint_count:`断点:%s`,fbd_debug_remove_all:`全部移除`,fbd_debug_breakpoint_set:`设置断点(F9)`,fbd_debug_breakpoint_remove:`移除断点(F9)`,fbd_debug_breakpoint:`断点`,fbd_debug_breakpoint_hint:`图在此功能块之前停下(F9)`,fbd_debug_forced:`已强制`,fbd_debug_force:`强制`,fbd_debug_release:`释放`,fbd_debug_force_hint:`强制值一直有效,直到被释放或在线视图结束——并且也会影响图写入的状态。`,fbd_link:`连接`,fbd_link_mark:`显示为连接标记`,fbd_link_mark_hint:`两端显示带名称的标记,而不是穿过整个图的连线;双击跳到另一端。`,fbd_link_label:`标记名称`,fbd_layout:`自动排列`,fbd_find:`在图中查找(Ctrl+F)`,fbd_find_placeholder:`名称、类型、状态…`,fbd_find_none:`无`,fbd_find_previous:`上一个(Shift+Enter)`,fbd_find_next:`下一个(Enter)`,fbd_find_close:`关闭(Esc)`,"The diagram does not run":`图未运行`,"The diagram is not shown online":`图未在线显示`,"The diagram was saved before values could be forced - save it once":`该图保存于支持强制值之前——请重新保存一次`,"The diagram was saved before it could stop at blocks - save it once":`该图保存于支持在功能块处停下之前——请重新保存一次`,fbd_instance_open:`内部视图`,fbd_instance_open_hint:`从内部显示此实例——在线时显示它自己的值(双击)`,fbd_instance_title:`“%s”的实例“%s”,版本 %s`,fbd_instance_readonly:`只读:这是此图中保存的功能块。要修改请在它自己的图中进行。这里可以强制值,断点只能在图本身中设置。`,fbd_instance_save_once:`先保存一次图,之后实例内部的值就会显示`,fbd_instance_back:`返回(Esc)`,fbd_link_refused_type:`未连接:%s 与 %s(%s)不匹配。只有 INT 会自动转为 REAL。`,fbd_link_refused_taken:`未连接:%s 已有连接——一个输入只接受一条连接`,fbd_category_memory:`存储`,fbd_tab_blocks:`功能块`,fbd_tab_variables:`变量`,fbd_tab_favorites:`收藏`,fbd_favorite_add:`加入收藏`,fbd_favorite_remove:`从收藏中移除`,fbd_no_variables:`图中还没有状态——通过 STATE_IN 和 STATE_OUT 添加`,fbd_no_favorites:`还没有收藏——点击功能块上的星标即可加入`,fbd_expand_all:`全部展开`,fbd_collapse_all:`全部折叠`,fbd_menu:`更多`,fbd_menu_properties:`属性`,fbd_menu_duplicate:`复制`,fbd_tab_properties:`属性`,fbd_tab_docs:`文档`,fbd_section_general:`常规`,fbd_section_params:`参数`,fbd_section_preview:`预览`,fbd_section_block:`功能块`,fbd_name:`名称`,fbd_type:`类型`,fbd_comment_field:`注释`,fbd_comment_placeholder:`注释…`,fbd_invert_short:`取反`,fbd_is_block_short:`是功能块`,fbd_link_from_to:`从 → 到`,fbd_link_mark_short:`作为标记`,fbd_outputs:`输出`,fbd_doc_keys:`快捷键`,fbd_key_undo:`撤销 / 重做`,fbd_key_copy:`复制 / 剪切 / 粘贴`,fbd_key_delete:`删除所选`,fbd_key_find:`在图中查找`,fbd_key_pause:`暂停 / 继续(在线)`,fbd_key_breakpoint:`在所选功能块设置断点(在线)`,fbd_key_step:`前进一个功能块(在线)`,fbd_key_back:`退出实例`,fbd_doc_double_click:`双击自定义功能块的实例可从内部查看;双击连接标记会跳到另一端。`,fbd_doc_stateful:`在周期之间保持状态`,fbd_doc_time:`依赖时间——包含它的图会周期运行`,fbd_instance:`实例`,fbd_grid:`网格`,fbd_links_curved:`连线显示为曲线`,fbd_links_orthogonal:`连线显示为直角`,fbd_zoom_in:`放大`,fbd_zoom_out:`缩小`,fbd_zoom_reset:`恢复 100%`,fbd_link_const_retyped:`%s 现在的类型是 %s(值 %s)`,fbd_link_refused_const:`未连接:%s 已连接到不接受 %s 的输入(%s)`,fbd_state_type_taken:`%s 现在按对象所述以 %s 读取该状态——如有需要可在属性中修改`,fbd_desc_LOG:`向日志写入一行:在 TRIG 上升沿或 IN 变化时。文本中的 %s 为 IN 的值`,fbd_param_text:`文本`,fbd_param_level:`级别`,fbd_param_when:`何时`,fbd_option_edge:`在 TRIG 上升沿时`,fbd_option_change:`当 IN 变化时`,fbd_online_changed_short:`已修改`,fbd_category_counters:`计数器`,fbd_category_convert:`转换`,fbd_category_calendar:`日历`,fbd_category_messages:`消息`,fbd_category_expert:`专家`,fbd_desc_BLINK:`闪烁器:EN 为真时,Q 在 TH 内为真,在 TL 内为假`,fbd_desc_CTU:`加计数器:对 CU 的上升沿计数,R 将 CV 清零。Q:CV 达到 PV`,fbd_desc_CTD:`减计数器:在 CD 的上升沿递减,LD 载入 PV。Q:CV 达到 0`,fbd_desc_CTUD:`加减计数器:CU 加计数,CD 减计数,R 清零,LD 载入 PV。QU:CV 达到 PV,QD:CV 达到 0`,fbd_desc_ROUND:`将 IN 四舍五入到 DIGITS 位小数`,fbd_desc_TO_BOOL:`转换为 BOOL:0、空文本和 "false" 为假`,fbd_desc_TO_INT:`转换为 INT 并四舍五入;小数逗号视为小数点,非数字得 0`,fbd_desc_TO_REAL:`转换为 REAL;小数逗号视为小数点,非数字得 0`,fbd_desc_TO_TIME:`转换为 TIME:数字为毫秒,文本可以是 "2s"、"1m30s" 或 "08:30"`,fbd_desc_TO_STRING:`转换为文本`,fbd_desc_CONCAT:`将输入连接成一个文本 - 数字请先用 ROUND 取整`,fbd_desc_CLOCK:`本地时间:时刻、小时、分钟、星期(1 周一 ... 7 周日)、日、月和年`,fbd_desc_TIMEWINDOW:`时间窗:在所选日期从 START 到 END 为真;跨越午夜的时间窗属于其开始的那一天`,fbd_desc_SCHEDULE:`计划:当 cron 模式的时间到达时,Q 在一个周期内为真`,fbd_desc_ASTRO:`太阳:Q 从一个太阳事件到另一个事件为真,例如从日落到日出;START 和 END 为今天的时间`,fbd_desc_NOTIFY:`发送 ioBroker 通知:在 TRIG 的上升沿或 IN 变化时。每分钟最多 5 条`,fbd_desc_SENDTO:`向 telegram.0 或 pushover.0 等适配器发送消息(text、message、title、subject):在 TRIG 的上升沿或 IN 变化时。每分钟最多 5 条`,fbd_desc_JS:`自定义 JavaScript:接收 IN1 ... INn、dt、firstScan 和 state(在周期之间保留),返回 OUT1 或 [OUT1, OUT2, ...]`,fbd_param_days:`日期`,fbd_param_cron:`Cron 模式`,fbd_param_start:`从`,fbd_param_end:`到`,fbd_param_startOffset:`开始偏移`,fbd_param_endOffset:`结束偏移`,fbd_offset_hint:`以分钟为单位,负数表示提前`,fbd_param_category:`类别`,fbd_param_instance:`实例`,fbd_param_title:`标题`,fbd_param_command:`命令`,fbd_param_code:`代码`,fbd_param_outputs:`输出数量`,fbd_option_all:`每天`,fbd_option_weekdays:`周一至周五`,fbd_option_weekend:`周六和周日`,fbd_option_message:`消息`,fbd_option_alert:`警报`,fbd_cron_dialog:`设置时间`,fbd_cron_hint:`分 时 日 月 星期,例如 "0 8 * * 1-5":周一至周五 8:00。前面加上秒时,"*/5 * * * * *" 表示每 5 秒`,fbd_code_hint:`代码接收 %s,并返回 OUT1 的值或 [OUT1, OUT2, ...];undefined 保持输出不变`,"The code has an error: %s":`代码有错误:%s`,fbd_option_nightEnd:`夜晚结束`,fbd_option_nauticalDawn:`航海黎明`,fbd_option_dawn:`黎明`,fbd_option_sunrise:`日出`,fbd_option_sunriseEnd:`日出结束`,fbd_option_goldenHourEnd:`黄金时段结束`,fbd_option_solarNoon:`星期日正午`,fbd_option_goldenHour:`黄金时段`,fbd_option_sunsetStart:`日落开始`,fbd_option_sunset:`日落`,fbd_option_dusk:`黄昏`,fbd_option_nauticalDusk:`航海黄昏`,fbd_option_night:`夜晚`,fbd_option_nadir:`最低点`}}).forEach(([e,t])=>F.extendTranslations(t,e)),_();var eg={AND:`&`,OR:`≥1`,XOR:`=1`,NOT:`¬`,RS:`RS`,SR:`SR`,R_TRIG:`↑`,F_TRIG:`↓`,GT:`>`,GE:`≥`,LT:`<`,LE:`≤`,EQ:`=`,NE:`≠`,ADD:`+`,SUB:`−`,MUL:`×`,DIV:`÷`,MIN:`min`,MAX:`max`,ROUND:`≈`,CTU:`+1`,CTD:`−1`,CTUD:`±1`,TO_BOOL:`0/1`,TO_INT:`123`,TO_REAL:`1.5`,TO_TIME:`ms`,TO_STRING:`abc`,CONCAT:`a+b`},tg={STATE_IN:Te,STATE_OUT:Ee,CONST:Ae,LOG:De,NOTIFY:q,SENDTO:oe,CLOCK:K,TIMEWINDOW:he,SCHEDULE:ge,ASTRO:Ge,BLINK:ye,JS:H,TON:Be,TOF:Ve,TP:Se,HYST:ze,RAMP:He,PT1:E,PID:Ue,FB_IN:fe,FB_OUT:Oe,comment:Re};function ng(e){let t=e.type.startsWith(`@userFb/`)?ve:tg[e.type];return t?I(t,{className:`fb-icon`,style:{color:e.color}}):I(`span`,{className:`fb-icon fb-icon-glyph`,style:{color:e.color},children:eg[e.type]||`?`})}var rg={BOOL:`#22c55e`,INT:`#3b82f6`,REAL:`#06b6d4`,TIME:`#f59e0b`,STRING:`#a855f7`,ANY:`#94a3b8`},ig={iobroker:`#3b82f6`,logic:`#22c55e`,memory:`#f59e0b`,timers:`#8b5cf6`,counters:`#d946ef`,compare:`#14b8a6`,arithmetic:`#0ea5e9`,convert:`#84cc16`,control:`#ec4899`,calendar:`#eab308`,messages:`#6366f1`,expert:`#78716c`,interface:`#64748b`,user:`#a855f7`},ag=[220,90];function og(e){return{nodes:[...e.comments.map(e=>({id:e.id,type:`fbComment`,position:{x:e.pos[0],y:e.pos[1]},width:e.size[0],height:e.size[1],zIndex:-1,data:{text:e.text}})),...e.blocks.map(e=>{let t={...e};return delete t.order,{id:t.id,type:`fbBlock`,position:{x:t.pos[0],y:t.pos[1]},data:{block:t}}})],edges:e.links.map(e=>{let t={id:e.id,type:`fbLink`,source:e.from[0],sourceHandle:e.from[1],target:e.to[0],targetHandle:e.to[1]};return(e.mark||e.label)&&(t.data={mark:e.mark,label:e.label}),t})}}function sg(e,t,n){let r=[],i=[];for(let t of e){let e=[Math.round(t.position.x),Math.round(t.position.y)];if(t.type===`fbBlock`)r.push({...t.data.block,pos:e});else{var a,o;i.push({id:t.id,pos:e,size:[Math.round(t.width??((a=t.measured)==null?void 0:a.width)??ag[0]),Math.round(t.height??((o=t.measured)==null?void 0:o.height)??ag[1])],text:t.data.text})}}return{format:1,runtime:Rm,cycle:n,blocks:r,links:t.map(e=>{var t,n;let r={id:e.id,from:[e.source,e.sourceHandle||``],to:[e.target,e.targetHandle||``]};return(t=e.data)!=null&&t.mark&&(r.mark=!0),(n=e.data)!=null&&n.label&&(r.label=e.data.label),r}),comments:i}}_();var cg=class{constructor(){R(this,`values`,new Map),R(this,`listeners`,new Map)}subscribe(e,t){let n=this.listeners.get(e);return n||(n=new Set,this.listeners.set(e,n)),n.add(t),t(this.values.get(e)),()=>{n.delete(t),n.size||this.listeners.delete(e)}}update(e,t){if(t)for(let t of[...this.values.keys()])t in e||(this.values.delete(t),this.notify(t,void 0));for(let[t,n]of Object.entries(e))this.values.set(t,n),this.notify(t,n)}clear(){let e=[...this.values.keys()];this.values.clear(),e.forEach(e=>this.notify(e,void 0))}notify(e,t){var n;(n=this.listeners.get(e))==null||n.forEach(e=>e(t))}},lg=L(new cg);function ug(e,t,n){if(e==null)return`null`;if(t===`BOOL`||typeof e==`boolean`)return e?`TRUE`:`FALSE`;if(typeof e==`number`)return t===`TIME`?n?Ip(e):Fp(e):String(Math.round(e*1e3)/1e3);let r=typeof e==`string`?e:JSON.stringify(e);return`"${r.length>20?`${r.substring(0,19)}…`:r}"`}function dg(e){let{signal:t,type:n,clock:r}=e,i=W(lg),o=v(null);return a(()=>i.subscribe(t,e=>{let t=o.current;if(t){if(e===void 0){t.style.display=`none`;return}t.style.display=``,t.textContent=ug(e,n,r),t.dataset.bool=typeof e==`boolean`?String(e):``}}),[i,t,n,r]),I(`div`,{ref:o,className:`fb-live`,"data-forced":e.forced?`true`:void 0,style:{...e.style,display:`none`}})}function fg(e){let{signal:t,type:n}=e,r=W(lg),i=v(null);return a(()=>r.subscribe(t,e=>{i.current&&(i.current.textContent=e===void 0?`…`:ug(e,n))}),[r,t,n]),I(`span`,{ref:i})}async function pg(e,t,n,r){let i=await e.sendTo(t,`fbdDebug`,{script:n,...r});if(!(i!=null&&i.status))throw Error((i==null?void 0:i.error)||`No answer`);return i.status}var mg=1e4,hg=5e3;function gg(e){let{active:t,socket:n,instance:r,scriptId:i,bus:o,path:s}=e,c=v(e);c.current=e;let l=v(s);a(()=>{t&&r&&s!==l.current&&n.sendTo(r,`fbdWatch`,{script:i,watch:!0,path:s}).catch(()=>{}),l.current=s},[t,n,r,i,s]),a(()=>{if(!t||!r)return;let e=`${r}.debug.fbd`,a=Date.now(),s=0,u=-1,d=0,f=`event`,p=!1,m=!1,h=()=>{let e=Date.now(),t;t=s?e-s>hg?{kind:`no-data`,seconds:Math.round((e-s)/1e3)}:m?{kind:`paused`,cycle:u}:f===`cyclic`&&e-d>hg?{kind:`stalled`,cycle:u}:p?{kind:`no-values`,cycle:u}:{kind:`running`,cycle:u,mode:f}:e-a>hg?{kind:`no-data`,seconds:Math.round((e-a)/1e3)}:{kind:`waiting`},c.current.onStatus(t)},g=(e,t)=>{if(typeof(t==null?void 0:t.val)!=`string`)return;let n;try{n=JSON.parse(t.val)}catch{return}n.script===i&&(s=Date.now(),n.cycle!==u&&(u=n.cycle,d=s),f=n.mode,n.values&&o.update(n.values,!!n.full),n.full&&(p=!Object.keys(n.values||{}).length),`error`in n&&c.current.onError(n.error||null),n.debug&&(m=n.debug.paused,c.current.onDebug(n.debug)),h())},_=e=>{n.sendTo(r,`fbdWatch`,{script:i,watch:!0,full:e,path:l.current}).catch(()=>{})};n.subscribeState(e,g),_(!0),h();let v=setInterval(()=>_(!1),mg),y=setInterval(h,1e3);return()=>{clearInterval(v),clearInterval(y),n.unsubscribeState(e,g),n.sendTo(r,`fbdWatch`,{script:i,watch:!1}).catch(()=>{}),o.clear(),c.current.onError(null),c.current.onDebug(null)}},[t,n,r,i,o])}_();var _g={enabled:!1,breakpoints:new Set,at:null,forced:new Set,toggleBreakpoint:()=>{}};function vg(e,t,n,r=t.userBlocks||{}){let i=new Set,a=new Set;e.issues.filter(e=>e.severity===`error`).forEach(e=>{var t;e.blockId&&i.add(e.blockId),(t=e.blockIds)==null||t.forEach(e=>i.add(e)),e.linkId&&a.add(e.linkId)});let o=new Map(t.blocks.map(e=>[e.id,e])),s=new Set(e.feedback),c={};for(let e of t.links){let t=o.get(e.from[0]),n=t?oh(t,Xm(t.type,r)):[],i=n.find(t=>t.id===e.from[1]);c[e.id]={type:(i==null?void 0:i.type)||`ANY`,feedback:s.has(e.id),error:a.has(e.id),name:t?n.length>1?`${t.name}.${e.from[1]}`:t.name:e.from.join(`.`)}}return{order:e.order,errors:i,links:c,background:n?`#141414`:`#ffffff`,runtimeError:null,userBlocks:r,debug:_g,prefix:``,linkStyle:`curved`}}var yg=L({order:{},errors:new Set,links:{},background:`#fff`,runtimeError:null,userBlocks:{},debug:_g,prefix:``,linkStyle:`curved`});_();var bg=28,xg=24,Sg={header:52,detail:30,pin:24,frame:8},Cg=Sg.pin;function wg(e,t){var n;return Tg(((n=t.params)==null?void 0:n[e.id])??e.default,e.type,e.clock)}function Tg(e,t,n){return e==null?``:t===`TIME`&&typeof e==`number`?n?Ip(e):Fp(e):String(e)}function Eg(e){let t=Math.round(Number(e))||0;return t?`${t>0?`+`:`−`}${Math.abs(t)}'`:``}function Dg(e){let t=String(e??``).split(`
15
- `).map(e=>e.trim());return t.find(e=>e&&!e.startsWith(`//`))||t.find(e=>e)||``}function Og(e,t){switch(t){case`TIME`:return Pp(e);case`INT`:return/^-?\d+$/.test(e.trim())?parseInt(e,10):null;case`REAL`:return e.trim()!==``&&Number.isFinite(Number(e))?Number(e):null;default:return e}}function kg(e){let{value:t,type:n,onChange:r}=e,i=Tg(t,n,e.clock),[o,s]=M(i);if(a(()=>s(i),[i]),n===`BOOL`){let e=t===!0||t===`true`;return I(`button`,{type:`button`,className:`fb-inline fb-inline-bool nodrag${e?` fb-on`:``}`,disabled:!r,onClick:t=>{t.stopPropagation(),r==null||r(!e)},children:e?`TRUE`:`FALSE`})}let c=`fb-inline${e.wide?` fb-inline-wide`:``}${n===`STRING`?` fb-inline-string`:``}`;if(!r)return I(`span`,{className:c,children:i});let l=Og(o,n);return I(`input`,{className:`${c} nodrag nopan${l===null?` fb-invalid`:``}`,value:o,spellCheck:!1,onChange:e=>s(e.target.value),onBlur:()=>{l!==null&&o!==i?r(l):s(i)},onKeyDown:e=>{e.key===`Enter`?e.currentTarget.blur():e.key===`Escape`&&s(i)},title:l===null?F.t(n===`TIME`?`fbd_invalid_time`:`fbd_invalid_number`):void 0})}function Ag(e){var t;return!!(e!=null&&e.user)||!!(e!=null&&(t=e.params)!=null&&t.length)}function jg({id:e,data:t,selected:n}){var r;let a=W(yg),s=qf({handleType:`target`}),[c,l]=M(null),{block:u}=t,{actions:d,debug:f}=a,m=Xm(u.type,a.userBlocks),h=ih(u,m),_=oh(u,m),v=Ag(m),y=Math.max(h.length,_.length,1),b=Sg.header+(v?Sg.detail:0),x=new Set(s.map(e=>e.targetHandle)),S=m?ig[m.category]:`#ef4444`,C=((r=a.runtimeError)==null?void 0:r.blockId)===e?a.runtimeError.message:null,T=a.errors.has(e)||!!C,E=f.breakpoints.has(e),D=f.at===e,k=d?(e,t)=>d.change({...u,params:{...u.params,[e]:t}}):void 0,A=m!=null&&m.user?m.user.description||m.user.name:m?F.t(`fbd_desc_${u.type}`):F.t(`Unknown block type %s`,u.type),N=C?F.t(`fbd_runtime_error`,C):u.comment?`${u.comment}\n\n${A}`:A,P=()=>{var e;if(m!=null&&m.user)return z(`span`,{className:`fb-block-version`,children:[`v`,m.user.version]});if(u.type===`CONST`){var t;let e=nh(u,{param:`type`},m);return I(kg,{value:(t=u.params)==null?void 0:t.value,type:e,wide:!0,onChange:k&&(e=>k(`value`,e))})}let n=()=>{var e;return I(kg,{value:(e=u.params)==null?void 0:e.text,type:`STRING`,wide:!0,onChange:k&&(e=>k(`text`,e))})};if(u.type===`LOG`){var r;let e=String(((r=u.params)==null?void 0:r.level)||`info`);return z(w,{children:[I(`span`,{className:`fb-log-level fb-log-${e}`,children:e}),n()]})}if(u.type===`NOTIFY`){var i;let e=String(((i=u.params)==null?void 0:i.category)||`message`);return z(w,{children:[I(`span`,{className:`fb-log-level fb-log-${e===`alert`?`error`:`info`}`,children:F.t(`fbd_option_${e}`)}),n()]})}if(u.type===`SENDTO`){var a;let e=(a=u.params)!=null&&a.instance?String(u.params.instance):``;return z(w,{children:[I(`span`,{className:`fb-log-level fb-log-info fb-badge-instance${e?``:` fb-inline-empty`}`,title:e,children:e||`?`}),n()]})}if(u.type===`SCHEDULE`){var o;return I(kg,{value:(o=u.params)==null?void 0:o.cron,type:`STRING`,wide:!0,onChange:k&&(e=>k(`cron`,e))})}if(u.type===`TIMEWINDOW`){var s;return I(`span`,{className:`fb-inline fb-inline-wide`,children:F.t(`fbd_option_${String(((s=u.params)==null?void 0:s.days)||`all`)}`)})}if(u.type===`ASTRO`){let e=e=>{var t,n;return`${F.t(`fbd_option_${String(((t=u.params)==null?void 0:t[e])||``)}`)}${Eg((n=u.params)==null?void 0:n[`${e}Offset`])}`};return z(`span`,{className:`fb-inline fb-inline-wide`,children:[e(`start`),` → `,e(`end`)]})}if(u.type===`JS`){var c;let e=String(((c=u.params)==null?void 0:c.code)??``);return I(`span`,{className:`fb-inline fb-inline-wide fb-inline-code`,title:e,children:Dg(e)})}if(u.type===`FB_IN`||u.type===`FB_OUT`){var l,d;return z(`span`,{className:`fb-inline fb-inline-wide`,children:[String(((l=u.params)==null?void 0:l.pin)||`?`),`: `,String(((d=u.params)==null?void 0:d.type)||`BOOL`)]})}let f=(e=u.params)!=null&&e.oid?String(u.params.oid):``;return I(`span`,{className:`fb-inline fb-inline-wide${f?``:` fb-inline-empty`}`,title:f,children:f||F.t(`fbd_no_state`)})},L=e=>()=>{l(null),e()};return z(`div`,{className:`fb-block${n?` fb-selected`:``}${T?` fb-error`:``}${D?` fb-next`:``}`,style:{"--fb-cat":S},title:N,children:[z(`div`,{className:`fb-block-bar`,style:{height:bg},children:[E||f.enabled?I(`span`,{className:`fb-breakpoint nodrag${E?` fb-breakpoint-on`:``}`,title:F.t(E?`fbd_debug_breakpoint_remove`:`fbd_debug_breakpoint_set`),onClick:f.enabled?t=>{t.stopPropagation(),f.toggleBreakpoint(e)}:void 0}):null,I(`span`,{className:`fb-block-name`,children:u.name}),u.comment?I(Re,{className:`fb-block-note`}):null,d?z(w,{children:[I(`button`,{type:`button`,className:`fb-block-action nodrag`,title:F.t(`fbd_menu_properties`),onClick:t=>{t.stopPropagation(),d.select(e)},children:I(O,{})}),I(`button`,{type:`button`,className:`fb-block-action nodrag`,title:F.t(`fbd_menu`),onClick:e=>{e.stopPropagation(),l(e.currentTarget)},children:I(ce,{})})]}):null]}),z(`div`,{className:`fb-block-title`,style:{height:xg},children:[I(ng,{type:u.type,color:S}),I(`span`,{className:`fb-block-type`,children:m!=null&&m.user?m.user.name:u.type}),a.order[e]===void 0?null:I(`span`,{className:`fb-block-order`,children:a.order[e]})]}),v?I(`div`,{className:`fb-block-detail`,style:{height:Sg.detail},children:P()}):null,Array.from({length:y},(e,t)=>{var n;let r=h[t],i=_[t];return z(`div`,{className:`fb-pin-row`,style:{height:Cg},children:[I(`span`,{className:`fb-pin-in`,children:r?z(w,{children:[r.id,x.has(r.id)?null:I(kg,{value:((n=u.params)==null?void 0:n[r.id])??r.default,type:r.type,clock:r.clock,onChange:k&&(e=>k(r.id,e))})]}):null}),I(`span`,{className:`fb-pin-out`,children:i?i.id:null})]},t)}),I(`div`,{style:{height:Sg.frame}}),h.map((e,t)=>{var n;let r=b+t*Cg+Cg/2;return z(B.Fragment,{children:[I(od,{type:`target`,position:Y.Left,id:e.id,className:`fb-handle`,style:{top:r,"--fb-pin":rg[e.type]},title:e.type}),(n=u.pins)!=null&&(n=n[e.id])!=null&&n.inverted?I(`div`,{className:`fb-inverted`,style:{top:r}}):null]},`in-${e.id}`)}),_.map((t,n)=>{let r=b+n*Cg+Cg/2;return z(B.Fragment,{children:[I(od,{type:`source`,position:Y.Right,id:t.id,className:`fb-handle`,style:{top:r,"--fb-pin":rg[t.type]},title:t.type}),I(dg,{signal:`${a.prefix}${e}.${t.id}`,type:t.type,clock:t.clock,forced:f.forced.has(`${a.prefix}${e}.${t.id}`),style:{top:r-Cg+2}})]},`out-${t.id}`)}),c&&d?z(p,{anchorEl:c,open:!0,onClose:()=>l(null),onClick:e=>e.stopPropagation(),children:[z(g,{onClick:L(()=>d.select(e)),children:[I(j,{children:I(O,{fontSize:`small`})}),I(i,{children:F.t(`fbd_menu_properties`)})]}),m!=null&&m.user?z(g,{onClick:L(()=>d.openInstance(e)),children:[I(j,{children:I(Ke,{fontSize:`small`})}),I(i,{children:F.t(`fbd_instance_open`)})]}):null,f.enabled?z(g,{onClick:L(()=>f.toggleBreakpoint(e)),children:[I(j,{children:I(me,{fontSize:`small`})}),I(i,{children:F.t(E?`fbd_debug_breakpoint_remove`:`fbd_debug_breakpoint_set`)})]}):null,z(g,{onClick:L(()=>d.duplicate(e)),children:[I(j,{children:I(o,{fontSize:`small`})}),I(i,{children:F.t(`fbd_menu_duplicate`)})]}),z(g,{onClick:L(()=>d.remove(e)),children:[I(j,{children:I(te,{fontSize:`small`,color:`error`})}),I(i,{children:F.t(`Delete`)})]})]}):null]})}var Mg=G(jg);_();function Ng({data:e,selected:t}){return z(w,{children:[I(jp,{isVisible:t,minWidth:80,minHeight:40}),I(`div`,{className:`fb-comment${t?` fb-selected`:``}`,children:e.text})]})}var Pg=G(Ng);_();var Fg=14,Ig=6.6;function Lg(e){let{x:t,y:n,width:r}=e;return z(w,{children:[I(`polygon`,{points:`${t},${n-8} ${t+r},${n-8} ${t+r+6},${n} ${t+r},${n+8} ${t},${n+8}`,style:{stroke:e.stroke,fill:e.fill},strokeWidth:1.5}),I(`text`,{x:t+5,y:n+3.5,className:`fb-mark-text`,children:e.text})]})}function Rg({id:e,source:t,sourceHandleId:n,sourceX:r,sourceY:i,targetX:o,targetY:s,sourcePosition:c,targetPosition:l,selected:u,data:d}){let f=W(yg),p=W(lg),m=v(null),h=v(null),g=f.links[e],_=(g==null?void 0:g.type)||`ANY`,[y,b,x]=f.linkStyle===`orthogonal`?ic({sourceX:r,sourceY:i,targetX:o,targetY:s,sourcePosition:c,targetPosition:l,borderRadius:0,offset:12}):Gs({sourceX:r,sourceY:i,targetX:o,targetY:s,sourcePosition:c,targetPosition:l}),S=g!=null&&g.error?`#f44336`:rg[_],C=u?3:2,w=!!(d!=null&&d.mark),T=!w&&_!==`BOOL`&&Math.abs(o-r)+Math.abs(s-i)>120;if(a(()=>p.subscribe(`${f.prefix}${t}.${n}`,e=>{if(_===`BOOL`){if(e===void 0){var t;(t=m.current)==null||t.style.removeProperty(`--fb-live`)}else{var n;(n=m.current)==null||n.style.setProperty(`--fb-live`,e?`#00e676`:`#78909c`)}}else h.current&&(h.current.textContent=e===void 0?``:ug(e,_))}),[p,f.prefix,t,n,_,T]),w){let t=(d==null?void 0:d.label)||(g==null?void 0:g.name)||``,n=Math.max(24,t.length*Ig+10),a=`var(--fb-live, ${S})`,c=`M ${r} ${i} h ${Fg} M ${o-Fg} ${s} H ${o}`;return z(`g`,{ref:m,className:`fb-mark`,children:[I(`path`,{id:e,d:c,fill:`none`,className:`react-flow__edge-path`,style:{stroke:a,strokeWidth:C,strokeDasharray:g!=null&&g.error?`4 3`:void 0}}),I(`path`,{d:c,fill:`none`,strokeOpacity:0,strokeWidth:16,className:`react-flow__edge-interaction`}),I(Lg,{x:r+Fg,y:i,width:n,text:t,stroke:a,fill:f.background}),I(Lg,{x:o-Fg-n-6,y:s,width:n,text:t,stroke:a,fill:f.background})]})}return z(`g`,{ref:m,children:[g!=null&&g.feedback?I(`path`,{d:y,fill:`none`,style:{stroke:`var(--fb-live, ${S})`},strokeWidth:C+4}):null,I(`path`,{id:e,d:y,fill:`none`,className:`react-flow__edge-path`,style:{stroke:g!=null&&g.feedback?f.background:`var(--fb-live, ${S})`,strokeWidth:g!=null&&g.feedback?2:C,strokeDasharray:g!=null&&g.error?`6 4`:void 0}}),I(`path`,{d:y,fill:`none`,strokeOpacity:0,strokeWidth:16,className:`react-flow__edge-interaction`}),T?I(`text`,{ref:h,x:b,y:x-5,textAnchor:`middle`,className:`fb-live-label`}):null]})}var zg=G(Rg);_();function Bg(e,t,n){switch(e.kind){case`waiting`:return{text:F.t(`fbd_online_waiting`)};case`no-data`:return{text:F.t(`fbd_online_no_data`,e.seconds),color:`warning`};case`stalled`:return{text:F.t(`fbd_online_stalled`,e.cycle),color:`error`};case`no-values`:return{text:F.t(`fbd_online_no_values`,e.cycle),color:`warning`};case`paused`:return{text:t!=null&&t.at?F.t(`fbd_online_paused_at`,n(t.at),e.cycle):F.t(`fbd_online_paused`,e.cycle),color:`warning`};default:return{text:e.mode===`event`?`${F.t(`fbd_online_cycle`,e.cycle)} · ${F.t(`fbd_online_event`)}`:F.t(`fbd_online_cycle`,e.cycle)}}}function Vg(e){let{active:t,running:n,changed:r,debug:i,onCommand:a}=e,o=W(lg),[s,l]=M({kind:`waiting`}),u=T(e=>l(t=>JSON.stringify(t)===JSON.stringify(e)?t:e),[]);gg({active:t,socket:e.socket,instance:e.instance,scriptId:e.scriptId,path:e.path,bus:o,onStatus:u,onError:e.onError,onDebug:e.onDebug});let{text:f,color:p}=Bg(s,i,e.nameOf),m=i?Object.keys(i.forced).length:0,h=(i==null?void 0:i.breakpoints.length)||0,g=t&&n&&!!i,_=[g&&m?z(c,{variant:`caption`,color:`warning`,component:`div`,children:[F.t(`fbd_debug_forced_count`,m),` `,I(d,{size:`small`,color:`warning`,className:`fb-online-link`,onClick:()=>a({command:`release`}),children:F.t(`fbd_debug_release_all`)})]},`forced`):null,g&&h?z(c,{variant:`caption`,component:`div`,children:[F.t(`fbd_debug_breakpoint_count`,h),` `,I(d,{size:`small`,className:`fb-online-link`,onClick:()=>a({command:`breakpoint`,on:!1}),children:F.t(`fbd_debug_remove_all`)})]},`breakpoints`):null,e.commandError?I(c,{variant:`caption`,color:`error`,component:`div`,children:e.commandError},`error`):null].filter(e=>e);return z(`div`,{className:`fb-online`,children:[g?z(`div`,{className:`fb-online-steer`,children:[i.paused?I(`button`,{type:`button`,className:`fb-tool fb-tool-go`,title:F.t(`fbd_debug_resume`),onClick:()=>a({command:`resume`}),children:I(de,{})}):I(`button`,{type:`button`,className:`fb-tool`,title:F.t(`fbd_debug_pause`),onClick:()=>a({command:`pause`}),children:I(pe,{})}),I(`button`,{type:`button`,className:`fb-tool`,title:F.t(`fbd_debug_cycle`),onClick:()=>a({command:`cycle`}),children:I(Fe,{})}),I(`button`,{type:`button`,className:`fb-tool`,disabled:!i.breaks,title:F.t(i.breaks?`fbd_debug_step`:`fbd_debug_save_once`),onClick:()=>a({command:`step`}),children:I(je,{})})]}):null,n?t?z(c,{variant:`caption`,color:p,className:`fb-online-status`,title:r?`${f}\n${F.t(`fbd_online_changed`)}`:f,children:[f,r?z(c,{component:`span`,variant:`caption`,color:`warning`,children:[` `,`· `,F.t(`fbd_online_changed_short`)]}):null]}):null:I(c,{variant:`caption`,color:`warning`,className:`fb-online-status`,title:F.t(`fbd_online_not_running`),children:F.t(`fbd_online_not_running`)}),z(`button`,{type:`button`,className:`fb-online-toggle${t?` fb-online-on`:``}`,onClick:e.onToggle,title:F.t(`fbd_online_tooltip`),children:[I(t?ee:We,{}),F.t(`fbd_online`)]}),_.length?I(`div`,{className:`fb-online-notices`,children:_}):null]})}_();var Hg=`application/x-iobroker-fbd`;function Ug(e,t){let[n,r]=M(()=>{try{let n=window.localStorage.getItem(e);return n?JSON.parse(n):t}catch{return t}});return[n,t=>{r(t);try{window.localStorage.setItem(e,JSON.stringify(t))}catch{}}]}function Wg(e){let{onAdd:t,isBlock:n,userBlocks:r}=e,[i,a]=M(``),[o,s]=Ug(`FbEditor.palette.tab`,`blocks`),[c,l]=Ug(`FbEditor.palette.collapsed`,[]),[u,d]=Ug(`FbEditor.favorites`,[]),f=i.trim().toLowerCase(),p=(...e)=>!f||e.some(e=>e==null?void 0:e.toLowerCase().includes(f)),m=[...n?[`interface`]:[],...Um,`user`,`structure`],h=[...Hm.filter(e=>e.category!==`interface`||n).map(e=>({type:e.type,label:e.type,color:ig[e.category],title:F.t(`fbd_desc_${e.type}`),group:e.category})),...r.map(e=>({type:e.type,label:e.name,color:ig.user,title:`${e.description?`${e.description}\n`:``}${e.type}, v${e.version}`,group:`user`})),{type:`comment`,label:F.t(`fbd_comment`),color:`#94a3b8`,title:F.t(`fbd_comment_desc`),group:`structure`}].filter(e=>p(e.label,e.title)),g=e=>d(u.includes(e)?u.filter(t=>t!==e):[...u,e]),_=e=>{let n=u.includes(e.type);return z(`div`,{className:`fb-palette-item`,style:{"--fb-cat":e.color},draggable:!0,title:e.title,onDragStart:t=>{t.dataTransfer.setData(Hg,e.type),t.dataTransfer.effectAllowed=`move`},onClick:()=>t(e.type),children:[I(ng,{type:e.type,color:e.color}),I(`span`,{className:`fb-palette-label`,children:e.label}),I(`button`,{type:`button`,className:`fb-palette-star${n?` fb-on`:``}`,title:F.t(n?`fbd_favorite_remove`:`fbd_favorite_add`),onClick:t=>{t.stopPropagation(),g(e.type)},children:I(n?Ie:Le,{})})]},e.type)},v=e=>{let t=h.filter(t=>t.group===e),n=e===`user`&&!f&&!r.length?I(`div`,{className:`fb-palette-hint`,children:F.t(`fbd_no_user_blocks`)}):null;if(!t.length&&!n)return null;let i=!!f||!c.includes(e);return z(`div`,{children:[z(`div`,{className:`fb-palette-category`,onClick:()=>l(i?[...c,e]:c.filter(t=>t!==e)),children:[I(i?ae:ie,{}),I(`span`,{children:F.t(`fbd_category_${e}`)}),I(`span`,{className:`fb-palette-count`,children:t.length||``})]}),i?z(w,{children:[t.map(_),n]}):null]},e)},y;if(o===`variables`){let t=e.variables.filter(e=>p(e.name,e.oid));y=t.length?I(w,{children:t.map(t=>z(`div`,{className:`fb-palette-variable`,onClick:()=>e.onShowVariable(t.blockId),title:t.oid,children:[I(ng,{type:t.direction===`in`?`STATE_IN`:`STATE_OUT`,color:ig.iobroker}),z(`div`,{className:`fb-palette-variable-text`,children:[I(`div`,{children:t.name}),I(`div`,{className:`fb-palette-variable-oid`,children:t.oid||F.t(`fbd_no_state`)})]})]},t.blockId))}):I(`div`,{className:`fb-palette-hint`,children:F.t(`fbd_no_variables`)})}else if(o===`favorites`){let e=h.filter(e=>u.includes(e.type));y=e.length?I(w,{children:e.map(_)}):I(`div`,{className:`fb-palette-hint`,children:F.t(`fbd_no_favorites`)})}else y=I(w,{children:m.map(v)});let b=m.every(e=>c.includes(e));return z(`div`,{className:`fb-palette`,children:[z(`div`,{className:`fb-palette-search`,children:[I(se,{}),I(`input`,{value:i,placeholder:F.t(`fbd_search`),onChange:e=>a(e.target.value)}),o===`blocks`?I(`button`,{type:`button`,className:`fb-palette-fold`,title:F.t(b?`fbd_expand_all`:`fbd_collapse_all`),onClick:()=>l(b?[]:m),children:I(b?ue:le,{})}):null]}),I(`div`,{className:`fb-tabs`,children:[`blocks`,`variables`,`favorites`].map(e=>I(`button`,{type:`button`,className:`fb-tab${o===e?` fb-tab-active`:``}`,onClick:()=>s(e),children:F.t(`fbd_tab_${e}`)},e))}),I(`div`,{className:`fb-palette-list`,children:y})]})}var Gg=160;function Kg(e,t,n){var r,i,a;let o=((r=e.params)==null?void 0:r[n])??((i=t.inputs.find(e=>e.id===n))==null?void 0:i.default);if(((a=t.inputs.find(e=>e.id===n))==null?void 0:a.type)===`TIME`)return Pp(o)??0;let s=typeof o==`number`?o:Number(o);return Number.isFinite(s)?s:0}function qg(e){return t=>e.some(([e,n])=>t>=e&&t<n)}function Jg(e,t){let n=e/Gg,r=[];for(let e=0;e<=Gg;e++)r.push(t(e?n:0,e/Gg,!e));return r[0].map((e,t)=>r.map(e=>e[t]))}function Yg(e,t,n=0){for(let r=Math.max(n,1);r<e.length;r++)if(e[r]===t&&e[r-1]!==t)return r;return-1}function Xg(e,t,n){let r=Kg(t,n,`PT`)||1e3,i=r*3.4,a=qg((e=>e.map(([e,t])=>[e*r/i,t*r/i]))(e===`TON`?[[.2,.8],[1.2,3.1]]:e===`TOF`?[[.2,.6],[2,2.3]]:[[.2,.45],[1.8,3.1]])),o=Lp[e](),[s,c,l]=Jg(i,(e,t)=>{let n=a(t);return o.run(n,r,e),[+!!n,+!!o.Q,o.ET]}),u,d;if(e===`TP`)u=Yg(c,1),d=Yg(c,0,u);else if(e===`TON`)for(d=Yg(c,1),u=d;u>0&&s[u-1]===1;)u--;else u=Yg(s,0),d=Yg(c,0,u);return{duration:i,traces:[{id:`IN`,kind:`bool`,values:s,min:0,max:1},{id:`Q`,kind:`bool`,values:c,min:0,max:1},{id:`ET`,kind:`number`,values:l,min:0,max:r}],span:u>=0&&d>u?{id:`PT`,from:u,to:d,label:Fp(r)}:void 0}}function Zg(e){let t=qg([[.1,.35],[.55,.8]]),n=Lp[e](),[r,i]=Jg(1e3,(e,r,i)=>{let a=t(r);return n.run(a,i),[+!!a,+!!n.Q]});return{duration:1e3,traces:[{id:`CLK`,kind:`bool`,values:r,min:0,max:1},{id:`Q`,kind:`bool`,values:i,min:0,max:1}]}}function Qg(e){let t=qg([[.1,.2],[.55,.75]]),n=qg([[.35,.45],[.62,.68]]),r=Lp[e](),[i,a,o]=Jg(1e3,(e,i)=>{let a=t(i),o=n(i);return r.run(a,o),[+!!a,+!!o,+!!r.Q1]});return{duration:1e3,traces:[{id:e===`RS`?`S`:`S1`,kind:`bool`,values:i,min:0,max:1},{id:e===`RS`?`R1`:`R`,kind:`bool`,values:a,min:0,max:1},{id:`Q1`,kind:`bool`,values:o,min:0,max:1}]}}function $g(e,t){let n=Kg(e,t,`HIGH`),r=Kg(e,t,`LOW`);n<=r&&(n=r+1);let i=(n+r)/2,a=(n-r)*1.4,o=wm(),[s,c]=Jg(1e3,(e,t)=>{let s=i+a*Math.sin(t*Math.PI*4);return o.run(s,n,r),[s,+!!o.Q]});return{duration:1e3,traces:[{id:`IN`,kind:`number`,values:s,min:i-a,max:i+a,levels:[{value:n,label:`HIGH`},{value:r,label:`LOW`}]},{id:`Q`,kind:`bool`,values:c,min:0,max:1}]}}function e_(e,t){let n=Kg(e,t,`UP`),r=Kg(e,t,`DOWN`),i=Math.max(n>0?10/n:1,r>0?7/r:1),a=Math.min(Math.max(i*2.4*1e3,1e3),36e5),o=Tm(),[s,c]=Jg(a,(e,t,i)=>{let a=t<.1?0:t<.55?10:3;return o.run(a,n,r,e,i),[a,o.OUT]});return{duration:a,traces:[{id:`IN`,kind:`number`,values:s,min:0,max:10},{id:`OUT`,kind:`number`,values:c,min:0,max:10}]}}function t_(e,t){let n=Kg(e,t,`T`)||1e3,r=n*6,i=Em(),[a,o]=Jg(r,(e,t,r)=>{let a=t<.1?0:1;return i.run(a,n,e,r),[a,i.OUT]}),s=Yg(a,1);return{duration:r,traces:[{id:`IN`,kind:`number`,values:a,min:0,max:1},{id:`OUT`,kind:`number`,values:o,min:0,max:1,levels:[{value:.632,label:`63%`}]}],span:{id:`T`,from:s,to:s+Math.round(n/r*Gg),label:Fp(n)}}}function n_(e,t,n){let r=Math.round(Kg(t,n,`PV`)),i=Math.min(Math.max(r,1),8)+1,a=qg(Array.from({length:i},(e,t)=>{let n=.12+t*.72/i;return[n,n+.3/i]})),o=qg(e===`CTU`?[[.9,.95]]:[[.02,.07]]),s=Lp[e](),[c,l,u,d]=Jg(1e3,(e,t,n)=>{let i=a(t),c=o(t);return s.run(i,c,r,n),[+!!i,+!!c,s.CV,+!!s.Q]});return{duration:1e3,traces:[{id:e===`CTU`?`CU`:`CD`,kind:`bool`,values:c,min:0,max:1},{id:e===`CTU`?`R`:`LD`,kind:`bool`,values:l,min:0,max:1},{id:`CV`,kind:`number`,values:u,min:Math.min(0,...u),max:Math.max(1,r,...u),levels:[{value:r,label:`PV`}]},{id:`Q`,kind:`bool`,values:d,min:0,max:1}]}}function r_(e,t){let n=Kg(e,t,`TH`)||1e3,r=Kg(e,t,`TL`)||1e3,i=(n+r)*3.5,a=qg([[.08,.85]]),o=Im(),[s,c]=Jg(i,(e,t)=>{let i=a(t);return o.run(i,n,r,e),[+!!i,+!!o.Q]}),l=Yg(c,1),u=Yg(c,0,l);return{duration:i,traces:[{id:`EN`,kind:`bool`,values:s,min:0,max:1},{id:`Q`,kind:`bool`,values:c,min:0,max:1}],span:l>=0&&u>l?{id:`TH`,from:l,to:u,label:Fp(n)}:void 0}}function i_(e,t){if(!t||t.user)return null;switch(e.type){case`TON`:case`TOF`:case`TP`:return Xg(e.type,e,t);case`R_TRIG`:case`F_TRIG`:return Zg(e.type);case`RS`:case`SR`:return Qg(e.type);case`HYST`:return $g(e,t);case`RAMP`:return e_(e,t);case`PT1`:return t_(e,t);case`CTU`:case`CTD`:return n_(e.type,e,t);case`BLINK`:return r_(e,t);default:return null}}_();var a_=280,o_=38,s_=30,c_=6,l_={IN:`#22c55e`,CLK:`#22c55e`,S:`#22c55e`,S1:`#22c55e`,R:`#ef4444`,R1:`#ef4444`,Q:`#f59e0b`,Q1:`#f59e0b`,OUT:`#f59e0b`,ET:`#a855f7`,PT:`#3b82f6`,T:`#3b82f6`};function u_(e,t,n){let r=e=>o_+238*e/n,i=n=>{let r=e.max-e.min||1;return t+s_-c_-(n-e.min)/r*18},a=[];return e.values.forEach((t,n)=>{e.kind===`bool`&&n&&a.push(`${r(n)},${i(e.values[n-1])}`),a.push(`${r(n)},${i(t)}`)}),a.join(` `)}function d_(e){let{block:t,def:n}=e,r=s(()=>i_(t,n),[t,n]);if(!r)return null;let i=r.traces[0].values.length-1,a=e=>o_+238*e/i,o=r.traces.length+ +!!r.span;return z(`svg`,{className:`fb-preview`,viewBox:`0 0 ${a_} ${o*s_}`,children:[r.traces.map((e,t)=>{var n;let r=t*s_,a=l_[e.id]||`#94a3b8`,o=e.max-e.min||1;return z(`g`,{children:[I(`text`,{x:4,y:r+s_/2+4,className:`fb-preview-label`,children:e.id}),(n=e.levels)==null?void 0:n.map(t=>{let n=r+s_-c_-(t.value-e.min)/o*18;return I(`line`,{x1:o_,x2:276,y1:n,y2:n,className:`fb-preview-level`},t.label)}),I(`polyline`,{points:u_(e,r,i),fill:`none`,stroke:a,strokeWidth:2,strokeLinejoin:`round`})]},e.id)}),r.span?(()=>{let{span:e}=r,t=r.traces.length*s_,n=a(e.from),i=a(e.to),o=t+s_/2,s=l_[e.id]||`#3b82f6`;return z(`g`,{children:[I(`text`,{x:4,y:o+4,className:`fb-preview-label`,children:e.id}),[n,i].map(e=>I(`line`,{x1:e,x2:e,y1:0,y2:t+s_-4,className:`fb-preview-mark`},e)),I(`line`,{x1:n+2,x2:i-2,y1:o+6,y2:o+6,stroke:s,strokeWidth:1.5,markerStart:`url(#fb-arrow)`,markerEnd:`url(#fb-arrow)`}),I(`text`,{x:(n+i)/2,y:o,textAnchor:`middle`,className:`fb-preview-label`,children:e.label}),I(`defs`,{children:I(`marker`,{id:`fb-arrow`,viewBox:`0 0 10 10`,refX:`5`,refY:`5`,markerWidth:`6`,markerHeight:`6`,orient:`auto-start-reverse`,children:I(`path`,{d:`M 0 0 L 10 5 L 0 10 z`,fill:s})})})]})})():null]})}_();var f_=/^[A-Za-z_][A-Za-z0-9_]*$/;function p_(e){let t=`fbd_option_${e}`,n=F.t(t);return n===t?e:n}var m_=`FbEditor.properties.closed`;function h_(){try{return JSON.parse(window.localStorage.getItem(m_)||`[]`)}catch{return[]}}function g_(e){let[t,n]=M(()=>!h_().includes(e.id));return z(`div`,{className:`fb-section`,children:[z(`div`,{className:`fb-section-head`,onClick:()=>{n(!t);try{let n=h_().filter(t=>t!==e.id);window.localStorage.setItem(m_,JSON.stringify(t?[...n,e.id]:n))}catch{}},children:[I(t?_e:ae,{}),I(`span`,{children:e.title})]}),t?I(`div`,{className:`fb-section-body`,children:e.children}):null]})}function $(e){return z(`div`,{className:`fb-row`,children:[I(`div`,{className:`fb-row-label`,children:e.label}),z(`div`,{className:`fb-row-field`,children:[e.children,e.hint?I(`div`,{className:`fb-row-hint`,children:e.hint}):null]})]})}function __(e){let{value:t,type:n,onChange:r}=e,i=t=>n===`TIME`&&typeof t==`number`?e.clock?Ip(t):Fp(t):t===void 0?``:String(t),[o,s]=M(i(t));a(()=>s(i(t)),[t]);let c=Og(o,n)===null,u=()=>{let e=Og(o,n);e!==null&&e!==t&&r(e)};return I(l,{size:`small`,fullWidth:!0,value:o,error:c,placeholder:e.clock?`08:30`:n,helperText:c?F.t(n===`TIME`?`fbd_invalid_time`:`fbd_invalid_number`):void 0,onChange:e=>s(e.target.value),onBlur:u,onKeyDown:e=>e.key===`Enter`&&u()})}function v_(e){let{value:t,onCommit:n}=e,[r,i]=M(t);return a(()=>i(t),[t]),I(l,{size:`small`,fullWidth:!0,multiline:e.multiline,minRows:e.multiline?2:void 0,placeholder:e.placeholder,value:r,error:e.error,helperText:e.helperText,onChange:e=>i(e.target.value),onBlur:()=>r!==t&&n(r),onKeyDown:i=>!e.multiline&&i.key===`Enter`&&r!==t&&n(r),slotProps:e.endAdornment?{input:{endAdornment:e.endAdornment}}:void 0})}var y_=null;function b_(e){let[t,n]=M([]);return a(()=>{let t=!0;return y_||=e.socket.getAdapterInstances().then(e=>(e||[]).sort((e,t)=>{var n,r;return Number(!!(t!=null&&(n=t.common)!=null&&n.messagebox))-Number(!!(e!=null&&(r=e.common)!=null&&r.messagebox))}).map(e=>{var t;return e==null||(t=e._id)==null?void 0:t.replace(`system.adapter.`,``)}).filter(e=>!!e)).catch(()=>[]),y_.then(e=>t&&n(e)),()=>{t=!1}},[e.socket]),I(y,{freeSolo:!0,size:`small`,fullWidth:!0,options:t,value:e.value,onChange:(t,n)=>e.onChange((n||``).trim()),onInputChange:(t,n,r)=>r===`input`&&e.onChange(n.trim()),renderInput:t=>I(l,{...t,error:!e.value,placeholder:`telegram.0`})})}function x_(e){let[t,n]=M(!1);return z(w,{children:[I(v_,{value:e.value,placeholder:`0 8 * * *`,error:!e.value.trim(),onCommit:t=>e.onChange(t.trim()),endAdornment:I(U,{position:`end`,children:I(ne,{size:`small`,title:F.t(`fbd_cron_dialog`),onClick:()=>n(!0),children:I(Ne,{fontSize:`small`})})})}),t?I(C,{theme:e.theme,cron:e.value,noWizard:!0,onClose:()=>n(!1),onOk:t=>{n(!1),e.onChange(t)}}):null]})}function S_(e){let{value:t,parameters:n,onChange:r}=e,[i,o]=M(t);a(()=>o(t),[t]);let s=hh(i,n);return I(l,{size:`small`,fullWidth:!0,multiline:!0,minRows:6,maxRows:20,value:i,error:!!s,helperText:s||F.t(`fbd_code_hint`,n.join(`, `)),onChange:e=>o(e.target.value),onBlur:()=>i!==t&&r(i),onKeyDown:e=>{if(e.key===`Tab`&&!e.shiftKey){e.preventDefault();let t=e.target,{selectionStart:n,selectionEnd:r}=t;o(`${i.substring(0,n)} ${i.substring(r)}`),window.requestAnimationFrame(()=>t.setSelectionRange(n+4,n+4))}},slotProps:{htmlInput:{spellCheck:!1,className:`fb-code`}}})}function C_(e){let{signal:t,type:n,debug:r,onCommand:i}=e,a=Object.prototype.hasOwnProperty.call(r.forced,t),[o,s]=M(``),u=Og(o,n),p=e=>i({command:`force`,signal:t,value:e});return z(f,{className:`fb-force`,children:[z(c,{variant:`body2`,children:[e.label,` =`,` `,I(fg,{signal:t,type:n}),a?z(c,{component:`span`,variant:`caption`,color:`warning`,children:[` `,F.t(`fbd_debug_forced`)]}):null]}),z(f,{className:`fb-force-row`,children:[n===`BOOL`?z(w,{children:[I(d,{size:`small`,variant:`outlined`,onClick:()=>p(!0),children:`TRUE`}),I(d,{size:`small`,variant:`outlined`,onClick:()=>p(!1),children:`FALSE`})]}):z(w,{children:[I(l,{size:`small`,value:o,placeholder:n,error:!!o&&u===null,onChange:e=>s(e.target.value),onKeyDown:e=>e.key===`Enter`&&u!==null&&p(u),sx:{width:100}}),I(d,{size:`small`,variant:`outlined`,disabled:u===null||!o&&n!==`STRING`,onClick:()=>u!==null&&p(u),children:F.t(`fbd_debug_force`)})]}),a?I(d,{size:`small`,color:`warning`,onClick:()=>i({command:`release`,signal:t}),children:F.t(`fbd_debug_release`)}):null]})]})}function w_(e){let{block:t,def:n,debug:r,onCommand:i}=e;if(!r)return null;let a=oh(t,n);return z(g_,{id:`online`,title:F.t(`fbd_online`),children:[I($,{label:F.t(`fbd_debug_breakpoint`),hint:F.t(r.breaks?`fbd_debug_breakpoint_hint`:`fbd_debug_save_once`),children:I(h,{size:`small`,disabled:!r.breaks,checked:r.breakpoints.includes(t.id),onChange:e=>i({command:`breakpoint`,block:t.id,on:e.target.checked})})}),a.map(e=>I(C_,{label:e.id,signal:`${t.id}.${e.id}`,type:e.type,debug:r,onCommand:i},e.id)),a.length?I(`div`,{className:`fb-row-hint`,children:F.t(`fbd_debug_force_hint`)}):null]})}function T_(e){var t,n;let{edge:r,edgeView:i,onEdgeChange:a,debug:o}=e,s=!!((t=r.data)!=null&&t.mark);return z(w,{children:[z(g_,{id:`link`,title:F.t(`fbd_link`),children:[I($,{label:F.t(`fbd_link_from_to`),children:I(c,{variant:`body2`,children:i?`${i.from} → ${i.to}`:`${r.source} → ${r.target}`})}),i?I($,{label:F.t(`fbd_type`),children:I(c,{variant:`body2`,children:i.type})}):null,I($,{label:F.t(`fbd_link_mark_short`),hint:F.t(`fbd_link_mark_hint`),children:I(h,{size:`small`,checked:s,onChange:e=>a({...r,data:{...r.data,mark:e.target.checked}})})}),s?I($,{label:F.t(`fbd_link_label`),children:I(v_,{value:((n=r.data)==null?void 0:n.label)||``,placeholder:i==null?void 0:i.name,onCommit:e=>a({...r,data:{...r.data,label:e.trim()||void 0}})})}):null]}),e.online&&o&&i?I(g_,{id:`online`,title:F.t(`fbd_online`),children:I(C_,{label:i.from,signal:`${r.source}.${r.sourceHandle}`,type:i.type,debug:o,onCommand:e.onCommand})}):null]})}function E_(e){var t;let{block:n,onBlockChange:r,connectedInputs:i}=e,a=Xm(n.type,e.userBlocks);if(!a)return I(c,{color:`error`,children:F.t(`Unknown block type %s`,n.type)});let o=(e,t)=>r({...n,params:{...n.params,[e]:t}}),s=t=>{var r;let i=((r=n.params)==null?void 0:r[t.id])??t.default,s=F.t(`fbd_param_${t.id}`);if(t.type===`OID`)return I($,{label:s,children:I(l,{size:`small`,fullWidth:!0,value:i===void 0?``:String(i),error:t.required&&!i,onChange:e=>o(t.id,e.target.value.trim()),slotProps:{input:{endAdornment:I(U,{position:`end`,children:I(ne,{size:`small`,title:F.t(`fbd_select_state`),onClick:()=>e.onSelectId(t.id),children:I(A,{fontSize:`small`})})})}}})},t.id);if(t.type===`ENUM`)return I($,{label:s,children:I(l,{select:!0,size:`small`,fullWidth:!0,value:i===void 0?``:String(i),onChange:e=>o(t.id,e.target.value),children:(t.options||[]).map(e=>I(g,{value:e,children:p_(e)},e))})},t.id);if(t.type===`NAME`){let e=i===void 0?``:String(i);return I($,{label:s,children:I(l,{size:`small`,fullWidth:!0,value:e,error:!f_.test(e),helperText:f_.test(e)?void 0:F.t(`fbd_invalid_name`),onChange:e=>o(t.id,e.target.value.trim())})},t.id)}if(t.type===`INSTANCE`)return I($,{label:s,children:I(b_,{value:i===void 0?``:String(i),socket:e.socket,onChange:e=>o(t.id,e)})},t.id);if(t.type===`CRON`)return I($,{label:s,hint:F.t(`fbd_cron_hint`),children:I(x_,{value:i===void 0?``:String(i),theme:e.theme,onChange:e=>o(t.id,e)})},t.id);if(t.type===`CODE`)return I(`div`,{className:`fb-code-row`,children:I(S_,{value:i===void 0?``:String(i),parameters:ph(n,a),onChange:e=>o(t.id,e)})},t.id);let c=nh(n,t.type,a);return I($,{label:s,hint:t.id.endsWith(`Offset`)?F.t(`fbd_offset_hint`):void 0,children:c===`BOOL`?I(h,{size:`small`,checked:i===!0,onChange:e=>o(t.id,e.target.checked)}):I(__,{value:i,type:c,onChange:e=>o(t.id,e)},`${t.id}-${c}`)},t.id)},u=ih(n,a),p=a.user,m=p?e.library[p.type]:void 0,_=!!i_(n,a);return z(w,{children:[z(g_,{id:`general`,title:F.t(`fbd_section_general`),children:[I($,{label:F.t(`fbd_name`),children:I(v_,{value:n.name,onCommit:e=>e.trim()&&r({...n,name:e.trim()})})}),I($,{label:F.t(`fbd_type`),children:I(l,{size:`small`,fullWidth:!0,disabled:!0,value:p?`${p.name} (v${p.version})`:`${n.type} - ${F.t(`fbd_desc_${n.type}`)}`,title:p?p.description:F.t(`fbd_desc_${n.type}`)})}),I($,{label:F.t(`fbd_comment_field`),children:I(v_,{value:n.comment||``,placeholder:F.t(`fbd_comment_placeholder`),multiline:!0,onCommit:e=>{let t={...n,comment:e.trim()||void 0};t.comment||delete t.comment,r(t)}})}),p?z(f,{className:`fb-row-actions`,children:[m&&m.user.version>p.version?z(w,{children:[I(c,{variant:`body2`,color:`warning`,component:`div`,children:F.t(`fbd_block_newer`,m.user.version)}),I(d,{size:`small`,variant:`outlined`,onClick:()=>e.onUpdateUserBlock(p.type),title:F.t(`fbd_block_update_hint`),children:F.t(`fbd_block_update`)})]}):null,I(d,{size:`small`,onClick:()=>e.onOpenInstance(n),title:F.t(`fbd_instance_open_hint`),children:F.t(`fbd_instance_open`)}),m&&e.onOpenScript?I(d,{size:`small`,onClick:()=>e.onOpenScript(m.scriptId),children:F.t(`fbd_block_open`)}):null]}):null]}),e.online?I(w_,{...e,block:n,def:a}):null,(t=a.params)!=null&&t.length||a.extensible||a.extensibleOutputs?z(g_,{id:`params`,title:F.t(`fbd_section_params`),children:[(a.params||[]).map(s),a.extensible?I($,{label:F.t(`fbd_param_inputs`),children:I(l,{select:!0,size:`small`,fullWidth:!0,value:u.length,onChange:e=>o(`inputs`,Number(e.target.value)),children:Array.from({length:a.extensible.max-a.extensible.min+1},(e,t)=>a.extensible.min+t).map(e=>I(g,{value:e,children:e},e))})}):null,a.extensibleOutputs?I($,{label:F.t(`fbd_param_outputs`),children:I(l,{select:!0,size:`small`,fullWidth:!0,value:oh(n,a).length,onChange:e=>o(`outputs`,Number(e.target.value)),children:Array.from({length:a.extensibleOutputs.max-a.extensibleOutputs.min+1},(e,t)=>a.extensibleOutputs.min+t).map(e=>I(g,{value:e,children:e},e))})}):null]}):null,u.length?I(g_,{id:`inputs`,title:F.t(`fbd_inputs`),children:u.map(e=>{var t,a,s;return I($,{label:`${e.id} (${e.type})`,children:z(`div`,{className:`fb-input-field`,children:[i.has(e.id)?I(c,{variant:`body2`,className:`fb-dim`,children:F.t(`fbd_connected`)}):e.type===`BOOL`?I(h,{size:`small`,checked:(((t=n.params)==null?void 0:t[e.id])??e.default)===!0,onChange:t=>o(e.id,t.target.checked)}):I(__,{value:((a=n.params)==null?void 0:a[e.id])??e.default,type:e.type,clock:e.clock,onChange:t=>o(e.id,t)}),e.type===`BOOL`?z(`label`,{className:`fb-invert`,title:F.t(`fbd_inverted`,e.id),children:[I(D,{size:`small`,checked:!!((s=n.pins)!=null&&(s=s[e.id])!=null&&s.inverted),onChange:t=>r({...n,pins:{...n.pins,[e.id]:{inverted:t.target.checked}}})}),F.t(`fbd_invert_short`)]}):null]})},e.id)})}):null,_?I(g_,{id:`preview`,title:F.t(`fbd_section_preview`),children:I(d_,{block:n,def:a})}):null]})}function D_(e){let{blockInfo:t,onBlockInfoChange:n}=e,r=t?e.library[t.type]:void 0;return z(g_,{id:`block`,title:F.t(`fbd_section_block`),children:[I($,{label:F.t(`fbd_is_block_short`),hint:F.t(`fbd_block_hint`),children:I(h,{size:`small`,checked:!!t,onChange:t=>n(t.target.checked?vh(e.scriptName):void 0),title:F.t(`fbd_is_block`)})}),t?z(w,{children:[I($,{label:F.t(`fbd_block_name`),children:I(v_,{value:t.name,onCommit:e=>e.trim()&&n({...t,name:e.trim()})})}),I($,{label:F.t(`fbd_block_description`),children:I(v_,{value:t.description||``,multiline:!0,onCommit:e=>n({...t,description:e.trim()})})}),I(`div`,{className:`fb-row-hint`,children:F.t(`fbd_block_type`,t.type,t.version)}),r?I(c,{variant:`caption`,component:`div`,color:`warning`,children:F.t(`fbd_block_duplicate`,r.user.name)}):null]}):null]})}function O_(e){var t;let n=((t=e.node)==null?void 0:t.type)===`fbBlock`?e.node.data.block:null;if(!n)return z(g_,{id:`doc-keys`,title:F.t(`fbd_doc_keys`),children:[[[`Ctrl+Z / Ctrl+Y`,`fbd_key_undo`],[`Ctrl+C / Ctrl+X / Ctrl+V`,`fbd_key_copy`],[`Del`,`fbd_key_delete`],[`Ctrl+F`,`fbd_key_find`],[`F8`,`fbd_key_pause`],[`F9`,`fbd_key_breakpoint`],[`F10`,`fbd_key_step`],[`Esc`,`fbd_key_back`]].map(([e,t])=>I($,{label:I(`code`,{children:e}),children:I(c,{variant:`body2`,children:F.t(t)})},e)),I(`div`,{className:`fb-row-hint`,children:F.t(`fbd_doc_double_click`)})]});let r=Xm(n.type,e.userBlocks);if(!r)return I(c,{color:`error`,children:F.t(`Unknown block type %s`,n.type)});let i=e=>e.map(e=>I($,{label:I(`code`,{children:e.id}),children:z(c,{variant:`body2`,children:[e.type,e.default===void 0?``:` = ${e.clock&&typeof e.default==`number`?Ip(e.default):String(e.default)}`]})},e.id)),a=ih(n,r),o=oh(n,r);return z(w,{children:[z(g_,{id:`doc-block`,title:r.user?r.user.name:n.type,children:[I(c,{variant:`body2`,sx:{mb:1},children:r.user?r.user.description||r.user.name:F.t(`fbd_desc_${n.type}`)}),r.stateful?I(`div`,{className:`fb-row-hint`,children:F.t(`fbd_doc_stateful`)}):null,r.timeDependent?I(`div`,{className:`fb-row-hint`,children:F.t(`fbd_doc_time`)}):null]}),a.length?I(g_,{id:`doc-inputs`,title:F.t(`fbd_inputs`),children:i(a)}):null,o.length?I(g_,{id:`doc-outputs`,title:F.t(`fbd_outputs`),children:i(o)}):null,i_(n,r)?I(g_,{id:`preview`,title:F.t(`fbd_section_preview`),children:I(d_,{block:n,def:r})}):null]})}function k_(e){var t;let{node:n,edge:r,cycle:i,mode:o,onCycleChange:s}=e,[c,u]=M(null),[f,p]=M(`properties`),m=(n==null?void 0:n.type)===`fbBlock`?n.data.block:null;a(()=>{e.showProperties&&p(`properties`)},[e.showProperties]);let h;return h=f===`docs`?I(O_,{...e}):m?I(E_,{...e,block:m,onSelectId:u}):(n==null?void 0:n.type)===`fbComment`?I(g_,{id:`comment`,title:F.t(`fbd_comment`),children:I(l,{size:`small`,fullWidth:!0,multiline:!0,minRows:4,value:n.data.text,onChange:t=>e.onCommentChange(n.id,t.target.value)})}):r?I(T_,{...e,edge:r}):z(w,{children:[e.blockInfo?null:z(g_,{id:`diagram`,title:F.t(`fbd_diagram`),children:[I($,{label:F.t(`fbd_cycle_mode`),hint:F.t(o===`cyclic`?`fbd_runs_cyclic`:`fbd_runs_event`),children:z(l,{select:!0,size:`small`,fullWidth:!0,value:i.mode,onChange:e=>s({...i,mode:e.target.value}),children:[I(g,{value:`auto`,children:F.t(`fbd_mode_auto`)}),I(g,{value:`cyclic`,children:F.t(`fbd_mode_cyclic`)}),I(g,{value:`event`,children:F.t(`fbd_mode_event`)})]})}),o===`cyclic`?I($,{label:F.t(`fbd_cycle_time`),hint:`50 - ${Qm} ms`,children:I(l,{size:`small`,fullWidth:!0,type:`number`,value:i.ms,slotProps:{htmlInput:{min:50,max:Qm,step:50}},onChange:e=>s({...i,ms:Number(e.target.value)||0})})}):null]}),I(D_,{...e})]}),z(`div`,{className:`fb-properties`,children:[I(`div`,{className:`fb-tabs`,children:[`properties`,`docs`].map(e=>I(`button`,{type:`button`,className:`fb-tab${f===e?` fb-tab-active`:``}`,onClick:()=>p(e),children:F.t(e===`properties`?`fbd_tab_properties`:`fbd_tab_docs`)},e))}),z(`div`,{className:`fb-properties-content`,children:[h,(n||r)&&f===`properties`?I(d,{size:`small`,color:`error`,startIcon:I(te,{}),onClick:e.onDelete,sx:{mt:1},children:F.t(`Delete`)}):null]}),c&&m?I(P,{theme:e.theme,imagePrefix:`../..`,themeName:e.themeName,themeType:e.themeType,socket:e.socket,selected:String(((t=m.params)==null?void 0:t[c])||``),types:[`state`],onClose:()=>u(null),onOk:t=>{let n=Array.isArray(t)?t[0]:t;u(null),n&&A_(m,c,n,e)}}):null]})}function A_(e,t,n,r){r.onBlockChange({...e,params:{...e.params,[t]:n}})}_();function j_(e){let{text:t,count:n,index:r,onMove:i,onClose:o}=e,s=v(null);return a(()=>{var e,t;(e=s.current)==null||e.focus(),(t=s.current)==null||t.select()},[e.focusKey]),z(f,{className:`fb-search`,sx:{bgcolor:`background.paper`},children:[I(se,{fontSize:`small`,sx:{opacity:.6}}),I(b,{inputRef:s,value:t,placeholder:F.t(`fbd_find_placeholder`),onChange:t=>e.onText(t.target.value),onKeyDown:e=>{e.key===`Enter`?(e.preventDefault(),i(e.shiftKey?-1:1)):e.key===`Escape`&&(e.preventDefault(),o())},sx:{fontSize:13,width:180}}),I(c,{variant:`caption`,className:`fb-search-count`,color:t.trim()&&!n?`error`:void 0,children:t.trim()?n?`${r+1}/${n}`:F.t(`fbd_find_none`):``}),I(ne,{size:`small`,disabled:n<2,title:F.t(`fbd_find_previous`),onClick:()=>i(-1),children:I(we,{fontSize:`small`})}),I(ne,{size:`small`,disabled:n<2,title:F.t(`fbd_find_next`),onClick:()=>i(1),children:I(Ce,{fontSize:`small`})}),I(ne,{size:`small`,title:F.t(`fbd_find_close`),onClick:o,children:I(S,{fontSize:`small`})})]})}_();var M_={fbBlock:Mg,fbComment:Pg},N_={fbLink:zg};function P_(e){return e.map(e=>e.blockId).join(`/`)}function F_(e,t){var n;if(e.type!==`fbBlock`)return null;let{block:r}=e.data;return(n=Xm(r.type,t))!=null&&n.user?{blockId:r.id,type:r.type,name:r.name}:null}function I_(e){let{path:t,userBlocks:n,dark:r,onEnter:i,onSelect:o}=e,c=n[t[t.length-1].type],l=s(()=>og(c.graph),[c]),[u,,d]=Wf(l.nodes),f=s(()=>({...vg(jh(c.graph,{userBlocks:n,isBlock:!0}),c.graph,r,n),debug:{..._g,forced:e.forced},prefix:`${P_(t)}/`,linkStyle:e.linkStyle}),[c,n,r,e.forced,t,e.linkStyle]),p=u.filter(e=>e.selected),m=p.length===1&&p[0].type===`fbBlock`?p[0].data.block:null;return a(()=>o(m),[m,o]),I(yg.Provider,{value:f,children:z(Bf,{nodes:u,edges:l.edges,nodeTypes:M_,edgeTypes:N_,onNodesChange:d,onNodeDoubleClick:(e,t)=>{let r=F_(t,n);r&&i(r)},nodesDraggable:!1,nodesConnectable:!1,edgesReconnectable:!1,deleteKeyCode:null,colorMode:r?`dark`:`light`,fitView:!0,fitViewOptions:{maxZoom:1.2},minZoom:.2,children:[e.grid?I(ep,{variant:Xf.Lines,gap:20,color:`var(--fb-grid)`}):null,I(lp,{showInteractive:!1})]})})}function L_(e){return!e.path.length||!e.userBlocks[e.path[e.path.length-1].type]?null:I(`div`,{className:`fb-instance`,children:I(If,{children:I(I_,{...e})},P_(e.path))})}function R_(e){let{path:t,userBlocks:n,block:r,debug:i}=e,a=t[t.length-1],o=n[a==null?void 0:a.type];if(!o)return null;let s=`${P_(t)}/`,l=e.online&&!!(i!=null&&i.inside),u;if(r){let t=Xm(r.type,n),a=new Set(o.graph.links.filter(e=>e.to[0]===r.id).map(e=>e.to[1])),f=t!=null&&t.user?{blockId:r.id,type:r.type,name:r.name}:null;u=z(w,{children:[z(g_,{id:`general`,title:F.t(`fbd_section_general`),children:[I($,{label:F.t(`fbd_name`),children:I(c,{variant:`body2`,children:r.name})}),I($,{label:F.t(`fbd_type`),children:I(c,{variant:`body2`,children:t!=null&&t.user?`${t.user.name} (v${t.user.version})`:`${r.type} - ${F.t(`fbd_desc_${r.type}`)}`})}),r.comment?I($,{label:F.t(`fbd_comment_field`),children:I(c,{variant:`body2`,children:r.comment})}):null,((t==null?void 0:t.params)||[]).map(e=>{var t;return I($,{label:F.t(`fbd_param_${e.id}`),children:I(c,{variant:`body2`,className:`fb-mono`,children:String(((t=r.params)==null?void 0:t[e.id])??e.default??``)})},e.id)}),ih(r,t).filter(e=>!a.has(e.id)).map(e=>I($,{label:`${e.id} (${e.type})`,children:I(c,{variant:`body2`,className:`fb-mono`,children:wg(e,r)})},e.id)),f?I(d,{size:`small`,onClick:()=>e.onEnter(f),title:F.t(`fbd_instance_open_hint`),children:F.t(`fbd_instance_open`)}):null]}),l&&i&&t?I(g_,{id:`online`,title:F.t(`fbd_online`),children:oh(r,t).map(t=>I(C_,{label:t.id,signal:`${s}${r.id}.${t.id}`,type:t.type,debug:i,onCommand:e.onCommand},t.id))}):null,t&&i_(r,t)?I(g_,{id:`preview`,title:F.t(`fbd_section_preview`),children:I(d_,{block:r,def:t})}):null]})}else u=I(g_,{id:`instance`,title:F.t(`fbd_instance`),children:I(c,{variant:`body2`,children:F.t(`fbd_instance_title`,a.name,o.name,o.version)})});return I(`div`,{className:`fb-properties`,children:z(`div`,{className:`fb-properties-content`,children:[u,I(`div`,{className:`fb-row-hint`,children:F.t(`fbd_instance_readonly`)}),e.online&&i&&!i.inside?I(c,{variant:`caption`,component:`div`,color:`warning`,sx:{mt:1},children:F.t(`fbd_instance_save_once`)}):null,I(d,{size:`small`,onClick:()=>e.onNavigate(t.length-1),sx:{mt:1},children:F.t(`fbd_instance_back`)})]})})}var z_=`FbEditor.clipboard`,B_=null;function V_(e,t,n){let r=e.filter(e=>e.selected);if(!r.length)return null;let i=new Set(r.map(e=>e.id)),a=sg(r,t.filter(e=>i.has(e.source)&&i.has(e.target)),{mode:`auto`,ms:0});B_={blocks:a.blocks,links:a.links,comments:a.comments};let o=Sh(a,n);if(o.length){let e={};o.forEach(t=>e[t]=n[t]),B_.userBlocks=e}try{window.localStorage.setItem(z_,JSON.stringify(B_))}catch{}return B_}function H_(){if(B_)return B_;try{let e=window.localStorage.getItem(z_);return e?JSON.parse(e):null}catch{return null}}function U_(e,t,n,r){let i=new Set(t.map(e=>e.id)),a=new Set(t.map(e=>e.type===`fbBlock`?e.data.block.name:``).filter(e=>e)),o=new Set(n.map(e=>e.id)),s=new Map,c=e.blocks.map(e=>{let t=ch(`b`,i);i.add(t),s.set(e.id,t);let n=e.name;return a.has(n)&&(n=ch(`${n.replace(/_\d+$/,``)}_`,a)),a.add(n),{...e,id:t,name:n,pos:[e.pos[0]+r,e.pos[1]+r]}}),l=e.comments.map(e=>{let t=ch(`c`,i);return i.add(t),{...e,id:t,pos:[e.pos[0]+r,e.pos[1]+r]}}),u=og({format:1,runtime:``,cycle:{mode:`auto`,ms:0},blocks:c,links:e.links.filter(e=>s.has(e.from[0])&&s.has(e.to[0])).map(e=>{let t=ch(`l`,o);return o.add(t),{...e,id:t,from:[s.get(e.from[0]),e.from[1]],to:[s.get(e.to[0]),e.to[1]]}}),comments:l});return{nodes:u.nodes.map(e=>({...e,selected:!0})),edges:u.edges}}function W_(e,t,n,r){return e.type!==`CONST`||n===`ANY`||sh(t,n)?null:r.every(e=>sh(n,e))?n:null}function G_(e,t){let n=e==null?``:String(e).trim();switch(t){case`BOOL`:return e===!0||/^(true|1|on|yes)$/i.test(n);case`STRING`:return n;case`INT`:{let t=Number(typeof e==`boolean`?e:n);return Number.isFinite(t)?Math.round(t):0}case`REAL`:{let t=Number(typeof e==`boolean`?e:n);return Number.isFinite(t)?t:0}default:return Og(n,`TIME`)??0}}function K_(e,t,n,r){let i=n.trim().toLowerCase();if(!i)return[];let a=e=>e!=null&&String(e).toLowerCase().includes(i),o=new Set;for(let t of e){var s;if(t.type===`fbComment`){a(t.data.text)&&o.add(t.id);continue}let{block:e}=t.data,n=(s=Xm(e.type,r))==null?void 0:s.user;[e.name,e.type,n==null?void 0:n.name,...Object.values(e.params||{})].some(a)&&o.add(t.id)}for(let e of t){var c;a((c=e.data)==null?void 0:c.label)&&(o.add(e.source),o.add(e.target))}return e.filter(e=>o.has(e.id)).sort((e,t)=>e.position.x-t.position.x||e.position.y-t.position.y).map(e=>e.id)}_();var q_={fbBlock:Mg,fbComment:Pg},J_={fbLink:zg},Y_={type:`fbLink`},X_=[`Delete`,`Backspace`],Z_=[10,10],Q_=300,$_=100,ev=40,tv=`FbEditor.online`,nv=600,rv={boolean:`BOOL`,number:`REAL`,string:`STRING`,json:`STRING`,object:`STRING`,array:`STRING`},iv=`FbEditor.grid`,av=`FbEditor.links`;function ov(e,t){try{return window.localStorage.getItem(e)??t}catch{return t}}function sv(e,t){try{window.localStorage.setItem(e,t)}catch{}}function cv(e,t){let n={};for(let[r,i]of Object.entries(e||{})){let e=i==null?void 0:i.common;if(r===t||(i==null?void 0:i.type)!==`script`||(e==null?void 0:e.engineType)!==`FBD`)continue;let a=dh(e==null?void 0:e.source),o=a&&bh(a);o&&(!n[o.type]||n[o.type].user.version<o.version)&&(n[o.type]={scriptId:r,user:o,userBlocks:a.userBlocks||{}})}return n}function lv(e,t,n,r,i,a){let o=sg(e,t,n);if(Object.keys(i).length&&(o.userBlocks=i),r){let e=JSON.stringify({...o,block:{...r,version:0}});o.block={...r,version:e===a.content?a.version:a.version+1}}return o}function uv(e){return JSON.stringify(e.block?{...e,block:{...e.block,version:0}}:e)}function dv(e){let t=e.args||[];return e.message===`Parameter "%s" is not set`?F.t(e.message,...t.map(e=>F.t(`fbd_param_${e}`))):F.t(e.message,...t)}function fv(){let{zoom:e}=Uf(),{zoomIn:t,zoomOut:n,zoomTo:r}=Nu();return z(`div`,{className:`fb-zoom`,children:[I(`button`,{type:`button`,className:`fb-tool`,title:F.t(`fbd_zoom_out`),onClick:()=>void n({duration:150}),children:I(Me,{})}),z(`button`,{type:`button`,className:`fb-zoom-value`,title:F.t(`fbd_zoom_reset`),onClick:()=>void r(1,{duration:150}),children:[Math.round(e*100),`%`]}),I(`button`,{type:`button`,className:`fb-tool`,title:F.t(`fbd_zoom_in`),onClick:()=>void t({duration:150}),children:I(N,{})})]})}function pv(e){let t=e.target;return!!t&&(t.isContentEditable||[`INPUT`,`TEXTAREA`,`SELECT`].includes(t.tagName)||!!t.closest(`[role="dialog"]`))}function mv(e){var t;let{onChange:n,themeType:r}=e,i=r===`dark`,o=s(()=>og(e.initial),[e.initial]),[l,u,d]=Wf(o.nodes),[p,m,h]=Gf(o.edges),[g,_]=M(e.initial.cycle),[y,b]=M(()=>jh(e.initial)),[x,S]=M(()=>vg(y,e.initial,i)),[C,E]=M(()=>{try{return window.localStorage.getItem(tv)===`true`}catch{return!1}}),[D,O]=M(null),[k,A]=M(null),[j,N]=M(null),[P,L]=M(null),[R,ee]=M([]),[H,U]=M(null),W=v(R);W.current=R;let te=s(()=>new cg,[]),{screenToFlowPosition:ne,getNode:G,getNodes:K,getEdges:q,deleteElements:ae,fitView:oe}=Nu(),ce=Vf(),le=v(null),[ue,de]=M(e.initial.block),[fe,pe]=M(e.initial.userBlocks||{}),me=s(()=>cv(e.scripts,e.scriptId),[e.scripts,e.scriptsHash,e.scriptId]),he=v(n);he.current=n;let ge=v(g);ge.current=g;let _e=v(ue);_e.current=ue;let ve=v(fe),ye=T(e=>{ve.current=e,pe(e)},[]),[Se]=M(()=>{var t;let n=t=>lv(o.nodes,o.edges,e.initial.cycle,e.initial.block,e.initial.userBlocks||{},t),r={content:uv(n({content:``,version:0})),version:((t=e.initial.block)==null?void 0:t.version)||0};return{counting:r,json:JSON.stringify(n(r))}}),Ce=v(Se.counting),we=T(()=>lv(K(),q(),ge.current,_e.current,ve.current,Ce.current),[K,q]),Te=v(Se.json),[Ee,De]=M((t=e.initial.block)==null?void 0:t.version);a(()=>{if(!e.changed){var t;let e=JSON.parse(Te.current);Ce.current={content:uv(e),version:((t=e.block)==null?void 0:t.version)||0}}},[e.changed]);let Oe=v({past:[],future:[],restoring:!1}),Ae=v(0),je=T(e=>{var t;let n=JSON.stringify(e);if(n===Te.current)return;let r=Oe.current;r.restoring?r.restoring=!1:(r.past.push(Te.current),r.past.length>$_&&r.past.shift(),r.future=[]),Te.current=n,De((t=e.block)==null?void 0:t.version);let a=Uh(e);b(a.analysis),S(vg(a.analysis,e,i)),he.current(a.source)},[i]);a(()=>{let e=setTimeout(()=>je(lv(l,p,g,ue,fe,Ce.current)),Q_);return()=>clearTimeout(e)},[l,p,g,ue,fe,je]),a(()=>S(e=>({...e,background:i?`#141414`:`#ffffff`})),[i]);let Me=T(e=>{if(e===Te.current)return;let t=JSON.parse(e),n=og(t);Oe.current.restoring=!0,u(n.nodes),m(n.edges),_(t.cycle),de(t.block),ye(t.userBlocks||{})},[u,m,ye]),Ne=T(()=>{if(W.current.length)return;je(we());let e=Oe.current.past.pop();e!==void 0&&(Oe.current.future.push(Te.current),Me(e))},[je,Me,we]),Fe=T(()=>{if(W.current.length)return;je(we());let e=Oe.current.future.pop();e!==void 0&&(Oe.current.past.push(Te.current),Me(e))},[je,Me,we]);V(e.apiRef,()=>({undo:Ne,redo:Fe}),[Ne,Fe]);let Ie=T(()=>(Ae.current=0,!!V_(K(),q(),ve.current)),[K,q]),Le=T(()=>{let e=H_();if(!e||!e.blocks.length&&!e.comments.length)return!1;e.userBlocks&&ye(xh(ve.current,e.userBlocks)),Ae.current++;let t=U_(e,K(),q(),ev*Ae.current);return u(e=>[...e.map(e=>e.selected?{...e,selected:!1}:e),...t.nodes]),m(e=>[...e.map(e=>e.selected?{...e,selected:!1}:e),...t.edges]),!0},[K,q,u,m,ye]);a(()=>{let e=e=>{if(!(e.ctrlKey||e.metaKey)||e.altKey||pv(e)||W.current.length)return;let t=e.key.toLowerCase();if(t===`z`&&!e.shiftKey)Ne();else if(t===`y`||t===`z`&&e.shiftKey)Fe();else if(t===`c`||t===`x`){var n;if((n=window.getSelection())!=null&&n.toString()||!Ie())return;t===`x`&&ae({nodes:K().filter(e=>e.selected),edges:q().filter(e=>e.selected)})}else if(t===`v`){if(!Le())return}else return;e.preventDefault()};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[Ne,Fe,Ie,Le,ae,K,q]);let[Re,ze]=M(null);a(()=>{if(!Re)return;let e=setTimeout(()=>ze(null),4e3);return()=>clearTimeout(e)},[Re]);let Be=T((e,t,n,r)=>{let i=G(e),a=G(n);if((i==null?void 0:i.type)!==`fbBlock`||(a==null?void 0:a.type)!==`fbBlock`)return null;let o=e=>Xm(e.type,ve.current),s=e=>{let t=G(e.target);return(t==null?void 0:t.type)===`fbBlock`?ih(t.data.block,o(t.data.block)).find(t=>t.id===e.targetHandle):void 0},c=oh(i.data.block,o(i.data.block)).find(e=>e.id===t),l=ih(a.data.block,o(a.data.block)).find(e=>e.id===r);if(!c||!l)return null;let u=q().filter(n=>n.source===e&&n.sourceHandle===t).map(e=>{var t;return((t=s(e))==null?void 0:t.type)||`ANY`});return{source:i.data.block,target:a.data.block,output:c,input:l,retype:W_(i.data.block,c.type,l.type,u)}},[G,q]),Ve=T(e=>{let t=Be(e.source,e.sourceHandle,e.target,e.targetHandle);return!t||!sh(t.output.type,t.input.type)&&!t.retype?!1:!q().some(t=>t.target===e.target&&t.targetHandle===e.targetHandle)},[Be,q]),He=T(e=>{let t=Be(e.source,e.sourceHandle,e.target,e.targetHandle);if(t!=null&&t.retype){var n;let{source:e,retype:r}=t,i=G_((n=e.params)==null?void 0:n.value,r),a={...e,params:{...e.params,type:r,value:i}};u(t=>t.map(t=>t.id===e.id&&t.type===`fbBlock`?{...t,data:{block:a}}:t)),ze({text:F.t(`fbd_link_const_retyped`,e.name,r,wg({id:`value`,type:r},a)),warning:!1})}m(t=>Su({...e,id:ch(`l`,t.map(e=>e.id)),type:`fbLink`},t))},[Be,u,m]),Ue=T((e,t)=>{if(t.isValid!==!1||!t.fromHandle||!t.toHandle)return;let[n,r]=t.fromHandle.type===`source`?[t.fromHandle,t.toHandle]:[t.toHandle,t.fromHandle];if(n.type!==`source`||r.type!==`target`)return;let i=Be(n.nodeId,n.id,r.nodeId,r.id);if(!i)return;let{source:a,target:o,output:s,input:c}=i,l=`${o.name}.${c.id}`,u;u=sh(s.type,c.type)||i.retype?F.t(`fbd_link_refused_taken`,l):a.type===`CONST`&&c.type!==`ANY`?F.t(`fbd_link_refused_const`,a.name,c.type,l):F.t(`fbd_link_refused_type`,s.type,c.type,l),ze({text:u,warning:!0})},[Be]),We=T((e,t)=>{let n=F_(t,ve.current);n&&(ee([n]),U(null))},[]),Ge=T((e,t)=>{let n=ve.current;if(e.startsWith(`@userFb/`)&&!n[e]){let t=me[e];if(!t)return;n=xh(n,{...t.userBlocks,[e]:t.user}),ye(n)}u(r=>{let i=Math.round(t.x/10)*10,a=Math.round(t.y/10)*10;for(;r.some(e=>Math.abs(e.position.x-i)<20&&Math.abs(e.position.y-a)<20);)i+=30,a+=30;let o=r.map(e=>e.selected?{...e,selected:!1}:e);if(e===`comment`)return[{id:ch(`c`,r.map(e=>e.id)),type:`fbComment`,position:{x:i,y:a},width:ag[0],height:ag[1],zIndex:-1,selected:!0,data:{text:F.t(`fbd_comment`)}},...o];if(!Xm(e,n))return r;let s={...sg(r,[],ge.current),userBlocks:n},c=lh(e,[i,a],s);return[...o,{id:c.id,type:`fbBlock`,position:{x:i,y:a},selected:!0,data:{block:c}}]})},[u,ye,me]),Ke=T(e=>{let t=me[e];if(!t)return;let n=xh(ve.current,{...t.userBlocks,[e]:t.user},[e]);ye(n);let r=Xm(e,n),i=new Set(r.inputs.map(e=>e.id)),a=new Set(r.outputs.map(e=>e.id)),o=new Set(K().filter(t=>t.type===`fbBlock`&&t.data.block.type===e).map(e=>e.id));m(e=>e.filter(e=>!(o.has(e.target)&&!i.has(e.targetHandle||``))&&!(o.has(e.source)&&!a.has(e.sourceHandle||``)))),requestAnimationFrame(()=>o.forEach(e=>ce(e)))},[me,ye,K,m,ce]),J=s(()=>Object.values(fe).filter(e=>me[e.type]&&me[e.type].user.version>e.version&&l.some(t=>t.type===`fbBlock`&&t.data.block.type===e.type)),[fe,me,l]),qe=s(()=>Object.values(me).filter(e=>!ue||e.user.type!==ue.type&&!Ch(e.user.type,ue.type,{...e.userBlocks,[e.user.type]:e.user})).map(e=>e.user).sort((e,t)=>e.name.localeCompare(t.name)),[me,ue]),Je=T(e=>{var t;let n=(t=le.current)==null?void 0:t.getBoundingClientRect(),r=n?ne({x:n.left+n.width/2-60,y:n.top+n.height/3}):{x:0,y:0};Ge(e,r)},[Ge,ne]),Ye=T(e=>{let t=e.dataTransfer.getData(Hg);t&&(e.preventDefault(),Ge(t,ne({x:e.clientX,y:e.clientY})))},[Ge,ne]),Xe=T(e=>{e.dataTransfer.types.includes(`application/x-iobroker-fbd`)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`)},[]),Ze=v(new Map);a(()=>{let e=Ze.current;return()=>e.forEach(e=>clearTimeout(e))},[]);let Qe=T((t,n)=>{clearTimeout(Ze.current.get(t)),Ze.current.set(t,setTimeout(()=>{Ze.current.delete(t),e.socket.getObject(n).then(e=>{var r,i,a,o;let s=G(t);if((e==null?void 0:e.type)!==`state`||(s==null?void 0:s.type)!==`fbBlock`||((r=s.data.block.params)==null?void 0:r.oid)!==n)return;let c=s.data.block,l=e.common,d={...c,params:{...c.params}},f=l!=null&&l.type?rv[l.type]:void 0;c.type===`STATE_IN`&&f&&((i=c.params)==null?void 0:i.type)!==f&&(d.params.type=f),RegExp(`^${c.type}_\\d+$`).test(c.name)&&(d.name=n.split(`.`).pop()||c.name),(d.params.type!==((a=c.params)==null?void 0:a.type)||d.name!==c.name)&&(u(e=>e.map(e=>e.id===t&&e.type===`fbBlock`?{...e,data:{block:d}}:e)),requestAnimationFrame(()=>ce(t)),d.params.type!==((o=c.params)==null?void 0:o.type)&&ze({text:F.t(`fbd_state_type_taken`,d.name,String(d.params.type)),warning:!1}))}).catch(()=>{})},nv))},[e.socket,G,u,ce]),$e=T(e=>{var t,n;let r=G(e.id),i=(t=e.params)==null?void 0:t.oid;typeof i==`string`&&i&&(r==null?void 0:r.type)===`fbBlock`&&((n=r.data.block.params)==null?void 0:n.oid)!==i&&Qe(e.id,i),u(t=>t.map(t=>t.id===e.id&&t.type===`fbBlock`?{...t,data:{block:e}}:t));let a=new Set(ih(e,Xm(e.type,ve.current)).map(e=>e.id));m(t=>t.filter(t=>t.target!==e.id||a.has(t.targetHandle||``))),requestAnimationFrame(()=>ce(e.id))},[G,Qe,u,m,ce]),et=T((e,t)=>u(n=>n.map(n=>n.id===e&&n.type===`fbComment`?{...n,data:{text:t}}:n)),[u]),tt=l.filter(e=>e.selected),nt=tt.length===1?tt[0]:null,rt=tt.length?null:p.find(e=>e.selected)||null,it=s(()=>new Set(nt?p.filter(e=>e.target===nt.id).map(e=>e.targetHandle||``):[]),[p,nt]),at=T(()=>{ae({nodes:l.filter(e=>e.selected),edges:p.filter(e=>e.selected)})},[ae,l,p]),ot=T(e=>{e.length&&(u(t=>t.map(t=>({...t,selected:e.includes(t.id)}))),oe({nodes:e.map(e=>({id:e})),maxZoom:1.5,duration:300}))},[u,oe]),st=T(()=>{E(e=>{try{window.localStorage.setItem(tv,String(!e))}catch{}return!e})},[]),[ct,lt]=M(()=>ov(iv,`true`)===`true`),[ut,dt]=M(()=>ov(av,`curved`)===`orthogonal`?`orthogonal`:`curved`),ft=T(()=>{lt(e=>(sv(iv,String(!e)),!e))},[]),pt=T(()=>{dt(e=>{let t=e===`curved`?`orthogonal`:`curved`;return sv(av,t),t})},[]),[mt,ht]=M(0),gt=T(t=>{pg(e.socket,e.instance,e.scriptId,t).then(e=>{A(e),N(null)}).catch(e=>N(F.t(e.message)))},[e.socket,e.instance,e.scriptId]);a(()=>{if(!j)return;let e=setTimeout(()=>N(null),5e3);return()=>clearTimeout(e)},[j]);let _t=C&&!ue&&e.running&&!!k,vt=v({debug:k,steerable:_t});vt.current={debug:k,steerable:_t};let yt=T(e=>{var t;return gt({command:`breakpoint`,block:e,on:!((t=vt.current.debug)!=null&&t.breakpoints.includes(e))})},[gt]),bt=s(()=>_t&&k?{enabled:k.breaks,breakpoints:new Set(k.breakpoints),at:k.paused&&k.at||null,forced:new Set(Object.keys(k.forced)),toggleBreakpoint:yt}:_g,[_t,k,yt]),xt=T(e=>{let t=G(e);return(t==null?void 0:t.type)===`fbBlock`?t.data.block.name:e},[G]),St=v(!1),Ct=T(()=>{let e={};for(let n of K()){var t;n.type===`fbBlock`&&(t=n.measured)!=null&&t.width&&n.measured.height&&(e[n.id]={width:n.measured.width,height:n.measured.height})}let n=$h(we(),{sizes:e,metrics:Sg});St.current=!0,u(e=>e.map(e=>{let t=n[e.id];return t?{...e,position:{x:t[0],y:t[1]}}:e}))},[K,we,u]);a(()=>{St.current&&(St.current=!1,oe({maxZoom:1.2,duration:300}))},[l,oe]);let wt=T(()=>L(e=>({text:(e==null?void 0:e.text)||``,index:(e==null?void 0:e.index)||0,focus:((e==null?void 0:e.focus)||0)+1})),[]),Tt=T((e,t)=>{let n=K_(K(),q(),e,ve.current);if(!n.length)return 0;let r=(t%n.length+n.length)%n.length;return ot([n[r]]),r},[K,q,ot]),Et=T(e=>{let t=Tt(e,0);L(n=>n&&{...n,text:e,index:t})},[Tt]),Dt=T(e=>{P&&L({...P,index:Tt(P.text,P.index+e)})},[P,Tt]),Ot=s(()=>P?K_(l,p,P.text,fe).length:0,[P,l,p,fe]),kt=T(e=>{ee([{blockId:e.id,type:e.type,name:e.name}]),U(null)},[]),At=T(e=>{ee(t=>[...t,e]),U(null)},[]),jt=T(e=>{ee(t=>t.slice(0,e)),U(null)},[]);a(()=>{(R.length&&!l.some(e=>e.id===R[0].blockId&&e.type===`fbBlock`&&e.data.block.type===R[0].type)||R.some(e=>!fe[e.type]))&&jt(0)},[R,l,fe,jt]),a(()=>{let e=e=>{if(e.key===`Escape`&&W.current.length&&!pv(e)){jt(W.current.length-1);return}if(e.ctrlKey||e.metaKey||e.altKey||!/^F(8|9|10)$/.test(e.key)){if((e.ctrlKey||e.metaKey)&&!e.altKey&&e.key.toLowerCase()===`f`&&!W.current.length){var t,n;(t=e.target)!=null&&(n=t.closest)!=null&&n.call(t,`[role="dialog"]`)||(e.preventDefault(),wt())}return}if(vt.current.steerable&&!pv(e)){if(e.preventDefault(),e.key===`F8`){var r;gt({command:(r=vt.current.debug)!=null&&r.paused?`resume`:`pause`})}else e.key===`F10`?gt({command:`step`}):W.current.length||K().filter(e=>e.selected&&e.type===`fbBlock`).forEach(e=>yt(e.id))}};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[wt,gt,yt,K,jt]);let Mt=T(e=>m(t=>t.map(t=>t.id===e.id?{...t,data:e.data}:t)),[m]),Nt=T((e,t)=>{var n;if(!((n=t.data)!=null&&n.mark))return;let r=ne({x:e.clientX,y:e.clientY}),i=G(t.source),a=G(t.target);if(!i||!a)return;let o=e=>{var t,n;return Math.hypot(e.position.x+(((t=e.measured)==null?void 0:t.width)||0)/2-r.x,e.position.y+(((n=e.measured)==null?void 0:n.height)||0)/2-r.y)};ot([o(i)<o(a)?a.id:i.id])},[ne,G,ot]),Pt=s(()=>{if(!rt)return null;let e=(e,t)=>{let n=l.find(t=>t.id===e);return`${(n==null?void 0:n.type)===`fbBlock`?n.data.block.name:e}.${t||``}`},t=x.links[rt.id];return{type:(t==null?void 0:t.type)||`ANY`,name:(t==null?void 0:t.name)||``,from:e(rt.source,rt.sourceHandle),to:e(rt.target,rt.targetHandle)}},[rt,l,x.links]),Ft=T(e=>{u(t=>t.map(t=>!!t.selected==(t.id===e)?t:{...t,selected:t.id===e})),m(e=>e.map(e=>e.selected?{...e,selected:!1}:e)),ht(e=>e+1)},[u,m]),It=T(e=>{let t=G(e);if((t==null?void 0:t.type)!==`fbBlock`)return;let n=U_({blocks:[{...t.data.block,pos:[t.position.x,t.position.y]}],links:[],comments:[]},K(),q(),30);u(e=>[...e.map(e=>e.selected?{...e,selected:!1}:e),...n.nodes])},[G,K,q,u]),Lt=s(()=>({change:$e,select:Ft,duplicate:It,remove:e=>void ae({nodes:[{id:e}]}),openInstance:e=>{let t=G(e);(t==null?void 0:t.type)===`fbBlock`&&kt(t.data.block)}}),[$e,Ft,It,ae,G,kt]),Rt=s(()=>l.filter(e=>e.type===`fbBlock`&&(e.data.block.type===`STATE_IN`||e.data.block.type===`STATE_OUT`)).map(e=>{var t;let n=e.data.block;return{blockId:n.id,name:n.name,oid:String(((t=n.params)==null?void 0:t.oid)||``),direction:n.type===`STATE_IN`?`in`:`out`}}).sort((e,t)=>e.name.localeCompare(t.name)),[l]),zt=s(()=>({...x,runtimeError:D,userBlocks:fe,debug:bt,actions:Lt,linkStyle:ut}),[x,D,fe,bt,Lt,ut]);return I(lg.Provider,{value:te,children:I(yg.Provider,{value:zt,children:z(`div`,{className:`fb-editor fb-theme-${i?`dark`:`light`}`,children:[I(Wg,{onAdd:Je,isBlock:!!ue,userBlocks:qe,variables:Rt,onShowVariable:e=>ot([e])}),z(`div`,{className:`fb-main`,children:[z(`div`,{className:`fb-toolbar`,children:[z(`div`,{className:`fb-toolbar-path`,children:[z(`button`,{type:`button`,className:`fb-toolbar-step${R.length?``:` fb-toolbar-step-active`}`,onClick:()=>jt(0),children:[I(Pe,{}),e.scriptName]}),R.map((e,t)=>{var n;return z(B.Fragment,{children:[I(ie,{className:`fb-toolbar-separator`}),z(`button`,{type:`button`,className:`fb-toolbar-step${t===R.length-1?` fb-toolbar-step-active`:``}`,onClick:()=>jt(t+1),title:(n=fe[e.type])==null?void 0:n.name,children:[I(ng,{type:e.type}),e.name]})]},e.blockId)})]}),z(`div`,{className:`fb-toolbar-tools`,children:[R.length?null:I(fv,{}),I(`span`,{className:`fb-toolbar-gap`}),I(`button`,{type:`button`,className:`fb-tool`,title:F.t(`fbd_layout`),disabled:!l.length||!!R.length,onClick:Ct,children:I(re,{})}),I(`button`,{type:`button`,className:`fb-tool`,title:F.t(`fbd_find`),disabled:!!R.length,onClick:wt,children:I(se,{})}),I(`button`,{type:`button`,className:`fb-tool${ct?` fb-tool-active`:``}`,title:F.t(`fbd_grid`),onClick:ft,children:I(xe,{})}),I(`button`,{type:`button`,className:`fb-tool`,title:F.t(ut===`curved`?`fbd_links_orthogonal`:`fbd_links_curved`),onClick:pt,children:I(ut===`curved`?be:ke,{})}),ue?null:z(w,{children:[I(`span`,{className:`fb-toolbar-gap`}),I(Vg,{active:C,onToggle:st,socket:e.socket,instance:e.instance,scriptId:e.scriptId,path:P_(R),running:e.running,changed:e.changed,onError:O,debug:k,onDebug:A,onCommand:gt,commandError:j,nameOf:xt})]})]})]}),z(`div`,{className:`fb-canvas`,ref:le,children:[z(Bf,{nodes:l,edges:p,nodeTypes:q_,edgeTypes:J_,defaultEdgeOptions:Y_,onNodesChange:d,onEdgesChange:h,onConnect:He,onConnectEnd:Ue,onEdgeDoubleClick:Nt,onNodeDoubleClick:We,isValidConnection:Ve,onDrop:Ye,onDragOver:Xe,connectionLineType:ut===`curved`?zo.Bezier:zo.Step,deleteKeyCode:X_,snapToGrid:ct,snapGrid:Z_,colorMode:i?`dark`:`light`,fitView:!0,fitViewOptions:{maxZoom:1.2},minZoom:.2,children:[ct?I(ep,{variant:Xf.Lines,gap:20,color:`var(--fb-grid)`}):null,I(lp,{showInteractive:!1}),P?I(Gl,{position:`top-center`,children:I(j_,{text:P.text,onText:Et,count:Ot,index:Math.min(P.index,Math.max(Ot-1,0)),onMove:Dt,onClose:()=>L(null),focusKey:P.focus})}):null,I(Ep,{position:`bottom-right`,style:{width:150,height:90},pannable:!0,zoomable:!0,bgColor:`var(--fb-panel)`,maskColor:`var(--fb-mask)`,nodeColor:e=>{var t;return e.type===`fbBlock`?ig[((t=Xm(e.data.block.type,ve.current))==null?void 0:t.category)||`logic`]:`#9e9e9e`}}),y.issues.length||D||J.length?I(Gl,{position:`bottom-center`,children:z(f,{className:`fb-issues`,children:[D?I(c,{variant:`body2`,color:`error`,className:`fb-issue`,onClick:()=>ot(D.blockId?[D.blockId]:[]),children:F.t(`fbd_runtime_error`,D.message)}):null,y.issues.map((e,t)=>I(c,{variant:`body2`,color:e.severity===`error`?`error`:`warning`,className:`fb-issue`,onClick:()=>ot(e.blockIds||(e.blockId?[e.blockId]:[])),children:dv(e)},t)),J.map(e=>I(c,{variant:`body2`,color:`warning`,className:`fb-issue`,onClick:()=>ot(l.filter(t=>t.type===`fbBlock`&&t.data.block.type===e.type).map(e=>e.id)),children:F.t(`fbd_block_outdated`,e.name,me[e.type].user.version,e.version)},e.type))]})}):null,Re?I(Gl,{position:`top-center`,children:I(f,{className:`fb-refused`,children:I(c,{variant:`body2`,color:Re.warning?`warning`:`info`,children:Re.text})})}):null,l.length?null:I(Gl,{position:`top-center`,children:I(c,{variant:`body2`,className:`fb-hint`,children:F.t(`fbd_empty_hint`)})})]}),I(L_,{path:R,userBlocks:fe,dark:i,forced:bt.forced,grid:ct,linkStyle:ut,onEnter:At,onSelect:U})]})]}),R.length?I(R_,{path:R,userBlocks:fe,block:H,online:_t,debug:k,onCommand:gt,onEnter:At,onNavigate:jt}):I(k_,{node:nt,edge:rt,connectedInputs:it,cycle:g,mode:y.mode,onCycleChange:_,onBlockChange:$e,onCommentChange:et,onDelete:at,blockInfo:ue&&{...ue,version:Ee??ue.version},onBlockInfoChange:de,scriptName:e.scriptName,userBlocks:fe,library:me,onUpdateUserBlock:Ke,onOpenScript:e.onOpenScript,onOpenInstance:kt,showProperties:mt,edgeView:Pt,onEdgeChange:Mt,online:_t,debug:k,onCommand:gt,socket:e.socket,theme:e.theme,themeName:e.themeName,themeType:r})]})})})}function hv({ref:e,...t}){let{onChange:n}=t,r=v(null),[i,o]=M(()=>({code:t.code,graph:dh(t.code),key:0}));a(()=>{t.code!==(r.current??i.code)&&(r.current=null,o(e=>({code:t.code,graph:dh(t.code),key:e.key+1})))},[t.code,i.code]);let s=T(e=>{r.current=e,n(e)},[n]);return i.graph?I(If,{children:I(mv,{...t,apiRef:e,initial:i.graph,onChange:s})},i.key):I(f,{sx:{p:2},children:I(c,{color:`error`,children:F.t(`fbd_no_diagram`)})})}export{hv as default};
14
+ `),graph:i,analysis:t}}var Wh={header:22,detail:18,pin:20,frame:6},Gh=160,Kh=100,qh=30,Jh=10,Yh=4;function Xh(e,t){var n;return t.header+(e!=null&&e.user||e!=null&&(n=e.params)!=null&&n.length?t.detail:0)}function Zh(e){let t=0,n=0;e.ids.forEach((r,i)=>{n+=e.wants[i]-t,t+=e.heights[i]+qh}),e.top=n/e.ids.length}function Qh(e){return e.heights.reduce((e,t)=>e+t+qh,0)-qh}function $h(e,t={}){if(!e.blocks.length)return{};let n=jh(e),r=new Set(n.feedback),i=n.links.filter(e=>!r.has(e.id)&&e.from[0]!==e.to[0]),a=t.metrics||Wh,o=a.pin,s=new Map;for(let n of e.blocks){var c;let r=Xm(n.type,e.userBlocks),i=Math.max(ih(n,r).length,oh(n,r).length,1),l=Xh(r,a),u=(c=t.sizes)==null?void 0:c[n.id];s.set(n.id,{id:n.id,block:n,def:r,width:(u==null?void 0:u.width)||Gh,height:(u==null?void 0:u.height)||l+i*o+a.frame,pinTop:l})}let l=new Map,u=new Map;for(let e of i)l.set(e.to[0],[...l.get(e.to[0])||[],e]),u.set(e.from[0],[...u.get(e.from[0])||[],e]);let d=e=>{let t=s.get(e.from[0]),n=oh(t.block,t.def).findIndex(t=>t.id===e.from[1]);return t.pinTop+Math.max(n,0)*o+o/2},f=e=>{let t=s.get(e.to[0]),n=ih(t.block,t.def).findIndex(t=>t.id===e.to[1]);return t.pinTop+Math.max(n,0)*o+o/2},p=e.blocks.map(e=>e.id).sort((e,t)=>(n.order[e]??1/0)-(n.order[t]??1/0)),m=new Map;for(let e of p){let t=0;for(let n of l.get(e)||[])t=Math.max(t,(m.get(n.from[0])??0)+1);m.set(e,t)}for(let e of[...p].reverse()){var h;let t=s.get(e).block.type,n=u.get(e)||[];!((h=l.get(e))!=null&&h.length)&&n.length&&t!==`STATE_IN`&&t!==`FB_IN`&&m.set(e,Math.max(0,Math.min(...n.map(e=>m.get(e.to[0])))-1))}let g=Math.max(...m.values());for(let e of p){var _;let t=s.get(e).block.type;(t===`STATE_OUT`||t===`FB_OUT`)&&!((_=u.get(e))!=null&&_.length)&&m.set(e,g)}let v=Array.from({length:g+1},()=>[]);e.blocks.slice().sort((e,t)=>e.pos[1]-t.pos[1]||e.pos[0]-t.pos[0]).forEach(e=>v[m.get(e.id)].push(e.id));let y=new Map;for(let e of v){let t=0;for(let n of e)y.set(n,t),t+=s.get(n).height+qh}let b=(e,t)=>{let n=e.map((e,n)=>({id:e,i:n,want:t(e)??y.get(e)})).sort((e,t)=>e.want-t.want||e.i-t.i),r=[];for(let e of n){let t={ids:[e.id],wants:[e.want],heights:[s.get(e.id).height],top:e.want};for(r.push(t);r.length>1;){let e=r[r.length-1],t=r[r.length-2];if(t.top+Qh(t)+qh<=e.top)break;t.ids.push(...e.ids),t.wants.push(...e.wants),t.heights.push(...e.heights),Zh(t),r.pop()}}e.length=0;for(let t of r){let n=t.top;t.ids.forEach((r,i)=>{y.set(r,n),n+=t.heights[i]+qh,e.push(r)})}},x=e=>e.length?e.reduce((e,t)=>e+t,0)/e.length:null,S=e=>x((l.get(e)||[]).map(e=>y.get(e.from[0])+d(e)-f(e))),C=e=>x((u.get(e)||[]).map(e=>y.get(e.to[0])+f(e)-d(e)));for(let e=0;e<Yh;e++){for(let e=1;e<v.length;e++)b(v[e],S);for(let e=v.length-2;e>=0;e--)b(v[e],C)}for(let e=1;e<v.length;e++)b(v[e],S);let w=Math.min(...e.blocks.map(e=>e.pos[0])),T=Math.min(...e.blocks.map(e=>e.pos[1])),E=Math.min(...y.values()),D={},O=Math.round(w/Jh)*Jh;for(let e of v)if(e.length){for(let t of e)D[t]=[O,Math.round(T+y.get(t)-E)];O+=Math.round((Math.max(...e.map(e=>s.get(e).width))+Kh)/Jh)*Jh}return D}Object.entries({en:{fbd_search:`Search`,fbd_category_iobroker:`ioBroker`,fbd_category_logic:`Logic`,fbd_category_timers:`Timers`,fbd_category_compare:`Comparison`,fbd_category_arithmetic:`Arithmetic`,fbd_category_structure:`Structure`,fbd_comment:`Comment`,fbd_comment_desc:`A note on the diagram; it is not executed`,fbd_no_state:`no state selected`,fbd_select_state:`Select state`,fbd_instance_name:`Instance name`,fbd_inputs:`Inputs`,fbd_connected:`connected`,fbd_inverted:`Invert %s`,fbd_invalid_time:`A time like 500ms, 2s, 1m30s`,fbd_invalid_number:`Not a number`,fbd_param_oid:`State`,fbd_param_type:`Type`,fbd_param_ack:`Write as acknowledged (ack)`,fbd_param_minInterval:`Minimum time between writes`,fbd_param_value:`Value`,fbd_param_inputs:`Number of inputs`,fbd_diagram:`Diagram`,fbd_cycle_mode:`Execution`,fbd_mode_auto:`Automatic`,fbd_mode_cyclic:`Cyclic`,fbd_mode_event:`When an input changes`,fbd_runs_cyclic:`The diagram runs cyclically`,fbd_runs_event:`The diagram runs when an input changes`,fbd_cycle_time:`Cycle time (ms)`,fbd_empty_hint:`Drag blocks from the left onto the canvas and connect an output with an input`,fbd_no_diagram:`This script does not contain a function block diagram`,"Unknown block type %s":`Unknown block type %s`,"Invalid block ID %s":`Invalid block ID %s`,"Duplicate block ID %s":`Duplicate block ID %s`,'Parameter "%s" is not set':`Parameter "%s" is not set`,"The connection refers to a missing block or pin":`The connection refers to a missing block or pin`,"Types do not match: %s cannot be connected to %s":`Types do not match: %s cannot be connected to %s`,"Input %s is connected more than once":`Input %s is connected more than once`,"Loop without a block that stores a value: %s":`Loop without a block that stores a value: %s`,"Timers need the cyclic mode, in the event mode they only run when an input changes":`Timers need the cyclic mode, in the event mode they only run when an input changes`,fbd_desc_AND:`AND: true if all inputs are true`,fbd_desc_OR:`OR: true if any input is true`,fbd_desc_XOR:`Exclusive OR: true for an odd number of true inputs`,fbd_desc_NOT:`NOT: inverts the input`,fbd_desc_RS:`Flip-flop, reset dominant`,fbd_desc_SR:`Flip-flop, set dominant`,fbd_desc_R_TRIG:`Rising edge: true for one cycle when the input becomes true`,fbd_desc_F_TRIG:`Falling edge: true for one cycle when the input becomes false`,fbd_desc_TON:`On delay: Q becomes true when IN was true for PT`,fbd_desc_TOF:`Off delay: Q stays true for PT after IN became false`,fbd_desc_TP:`Pulse: a rising edge of IN gives a pulse of length PT`,fbd_desc_GT:`Greater than`,fbd_desc_GE:`Greater than or equal`,fbd_desc_LT:`Less than`,fbd_desc_LE:`Less than or equal`,fbd_desc_EQ:`Equal`,fbd_desc_NE:`Not equal`,fbd_desc_ADD:`Addition`,fbd_desc_SUB:`Subtraction`,fbd_desc_MUL:`Multiplication`,fbd_desc_DIV:`Division (by 0 gives 0)`,fbd_desc_MIN:`Smallest input`,fbd_desc_MAX:`Largest input`,fbd_desc_STATE_IN:`Reads an ioBroker state`,fbd_desc_STATE_OUT:`Writes an ioBroker state when the value changes`,fbd_desc_CONST:`A constant value`,fbd_online:`Online`,fbd_online_tooltip:`Show the values of the running diagram`,fbd_online_waiting:`Waiting for data…`,fbd_online_no_data:`No data for %s s - is the script running?`,fbd_online_stalled:`The diagram does not run anymore (cycle %s)`,fbd_online_cycle:`Cycle %s`,fbd_online_event:`waits for inputs`,fbd_online_not_running:`The script does not run`,fbd_online_changed:`The diagram was changed - the values belong to the saved one`,fbd_runtime_error:`Error while running: %s`,fbd_online_no_values:`Cycle %s - save the diagram once to see its values`,fbd_category_interface:`Interface`,fbd_category_user:`Own blocks`,fbd_desc_FB_IN:`An input of this block`,fbd_desc_FB_OUT:`An output of this block`,fbd_param_pin:`Pin name`,fbd_invalid_name:`Letters, digits and _ only, not starting with a digit`,fbd_no_user_blocks:`No own blocks yet - a diagram becomes one with "This diagram is a block" in its settings`,fbd_is_block:`This diagram is a block`,fbd_block_hint:`A block is placed in other diagrams, as often as needed. Its FB_IN and FB_OUT blocks are its pins; every saved change is a new version.`,fbd_block_name:`Name of the block`,fbd_block_description:`Description`,fbd_block_type:`Type %s, version %s`,fbd_block_duplicate:`The diagram "%s" defines the same type`,fbd_block_newer:`Version %s is available`,fbd_block_update:`Update`,fbd_block_update_hint:`Takes the new version for all instances in this diagram`,fbd_block_open:`Open block`,fbd_block_outdated:`New version of "%s": %s (this diagram: %s)`,"Inputs and outputs of a block only work in the diagram of a block":`Inputs and outputs of a block only work in the diagram of a block`,"A block cannot read or write states - give it inputs and outputs instead":`A block cannot read or write states - give it inputs and outputs instead`,"Invalid pin name %s":`Invalid pin name %s`,"The pin name %s is used twice":`The pin name %s is used twice`,"The block %s contains itself":`The block %s contains itself`,"The block %s has errors: %s":`The block %s has errors: %s`,"Invalid block type %s":`Invalid block type %s`,fbd_category_control:`Control`,fbd_desc_HYST:`Two-point switch: Q becomes true when IN rises above HIGH and false when it falls below LOW`,fbd_desc_RAMP:`Ramp: OUT follows IN, by at most UP per second upwards and DOWN per second downwards (0: no limit)`,fbd_desc_PT1:`Low pass of the first order (PT1): OUT follows IN with the time constant T`,fbd_desc_PID:`PID controller: set point SP, process value PV, output Y between YMIN and YMAX; TN or TV 0 leaves that part out`,fbd_online_paused:`Paused (cycle %s)`,fbd_online_paused_at:`Paused in front of %s (cycle %s)`,fbd_debug_resume:`Run on (F8)`,fbd_debug_pause:`Pause (F8)`,fbd_debug_cycle:`One cycle`,fbd_debug_step:`One block (F10)`,fbd_debug_save_once:`Save the diagram once, then breakpoints and single steps work`,fbd_debug_forced_count:`Forced values: %s`,fbd_debug_release_all:`Release all`,fbd_debug_breakpoint_count:`Breakpoints: %s`,fbd_debug_remove_all:`Remove all`,fbd_debug_breakpoint_set:`Set a breakpoint (F9)`,fbd_debug_breakpoint_remove:`Remove the breakpoint (F9)`,fbd_debug_breakpoint:`Breakpoint`,fbd_debug_breakpoint_hint:`The diagram stops in front of this block (F9)`,fbd_debug_forced:`forced`,fbd_debug_force:`Force`,fbd_debug_release:`Release`,fbd_debug_force_hint:`A forced value holds until it is released or the online view ends - and it also reaches the states the diagram writes.`,fbd_link:`Link`,fbd_link_mark:`Show as a connection mark`,fbd_link_mark_hint:`Instead of a line through the diagram, both ends show a mark with a name; a double click jumps to the other end.`,fbd_link_label:`Name of the mark`,fbd_layout:`Arrange automatically`,fbd_find:`Find in the diagram (Ctrl+F)`,fbd_find_placeholder:`Name, type, state…`,fbd_find_none:`none`,fbd_find_previous:`Previous (Shift+Enter)`,fbd_find_next:`Next (Enter)`,fbd_find_close:`Close (Esc)`,"The diagram does not run":`The diagram does not run`,"The diagram is not shown online":`The diagram is not shown online`,"The diagram was saved before values could be forced - save it once":`The diagram was saved before values could be forced - save it once`,"The diagram was saved before it could stop at blocks - save it once":`The diagram was saved before it could stop at blocks - save it once`,fbd_instance_open:`Inside view`,fbd_instance_open_hint:`Shows this instance from inside - online with its own values (double click)`,fbd_instance_title:`Instance "%s" of "%s", version %s`,fbd_instance_readonly:`Read only: this is the block as this diagram carries it. It is changed in its own diagram. Values can be forced here, breakpoints only in the diagram itself.`,fbd_instance_save_once:`Save the diagram once, then the values inside the instances appear`,fbd_instance_back:`Back (Esc)`,fbd_link_refused_type:`Not connected: %s does not fit %s (%s). Only INT becomes REAL by itself.`,fbd_link_refused_taken:`Not connected: %s is connected already - an input takes one link`,fbd_category_memory:`Memory`,fbd_tab_blocks:`Blocks`,fbd_tab_variables:`Variables`,fbd_tab_favorites:`Favorites`,fbd_favorite_add:`Add to the favorites`,fbd_favorite_remove:`Remove from the favorites`,fbd_no_variables:`No states in the diagram yet - they come with STATE_IN and STATE_OUT`,fbd_no_favorites:`No favorites yet - the star at a block puts it here`,fbd_expand_all:`Open all`,fbd_collapse_all:`Close all`,fbd_menu:`More`,fbd_menu_properties:`Properties`,fbd_menu_duplicate:`Duplicate`,fbd_tab_properties:`Properties`,fbd_tab_docs:`Documentation`,fbd_section_general:`General`,fbd_section_params:`Parameters`,fbd_section_preview:`Preview`,fbd_section_block:`Block`,fbd_name:`Name`,fbd_type:`Type`,fbd_comment_field:`Comment`,fbd_comment_placeholder:`Comment…`,fbd_invert_short:`inverted`,fbd_is_block_short:`Is a block`,fbd_link_from_to:`From → to`,fbd_link_mark_short:`As a mark`,fbd_outputs:`Outputs`,fbd_doc_keys:`Keys`,fbd_key_undo:`Undo / redo`,fbd_key_copy:`Copy / cut / paste`,fbd_key_delete:`Delete what is selected`,fbd_key_find:`Find in the diagram`,fbd_key_pause:`Pause / run on (online)`,fbd_key_breakpoint:`Breakpoint at the selected block (online)`,fbd_key_step:`One block on (online)`,fbd_key_back:`Back out of an instance`,fbd_doc_double_click:`A double click on an instance of an own block shows it from inside; on a connection mark it jumps to the other end.`,fbd_doc_stateful:`Remembers its state from one cycle to the next`,fbd_doc_time:`Depends on time - a diagram with it runs cyclically`,fbd_instance:`Instance`,fbd_grid:`Grid`,fbd_links_curved:`Draw links as curves`,fbd_links_orthogonal:`Draw links at right angles`,fbd_zoom_in:`Zoom in`,fbd_zoom_out:`Zoom out`,fbd_zoom_reset:`To 100 %`,fbd_link_const_retyped:`%s is of type %s now (value %s)`,fbd_link_refused_const:`Not connected: %s feeds inputs already that take no %s (%s)`,fbd_state_type_taken:`%s reads the state as %s now, as its object says - change it in the properties if needed`,fbd_desc_LOG:`Writes a line into the log: on a rising edge of TRIG, or when IN changes. %s in the text is the value of IN`,fbd_param_text:`Text`,fbd_param_level:`Level`,fbd_param_when:`When`,fbd_option_edge:`on a rising edge of TRIG`,fbd_option_change:`when IN changes`,fbd_online_changed_short:`changed`,fbd_category_counters:`Counters`,fbd_category_convert:`Conversion`,fbd_category_calendar:`Calendar`,fbd_category_messages:`Messages`,fbd_category_expert:`Expert`,fbd_desc_BLINK:`Blinker: while EN is true, Q is true for TH and false for TL`,fbd_desc_CTU:`Up counter: counts the rising edges of CU, R sets CV to 0. Q: CV reached PV`,fbd_desc_CTD:`Down counter: counts the rising edges of CD down, LD loads PV. Q: CV reached 0`,fbd_desc_CTUD:`Up/down counter: CU counts up, CD down, R sets 0, LD loads PV. QU: CV reached PV, QD: CV reached 0`,fbd_desc_ROUND:`Rounds IN to DIGITS decimals`,fbd_desc_TO_BOOL:`Converts to BOOL: 0, empty text and "false" are false`,fbd_desc_TO_INT:`Converts to INT, rounded; a decimal comma counts as a point, what is no number gives 0`,fbd_desc_TO_REAL:`Converts to REAL; a decimal comma counts as a point, what is no number gives 0`,fbd_desc_TO_TIME:`Converts to TIME: a number is ms, a text may be "2s", "1m30s" or "08:30"`,fbd_desc_TO_STRING:`Converts to text`,fbd_desc_CONCAT:`Joins the inputs into one text - round numbers with ROUND before`,fbd_desc_CLOCK:`The local time: time of day, hour, minute, weekday (1 Monday ... 7 Sunday), day, month and year`,fbd_desc_TIMEWINDOW:`Time window: true from START to END on the chosen days; a window over midnight belongs to the day it starts`,fbd_desc_SCHEDULE:`Schedule: Q is true for one cycle when the time of the cron pattern comes`,fbd_desc_ASTRO:`Sun: Q is true from one event of the sun to another, like from sunset to sunrise; START and END are their times today`,fbd_desc_NOTIFY:`Sends a notification of ioBroker: on a rising edge of TRIG, or when IN changes. At most 5 a minute`,fbd_desc_SENDTO:`Sends a message to an adapter like telegram.0 or pushover.0 (text, message, title, subject): on a rising edge of TRIG, or when IN changes. At most 5 a minute`,fbd_desc_JS:`Own JavaScript: gets IN1 ... INn, dt, firstScan and state (kept between cycles), returns OUT1 or [OUT1, OUT2, ...]`,fbd_param_days:`Days`,fbd_param_cron:`Cron pattern`,fbd_param_start:`From`,fbd_param_end:`To`,fbd_param_startOffset:`Offset of the start`,fbd_param_endOffset:`Offset of the end`,fbd_offset_hint:`In minutes, negative is earlier`,fbd_param_category:`Kind`,fbd_param_instance:`Instance`,fbd_param_title:`Title`,fbd_param_command:`Command`,fbd_param_code:`Code`,fbd_param_outputs:`Number of outputs`,fbd_option_all:`every day`,fbd_option_weekdays:`Monday to Friday`,fbd_option_weekend:`Saturday and Sunday`,fbd_option_message:`Message`,fbd_option_alert:`Alert`,fbd_cron_dialog:`Set the time`,fbd_cron_hint:`Minute hour day month weekday, like "0 8 * * 1-5": at 8:00 from Monday to Friday. With seconds in front, "*/5 * * * * *" is every 5 seconds`,fbd_code_hint:`The code gets %s and returns the value of OUT1, or [OUT1, OUT2, ...]; undefined keeps an output as it is`,"The code has an error: %s":`The code has an error: %s`,fbd_option_nightEnd:`Night end`,fbd_option_nauticalDawn:`Nautical dawn`,fbd_option_dawn:`Dawn`,fbd_option_sunrise:`sunrise`,fbd_option_sunriseEnd:`Sunrise end`,fbd_option_goldenHourEnd:`End of golden hour`,fbd_option_solarNoon:`Solar noon`,fbd_option_goldenHour:`Golden hour`,fbd_option_sunsetStart:`Sunset start`,fbd_option_sunset:`Sunset`,fbd_option_dusk:`Dusk`,fbd_option_nauticalDusk:`Nautical dusk`,fbd_option_night:`Night`,fbd_option_nadir:`Nadir`},de:{fbd_search:`Suchen`,fbd_category_iobroker:`ioBroker`,fbd_category_logic:`Logik`,fbd_category_timers:`Zeit`,fbd_category_compare:`Vergleich`,fbd_category_arithmetic:`Arithmetik`,fbd_category_structure:`Struktur`,fbd_comment:`Kommentar`,fbd_comment_desc:`Eine Notiz im Plan; sie wird nicht ausgeführt`,fbd_no_state:`kein Datenpunkt gewählt`,fbd_select_state:`Datenpunkt auswählen`,fbd_instance_name:`Instanzname`,fbd_inputs:`Eingänge`,fbd_connected:`verbunden`,fbd_inverted:`%s invertieren`,fbd_invalid_time:`Eine Zeit wie 500ms, 2s, 1m30s`,fbd_invalid_number:`Keine Zahl`,fbd_param_oid:`Datenpunkt`,fbd_param_type:`Typ`,fbd_param_ack:`Als bestätigt schreiben (ack)`,fbd_param_minInterval:`Mindestzeit zwischen zwei Schreibvorgängen`,fbd_param_value:`Wert`,fbd_param_inputs:`Anzahl der Eingänge`,fbd_diagram:`Plan`,fbd_cycle_mode:`Ausführung`,fbd_mode_auto:`Automatisch`,fbd_mode_cyclic:`Zyklisch`,fbd_mode_event:`Bei Änderung eines Eingangs`,fbd_runs_cyclic:`Der Plan läuft zyklisch`,fbd_runs_event:`Der Plan läuft bei Änderung eines Eingangs`,fbd_cycle_time:`Zykluszeit (ms)`,fbd_empty_hint:`Bausteine von links auf die Fläche ziehen und einen Ausgang mit einem Eingang verbinden`,fbd_no_diagram:`Dieses Skript enthält keinen Funktionsplan`,"Unknown block type %s":`Unbekannter Bausteintyp %s`,"Invalid block ID %s":`Ungültige Baustein-ID %s`,"Duplicate block ID %s":`Doppelte Baustein-ID %s`,'Parameter "%s" is not set':`Parameter "%s" ist nicht gesetzt`,"The connection refers to a missing block or pin":`Die Verbindung verweist auf einen fehlenden Baustein oder Anschluss`,"Types do not match: %s cannot be connected to %s":`Typen passen nicht: %s kann nicht mit %s verbunden werden`,"Input %s is connected more than once":`Eingang %s ist mehrfach verbunden`,"Loop without a block that stores a value: %s":`Rückkopplung ohne speichernden Baustein: %s`,"Timers need the cyclic mode, in the event mode they only run when an input changes":`Timer brauchen den zyklischen Betrieb, ereignisgesteuert laufen sie nur bei Änderung eines Eingangs`,fbd_desc_AND:`UND: wahr, wenn alle Eingänge wahr sind`,fbd_desc_OR:`ODER: wahr, wenn ein Eingang wahr ist`,fbd_desc_XOR:`Exklusiv-ODER: wahr bei einer ungeraden Anzahl wahrer Eingänge`,fbd_desc_NOT:`NICHT: invertiert den Eingang`,fbd_desc_RS:`Flipflop, rücksetzdominant`,fbd_desc_SR:`Flipflop, setzdominant`,fbd_desc_R_TRIG:`Steigende Flanke: einen Zyklus lang wahr, wenn der Eingang wahr wird`,fbd_desc_F_TRIG:`Fallende Flanke: einen Zyklus lang wahr, wenn der Eingang falsch wird`,fbd_desc_TON:`Einschaltverzögerung: Q wird wahr, wenn IN für PT wahr war`,fbd_desc_TOF:`Ausschaltverzögerung: Q bleibt für PT wahr, nachdem IN falsch wurde`,fbd_desc_TP:`Impuls: eine steigende Flanke an IN erzeugt einen Impuls der Länge PT`,fbd_desc_GT:`Größer als`,fbd_desc_GE:`Größer oder gleich`,fbd_desc_LT:`Kleiner als`,fbd_desc_LE:`Kleiner oder gleich`,fbd_desc_EQ:`Gleich`,fbd_desc_NE:`Ungleich`,fbd_desc_ADD:`Addition`,fbd_desc_SUB:`Subtraktion`,fbd_desc_MUL:`Multiplikation`,fbd_desc_DIV:`Division (durch 0 ergibt 0)`,fbd_desc_MIN:`Kleinster Eingang`,fbd_desc_MAX:`Größter Eingang`,fbd_desc_STATE_IN:`Liest einen ioBroker-Datenpunkt`,fbd_desc_STATE_OUT:`Schreibt einen ioBroker-Datenpunkt, wenn sich der Wert ändert`,fbd_desc_CONST:`Ein fester Wert`,fbd_online:`Online`,fbd_online_tooltip:`Werte des laufenden Plans anzeigen`,fbd_online_waiting:`Warte auf Daten…`,fbd_online_no_data:`Seit %s s keine Daten - läuft das Skript?`,fbd_online_stalled:`Der Plan rechnet nicht mehr (Zyklus %s)`,fbd_online_cycle:`Zyklus %s`,fbd_online_event:`wartet auf Eingänge`,fbd_online_not_running:`Das Skript läuft nicht`,fbd_online_changed:`Der Plan wurde geändert - die Werte gehören zur gespeicherten Fassung`,fbd_runtime_error:`Fehler beim Ausführen: %s`,fbd_online_no_values:`Zyklus %s - den Plan einmal speichern, dann erscheinen die Werte`,fbd_category_interface:`Schnittstelle`,fbd_category_user:`Eigene Bausteine`,fbd_desc_FB_IN:`Ein Eingang dieses Bausteins`,fbd_desc_FB_OUT:`Ein Ausgang dieses Bausteins`,fbd_param_pin:`Name des Anschlusses`,fbd_invalid_name:`Nur Buchstaben, Ziffern und _, nicht mit einer Ziffer am Anfang`,fbd_no_user_blocks:`Noch keine eigenen Bausteine - ein Plan wird zu einem mit „Dieser Plan ist ein Baustein“ in seinen Einstellungen`,fbd_is_block:`Dieser Plan ist ein Baustein`,fbd_block_hint:`Ein Baustein wird in anderen Plänen eingesetzt, beliebig oft. Seine FB_IN- und FB_OUT-Bausteine sind seine Anschlüsse; jede gespeicherte Änderung ist eine neue Version.`,fbd_block_name:`Name des Bausteins`,fbd_block_description:`Beschreibung`,fbd_block_type:`Typ %s, Version %s`,fbd_block_duplicate:`Der Plan „%s“ definiert denselben Typ`,fbd_block_newer:`Version %s ist verfügbar`,fbd_block_update:`Aktualisieren`,fbd_block_update_hint:`Übernimmt die neue Version für alle Instanzen in diesem Plan`,fbd_block_open:`Baustein öffnen`,fbd_block_outdated:`Neue Version von „%s“: %s (in diesem Plan: %s)`,"Inputs and outputs of a block only work in the diagram of a block":`Ein- und Ausgänge eines Bausteins gibt es nur im Plan eines Bausteins`,"A block cannot read or write states - give it inputs and outputs instead":`Ein Baustein kann keine Datenpunkte lesen oder schreiben - dafür gibt es Ein- und Ausgänge`,"Invalid pin name %s":`Ungültiger Anschlussname %s`,"The pin name %s is used twice":`Der Anschlussname %s ist doppelt vergeben`,"The block %s contains itself":`Der Baustein %s enthält sich selbst`,"The block %s has errors: %s":`Der Baustein %s hat Fehler: %s`,"Invalid block type %s":`Ungültiger Bausteintyp %s`,fbd_category_control:`Regelung`,fbd_desc_HYST:`Zweipunktschalter: Q wird wahr, wenn IN über HIGH steigt, und falsch, wenn IN unter LOW fällt`,fbd_desc_RAMP:`Rampe: OUT folgt IN, um höchstens UP pro Sekunde aufwärts und DOWN pro Sekunde abwärts (0: unbegrenzt)`,fbd_desc_PT1:`Tiefpass erster Ordnung (PT1): OUT folgt IN mit der Zeitkonstante T`,fbd_desc_PID:`PID-Regler: Sollwert SP, Istwert PV, Stellgröße Y zwischen YMIN und YMAX; TN oder TV 0 lässt den Anteil weg`,fbd_online_paused:`Angehalten (Zyklus %s)`,fbd_online_paused_at:`Angehalten vor %s (Zyklus %s)`,fbd_debug_resume:`Fortsetzen (F8)`,fbd_debug_pause:`Anhalten (F8)`,fbd_debug_cycle:`Ein Zyklus`,fbd_debug_step:`Ein Baustein (F10)`,fbd_debug_save_once:`Den Plan einmal speichern, dann gehen Haltepunkte und Einzelschritte`,fbd_debug_forced_count:`Erzwungene Werte: %s`,fbd_debug_release_all:`Alle freigeben`,fbd_debug_breakpoint_count:`Haltepunkte: %s`,fbd_debug_remove_all:`Alle entfernen`,fbd_debug_breakpoint_set:`Haltepunkt setzen (F9)`,fbd_debug_breakpoint_remove:`Haltepunkt entfernen (F9)`,fbd_debug_breakpoint:`Haltepunkt`,fbd_debug_breakpoint_hint:`Der Plan hält vor diesem Baustein an (F9)`,fbd_debug_forced:`erzwungen`,fbd_debug_force:`Erzwingen`,fbd_debug_release:`Freigeben`,fbd_debug_force_hint:`Ein erzwungener Wert gilt, bis er freigegeben wird oder die Onlineansicht endet - und wirkt auch auf die Datenpunkte, die der Plan schreibt.`,fbd_link:`Verbindung`,fbd_link_mark:`Als Verbindungsmarke zeigen`,fbd_link_mark_hint:`Statt einer Linie durch den Plan zeigen beide Enden eine Marke mit einem Namen; ein Doppelklick springt zum anderen Ende.`,fbd_link_label:`Name der Marke`,fbd_layout:`Automatisch anordnen`,fbd_find:`Im Plan suchen (Strg+F)`,fbd_find_placeholder:`Name, Typ, Datenpunkt…`,fbd_find_none:`nichts`,fbd_find_previous:`Vorheriger (Umschalt+Enter)`,fbd_find_next:`Nächster (Enter)`,fbd_find_close:`Schließen (Esc)`,"The diagram does not run":`Der Plan läuft nicht`,"The diagram is not shown online":`Der Plan wird nicht online gezeigt`,"The diagram was saved before values could be forced - save it once":`Der Plan wurde gespeichert, bevor sich Werte erzwingen ließen - einmal speichern`,"The diagram was saved before it could stop at blocks - save it once":`Der Plan wurde gespeichert, bevor er an Bausteinen anhalten konnte - einmal speichern`,fbd_instance_open:`Innenansicht`,fbd_instance_open_hint:`Zeigt diese Instanz von innen - online mit ihren eigenen Werten (Doppelklick)`,fbd_instance_title:`Instanz „%s“ von „%s“, Version %s`,fbd_instance_readonly:`Nur lesbar: So steht der Baustein in diesem Plan. Geändert wird er in seinem eigenen Plan. Werte lassen sich hier erzwingen, Haltepunkte nur im Plan selbst.`,fbd_instance_save_once:`Den Plan einmal speichern, dann erscheinen die Werte in den Instanzen`,fbd_instance_back:`Zurück (Esc)`,fbd_link_refused_type:`Nicht verbunden: %s passt nicht zu %s (%s). Nur INT wird von selbst zu REAL.`,fbd_link_refused_taken:`Nicht verbunden: %s ist schon verbunden - ein Eingang nimmt nur eine Verbindung`,fbd_category_memory:`Speicher`,fbd_tab_blocks:`Blöcke`,fbd_tab_variables:`Variablen`,fbd_tab_favorites:`Favoriten`,fbd_favorite_add:`Zu den Favoriten`,fbd_favorite_remove:`Aus den Favoriten entfernen`,fbd_no_variables:`Noch keine Datenpunkte im Plan - sie kommen mit STATE_IN und STATE_OUT`,fbd_no_favorites:`Noch keine Favoriten - der Stern an einem Baustein legt ihn hierher`,fbd_expand_all:`Alle aufklappen`,fbd_collapse_all:`Alle zuklappen`,fbd_menu:`Mehr`,fbd_menu_properties:`Eigenschaften`,fbd_menu_duplicate:`Duplizieren`,fbd_tab_properties:`Eigenschaften`,fbd_tab_docs:`Dokumentation`,fbd_section_general:`Allgemein`,fbd_section_params:`Parameter`,fbd_section_preview:`Vorschau`,fbd_section_block:`Baustein`,fbd_name:`Name`,fbd_type:`Typ`,fbd_comment_field:`Kommentar`,fbd_comment_placeholder:`Kommentar…`,fbd_invert_short:`invertiert`,fbd_is_block_short:`Ist Baustein`,fbd_link_from_to:`Von → nach`,fbd_link_mark_short:`Als Marke`,fbd_outputs:`Ausgänge`,fbd_doc_keys:`Tastenkürzel`,fbd_key_undo:`Rückgängig / wiederholen`,fbd_key_copy:`Kopieren / ausschneiden / einfügen`,fbd_key_delete:`Ausgewähltes löschen`,fbd_key_find:`Im Plan suchen`,fbd_key_pause:`Anhalten / fortsetzen (online)`,fbd_key_breakpoint:`Haltepunkt am gewählten Baustein (online)`,fbd_key_step:`Einen Baustein weiter (online)`,fbd_key_back:`Aus einer Instanz zurück`,fbd_doc_double_click:`Ein Doppelklick auf eine Instanz eines eigenen Bausteins zeigt sie von innen; auf einer Verbindungsmarke springt er zum anderen Ende.`,fbd_doc_stateful:`Merkt sich seinen Zustand von Zyklus zu Zyklus`,fbd_doc_time:`Hängt von der Zeit ab - ein Plan mit ihm läuft zyklisch`,fbd_instance:`Instanz`,fbd_grid:`Raster`,fbd_links_curved:`Verbindungen als Kurven`,fbd_links_orthogonal:`Verbindungen rechtwinklig`,fbd_zoom_in:`Vergrößern`,fbd_zoom_out:`Verkleinern`,fbd_zoom_reset:`Auf 100 %`,fbd_link_const_retyped:`%s ist jetzt vom Typ %s (Wert %s)`,fbd_link_refused_const:`Nicht verbunden: %s speist schon Eingänge, die kein %s nehmen (%s)`,fbd_state_type_taken:`%s liest den Datenpunkt jetzt als %s, wie sein Objekt sagt - bei Bedarf in den Eigenschaften ändern`,fbd_desc_LOG:`Schreibt eine Zeile ins Protokoll: bei steigender Flanke an TRIG oder wenn sich IN ändert. %s im Text ist der Wert von IN`,fbd_param_text:`Text`,fbd_param_level:`Stufe`,fbd_param_when:`Wann`,fbd_option_edge:`bei steigender Flanke an TRIG`,fbd_option_change:`wenn sich IN ändert`,fbd_online_changed_short:`geändert`,fbd_category_counters:`Zähler`,fbd_category_convert:`Umwandlung`,fbd_category_calendar:`Kalender`,fbd_category_messages:`Meldungen`,fbd_category_expert:`Experte`,fbd_desc_BLINK:`Blinker: solange EN wahr ist, ist Q für TH wahr und für TL falsch`,fbd_desc_CTU:`Aufwärtszähler: zählt die steigenden Flanken an CU, R setzt CV auf 0. Q: CV hat PV erreicht`,fbd_desc_CTD:`Abwärtszähler: zählt bei steigenden Flanken an CD herunter, LD lädt PV. Q: CV hat 0 erreicht`,fbd_desc_CTUD:`Auf-/Abwärtszähler: CU zählt hoch, CD herunter, R setzt 0, LD lädt PV. QU: CV hat PV erreicht, QD: CV hat 0 erreicht`,fbd_desc_ROUND:`Rundet IN auf DIGITS Nachkommastellen`,fbd_desc_TO_BOOL:`Wandelt in BOOL: 0, leerer Text und "false" sind falsch`,fbd_desc_TO_INT:`Wandelt in INT, gerundet; ein Dezimalkomma gilt als Punkt, was keine Zahl ist, ergibt 0`,fbd_desc_TO_REAL:`Wandelt in REAL; ein Dezimalkomma gilt als Punkt, was keine Zahl ist, ergibt 0`,fbd_desc_TO_TIME:`Wandelt in TIME: eine Zahl sind ms, ein Text darf "2s", "1m30s" oder "08:30" sein`,fbd_desc_TO_STRING:`Wandelt in Text`,fbd_desc_CONCAT:`Fügt die Eingänge zu einem Text zusammen - Zahlen vorher mit ROUND runden`,fbd_desc_CLOCK:`Die Ortszeit: Uhrzeit, Stunde, Minute, Wochentag (1 Montag ... 7 Sonntag), Tag, Monat und Jahr`,fbd_desc_TIMEWINDOW:`Zeitfenster: wahr von START bis END an den gewählten Tagen; ein Fenster über Mitternacht gehört zum Tag, an dem es beginnt`,fbd_desc_SCHEDULE:`Zeitplan: Q ist einen Zyklus lang wahr, wenn die Zeit des Cron-Musters kommt`,fbd_desc_ASTRO:`Sonne: Q ist wahr von einem Sonnenereignis bis zu einem anderen, etwa von Sonnenuntergang bis Sonnenaufgang; START und END sind ihre Zeiten heute`,fbd_desc_NOTIFY:`Sendet eine ioBroker-Benachrichtigung: bei steigender Flanke an TRIG oder wenn sich IN ändert. Höchstens 5 pro Minute`,fbd_desc_SENDTO:`Sendet eine Nachricht an einen Adapter wie telegram.0 oder pushover.0 (text, message, title, subject): bei steigender Flanke an TRIG oder wenn sich IN ändert. Höchstens 5 pro Minute`,fbd_desc_JS:`Eigenes JavaScript: bekommt IN1 ... INn, dt, firstScan und state (bleibt zwischen den Zyklen), gibt OUT1 oder [OUT1, OUT2, ...] zurück`,fbd_param_days:`Tage`,fbd_param_cron:`Cron-Muster`,fbd_param_start:`Von`,fbd_param_end:`Bis`,fbd_param_startOffset:`Versatz des Beginns`,fbd_param_endOffset:`Versatz des Endes`,fbd_offset_hint:`In Minuten, negativ ist früher`,fbd_param_category:`Art`,fbd_param_instance:`Instanz`,fbd_param_title:`Titel`,fbd_param_command:`Befehl`,fbd_param_code:`Code`,fbd_param_outputs:`Anzahl der Ausgänge`,fbd_option_all:`jeden Tag`,fbd_option_weekdays:`Montag bis Freitag`,fbd_option_weekend:`Samstag und Sonntag`,fbd_option_message:`Meldung`,fbd_option_alert:`Alarm`,fbd_cron_dialog:`Zeit einstellen`,fbd_cron_hint:`Minute Stunde Tag Monat Wochentag, etwa "0 8 * * 1-5": um 8:00 von Montag bis Freitag. Mit Sekunden vorne ist "*/5 * * * * *" alle 5 Sekunden`,fbd_code_hint:`Der Code bekommt %s und gibt den Wert von OUT1 zurück oder [OUT1, OUT2, ...]; undefined lässt einen Ausgang, wie er ist`,"The code has an error: %s":`Der Code hat einen Fehler: %s`,fbd_option_nightEnd:`astronomische Morgendämmerung`,fbd_option_nauticalDawn:`nautische Morgendämmerung`,fbd_option_dawn:`Morgendämmerung`,fbd_option_sunrise:`Sonnenaufgang`,fbd_option_sunriseEnd:`Goldene Morgenstunde`,fbd_option_goldenHourEnd:`Vormittag`,fbd_option_solarNoon:`(Nach-)Mittag`,fbd_option_goldenHour:`Goldene Abendstunde`,fbd_option_sunsetStart:`Sonnenuntergang (Anfang)`,fbd_option_sunset:`Sonnenuntergang`,fbd_option_dusk:`Abenddämmerung`,fbd_option_nauticalDusk:`nautische Abenddämmerung`,fbd_option_night:`Nacht`,fbd_option_nadir:`Nadir`},es:{fbd_search:`Buscar`,fbd_category_iobroker:`ioBroker`,fbd_category_logic:`Lógica`,fbd_category_timers:`Temporizadores`,fbd_category_compare:`Comparación`,fbd_category_arithmetic:`Aritmética`,fbd_category_structure:`Estructura`,fbd_comment:`Comentario`,fbd_comment_desc:`Una nota en el diagrama; no se ejecuta`,fbd_no_state:`ningún estado seleccionado`,fbd_select_state:`Seleccionar estado`,fbd_instance_name:`Nombre de la instancia`,fbd_inputs:`Entradas`,fbd_connected:`conectado`,fbd_inverted:`Invertir %s`,fbd_invalid_time:`Un tiempo como 500ms, 2s, 1m30s`,fbd_invalid_number:`No es un número`,fbd_param_oid:`Estado`,fbd_param_type:`Tipo`,fbd_param_ack:`Escribir como confirmado (ack)`,fbd_param_minInterval:`Tiempo mínimo entre escrituras`,fbd_param_value:`Valor`,fbd_param_inputs:`Número de entradas`,fbd_diagram:`Diagrama`,fbd_cycle_mode:`Ejecución`,fbd_mode_auto:`Automático`,fbd_mode_cyclic:`Cíclico`,fbd_mode_event:`Cuando cambia una entrada`,fbd_runs_cyclic:`El diagrama se ejecuta cíclicamente`,fbd_runs_event:`El diagrama se ejecuta cuando cambia una entrada`,fbd_cycle_time:`Tiempo de ciclo (ms)`,fbd_empty_hint:`Arrastre bloques desde la izquierda al lienzo y conecte una salida con una entrada`,fbd_no_diagram:`Este script no contiene un diagrama de bloques de funciones`,"Unknown block type %s":`Tipo de bloque desconocido %s`,"Invalid block ID %s":`ID de bloque no válido %s`,"Duplicate block ID %s":`ID de bloque duplicado %s`,'Parameter "%s" is not set':`El parámetro "%s" no está definido`,"The connection refers to a missing block or pin":`La conexión hace referencia a un bloque o pin inexistente`,"Types do not match: %s cannot be connected to %s":`Los tipos no coinciden: %s no se puede conectar a %s`,"Input %s is connected more than once":`La entrada %s está conectada más de una vez`,"Loop without a block that stores a value: %s":`Bucle sin un bloque que almacene un valor: %s`,"Timers need the cyclic mode, in the event mode they only run when an input changes":`Los temporizadores necesitan el modo cíclico; en el modo por eventos solo funcionan cuando cambia una entrada`,fbd_desc_AND:`Y: verdadero si todas las entradas son verdaderas`,fbd_desc_OR:`O: verdadero si alguna entrada es verdadera`,fbd_desc_XOR:`O exclusivo: verdadero con un número impar de entradas verdaderas`,fbd_desc_NOT:`NO: invierte la entrada`,fbd_desc_RS:`Biestable con prioridad de reset`,fbd_desc_SR:`Biestable con prioridad de set`,fbd_desc_R_TRIG:`Flanco ascendente: verdadero durante un ciclo cuando la entrada se vuelve verdadera`,fbd_desc_F_TRIG:`Flanco descendente: verdadero durante un ciclo cuando la entrada se vuelve falsa`,fbd_desc_TON:`Retardo a la conexión: Q se vuelve verdadero cuando IN estuvo verdadero durante PT`,fbd_desc_TOF:`Retardo a la desconexión: Q sigue verdadero durante PT después de que IN pase a falso`,fbd_desc_TP:`Pulso: un flanco ascendente de IN genera un pulso de duración PT`,fbd_desc_GT:`Mayor que`,fbd_desc_GE:`Mayor o igual`,fbd_desc_LT:`Menor que`,fbd_desc_LE:`Menor o igual`,fbd_desc_EQ:`Igual`,fbd_desc_NE:`Distinto`,fbd_desc_ADD:`Suma`,fbd_desc_SUB:`Resta`,fbd_desc_MUL:`Multiplicación`,fbd_desc_DIV:`División (entre 0 da 0)`,fbd_desc_MIN:`Entrada menor`,fbd_desc_MAX:`Entrada mayor`,fbd_desc_STATE_IN:`Lee un estado de ioBroker`,fbd_desc_STATE_OUT:`Escribe un estado de ioBroker cuando cambia el valor`,fbd_desc_CONST:`Un valor constante`,fbd_online:`En línea`,fbd_online_tooltip:`Mostrar los valores del diagrama en ejecución`,fbd_online_waiting:`Esperando datos…`,fbd_online_no_data:`Sin datos desde hace %s s - ¿se está ejecutando el script?`,fbd_online_stalled:`El diagrama ya no se ejecuta (ciclo %s)`,fbd_online_cycle:`Ciclo %s`,fbd_online_event:`espera entradas`,fbd_online_not_running:`El script no se está ejecutando`,fbd_online_changed:`El diagrama se ha modificado - los valores pertenecen a la versión guardada`,fbd_runtime_error:`Error al ejecutar: %s`,fbd_online_no_values:`Ciclo %s - guarde el diagrama una vez para ver los valores`,fbd_category_interface:`Interfaz`,fbd_category_user:`Bloques propios`,fbd_desc_FB_IN:`Una entrada de este bloque`,fbd_desc_FB_OUT:`Una salida de este bloque`,fbd_param_pin:`Nombre del pin`,fbd_invalid_name:`Solo letras, dígitos y _, sin empezar por un dígito`,fbd_no_user_blocks:`Aún no hay bloques propios - un diagrama se convierte en uno con "Este diagrama es un bloque" en sus ajustes`,fbd_is_block:`Este diagrama es un bloque`,fbd_block_hint:`Un bloque se coloca en otros diagramas tantas veces como haga falta. Sus bloques FB_IN y FB_OUT son sus pines; cada cambio guardado es una nueva versión.`,fbd_block_name:`Nombre del bloque`,fbd_block_description:`Descripción`,fbd_block_type:`Tipo %s, versión %s`,fbd_block_duplicate:`El diagrama "%s" define el mismo tipo`,fbd_block_newer:`La versión %s está disponible`,fbd_block_update:`Actualizar`,fbd_block_update_hint:`Aplica la nueva versión a todas las instancias de este diagrama`,fbd_block_open:`Abrir bloque`,fbd_block_outdated:`Nueva versión de "%s": %s (en este diagrama: %s)`,"Inputs and outputs of a block only work in the diagram of a block":`Las entradas y salidas de un bloque solo funcionan en el diagrama de un bloque`,"A block cannot read or write states - give it inputs and outputs instead":`Un bloque no puede leer ni escribir estados - use entradas y salidas`,"Invalid pin name %s":`Nombre de pin no válido %s`,"The pin name %s is used twice":`El nombre de pin %s se usa dos veces`,"The block %s contains itself":`El bloque %s se contiene a sí mismo`,"The block %s has errors: %s":`El bloque %s tiene errores: %s`,"Invalid block type %s":`Tipo de bloque no válido %s`,fbd_category_control:`Regulación`,fbd_desc_HYST:`Interruptor de dos puntos: Q se vuelve verdadero cuando IN sube por encima de HIGH y falso cuando baja de LOW`,fbd_desc_RAMP:`Rampa: OUT sigue a IN, como máximo UP por segundo hacia arriba y DOWN por segundo hacia abajo (0: sin límite)`,fbd_desc_PT1:`Paso bajo de primer orden (PT1): OUT sigue a IN con la constante de tiempo T`,fbd_desc_PID:`Regulador PID: consigna SP, valor de proceso PV, salida Y entre YMIN y YMAX; TN o TV en 0 omite esa parte`,fbd_online_paused:`En pausa (ciclo %s)`,fbd_online_paused_at:`Detenido antes de %s (ciclo %s)`,fbd_debug_resume:`Continuar (F8)`,fbd_debug_pause:`Pausar (F8)`,fbd_debug_cycle:`Un ciclo`,fbd_debug_step:`Un bloque (F10)`,fbd_debug_save_once:`Guarde el diagrama una vez; después funcionan los puntos de parada y los pasos únicos`,fbd_debug_forced_count:`Valores forzados: %s`,fbd_debug_release_all:`Liberar todos`,fbd_debug_breakpoint_count:`Puntos de parada: %s`,fbd_debug_remove_all:`Quitar todos`,fbd_debug_breakpoint_set:`Poner punto de parada (F9)`,fbd_debug_breakpoint_remove:`Quitar punto de parada (F9)`,fbd_debug_breakpoint:`Punto de parada`,fbd_debug_breakpoint_hint:`El diagrama se detiene antes de este bloque (F9)`,fbd_debug_forced:`forzado`,fbd_debug_force:`Forzar`,fbd_debug_release:`Liberar`,fbd_debug_force_hint:`Un valor forzado vale hasta que se libera o termina la vista en línea, y también llega a los estados que escribe el diagrama.`,fbd_link:`Conexión`,fbd_link_mark:`Mostrar como marca de conexión`,fbd_link_mark_hint:`En lugar de una línea a través del diagrama, ambos extremos muestran una marca con un nombre; un doble clic salta al otro extremo.`,fbd_link_label:`Nombre de la marca`,fbd_layout:`Organizar automáticamente`,fbd_find:`Buscar en el diagrama (Ctrl+F)`,fbd_find_placeholder:`Nombre, tipo, estado…`,fbd_find_none:`nada`,fbd_find_previous:`Anterior (Mayús+Intro)`,fbd_find_next:`Siguiente (Intro)`,fbd_find_close:`Cerrar (Esc)`,"The diagram does not run":`El diagrama no se está ejecutando`,"The diagram is not shown online":`El diagrama no se muestra en línea`,"The diagram was saved before values could be forced - save it once":`El diagrama se guardó antes de que se pudieran forzar valores; guárdelo una vez`,"The diagram was saved before it could stop at blocks - save it once":`El diagrama se guardó antes de que pudiera detenerse en los bloques; guárdelo una vez`,fbd_instance_open:`Vista interior`,fbd_instance_open_hint:`Muestra esta instancia por dentro - en línea con sus propios valores (doble clic)`,fbd_instance_title:`Instancia "%s" de "%s", versión %s`,fbd_instance_readonly:`Solo lectura: es el bloque tal como lo lleva este diagrama. Se cambia en su propio diagrama. Aquí se pueden forzar valores; los puntos de parada, solo en el propio diagrama.`,fbd_instance_save_once:`Guarde el diagrama una vez; después aparecen los valores dentro de las instancias`,fbd_instance_back:`Atrás (Esc)`,fbd_link_refused_type:`No conectado: %s no encaja con %s (%s). Solo INT pasa a REAL por sí mismo.`,fbd_link_refused_taken:`No conectado: %s ya está conectado - una entrada solo admite una conexión`,fbd_category_memory:`Memoria`,fbd_tab_blocks:`Bloques`,fbd_tab_variables:`Variables`,fbd_tab_favorites:`Favoritos`,fbd_favorite_add:`Añadir a favoritos`,fbd_favorite_remove:`Quitar de favoritos`,fbd_no_variables:`Todavía no hay estados en el diagrama; llegan con STATE_IN y STATE_OUT`,fbd_no_favorites:`Todavía no hay favoritos; la estrella de un bloque lo pone aquí`,fbd_expand_all:`Desplegar todo`,fbd_collapse_all:`Plegar todo`,fbd_menu:`Más`,fbd_menu_properties:`Propiedades`,fbd_menu_duplicate:`Duplicar`,fbd_tab_properties:`Propiedades`,fbd_tab_docs:`Documentación`,fbd_section_general:`General`,fbd_section_params:`Parámetros`,fbd_section_preview:`Vista previa`,fbd_section_block:`Bloque`,fbd_name:`Nombre`,fbd_type:`Tipo`,fbd_comment_field:`Comentario`,fbd_comment_placeholder:`Comentario…`,fbd_invert_short:`invertido`,fbd_is_block_short:`Es un bloque`,fbd_link_from_to:`De → a`,fbd_link_mark_short:`Como marca`,fbd_outputs:`Salidas`,fbd_doc_keys:`Atajos`,fbd_key_undo:`Deshacer / rehacer`,fbd_key_copy:`Copiar / cortar / pegar`,fbd_key_delete:`Borrar lo seleccionado`,fbd_key_find:`Buscar en el diagrama`,fbd_key_pause:`Pausar / continuar (en línea)`,fbd_key_breakpoint:`Punto de parada en el bloque elegido (en línea)`,fbd_key_step:`Un bloque más (en línea)`,fbd_key_back:`Salir de una instancia`,fbd_doc_double_click:`Un doble clic en una instancia de un bloque propio la muestra por dentro; en una marca de conexión salta al otro extremo.`,fbd_doc_stateful:`Recuerda su estado de un ciclo al siguiente`,fbd_doc_time:`Depende del tiempo; un diagrama con él se ejecuta cíclicamente`,fbd_instance:`Instancia`,fbd_grid:`Cuadrícula`,fbd_links_curved:`Conexiones como curvas`,fbd_links_orthogonal:`Conexiones en ángulo recto`,fbd_zoom_in:`Acercar`,fbd_zoom_out:`Alejar`,fbd_zoom_reset:`Al 100 %`,fbd_link_const_retyped:`%s ahora es de tipo %s (valor %s)`,fbd_link_refused_const:`No conectado: %s ya alimenta entradas que no admiten %s (%s)`,fbd_state_type_taken:`%s lee ahora el estado como %s, como indica su objeto; cámbielo en las propiedades si hace falta`,fbd_desc_LOG:`Escribe una línea en el registro: en un flanco de subida de TRIG o cuando cambia IN. %s en el texto es el valor de IN`,fbd_param_text:`Texto`,fbd_param_level:`Nivel`,fbd_param_when:`Cuándo`,fbd_option_edge:`en flanco de subida de TRIG`,fbd_option_change:`cuando cambia IN`,fbd_online_changed_short:`modificado`,fbd_category_counters:`Contadores`,fbd_category_convert:`Conversión`,fbd_category_calendar:`Calendario`,fbd_category_messages:`Mensajes`,fbd_category_expert:`Experto`,fbd_desc_BLINK:`Intermitente: mientras EN es verdadero, Q es verdadero durante TH y falso durante TL`,fbd_desc_CTU:`Contador ascendente: cuenta los flancos de subida de CU, R pone CV a 0. Q: CV alcanzó PV`,fbd_desc_CTD:`Contador descendente: descuenta con los flancos de subida de CD, LD carga PV. Q: CV alcanzó 0`,fbd_desc_CTUD:`Contador ascendente/descendente: CU suma, CD resta, R pone 0, LD carga PV. QU: CV alcanzó PV, QD: CV alcanzó 0`,fbd_desc_ROUND:`Redondea IN a DIGITS decimales`,fbd_desc_TO_BOOL:`Convierte a BOOL: 0, texto vacío y "false" son falsos`,fbd_desc_TO_INT:`Convierte a INT, redondeado; una coma decimal cuenta como punto, lo que no es número da 0`,fbd_desc_TO_REAL:`Convierte a REAL; una coma decimal cuenta como punto, lo que no es número da 0`,fbd_desc_TO_TIME:`Convierte a TIME: un número son ms, un texto puede ser "2s", "1m30s" u "08:30"`,fbd_desc_TO_STRING:`Convierte a texto`,fbd_desc_CONCAT:`Une las entradas en un texto - redondee antes los números con ROUND`,fbd_desc_CLOCK:`La hora local: hora del día, hora, minuto, día de la semana (1 lunes ... 7 domingo), día, mes y año`,fbd_desc_TIMEWINDOW:`Franja horaria: verdadero de START a END en los días elegidos; una franja que pasa la medianoche pertenece al día en que empieza`,fbd_desc_SCHEDULE:`Programación: Q es verdadero durante un ciclo cuando llega la hora del patrón cron`,fbd_desc_ASTRO:`Sol: Q es verdadero de un evento solar a otro, como del atardecer al amanecer; START y END son sus horas de hoy`,fbd_desc_NOTIFY:`Envía una notificación de ioBroker: en un flanco de subida de TRIG o cuando IN cambia. Como máximo 5 por minuto`,fbd_desc_SENDTO:`Envía un mensaje a un adaptador como telegram.0 o pushover.0 (text, message, title, subject): en un flanco de subida de TRIG o cuando IN cambia. Como máximo 5 por minuto`,fbd_desc_JS:`JavaScript propio: recibe IN1 ... INn, dt, firstScan y state (se conserva entre ciclos), devuelve OUT1 o [OUT1, OUT2, ...]`,fbd_param_days:`Días`,fbd_param_cron:`Patrón cron`,fbd_param_start:`Desde`,fbd_param_end:`Hasta`,fbd_param_startOffset:`Desfase del inicio`,fbd_param_endOffset:`Desfase del final`,fbd_offset_hint:`En minutos, negativo es antes`,fbd_param_category:`Tipo`,fbd_param_instance:`Instancia`,fbd_param_title:`Título`,fbd_param_command:`Comando`,fbd_param_code:`Código`,fbd_param_outputs:`Número de salidas`,fbd_option_all:`todos los días`,fbd_option_weekdays:`de lunes a viernes`,fbd_option_weekend:`sábado y domingo`,fbd_option_message:`Mensaje`,fbd_option_alert:`Alerta`,fbd_cron_dialog:`Ajustar la hora`,fbd_cron_hint:`Minuto hora día mes día_semana, como "0 8 * * 1-5": a las 8:00 de lunes a viernes. Con segundos delante, "*/5 * * * * *" es cada 5 segundos`,fbd_code_hint:`El código recibe %s y devuelve el valor de OUT1, o [OUT1, OUT2, ...]; undefined deja una salida como está`,"The code has an error: %s":`El código tiene un error: %s`,fbd_option_nightEnd:`Fin de la noche`,fbd_option_nauticalDawn:`Amanecer náutico`,fbd_option_dawn:`Amanecer`,fbd_option_sunrise:`amanecer`,fbd_option_sunriseEnd:`Final del amanecer`,fbd_option_goldenHourEnd:`Fin de la hora dorada`,fbd_option_solarNoon:`Mediodía solar`,fbd_option_goldenHour:`hora dorada`,fbd_option_sunsetStart:`Inicio al atardecer`,fbd_option_sunset:`puesta de sol`,fbd_option_dusk:`Oscuridad`,fbd_option_nauticalDusk:`Atardecer náutico`,fbd_option_night:`Noche`,fbd_option_nadir:`nadir`},fr:{fbd_search:`Rechercher`,fbd_category_iobroker:`ioBroker`,fbd_category_logic:`Logique`,fbd_category_timers:`Temporisations`,fbd_category_compare:`Comparaison`,fbd_category_arithmetic:`Arithmétique`,fbd_category_structure:`Structure`,fbd_comment:`Commentaire`,fbd_comment_desc:`Une note sur le diagramme ; elle n'est pas exécutée`,fbd_no_state:`aucun état choisi`,fbd_select_state:`Choisir un état`,fbd_instance_name:`Nom de l'instance`,fbd_inputs:`Entrées`,fbd_connected:`connecté`,fbd_inverted:`Inverser %s`,fbd_invalid_time:`Une durée comme 500ms, 2s, 1m30s`,fbd_invalid_number:`Pas un nombre`,fbd_param_oid:`État`,fbd_param_type:`Type`,fbd_param_ack:`Écrire comme acquitté (ack)`,fbd_param_minInterval:`Durée minimale entre deux écritures`,fbd_param_value:`Valeur`,fbd_param_inputs:`Nombre d'entrées`,fbd_diagram:`Diagramme`,fbd_cycle_mode:`Exécution`,fbd_mode_auto:`Automatique`,fbd_mode_cyclic:`Cyclique`,fbd_mode_event:`Quand une entrée change`,fbd_runs_cyclic:`Le diagramme s'exécute cycliquement`,fbd_runs_event:`Le diagramme s'exécute quand une entrée change`,fbd_cycle_time:`Temps de cycle (ms)`,fbd_empty_hint:`Faites glisser des blocs depuis la gauche et reliez une sortie à une entrée`,fbd_no_diagram:`Ce script ne contient pas de diagramme de blocs fonctionnels`,"Unknown block type %s":`Type de bloc inconnu %s`,"Invalid block ID %s":`ID de bloc invalide %s`,"Duplicate block ID %s":`ID de bloc en double %s`,'Parameter "%s" is not set':`Le paramètre « %s » n'est pas défini`,"The connection refers to a missing block or pin":`La connexion fait référence à un bloc ou une broche manquant`,"Types do not match: %s cannot be connected to %s":`Types incompatibles : %s ne peut pas être relié à %s`,"Input %s is connected more than once":`L'entrée %s est connectée plusieurs fois`,"Loop without a block that stores a value: %s":`Boucle sans bloc mémorisant une valeur : %s`,"Timers need the cyclic mode, in the event mode they only run when an input changes":`Les temporisations ont besoin du mode cyclique, en mode événementiel elles ne tournent que lorsqu'une entrée change`,fbd_desc_AND:`ET : vrai si toutes les entrées sont vraies`,fbd_desc_OR:`OU : vrai si une entrée est vraie`,fbd_desc_XOR:`OU exclusif : vrai pour un nombre impair d'entrées vraies`,fbd_desc_NOT:`NON : inverse l'entrée`,fbd_desc_RS:`Bascule, reset prioritaire`,fbd_desc_SR:`Bascule, set prioritaire`,fbd_desc_R_TRIG:`Front montant : vrai pendant un cycle quand l'entrée devient vraie`,fbd_desc_F_TRIG:`Front descendant : vrai pendant un cycle quand l'entrée devient fausse`,fbd_desc_TON:`Retard à l'enclenchement : Q devient vrai quand IN a été vrai pendant PT`,fbd_desc_TOF:`Retard au déclenchement : Q reste vrai pendant PT après que IN soit devenu faux`,fbd_desc_TP:`Impulsion : un front montant de IN donne une impulsion de durée PT`,fbd_desc_GT:`Supérieur à`,fbd_desc_GE:`Supérieur ou égal`,fbd_desc_LT:`Inférieur à`,fbd_desc_LE:`Inférieur ou égal`,fbd_desc_EQ:`Égal`,fbd_desc_NE:`Différent`,fbd_desc_ADD:`Addition`,fbd_desc_SUB:`Soustraction`,fbd_desc_MUL:`Multiplication`,fbd_desc_DIV:`Division (par 0 donne 0)`,fbd_desc_MIN:`Plus petite entrée`,fbd_desc_MAX:`Plus grande entrée`,fbd_desc_STATE_IN:`Lit un état ioBroker`,fbd_desc_STATE_OUT:`Écrit un état ioBroker quand la valeur change`,fbd_desc_CONST:`Une valeur constante`,fbd_online:`En ligne`,fbd_online_tooltip:`Afficher les valeurs du diagramme en cours d'exécution`,fbd_online_waiting:`En attente de données…`,fbd_online_no_data:`Aucune donnée depuis %s s - le script tourne-t-il ?`,fbd_online_stalled:`Le diagramme ne calcule plus (cycle %s)`,fbd_online_cycle:`Cycle %s`,fbd_online_event:`attend les entrées`,fbd_online_not_running:`Le script ne tourne pas`,fbd_online_changed:`Le diagramme a été modifié - les valeurs sont celles de la version enregistrée`,fbd_runtime_error:`Erreur à l'exécution : %s`,fbd_online_no_values:`Cycle %s - enregistrez le diagramme une fois pour voir les valeurs`,fbd_category_interface:`Interface`,fbd_category_user:`Blocs personnels`,fbd_desc_FB_IN:`Une entrée de ce bloc`,fbd_desc_FB_OUT:`Une sortie de ce bloc`,fbd_param_pin:`Nom de la broche`,fbd_invalid_name:`Uniquement des lettres, chiffres et _, sans commencer par un chiffre`,fbd_no_user_blocks:`Pas encore de blocs personnels - un diagramme en devient un avec « Ce diagramme est un bloc » dans ses réglages`,fbd_is_block:`Ce diagramme est un bloc`,fbd_block_hint:`Un bloc se place dans d'autres diagrammes, autant de fois que nécessaire. Ses blocs FB_IN et FB_OUT sont ses broches ; chaque modification enregistrée est une nouvelle version.`,fbd_block_name:`Nom du bloc`,fbd_block_description:`Description`,fbd_block_type:`Type %s, version %s`,fbd_block_duplicate:`Le diagramme « %s » définit le même type`,fbd_block_newer:`La version %s est disponible`,fbd_block_update:`Mettre à jour`,fbd_block_update_hint:`Applique la nouvelle version à toutes les instances de ce diagramme`,fbd_block_open:`Ouvrir le bloc`,fbd_block_outdated:`Nouvelle version de « %s » : %s (dans ce diagramme : %s)`,"Inputs and outputs of a block only work in the diagram of a block":`Les entrées et sorties d'un bloc ne fonctionnent que dans le diagramme d'un bloc`,"A block cannot read or write states - give it inputs and outputs instead":`Un bloc ne peut ni lire ni écrire d'états - donnez-lui des entrées et des sorties`,"Invalid pin name %s":`Nom de broche invalide %s`,"The pin name %s is used twice":`Le nom de broche %s est utilisé deux fois`,"The block %s contains itself":`Le bloc %s se contient lui-même`,"The block %s has errors: %s":`Le bloc %s contient des erreurs : %s`,"Invalid block type %s":`Type de bloc invalide %s`,fbd_category_control:`Régulation`,fbd_desc_HYST:`Commutateur à deux points : Q devient vrai quand IN dépasse HIGH et faux quand il descend sous LOW`,fbd_desc_RAMP:`Rampe : OUT suit IN, d'au plus UP par seconde vers le haut et DOWN par seconde vers le bas (0 : sans limite)`,fbd_desc_PT1:`Passe-bas du premier ordre (PT1) : OUT suit IN avec la constante de temps T`,fbd_desc_PID:`Régulateur PID : consigne SP, valeur mesurée PV, sortie Y entre YMIN et YMAX ; TN ou TV à 0 supprime cette part`,fbd_online_paused:`En pause (cycle %s)`,fbd_online_paused_at:`Arrêté avant %s (cycle %s)`,fbd_debug_resume:`Continuer (F8)`,fbd_debug_pause:`Pause (F8)`,fbd_debug_cycle:`Un cycle`,fbd_debug_step:`Un bloc (F10)`,fbd_debug_save_once:`Enregistrez le schéma une fois, alors les points d'arrêt et le pas à pas fonctionnent`,fbd_debug_forced_count:`Valeurs forcées : %s`,fbd_debug_release_all:`Tout libérer`,fbd_debug_breakpoint_count:`Points d'arrêt : %s`,fbd_debug_remove_all:`Tout supprimer`,fbd_debug_breakpoint_set:`Placer un point d'arrêt (F9)`,fbd_debug_breakpoint_remove:`Retirer le point d'arrêt (F9)`,fbd_debug_breakpoint:`Point d'arrêt`,fbd_debug_breakpoint_hint:`Le schéma s'arrête avant ce bloc (F9)`,fbd_debug_forced:`forcé`,fbd_debug_force:`Forcer`,fbd_debug_release:`Libérer`,fbd_debug_force_hint:`Une valeur forcée vaut jusqu'à sa libération ou la fin de la vue en ligne - et agit aussi sur les états que le schéma écrit.`,fbd_link:`Liaison`,fbd_link_mark:`Afficher comme marque de liaison`,fbd_link_mark_hint:`Au lieu d'une ligne à travers le schéma, les deux extrémités montrent une marque nommée ; un double clic saute à l'autre extrémité.`,fbd_link_label:`Nom de la marque`,fbd_layout:`Disposer automatiquement`,fbd_find:`Rechercher dans le schéma (Ctrl+F)`,fbd_find_placeholder:`Nom, type, état…`,fbd_find_none:`rien`,fbd_find_previous:`Précédent (Maj+Entrée)`,fbd_find_next:`Suivant (Entrée)`,fbd_find_close:`Fermer (Échap)`,"The diagram does not run":`Le schéma ne tourne pas`,"The diagram is not shown online":`Le schéma n'est pas affiché en ligne`,"The diagram was saved before values could be forced - save it once":`Le schéma a été enregistré avant que l'on puisse forcer des valeurs - enregistrez-le une fois`,"The diagram was saved before it could stop at blocks - save it once":`Le schéma a été enregistré avant de pouvoir s'arrêter aux blocs - enregistrez-le une fois`,fbd_instance_open:`Vue intérieure`,fbd_instance_open_hint:`Montre cette instance de l'intérieur - en ligne avec ses propres valeurs (double clic)`,fbd_instance_title:`Instance « %s » de « %s », version %s`,fbd_instance_readonly:`Lecture seule : c'est le bloc tel que ce schéma le contient. Il se modifie dans son propre schéma. On peut forcer des valeurs ici, les points d'arrêt seulement dans le schéma lui-même.`,fbd_instance_save_once:`Enregistrez le schéma une fois, alors les valeurs dans les instances apparaissent`,fbd_instance_back:`Retour (Échap)`,fbd_link_refused_type:`Non relié : %s ne convient pas à %s (%s). Seul INT devient REAL tout seul.`,fbd_link_refused_taken:`Non relié : %s est déjà relié - une entrée ne prend qu'une liaison`,fbd_category_memory:`Mémoire`,fbd_tab_blocks:`Blocs`,fbd_tab_variables:`Variables`,fbd_tab_favorites:`Favoris`,fbd_favorite_add:`Ajouter aux favoris`,fbd_favorite_remove:`Retirer des favoris`,fbd_no_variables:`Pas encore d'états dans le schéma - ils viennent avec STATE_IN et STATE_OUT`,fbd_no_favorites:`Pas encore de favoris - l'étoile d'un bloc le place ici`,fbd_expand_all:`Tout déplier`,fbd_collapse_all:`Tout replier`,fbd_menu:`Plus`,fbd_menu_properties:`Propriétés`,fbd_menu_duplicate:`Dupliquer`,fbd_tab_properties:`Propriétés`,fbd_tab_docs:`Documentation`,fbd_section_general:`Général`,fbd_section_params:`Paramètres`,fbd_section_preview:`Aperçu`,fbd_section_block:`Bloc`,fbd_name:`Nom`,fbd_type:`Type`,fbd_comment_field:`Commentaire`,fbd_comment_placeholder:`Commentaire…`,fbd_invert_short:`inversé`,fbd_is_block_short:`Est un bloc`,fbd_link_from_to:`De → vers`,fbd_link_mark_short:`En marque`,fbd_outputs:`Sorties`,fbd_doc_keys:`Raccourcis`,fbd_key_undo:`Annuler / rétablir`,fbd_key_copy:`Copier / couper / coller`,fbd_key_delete:`Supprimer la sélection`,fbd_key_find:`Rechercher dans le schéma`,fbd_key_pause:`Pause / continuer (en ligne)`,fbd_key_breakpoint:`Point d'arrêt au bloc choisi (en ligne)`,fbd_key_step:`Un bloc plus loin (en ligne)`,fbd_key_back:`Sortir d'une instance`,fbd_doc_double_click:`Un double clic sur une instance d'un bloc personnel la montre de l'intérieur ; sur une marque de liaison, il saute à l'autre extrémité.`,fbd_doc_stateful:`Garde son état d'un cycle à l'autre`,fbd_doc_time:`Dépend du temps - un schéma qui le contient tourne cycliquement`,fbd_instance:`Instance`,fbd_grid:`Grille`,fbd_links_curved:`Liaisons en courbes`,fbd_links_orthogonal:`Liaisons à angle droit`,fbd_zoom_in:`Agrandir`,fbd_zoom_out:`Réduire`,fbd_zoom_reset:`À 100 %`,fbd_link_const_retyped:`%s est maintenant de type %s (valeur %s)`,fbd_link_refused_const:`Non relié : %s alimente déjà des entrées qui ne prennent pas de %s (%s)`,fbd_state_type_taken:`%s lit maintenant l'état en %s, comme l'indique son objet - à modifier dans les propriétés si besoin`,fbd_desc_LOG:`Écrit une ligne dans le journal : sur un front montant de TRIG ou quand IN change. %s dans le texte est la valeur de IN`,fbd_param_text:`Texte`,fbd_param_level:`Niveau`,fbd_param_when:`Quand`,fbd_option_edge:`sur front montant de TRIG`,fbd_option_change:`quand IN change`,fbd_online_changed_short:`modifié`,fbd_category_counters:`Compteurs`,fbd_category_convert:`Conversion`,fbd_category_calendar:`Calendrier`,fbd_category_messages:`Messages`,fbd_category_expert:`Expert`,fbd_desc_BLINK:`Clignotant : tant que EN est vrai, Q est vrai pendant TH et faux pendant TL`,fbd_desc_CTU:`Compteur : compte les fronts montants de CU, R remet CV à 0. Q : CV a atteint PV`,fbd_desc_CTD:`Décompteur : décompte sur les fronts montants de CD, LD charge PV. Q : CV a atteint 0`,fbd_desc_CTUD:`Compteur/décompteur : CU compte, CD décompte, R remet à 0, LD charge PV. QU : CV a atteint PV, QD : CV a atteint 0`,fbd_desc_ROUND:`Arrondit IN à DIGITS décimales`,fbd_desc_TO_BOOL:`Convertit en BOOL : 0, un texte vide et "false" sont faux`,fbd_desc_TO_INT:`Convertit en INT, arrondi ; une virgule décimale compte comme un point, ce qui n'est pas un nombre donne 0`,fbd_desc_TO_REAL:`Convertit en REAL ; une virgule décimale compte comme un point, ce qui n'est pas un nombre donne 0`,fbd_desc_TO_TIME:`Convertit en TIME : un nombre est en ms, un texte peut être "2s", "1m30s" ou "08:30"`,fbd_desc_TO_STRING:`Convertit en texte`,fbd_desc_CONCAT:`Assemble les entrées en un texte - arrondir les nombres avant avec ROUND`,fbd_desc_CLOCK:`L'heure locale : heure du jour, heure, minute, jour de la semaine (1 lundi ... 7 dimanche), jour, mois et année`,fbd_desc_TIMEWINDOW:`Plage horaire : vrai de START à END les jours choisis ; une plage qui passe minuit appartient au jour où elle commence`,fbd_desc_SCHEDULE:`Planification : Q est vrai pendant un cycle quand l'heure du motif cron arrive`,fbd_desc_ASTRO:`Soleil : Q est vrai d'un événement solaire à un autre, par exemple du coucher au lever du soleil ; START et END sont leurs heures aujourd'hui`,fbd_desc_NOTIFY:`Envoie une notification ioBroker : sur un front montant de TRIG ou quand IN change. Au plus 5 par minute`,fbd_desc_SENDTO:`Envoie un message à un adaptateur comme telegram.0 ou pushover.0 (text, message, title, subject) : sur un front montant de TRIG ou quand IN change. Au plus 5 par minute`,fbd_desc_JS:`JavaScript personnel : reçoit IN1 ... INn, dt, firstScan et state (conservé entre les cycles), renvoie OUT1 ou [OUT1, OUT2, ...]`,fbd_param_days:`Jours`,fbd_param_cron:`Motif cron`,fbd_param_start:`De`,fbd_param_end:`À`,fbd_param_startOffset:`Décalage du début`,fbd_param_endOffset:`Décalage de la fin`,fbd_offset_hint:`En minutes, négatif est plus tôt`,fbd_param_category:`Genre`,fbd_param_instance:`Instance`,fbd_param_title:`Titre`,fbd_param_command:`Commande`,fbd_param_code:`Code`,fbd_param_outputs:`Nombre de sorties`,fbd_option_all:`tous les jours`,fbd_option_weekdays:`du lundi au vendredi`,fbd_option_weekend:`samedi et dimanche`,fbd_option_message:`Message`,fbd_option_alert:`Alerte`,fbd_cron_dialog:`Régler l'heure`,fbd_cron_hint:`Minute heure jour mois jour_de_semaine, par exemple "0 8 * * 1-5" : à 8 h du lundi au vendredi. Avec les secondes devant, "*/5 * * * * *" est toutes les 5 secondes`,fbd_code_hint:`Le code reçoit %s et renvoie la valeur de OUT1, ou [OUT1, OUT2, ...] ; undefined laisse une sortie telle quelle`,"The code has an error: %s":`Le code contient une erreur : %s`,fbd_option_nightEnd:`Fin de nuit`,fbd_option_nauticalDawn:`Aube nautique`,fbd_option_dawn:`Aube`,fbd_option_sunrise:`lever du soleil`,fbd_option_sunriseEnd:`Fin du lever du soleil`,fbd_option_goldenHourEnd:`Fin de l'heure d'or`,fbd_option_solarNoon:`Midi solaire`,fbd_option_goldenHour:`Heure d'or`,fbd_option_sunsetStart:`Début du coucher du soleil`,fbd_option_sunset:`le coucher du soleil`,fbd_option_dusk:`Crépuscule`,fbd_option_nauticalDusk:`Crépuscule nautique`,fbd_option_night:`Nuit`,fbd_option_nadir:`nadir`},it:{fbd_search:`Cerca`,fbd_category_iobroker:`ioBroker`,fbd_category_logic:`Logica`,fbd_category_timers:`Timer`,fbd_category_compare:`Confronto`,fbd_category_arithmetic:`Aritmetica`,fbd_category_structure:`Struttura`,fbd_comment:`Commento`,fbd_comment_desc:`Una nota nel diagramma; non viene eseguita`,fbd_no_state:`nessuno stato selezionato`,fbd_select_state:`Seleziona stato`,fbd_instance_name:`Nome dell'istanza`,fbd_inputs:`Ingressi`,fbd_connected:`collegato`,fbd_inverted:`Inverti %s`,fbd_invalid_time:`Un tempo come 500ms, 2s, 1m30s`,fbd_invalid_number:`Non è un numero`,fbd_param_oid:`Stato`,fbd_param_type:`Tipo`,fbd_param_ack:`Scrivi come confermato (ack)`,fbd_param_minInterval:`Tempo minimo tra le scritture`,fbd_param_value:`Valore`,fbd_param_inputs:`Numero di ingressi`,fbd_diagram:`Diagramma`,fbd_cycle_mode:`Esecuzione`,fbd_mode_auto:`Automatica`,fbd_mode_cyclic:`Ciclica`,fbd_mode_event:`Quando cambia un ingresso`,fbd_runs_cyclic:`Il diagramma viene eseguito ciclicamente`,fbd_runs_event:`Il diagramma viene eseguito quando cambia un ingresso`,fbd_cycle_time:`Tempo di ciclo (ms)`,fbd_empty_hint:`Trascina i blocchi da sinistra sull'area e collega un'uscita a un ingresso`,fbd_no_diagram:`Questo script non contiene un diagramma a blocchi funzionali`,"Unknown block type %s":`Tipo di blocco sconosciuto %s`,"Invalid block ID %s":`ID blocco non valido %s`,"Duplicate block ID %s":`ID blocco duplicato %s`,'Parameter "%s" is not set':`Il parametro "%s" non è impostato`,"The connection refers to a missing block or pin":`Il collegamento fa riferimento a un blocco o pin mancante`,"Types do not match: %s cannot be connected to %s":`I tipi non corrispondono: %s non può essere collegato a %s`,"Input %s is connected more than once":`L'ingresso %s è collegato più di una volta`,"Loop without a block that stores a value: %s":`Anello senza un blocco che memorizza un valore: %s`,"Timers need the cyclic mode, in the event mode they only run when an input changes":`I timer richiedono la modalità ciclica, in quella a eventi funzionano solo quando cambia un ingresso`,fbd_desc_AND:`AND: vero se tutti gli ingressi sono veri`,fbd_desc_OR:`OR: vero se almeno un ingresso è vero`,fbd_desc_XOR:`OR esclusivo: vero per un numero dispari di ingressi veri`,fbd_desc_NOT:`NOT: inverte l'ingresso`,fbd_desc_RS:`Flip-flop a reset dominante`,fbd_desc_SR:`Flip-flop a set dominante`,fbd_desc_R_TRIG:`Fronte di salita: vero per un ciclo quando l'ingresso diventa vero`,fbd_desc_F_TRIG:`Fronte di discesa: vero per un ciclo quando l'ingresso diventa falso`,fbd_desc_TON:`Ritardo all'eccitazione: Q diventa vero quando IN è stato vero per PT`,fbd_desc_TOF:`Ritardo alla diseccitazione: Q resta vero per PT dopo che IN è diventato falso`,fbd_desc_TP:`Impulso: un fronte di salita di IN genera un impulso di durata PT`,fbd_desc_GT:`Maggiore di`,fbd_desc_GE:`Maggiore o uguale`,fbd_desc_LT:`Minore di`,fbd_desc_LE:`Minore o uguale`,fbd_desc_EQ:`Uguale`,fbd_desc_NE:`Diverso`,fbd_desc_ADD:`Addizione`,fbd_desc_SUB:`Sottrazione`,fbd_desc_MUL:`Moltiplicazione`,fbd_desc_DIV:`Divisione (per 0 dà 0)`,fbd_desc_MIN:`Ingresso minimo`,fbd_desc_MAX:`Ingresso massimo`,fbd_desc_STATE_IN:`Legge uno stato di ioBroker`,fbd_desc_STATE_OUT:`Scrive uno stato di ioBroker quando il valore cambia`,fbd_desc_CONST:`Un valore costante`,fbd_online:`Online`,fbd_online_tooltip:`Mostra i valori del diagramma in esecuzione`,fbd_online_waiting:`In attesa di dati…`,fbd_online_no_data:`Nessun dato da %s s - lo script è in esecuzione?`,fbd_online_stalled:`Il diagramma non viene più eseguito (ciclo %s)`,fbd_online_cycle:`Ciclo %s`,fbd_online_event:`attende gli ingressi`,fbd_online_not_running:`Lo script non è in esecuzione`,fbd_online_changed:`Il diagramma è stato modificato - i valori appartengono alla versione salvata`,fbd_runtime_error:`Errore durante l'esecuzione: %s`,fbd_online_no_values:`Ciclo %s - salva il diagramma una volta per vedere i valori`,fbd_category_interface:`Interfaccia`,fbd_category_user:`Blocchi propri`,fbd_desc_FB_IN:`Un ingresso di questo blocco`,fbd_desc_FB_OUT:`Un'uscita di questo blocco`,fbd_param_pin:`Nome del pin`,fbd_invalid_name:`Solo lettere, cifre e _, senza iniziare con una cifra`,fbd_no_user_blocks:`Ancora nessun blocco proprio - un diagramma lo diventa con "Questo diagramma è un blocco" nelle impostazioni`,fbd_is_block:`Questo diagramma è un blocco`,fbd_block_hint:`Un blocco si inserisce in altri diagrammi, tutte le volte che serve. I suoi blocchi FB_IN e FB_OUT sono i pin; ogni modifica salvata è una nuova versione.`,fbd_block_name:`Nome del blocco`,fbd_block_description:`Descrizione`,fbd_block_type:`Tipo %s, versione %s`,fbd_block_duplicate:`Il diagramma "%s" definisce lo stesso tipo`,fbd_block_newer:`È disponibile la versione %s`,fbd_block_update:`Aggiorna`,fbd_block_update_hint:`Applica la nuova versione a tutte le istanze di questo diagramma`,fbd_block_open:`Apri il blocco`,fbd_block_outdated:`Nuova versione di "%s": %s (in questo diagramma: %s)`,"Inputs and outputs of a block only work in the diagram of a block":`Ingressi e uscite di un blocco funzionano solo nel diagramma di un blocco`,"A block cannot read or write states - give it inputs and outputs instead":`Un blocco non può leggere o scrivere stati - usa ingressi e uscite`,"Invalid pin name %s":`Nome del pin non valido %s`,"The pin name %s is used twice":`Il nome del pin %s è usato due volte`,"The block %s contains itself":`Il blocco %s contiene se stesso`,"The block %s has errors: %s":`Il blocco %s contiene errori: %s`,"Invalid block type %s":`Tipo di blocco non valido %s`,fbd_category_control:`Regolazione`,fbd_desc_HYST:`Interruttore a due punti: Q diventa vero quando IN sale sopra HIGH e falso quando scende sotto LOW`,fbd_desc_RAMP:`Rampa: OUT segue IN, al massimo di UP al secondo in salita e DOWN al secondo in discesa (0: senza limite)`,fbd_desc_PT1:`Passa basso del primo ordine (PT1): OUT segue IN con la costante di tempo T`,fbd_desc_PID:`Regolatore PID: setpoint SP, valore di processo PV, uscita Y tra YMIN e YMAX; TN o TV a 0 esclude quella parte`,fbd_online_paused:`In pausa (ciclo %s)`,fbd_online_paused_at:`Fermo prima di %s (ciclo %s)`,fbd_debug_resume:`Continua (F8)`,fbd_debug_pause:`Pausa (F8)`,fbd_debug_cycle:`Un ciclo`,fbd_debug_step:`Un blocco (F10)`,fbd_debug_save_once:`Salva lo schema una volta, poi funzionano punti di interruzione e passi singoli`,fbd_debug_forced_count:`Valori forzati: %s`,fbd_debug_release_all:`Rilascia tutti`,fbd_debug_breakpoint_count:`Punti di interruzione: %s`,fbd_debug_remove_all:`Rimuovi tutti`,fbd_debug_breakpoint_set:`Imposta punto di interruzione (F9)`,fbd_debug_breakpoint_remove:`Rimuovi punto di interruzione (F9)`,fbd_debug_breakpoint:`Punto di interruzione`,fbd_debug_breakpoint_hint:`Lo schema si ferma prima di questo blocco (F9)`,fbd_debug_forced:`forzato`,fbd_debug_force:`Forza`,fbd_debug_release:`Rilascia`,fbd_debug_force_hint:`Un valore forzato vale finché non viene rilasciato o la vista online termina - e agisce anche sugli stati che lo schema scrive.`,fbd_link:`Collegamento`,fbd_link_mark:`Mostra come marcatore di collegamento`,fbd_link_mark_hint:`Invece di una linea attraverso lo schema, entrambe le estremità mostrano un marcatore con un nome; un doppio clic salta all'altra estremità.`,fbd_link_label:`Nome del marcatore`,fbd_layout:`Disponi automaticamente`,fbd_find:`Cerca nello schema (Ctrl+F)`,fbd_find_placeholder:`Nome, tipo, stato…`,fbd_find_none:`nulla`,fbd_find_previous:`Precedente (Maiusc+Invio)`,fbd_find_next:`Successivo (Invio)`,fbd_find_close:`Chiudi (Esc)`,"The diagram does not run":`Lo schema non è in esecuzione`,"The diagram is not shown online":`Lo schema non è mostrato online`,"The diagram was saved before values could be forced - save it once":`Lo schema è stato salvato prima che si potessero forzare valori - salvalo una volta`,"The diagram was saved before it could stop at blocks - save it once":`Lo schema è stato salvato prima che potesse fermarsi ai blocchi - salvalo una volta`,fbd_instance_open:`Vista interna`,fbd_instance_open_hint:`Mostra questa istanza dall'interno - online con i suoi valori (doppio clic)`,fbd_instance_title:`Istanza "%s" di "%s", versione %s`,fbd_instance_readonly:`Sola lettura: è il blocco come lo contiene questo schema. Si modifica nel suo schema. Qui si possono forzare valori, i punti di interruzione solo nello schema stesso.`,fbd_instance_save_once:`Salva lo schema una volta, poi compaiono i valori dentro le istanze`,fbd_instance_back:`Indietro (Esc)`,fbd_link_refused_type:`Non collegato: %s non si adatta a %s (%s). Solo INT diventa REAL da solo.`,fbd_link_refused_taken:`Non collegato: %s è già collegato - un ingresso accetta un solo collegamento`,fbd_category_memory:`Memoria`,fbd_tab_blocks:`Blocchi`,fbd_tab_variables:`Variabili`,fbd_tab_favorites:`Preferiti`,fbd_favorite_add:`Aggiungi ai preferiti`,fbd_favorite_remove:`Rimuovi dai preferiti`,fbd_no_variables:`Ancora nessuno stato nello schema - arrivano con STATE_IN e STATE_OUT`,fbd_no_favorites:`Ancora nessun preferito - la stella su un blocco lo mette qui`,fbd_expand_all:`Espandi tutto`,fbd_collapse_all:`Comprimi tutto`,fbd_menu:`Altro`,fbd_menu_properties:`Proprietà`,fbd_menu_duplicate:`Duplica`,fbd_tab_properties:`Proprietà`,fbd_tab_docs:`Documentazione`,fbd_section_general:`Generale`,fbd_section_params:`Parametri`,fbd_section_preview:`Anteprima`,fbd_section_block:`Blocco`,fbd_name:`Nome`,fbd_type:`Tipo`,fbd_comment_field:`Commento`,fbd_comment_placeholder:`Commento…`,fbd_invert_short:`invertito`,fbd_is_block_short:`È un blocco`,fbd_link_from_to:`Da → a`,fbd_link_mark_short:`Come marcatore`,fbd_outputs:`Uscite`,fbd_doc_keys:`Tasti`,fbd_key_undo:`Annulla / ripeti`,fbd_key_copy:`Copia / taglia / incolla`,fbd_key_delete:`Elimina la selezione`,fbd_key_find:`Cerca nello schema`,fbd_key_pause:`Pausa / continua (online)`,fbd_key_breakpoint:`Punto di interruzione sul blocco scelto (online)`,fbd_key_step:`Un blocco avanti (online)`,fbd_key_back:`Esci da un'istanza`,fbd_doc_double_click:`Un doppio clic su un'istanza di un blocco proprio la mostra dall'interno; su un marcatore di collegamento salta all'altra estremità.`,fbd_doc_stateful:`Ricorda il suo stato da un ciclo all'altro`,fbd_doc_time:`Dipende dal tempo - uno schema che lo contiene gira ciclicamente`,fbd_instance:`Istanza`,fbd_grid:`Griglia`,fbd_links_curved:`Collegamenti come curve`,fbd_links_orthogonal:`Collegamenti ad angolo retto`,fbd_zoom_in:`Ingrandisci`,fbd_zoom_out:`Riduci`,fbd_zoom_reset:`Al 100 %`,fbd_link_const_retyped:`%s ora è di tipo %s (valore %s)`,fbd_link_refused_const:`Non collegato: %s alimenta già ingressi che non accettano %s (%s)`,fbd_state_type_taken:`%s ora legge lo stato come %s, come indica il suo oggetto - modificalo nelle proprietà se serve`,fbd_desc_LOG:`Scrive una riga nel log: su un fronte di salita di TRIG o quando IN cambia. %s nel testo è il valore di IN`,fbd_param_text:`Testo`,fbd_param_level:`Livello`,fbd_param_when:`Quando`,fbd_option_edge:`sul fronte di salita di TRIG`,fbd_option_change:`quando IN cambia`,fbd_online_changed_short:`modificato`,fbd_category_counters:`Contatori`,fbd_category_convert:`Conversione`,fbd_category_calendar:`Calendario`,fbd_category_messages:`Messaggi`,fbd_category_expert:`Esperto`,fbd_desc_BLINK:`Lampeggiatore: finché EN è vero, Q è vero per TH e falso per TL`,fbd_desc_CTU:`Contatore in avanti: conta i fronti di salita di CU, R azzera CV. Q: CV ha raggiunto PV`,fbd_desc_CTD:`Contatore all'indietro: conta alla rovescia sui fronti di salita di CD, LD carica PV. Q: CV ha raggiunto 0`,fbd_desc_CTUD:`Contatore avanti/indietro: CU conta avanti, CD indietro, R azzera, LD carica PV. QU: CV ha raggiunto PV, QD: CV ha raggiunto 0`,fbd_desc_ROUND:`Arrotonda IN a DIGITS decimali`,fbd_desc_TO_BOOL:`Converte in BOOL: 0, testo vuoto e "false" sono falsi`,fbd_desc_TO_INT:`Converte in INT, arrotondato; la virgola decimale vale come punto, ciò che non è un numero dà 0`,fbd_desc_TO_REAL:`Converte in REAL; la virgola decimale vale come punto, ciò che non è un numero dà 0`,fbd_desc_TO_TIME:`Converte in TIME: un numero è in ms, un testo può essere "2s", "1m30s" o "08:30"`,fbd_desc_TO_STRING:`Converte in testo`,fbd_desc_CONCAT:`Unisce gli ingressi in un testo - arrotondare prima i numeri con ROUND`,fbd_desc_CLOCK:`L'ora locale: ora del giorno, ora, minuto, giorno della settimana (1 lunedì ... 7 domenica), giorno, mese e anno`,fbd_desc_TIMEWINDOW:`Finestra oraria: vero da START a END nei giorni scelti; una finestra oltre la mezzanotte appartiene al giorno in cui inizia`,fbd_desc_SCHEDULE:`Pianificazione: Q è vero per un ciclo quando arriva l'ora del modello cron`,fbd_desc_ASTRO:`Sole: Q è vero da un evento del sole a un altro, per esempio dal tramonto all'alba; START ed END sono i loro orari di oggi`,fbd_desc_NOTIFY:`Invia una notifica di ioBroker: su un fronte di salita di TRIG o quando IN cambia. Al massimo 5 al minuto`,fbd_desc_SENDTO:`Invia un messaggio a un adattatore come telegram.0 o pushover.0 (text, message, title, subject): su un fronte di salita di TRIG o quando IN cambia. Al massimo 5 al minuto`,fbd_desc_JS:`JavaScript proprio: riceve IN1 ... INn, dt, firstScan e state (mantenuto tra i cicli), restituisce OUT1 o [OUT1, OUT2, ...]`,fbd_param_days:`Giorni`,fbd_param_cron:`Modello cron`,fbd_param_start:`Da`,fbd_param_end:`A`,fbd_param_startOffset:`Scostamento dell'inizio`,fbd_param_endOffset:`Scostamento della fine`,fbd_offset_hint:`In minuti, negativo è prima`,fbd_param_category:`Tipo`,fbd_param_instance:`Istanza`,fbd_param_title:`Titolo`,fbd_param_command:`Comando`,fbd_param_code:`Codice`,fbd_param_outputs:`Numero di uscite`,fbd_option_all:`ogni giorno`,fbd_option_weekdays:`da lunedì a venerdì`,fbd_option_weekend:`sabato e domenica`,fbd_option_message:`Messaggio`,fbd_option_alert:`Allarme`,fbd_cron_dialog:`Impostare l'ora`,fbd_cron_hint:`Minuto ora giorno mese giorno_settimana, per esempio "0 8 * * 1-5": alle 8:00 da lunedì a venerdì. Con i secondi davanti, "*/5 * * * * *" è ogni 5 secondi`,fbd_code_hint:`Il codice riceve %s e restituisce il valore di OUT1, o [OUT1, OUT2, ...]; undefined lascia un'uscita com'è`,"The code has an error: %s":`Il codice contiene un errore: %s`,fbd_option_nightEnd:`Fine della notte`,fbd_option_nauticalDawn:`Alba nautica`,fbd_option_dawn:`alba`,fbd_option_sunrise:`Alba`,fbd_option_sunriseEnd:`Fine dell'alba`,fbd_option_goldenHourEnd:`Fine dell'ora d'oro`,fbd_option_solarNoon:`Mezzogiorno solare`,fbd_option_goldenHour:`Ora d'oro`,fbd_option_sunsetStart:`Inizio del tramonto`,fbd_option_sunset:`tramonto`,fbd_option_dusk:`crepuscolo`,fbd_option_nauticalDusk:`Crepuscolo nautico`,fbd_option_night:`Notte`,fbd_option_nadir:`nadir`},nl:{fbd_search:`Zoeken`,fbd_category_iobroker:`ioBroker`,fbd_category_logic:`Logica`,fbd_category_timers:`Timers`,fbd_category_compare:`Vergelijking`,fbd_category_arithmetic:`Rekenen`,fbd_category_structure:`Structuur`,fbd_comment:`Opmerking`,fbd_comment_desc:`Een notitie in het diagram; wordt niet uitgevoerd`,fbd_no_state:`geen state gekozen`,fbd_select_state:`State kiezen`,fbd_instance_name:`Instantienaam`,fbd_inputs:`Ingangen`,fbd_connected:`verbonden`,fbd_inverted:`%s inverteren`,fbd_invalid_time:`Een tijd zoals 500ms, 2s, 1m30s`,fbd_invalid_number:`Geen getal`,fbd_param_oid:`State`,fbd_param_type:`Type`,fbd_param_ack:`Als bevestigd schrijven (ack)`,fbd_param_minInterval:`Minimale tijd tussen schrijfacties`,fbd_param_value:`Waarde`,fbd_param_inputs:`Aantal ingangen`,fbd_diagram:`Diagram`,fbd_cycle_mode:`Uitvoering`,fbd_mode_auto:`Automatisch`,fbd_mode_cyclic:`Cyclisch`,fbd_mode_event:`Bij wijziging van een ingang`,fbd_runs_cyclic:`Het diagram draait cyclisch`,fbd_runs_event:`Het diagram draait bij wijziging van een ingang`,fbd_cycle_time:`Cyclustijd (ms)`,fbd_empty_hint:`Sleep blokken van links naar het canvas en verbind een uitgang met een ingang`,fbd_no_diagram:`Dit script bevat geen functieblokdiagram`,"Unknown block type %s":`Onbekend bloktype %s`,"Invalid block ID %s":`Ongeldige blok-ID %s`,"Duplicate block ID %s":`Dubbele blok-ID %s`,'Parameter "%s" is not set':`Parameter "%s" is niet ingesteld`,"The connection refers to a missing block or pin":`De verbinding verwijst naar een ontbrekend blok of aansluiting`,"Types do not match: %s cannot be connected to %s":`Types komen niet overeen: %s kan niet met %s verbonden worden`,"Input %s is connected more than once":`Ingang %s is meer dan eens verbonden`,"Loop without a block that stores a value: %s":`Terugkoppeling zonder geheugenblok: %s`,"Timers need the cyclic mode, in the event mode they only run when an input changes":`Timers hebben de cyclische modus nodig, in de event-modus lopen ze alleen bij wijziging van een ingang`,fbd_desc_AND:`EN: waar als alle ingangen waar zijn`,fbd_desc_OR:`OF: waar als een ingang waar is`,fbd_desc_XOR:`Exclusieve OF: waar bij een oneven aantal ware ingangen`,fbd_desc_NOT:`NIET: keert de ingang om`,fbd_desc_RS:`Flipflop, reset dominant`,fbd_desc_SR:`Flipflop, set dominant`,fbd_desc_R_TRIG:`Stijgende flank: één cyclus waar als de ingang waar wordt`,fbd_desc_F_TRIG:`Dalende flank: één cyclus waar als de ingang onwaar wordt`,fbd_desc_TON:`Inschakelvertraging: Q wordt waar als IN gedurende PT waar was`,fbd_desc_TOF:`Uitschakelvertraging: Q blijft PT lang waar nadat IN onwaar werd`,fbd_desc_TP:`Puls: een stijgende flank van IN geeft een puls van lengte PT`,fbd_desc_GT:`Groter dan`,fbd_desc_GE:`Groter dan of gelijk`,fbd_desc_LT:`Kleiner dan`,fbd_desc_LE:`Kleiner dan of gelijk`,fbd_desc_EQ:`Gelijk`,fbd_desc_NE:`Ongelijk`,fbd_desc_ADD:`Optellen`,fbd_desc_SUB:`Aftrekken`,fbd_desc_MUL:`Vermenigvuldigen`,fbd_desc_DIV:`Delen (door 0 geeft 0)`,fbd_desc_MIN:`Kleinste ingang`,fbd_desc_MAX:`Grootste ingang`,fbd_desc_STATE_IN:`Leest een ioBroker-state`,fbd_desc_STATE_OUT:`Schrijft een ioBroker-state als de waarde verandert`,fbd_desc_CONST:`Een vaste waarde`,fbd_online:`Online`,fbd_online_tooltip:`Waarden van het lopende diagram tonen`,fbd_online_waiting:`Wachten op gegevens…`,fbd_online_no_data:`Al %s s geen gegevens - draait het script?`,fbd_online_stalled:`Het diagram rekent niet meer (cyclus %s)`,fbd_online_cycle:`Cyclus %s`,fbd_online_event:`wacht op ingangen`,fbd_online_not_running:`Het script draait niet`,fbd_online_changed:`Het diagram is gewijzigd - de waarden horen bij de opgeslagen versie`,fbd_runtime_error:`Fout bij uitvoeren: %s`,fbd_online_no_values:`Cyclus %s - sla het diagram één keer op om de waarden te zien`,fbd_category_interface:`Interface`,fbd_category_user:`Eigen blokken`,fbd_desc_FB_IN:`Een ingang van dit blok`,fbd_desc_FB_OUT:`Een uitgang van dit blok`,fbd_param_pin:`Naam van de aansluiting`,fbd_invalid_name:`Alleen letters, cijfers en _, niet beginnend met een cijfer`,fbd_no_user_blocks:`Nog geen eigen blokken - een diagram wordt er een met "Dit diagram is een blok" in de instellingen`,fbd_is_block:`Dit diagram is een blok`,fbd_block_hint:`Een blok wordt in andere diagrammen geplaatst, zo vaak als nodig. De FB_IN- en FB_OUT-blokken zijn de aansluitingen; elke opgeslagen wijziging is een nieuwe versie.`,fbd_block_name:`Naam van het blok`,fbd_block_description:`Beschrijving`,fbd_block_type:`Type %s, versie %s`,fbd_block_duplicate:`Het diagram "%s" definieert hetzelfde type`,fbd_block_newer:`Versie %s is beschikbaar`,fbd_block_update:`Bijwerken`,fbd_block_update_hint:`Neemt de nieuwe versie over voor alle instanties in dit diagram`,fbd_block_open:`Blok openen`,fbd_block_outdated:`Nieuwe versie van "%s": %s (in dit diagram: %s)`,"Inputs and outputs of a block only work in the diagram of a block":`In- en uitgangen van een blok werken alleen in het diagram van een blok`,"A block cannot read or write states - give it inputs and outputs instead":`Een blok kan geen states lezen of schrijven - gebruik in- en uitgangen`,"Invalid pin name %s":`Ongeldige aansluitingsnaam %s`,"The pin name %s is used twice":`De aansluitingsnaam %s wordt twee keer gebruikt`,"The block %s contains itself":`Het blok %s bevat zichzelf`,"The block %s has errors: %s":`Het blok %s bevat fouten: %s`,"Invalid block type %s":`Ongeldig bloktype %s`,fbd_category_control:`Regeling`,fbd_desc_HYST:`Tweepuntsschakelaar: Q wordt waar als IN boven HIGH stijgt en onwaar als IN onder LOW daalt`,fbd_desc_RAMP:`Helling: OUT volgt IN, met hoogstens UP per seconde omhoog en DOWN per seconde omlaag (0: onbeperkt)`,fbd_desc_PT1:`Laagdoorlaatfilter van de eerste orde (PT1): OUT volgt IN met de tijdconstante T`,fbd_desc_PID:`PID-regelaar: gewenste waarde SP, proceswaarde PV, uitgang Y tussen YMIN en YMAX; TN of TV 0 laat dat deel weg`,fbd_online_paused:`Gepauzeerd (cyclus %s)`,fbd_online_paused_at:`Gestopt vóór %s (cyclus %s)`,fbd_debug_resume:`Doorgaan (F8)`,fbd_debug_pause:`Pauzeren (F8)`,fbd_debug_cycle:`Eén cyclus`,fbd_debug_step:`Eén blok (F10)`,fbd_debug_save_once:`Sla het diagram één keer op, dan werken breekpunten en losse stappen`,fbd_debug_forced_count:`Geforceerde waarden: %s`,fbd_debug_release_all:`Alle vrijgeven`,fbd_debug_breakpoint_count:`Breekpunten: %s`,fbd_debug_remove_all:`Alle verwijderen`,fbd_debug_breakpoint_set:`Breekpunt zetten (F9)`,fbd_debug_breakpoint_remove:`Breekpunt verwijderen (F9)`,fbd_debug_breakpoint:`Breekpunt`,fbd_debug_breakpoint_hint:`Het diagram stopt vóór dit blok (F9)`,fbd_debug_forced:`geforceerd`,fbd_debug_force:`Forceren`,fbd_debug_release:`Vrijgeven`,fbd_debug_force_hint:`Een geforceerde waarde geldt tot ze wordt vrijgegeven of de onlineweergave eindigt - en werkt ook door in de toestanden die het diagram schrijft.`,fbd_link:`Verbinding`,fbd_link_mark:`Als verbindingsmarkering tonen`,fbd_link_mark_hint:`In plaats van een lijn door het diagram tonen beide uiteinden een markering met een naam; dubbelklikken springt naar het andere uiteinde.`,fbd_link_label:`Naam van de markering`,fbd_layout:`Automatisch rangschikken`,fbd_find:`Zoeken in het diagram (Ctrl+F)`,fbd_find_placeholder:`Naam, type, toestand…`,fbd_find_none:`niets`,fbd_find_previous:`Vorige (Shift+Enter)`,fbd_find_next:`Volgende (Enter)`,fbd_find_close:`Sluiten (Esc)`,"The diagram does not run":`Het diagram draait niet`,"The diagram is not shown online":`Het diagram wordt niet online getoond`,"The diagram was saved before values could be forced - save it once":`Het diagram is opgeslagen voordat waarden geforceerd konden worden - sla het één keer op`,"The diagram was saved before it could stop at blocks - save it once":`Het diagram is opgeslagen voordat het bij blokken kon stoppen - sla het één keer op`,fbd_instance_open:`Binnenaanzicht`,fbd_instance_open_hint:`Toont deze instantie van binnen - online met haar eigen waarden (dubbelklik)`,fbd_instance_title:`Instantie "%s" van "%s", versie %s`,fbd_instance_readonly:`Alleen lezen: zo staat het blok in dit diagram. Het wordt in zijn eigen diagram gewijzigd. Waarden kunnen hier geforceerd worden, breekpunten alleen in het diagram zelf.`,fbd_instance_save_once:`Sla het diagram één keer op, dan verschijnen de waarden in de instanties`,fbd_instance_back:`Terug (Esc)`,fbd_link_refused_type:`Niet verbonden: %s past niet bij %s (%s). Alleen INT wordt vanzelf REAL.`,fbd_link_refused_taken:`Niet verbonden: %s is al verbonden - een ingang neemt maar één verbinding`,fbd_category_memory:`Geheugen`,fbd_tab_blocks:`Blokken`,fbd_tab_variables:`Variabelen`,fbd_tab_favorites:`Favorieten`,fbd_favorite_add:`Aan favorieten toevoegen`,fbd_favorite_remove:`Uit favorieten verwijderen`,fbd_no_variables:`Nog geen toestanden in het diagram - die komen met STATE_IN en STATE_OUT`,fbd_no_favorites:`Nog geen favorieten - de ster bij een blok zet het hier`,fbd_expand_all:`Alles openklappen`,fbd_collapse_all:`Alles dichtklappen`,fbd_menu:`Meer`,fbd_menu_properties:`Eigenschappen`,fbd_menu_duplicate:`Dupliceren`,fbd_tab_properties:`Eigenschappen`,fbd_tab_docs:`Documentatie`,fbd_section_general:`Algemeen`,fbd_section_params:`Parameters`,fbd_section_preview:`Voorbeeld`,fbd_section_block:`Blok`,fbd_name:`Naam`,fbd_type:`Type`,fbd_comment_field:`Opmerking`,fbd_comment_placeholder:`Opmerking…`,fbd_invert_short:`omgekeerd`,fbd_is_block_short:`Is een blok`,fbd_link_from_to:`Van → naar`,fbd_link_mark_short:`Als markering`,fbd_outputs:`Uitgangen`,fbd_doc_keys:`Sneltoetsen`,fbd_key_undo:`Ongedaan maken / opnieuw`,fbd_key_copy:`Kopiëren / knippen / plakken`,fbd_key_delete:`Selectie verwijderen`,fbd_key_find:`Zoeken in het diagram`,fbd_key_pause:`Pauzeren / doorgaan (online)`,fbd_key_breakpoint:`Breekpunt bij het gekozen blok (online)`,fbd_key_step:`Eén blok verder (online)`,fbd_key_back:`Terug uit een instantie`,fbd_doc_double_click:`Dubbelklikken op een instantie van een eigen blok toont die van binnen; op een verbindingsmarkering springt het naar het andere uiteinde.`,fbd_doc_stateful:`Onthoudt zijn toestand van cyclus tot cyclus`,fbd_doc_time:`Hangt af van de tijd - een diagram ermee draait cyclisch`,fbd_instance:`Instantie`,fbd_grid:`Raster`,fbd_links_curved:`Verbindingen als curven`,fbd_links_orthogonal:`Verbindingen haaks`,fbd_zoom_in:`Inzoomen`,fbd_zoom_out:`Uitzoomen`,fbd_zoom_reset:`Naar 100 %`,fbd_link_const_retyped:`%s is nu van het type %s (waarde %s)`,fbd_link_refused_const:`Niet verbonden: %s voedt al ingangen die geen %s nemen (%s)`,fbd_state_type_taken:`%s leest de toestand nu als %s, zoals het object zegt - zo nodig in de eigenschappen wijzigen`,fbd_desc_LOG:`Schrijft een regel in het logboek: bij een stijgende flank van TRIG of als IN verandert. %s in de tekst is de waarde van IN`,fbd_param_text:`Tekst`,fbd_param_level:`Niveau`,fbd_param_when:`Wanneer`,fbd_option_edge:`bij een stijgende flank van TRIG`,fbd_option_change:`als IN verandert`,fbd_online_changed_short:`gewijzigd`,fbd_category_counters:`Tellers`,fbd_category_convert:`Conversie`,fbd_category_calendar:`Kalender`,fbd_category_messages:`Berichten`,fbd_category_expert:`Expert`,fbd_desc_BLINK:`Knipperaar: zolang EN waar is, is Q waar gedurende TH en onwaar gedurende TL`,fbd_desc_CTU:`Opteller: telt de stijgende flanken van CU, R zet CV op 0. Q: CV heeft PV bereikt`,fbd_desc_CTD:`Afteller: telt af op de stijgende flanken van CD, LD laadt PV. Q: CV heeft 0 bereikt`,fbd_desc_CTUD:`Op-/afteller: CU telt op, CD af, R zet 0, LD laadt PV. QU: CV heeft PV bereikt, QD: CV heeft 0 bereikt`,fbd_desc_ROUND:`Rondt IN af op DIGITS decimalen`,fbd_desc_TO_BOOL:`Zet om naar BOOL: 0, lege tekst en "false" zijn onwaar`,fbd_desc_TO_INT:`Zet om naar INT, afgerond; een decimale komma telt als punt, wat geen getal is geeft 0`,fbd_desc_TO_REAL:`Zet om naar REAL; een decimale komma telt als punt, wat geen getal is geeft 0`,fbd_desc_TO_TIME:`Zet om naar TIME: een getal is ms, een tekst mag "2s", "1m30s" of "08:30" zijn`,fbd_desc_TO_STRING:`Zet om naar tekst`,fbd_desc_CONCAT:`Voegt de ingangen samen tot één tekst - rond getallen eerst af met ROUND`,fbd_desc_CLOCK:`De lokale tijd: tijdstip, uur, minuut, weekdag (1 maandag ... 7 zondag), dag, maand en jaar`,fbd_desc_TIMEWINDOW:`Tijdvenster: waar van START tot END op de gekozen dagen; een venster over middernacht hoort bij de dag waarop het begint`,fbd_desc_SCHEDULE:`Planning: Q is één cyclus waar wanneer de tijd van het cron-patroon komt`,fbd_desc_ASTRO:`Zon: Q is waar van de ene zonnegebeurtenis tot de andere, zoals van zonsondergang tot zonsopgang; START en END zijn hun tijden vandaag`,fbd_desc_NOTIFY:`Stuurt een ioBroker-melding: bij een stijgende flank van TRIG of wanneer IN verandert. Hoogstens 5 per minuut`,fbd_desc_SENDTO:`Stuurt een bericht naar een adapter zoals telegram.0 of pushover.0 (text, message, title, subject): bij een stijgende flank van TRIG of wanneer IN verandert. Hoogstens 5 per minuut`,fbd_desc_JS:`Eigen JavaScript: krijgt IN1 ... INn, dt, firstScan en state (blijft tussen cycli), geeft OUT1 of [OUT1, OUT2, ...] terug`,fbd_param_days:`Dagen`,fbd_param_cron:`Cron-patroon`,fbd_param_start:`Van`,fbd_param_end:`Tot`,fbd_param_startOffset:`Verschuiving van het begin`,fbd_param_endOffset:`Verschuiving van het einde`,fbd_offset_hint:`In minuten, negatief is eerder`,fbd_param_category:`Soort`,fbd_param_instance:`Instantie`,fbd_param_title:`Titel`,fbd_param_command:`Opdracht`,fbd_param_code:`Code`,fbd_param_outputs:`Aantal uitgangen`,fbd_option_all:`elke dag`,fbd_option_weekdays:`maandag tot vrijdag`,fbd_option_weekend:`zaterdag en zondag`,fbd_option_message:`Melding`,fbd_option_alert:`Alarm`,fbd_cron_dialog:`Tijd instellen`,fbd_cron_hint:`Minuut uur dag maand weekdag, zoals "0 8 * * 1-5": om 8:00 van maandag tot vrijdag. Met seconden vooraan is "*/5 * * * * *" elke 5 seconden`,fbd_code_hint:`De code krijgt %s en geeft de waarde van OUT1 terug, of [OUT1, OUT2, ...]; undefined laat een uitgang zoals hij is`,"The code has an error: %s":`De code bevat een fout: %s`,fbd_option_nightEnd:`Einde van de nacht`,fbd_option_nauticalDawn:`Nautische dageraad`,fbd_option_dawn:`dageraad`,fbd_option_sunrise:`zonsopkomst`,fbd_option_sunriseEnd:`Einde zonsopgang`,fbd_option_goldenHourEnd:`Einde van gouden uur`,fbd_option_solarNoon:`Zonne-middag`,fbd_option_goldenHour:`gouden uur`,fbd_option_sunsetStart:`Begin van de zonsondergang`,fbd_option_sunset:`zonsondergang`,fbd_option_dusk:`schemer`,fbd_option_nauticalDusk:`Nautische schemering`,fbd_option_night:`nacht`,fbd_option_nadir:`nadir`},pl:{fbd_search:`Szukaj`,fbd_category_iobroker:`ioBroker`,fbd_category_logic:`Logika`,fbd_category_timers:`Timery`,fbd_category_compare:`Porównanie`,fbd_category_arithmetic:`Arytmetyka`,fbd_category_structure:`Struktura`,fbd_comment:`Komentarz`,fbd_comment_desc:`Notatka na diagramie; nie jest wykonywana`,fbd_no_state:`nie wybrano stanu`,fbd_select_state:`Wybierz stan`,fbd_instance_name:`Nazwa instancji`,fbd_inputs:`Wejścia`,fbd_connected:`połączone`,fbd_inverted:`Odwróć %s`,fbd_invalid_time:`Czas, np. 500ms, 2s, 1m30s`,fbd_invalid_number:`To nie jest liczba`,fbd_param_oid:`Stan`,fbd_param_type:`Typ`,fbd_param_ack:`Zapisz jako potwierdzone (ack)`,fbd_param_minInterval:`Minimalny czas między zapisami`,fbd_param_value:`Wartość`,fbd_param_inputs:`Liczba wejść`,fbd_diagram:`Diagram`,fbd_cycle_mode:`Wykonywanie`,fbd_mode_auto:`Automatycznie`,fbd_mode_cyclic:`Cyklicznie`,fbd_mode_event:`Przy zmianie wejścia`,fbd_runs_cyclic:`Diagram działa cyklicznie`,fbd_runs_event:`Diagram działa przy zmianie wejścia`,fbd_cycle_time:`Czas cyklu (ms)`,fbd_empty_hint:`Przeciągnij bloki z lewej strony na obszar i połącz wyjście z wejściem`,fbd_no_diagram:`Ten skrypt nie zawiera diagramu bloków funkcyjnych`,"Unknown block type %s":`Nieznany typ bloku %s`,"Invalid block ID %s":`Nieprawidłowy identyfikator bloku %s`,"Duplicate block ID %s":`Zduplikowany identyfikator bloku %s`,'Parameter "%s" is not set':`Parametr "%s" nie jest ustawiony`,"The connection refers to a missing block or pin":`Połączenie odnosi się do brakującego bloku lub pinu`,"Types do not match: %s cannot be connected to %s":`Typy nie pasują: %s nie może być połączony z %s`,"Input %s is connected more than once":`Wejście %s jest połączone więcej niż raz`,"Loop without a block that stores a value: %s":`Pętla bez bloku przechowującego wartość: %s`,"Timers need the cyclic mode, in the event mode they only run when an input changes":`Timery wymagają trybu cyklicznego, w trybie zdarzeń działają tylko przy zmianie wejścia`,fbd_desc_AND:`I: prawda, gdy wszystkie wejścia są prawdziwe`,fbd_desc_OR:`LUB: prawda, gdy któreś wejście jest prawdziwe`,fbd_desc_XOR:`Alternatywa wykluczająca: prawda przy nieparzystej liczbie prawdziwych wejść`,fbd_desc_NOT:`NIE: odwraca wejście`,fbd_desc_RS:`Przerzutnik z dominującym resetem`,fbd_desc_SR:`Przerzutnik z dominującym ustawieniem`,fbd_desc_R_TRIG:`Zbocze narastające: prawda przez jeden cykl, gdy wejście staje się prawdziwe`,fbd_desc_F_TRIG:`Zbocze opadające: prawda przez jeden cykl, gdy wejście staje się fałszywe`,fbd_desc_TON:`Opóźnienie załączenia: Q staje się prawdą, gdy IN był prawdą przez PT`,fbd_desc_TOF:`Opóźnienie wyłączenia: Q pozostaje prawdą przez PT po tym, jak IN stał się fałszem`,fbd_desc_TP:`Impuls: zbocze narastające IN daje impuls o długości PT`,fbd_desc_GT:`Większe niż`,fbd_desc_GE:`Większe lub równe`,fbd_desc_LT:`Mniejsze niż`,fbd_desc_LE:`Mniejsze lub równe`,fbd_desc_EQ:`Równe`,fbd_desc_NE:`Różne`,fbd_desc_ADD:`Dodawanie`,fbd_desc_SUB:`Odejmowanie`,fbd_desc_MUL:`Mnożenie`,fbd_desc_DIV:`Dzielenie (przez 0 daje 0)`,fbd_desc_MIN:`Najmniejsze wejście`,fbd_desc_MAX:`Największe wejście`,fbd_desc_STATE_IN:`Odczytuje stan ioBroker`,fbd_desc_STATE_OUT:`Zapisuje stan ioBroker, gdy wartość się zmienia`,fbd_desc_CONST:`Stała wartość`,fbd_online:`Online`,fbd_online_tooltip:`Pokaż wartości działającego diagramu`,fbd_online_waiting:`Oczekiwanie na dane…`,fbd_online_no_data:`Brak danych od %s s - czy skrypt działa?`,fbd_online_stalled:`Diagram już nie działa (cykl %s)`,fbd_online_cycle:`Cykl %s`,fbd_online_event:`czeka na wejścia`,fbd_online_not_running:`Skrypt nie działa`,fbd_online_changed:`Diagram został zmieniony - wartości dotyczą zapisanej wersji`,fbd_runtime_error:`Błąd podczas wykonywania: %s`,fbd_online_no_values:`Cykl %s - zapisz diagram raz, aby zobaczyć wartości`,fbd_category_interface:`Interfejs`,fbd_category_user:`Własne bloki`,fbd_desc_FB_IN:`Wejście tego bloku`,fbd_desc_FB_OUT:`Wyjście tego bloku`,fbd_param_pin:`Nazwa pinu`,fbd_invalid_name:`Tylko litery, cyfry i _, bez cyfry na początku`,fbd_no_user_blocks:`Brak własnych bloków - diagram staje się blokiem przez „Ten diagram jest blokiem” w ustawieniach`,fbd_is_block:`Ten diagram jest blokiem`,fbd_block_hint:`Blok umieszcza się w innych diagramach dowolnie wiele razy. Jego bloki FB_IN i FB_OUT to jego piny; każda zapisana zmiana to nowa wersja.`,fbd_block_name:`Nazwa bloku`,fbd_block_description:`Opis`,fbd_block_type:`Typ %s, wersja %s`,fbd_block_duplicate:`Diagram „%s” definiuje ten sam typ`,fbd_block_newer:`Dostępna jest wersja %s`,fbd_block_update:`Aktualizuj`,fbd_block_update_hint:`Stosuje nową wersję do wszystkich instancji w tym diagramie`,fbd_block_open:`Otwórz blok`,fbd_block_outdated:`Nowa wersja „%s”: %s (w tym diagramie: %s)`,"Inputs and outputs of a block only work in the diagram of a block":`Wejścia i wyjścia bloku działają tylko w diagramie bloku`,"A block cannot read or write states - give it inputs and outputs instead":`Blok nie może odczytywać ani zapisywać stanów - użyj wejść i wyjść`,"Invalid pin name %s":`Nieprawidłowa nazwa pinu %s`,"The pin name %s is used twice":`Nazwa pinu %s jest użyta dwa razy`,"The block %s contains itself":`Blok %s zawiera sam siebie`,"The block %s has errors: %s":`Blok %s zawiera błędy: %s`,"Invalid block type %s":`Nieprawidłowy typ bloku %s`,fbd_category_control:`Regulacja`,fbd_desc_HYST:`Przełącznik dwupołożeniowy: Q staje się prawdą, gdy IN wzrośnie powyżej HIGH, i fałszem, gdy spadnie poniżej LOW`,fbd_desc_RAMP:`Rampa: OUT podąża za IN, najwyżej o UP na sekundę w górę i DOWN na sekundę w dół (0: bez ograniczenia)`,fbd_desc_PT1:`Filtr dolnoprzepustowy pierwszego rzędu (PT1): OUT podąża za IN ze stałą czasową T`,fbd_desc_PID:`Regulator PID: wartość zadana SP, wartość procesu PV, wyjście Y między YMIN a YMAX; TN lub TV równe 0 pomija ten człon`,fbd_online_paused:`Wstrzymano (cykl %s)`,fbd_online_paused_at:`Zatrzymano przed %s (cykl %s)`,fbd_debug_resume:`Kontynuuj (F8)`,fbd_debug_pause:`Wstrzymaj (F8)`,fbd_debug_cycle:`Jeden cykl`,fbd_debug_step:`Jeden blok (F10)`,fbd_debug_save_once:`Zapisz schemat raz, wtedy zadziałają punkty przerwania i pojedyncze kroki`,fbd_debug_forced_count:`Wymuszone wartości: %s`,fbd_debug_release_all:`Zwolnij wszystkie`,fbd_debug_breakpoint_count:`Punkty przerwania: %s`,fbd_debug_remove_all:`Usuń wszystkie`,fbd_debug_breakpoint_set:`Ustaw punkt przerwania (F9)`,fbd_debug_breakpoint_remove:`Usuń punkt przerwania (F9)`,fbd_debug_breakpoint:`Punkt przerwania`,fbd_debug_breakpoint_hint:`Schemat zatrzymuje się przed tym blokiem (F9)`,fbd_debug_forced:`wymuszone`,fbd_debug_force:`Wymuś`,fbd_debug_release:`Zwolnij`,fbd_debug_force_hint:`Wymuszona wartość obowiązuje do zwolnienia lub końca podglądu online - i wpływa też na stany zapisywane przez schemat.`,fbd_link:`Połączenie`,fbd_link_mark:`Pokaż jako znacznik połączenia`,fbd_link_mark_hint:`Zamiast linii przez cały schemat oba końce pokazują znacznik z nazwą; dwuklik przechodzi do drugiego końca.`,fbd_link_label:`Nazwa znacznika`,fbd_layout:`Rozmieść automatycznie`,fbd_find:`Szukaj w schemacie (Ctrl+F)`,fbd_find_placeholder:`Nazwa, typ, stan…`,fbd_find_none:`brak`,fbd_find_previous:`Poprzedni (Shift+Enter)`,fbd_find_next:`Następny (Enter)`,fbd_find_close:`Zamknij (Esc)`,"The diagram does not run":`Schemat nie działa`,"The diagram is not shown online":`Schemat nie jest pokazywany online`,"The diagram was saved before values could be forced - save it once":`Schemat zapisano, zanim można było wymuszać wartości - zapisz go raz`,"The diagram was saved before it could stop at blocks - save it once":`Schemat zapisano, zanim mógł zatrzymywać się na blokach - zapisz go raz`,fbd_instance_open:`Widok wnętrza`,fbd_instance_open_hint:`Pokazuje tę instancję od środka - online z jej własnymi wartościami (dwuklik)`,fbd_instance_title:`Instancja „%s” bloku „%s”, wersja %s`,fbd_instance_readonly:`Tylko do odczytu: tak blok jest zapisany w tym schemacie. Zmienia się go w jego własnym schemacie. Tu można wymuszać wartości, punkty przerwania tylko w samym schemacie.`,fbd_instance_save_once:`Zapisz schemat raz, wtedy pojawią się wartości wewnątrz instancji`,fbd_instance_back:`Wstecz (Esc)`,fbd_link_refused_type:`Nie połączono: %s nie pasuje do %s (%s). Tylko INT sam staje się REAL.`,fbd_link_refused_taken:`Nie połączono: %s jest już połączony - wejście przyjmuje tylko jedno połączenie`,fbd_category_memory:`Pamięć`,fbd_tab_blocks:`Bloki`,fbd_tab_variables:`Zmienne`,fbd_tab_favorites:`Ulubione`,fbd_favorite_add:`Dodaj do ulubionych`,fbd_favorite_remove:`Usuń z ulubionych`,fbd_no_variables:`Na schemacie nie ma jeszcze stanów - pojawiają się ze STATE_IN i STATE_OUT`,fbd_no_favorites:`Brak ulubionych - gwiazdka przy bloku umieszcza go tutaj`,fbd_expand_all:`Rozwiń wszystko`,fbd_collapse_all:`Zwiń wszystko`,fbd_menu:`Więcej`,fbd_menu_properties:`Właściwości`,fbd_menu_duplicate:`Duplikuj`,fbd_tab_properties:`Właściwości`,fbd_tab_docs:`Dokumentacja`,fbd_section_general:`Ogólne`,fbd_section_params:`Parametry`,fbd_section_preview:`Podgląd`,fbd_section_block:`Blok`,fbd_name:`Nazwa`,fbd_type:`Typ`,fbd_comment_field:`Komentarz`,fbd_comment_placeholder:`Komentarz…`,fbd_invert_short:`odwrócone`,fbd_is_block_short:`Jest blokiem`,fbd_link_from_to:`Z → do`,fbd_link_mark_short:`Jako znacznik`,fbd_outputs:`Wyjścia`,fbd_doc_keys:`Skróty`,fbd_key_undo:`Cofnij / ponów`,fbd_key_copy:`Kopiuj / wytnij / wklej`,fbd_key_delete:`Usuń zaznaczenie`,fbd_key_find:`Szukaj w schemacie`,fbd_key_pause:`Wstrzymaj / kontynuuj (online)`,fbd_key_breakpoint:`Punkt przerwania przy wybranym bloku (online)`,fbd_key_step:`O jeden blok dalej (online)`,fbd_key_back:`Wyjdź z instancji`,fbd_doc_double_click:`Dwuklik na instancji własnego bloku pokazuje ją od środka; na znaczniku połączenia przechodzi do drugiego końca.`,fbd_doc_stateful:`Pamięta swój stan z cyklu na cykl`,fbd_doc_time:`Zależy od czasu - schemat z nim działa cyklicznie`,fbd_instance:`Instancja`,fbd_grid:`Siatka`,fbd_links_curved:`Połączenia jako krzywe`,fbd_links_orthogonal:`Połączenia pod kątem prostym`,fbd_zoom_in:`Powiększ`,fbd_zoom_out:`Pomniejsz`,fbd_zoom_reset:`Do 100 %`,fbd_link_const_retyped:`%s ma teraz typ %s (wartość %s)`,fbd_link_refused_const:`Nie połączono: %s zasila już wejścia, które nie przyjmują %s (%s)`,fbd_state_type_taken:`%s czyta teraz stan jako %s, zgodnie z jego obiektem - w razie potrzeby zmień we właściwościach`,fbd_desc_LOG:`Zapisuje wiersz w dzienniku: przy zboczu narastającym TRIG lub gdy zmienia się IN. %s w tekście to wartość IN`,fbd_param_text:`Tekst`,fbd_param_level:`Poziom`,fbd_param_when:`Kiedy`,fbd_option_edge:`przy zboczu narastającym TRIG`,fbd_option_change:`gdy zmienia się IN`,fbd_online_changed_short:`zmieniono`,fbd_category_counters:`Liczniki`,fbd_category_convert:`Konwersja`,fbd_category_calendar:`Kalendarz`,fbd_category_messages:`Komunikaty`,fbd_category_expert:`Ekspert`,fbd_desc_BLINK:`Migacz: dopóki EN jest prawdą, Q jest prawdą przez TH i fałszem przez TL`,fbd_desc_CTU:`Licznik w górę: liczy zbocza narastające CU, R zeruje CV. Q: CV osiągnął PV`,fbd_desc_CTD:`Licznik w dół: odlicza przy zboczach narastających CD, LD ładuje PV. Q: CV osiągnął 0`,fbd_desc_CTUD:`Licznik góra/dół: CU liczy w górę, CD w dół, R zeruje, LD ładuje PV. QU: CV osiągnął PV, QD: CV osiągnął 0`,fbd_desc_ROUND:`Zaokrągla IN do DIGITS miejsc po przecinku`,fbd_desc_TO_BOOL:`Konwertuje na BOOL: 0, pusty tekst i "false" to fałsz`,fbd_desc_TO_INT:`Konwertuje na INT z zaokrągleniem; przecinek dziesiętny liczy się jak kropka, co nie jest liczbą daje 0`,fbd_desc_TO_REAL:`Konwertuje na REAL; przecinek dziesiętny liczy się jak kropka, co nie jest liczbą daje 0`,fbd_desc_TO_TIME:`Konwertuje na TIME: liczba to ms, tekst może być "2s", "1m30s" lub "08:30"`,fbd_desc_TO_STRING:`Konwertuje na tekst`,fbd_desc_CONCAT:`Łączy wejścia w jeden tekst - liczby najpierw zaokrąglij blokiem ROUND`,fbd_desc_CLOCK:`Czas lokalny: pora dnia, godzina, minuta, dzień tygodnia (1 poniedziałek ... 7 niedziela), dzień, miesiąc i rok`,fbd_desc_TIMEWINDOW:`Okno czasowe: prawda od START do END w wybrane dni; okno przez północ należy do dnia, w którym się zaczyna`,fbd_desc_SCHEDULE:`Harmonogram: Q jest prawdą przez jeden cykl, gdy nadejdzie czas wzorca cron`,fbd_desc_ASTRO:`Słońce: Q jest prawdą od jednego zdarzenia słońca do drugiego, np. od zachodu do wschodu; START i END to ich dzisiejsze godziny`,fbd_desc_NOTIFY:`Wysyła powiadomienie ioBroker: przy zboczu narastającym TRIG lub gdy zmienia się IN. Najwyżej 5 na minutę`,fbd_desc_SENDTO:`Wysyła wiadomość do adaptera, np. telegram.0 lub pushover.0 (text, message, title, subject): przy zboczu narastającym TRIG lub gdy zmienia się IN. Najwyżej 5 na minutę`,fbd_desc_JS:`Własny JavaScript: dostaje IN1 ... INn, dt, firstScan i state (zachowywany między cyklami), zwraca OUT1 lub [OUT1, OUT2, ...]`,fbd_param_days:`Dni`,fbd_param_cron:`Wzorzec cron`,fbd_param_start:`Od`,fbd_param_end:`Do`,fbd_param_startOffset:`Przesunięcie początku`,fbd_param_endOffset:`Przesunięcie końca`,fbd_offset_hint:`W minutach, ujemne oznacza wcześniej`,fbd_param_category:`Rodzaj`,fbd_param_instance:`Instancja`,fbd_param_title:`Tytuł`,fbd_param_command:`Polecenie`,fbd_param_code:`Kod`,fbd_param_outputs:`Liczba wyjść`,fbd_option_all:`codziennie`,fbd_option_weekdays:`od poniedziałku do piątku`,fbd_option_weekend:`sobota i niedziela`,fbd_option_message:`Komunikat`,fbd_option_alert:`Alarm`,fbd_cron_dialog:`Ustaw czas`,fbd_cron_hint:`Minuta godzina dzień miesiąc dzień_tygodnia, np. "0 8 * * 1-5": o 8:00 od poniedziałku do piątku. Z sekundami na początku "*/5 * * * * *" to co 5 sekund`,fbd_code_hint:`Kod dostaje %s i zwraca wartość OUT1 lub [OUT1, OUT2, ...]; undefined pozostawia wyjście bez zmian`,"The code has an error: %s":`Kod zawiera błąd: %s`,fbd_option_nightEnd:`Koniec nocy`,fbd_option_nauticalDawn:`Żeglarski świt`,fbd_option_dawn:`Świt`,fbd_option_sunrise:`Wschód słońca`,fbd_option_sunriseEnd:`Koniec wschodu słońca`,fbd_option_goldenHourEnd:`Koniec złotej godziny`,fbd_option_solarNoon:`Południe słoneczne`,fbd_option_goldenHour:`Złota godzina`,fbd_option_sunsetStart:`Początek zachodu słońca`,fbd_option_sunset:`Zachód słońca`,fbd_option_dusk:`Zmierzch`,fbd_option_nauticalDusk:`Żeglarski zmierzch`,fbd_option_night:`Noc`,fbd_option_nadir:`Północ słoneczna`},pt:{fbd_search:`Pesquisar`,fbd_category_iobroker:`ioBroker`,fbd_category_logic:`Lógica`,fbd_category_timers:`Temporizadores`,fbd_category_compare:`Comparação`,fbd_category_arithmetic:`Aritmética`,fbd_category_structure:`Estrutura`,fbd_comment:`Comentário`,fbd_comment_desc:`Uma nota no diagrama; não é executada`,fbd_no_state:`nenhum estado selecionado`,fbd_select_state:`Selecionar estado`,fbd_instance_name:`Nome da instância`,fbd_inputs:`Entradas`,fbd_connected:`ligado`,fbd_inverted:`Inverter %s`,fbd_invalid_time:`Um tempo como 500ms, 2s, 1m30s`,fbd_invalid_number:`Não é um número`,fbd_param_oid:`Estado`,fbd_param_type:`Tipo`,fbd_param_ack:`Escrever como confirmado (ack)`,fbd_param_minInterval:`Tempo mínimo entre escritas`,fbd_param_value:`Valor`,fbd_param_inputs:`Número de entradas`,fbd_diagram:`Diagrama`,fbd_cycle_mode:`Execução`,fbd_mode_auto:`Automático`,fbd_mode_cyclic:`Cíclico`,fbd_mode_event:`Quando uma entrada muda`,fbd_runs_cyclic:`O diagrama é executado ciclicamente`,fbd_runs_event:`O diagrama é executado quando uma entrada muda`,fbd_cycle_time:`Tempo de ciclo (ms)`,fbd_empty_hint:`Arraste blocos da esquerda para a área e ligue uma saída a uma entrada`,fbd_no_diagram:`Este script não contém um diagrama de blocos funcionais`,"Unknown block type %s":`Tipo de bloco desconhecido %s`,"Invalid block ID %s":`ID de bloco inválido %s`,"Duplicate block ID %s":`ID de bloco duplicado %s`,'Parameter "%s" is not set':`O parâmetro "%s" não está definido`,"The connection refers to a missing block or pin":`A ligação refere-se a um bloco ou pino inexistente`,"Types do not match: %s cannot be connected to %s":`Os tipos não correspondem: %s não pode ser ligado a %s`,"Input %s is connected more than once":`A entrada %s está ligada mais de uma vez`,"Loop without a block that stores a value: %s":`Laço sem um bloco que armazena um valor: %s`,"Timers need the cyclic mode, in the event mode they only run when an input changes":`Os temporizadores precisam do modo cíclico; no modo por eventos só funcionam quando uma entrada muda`,fbd_desc_AND:`E: verdadeiro se todas as entradas forem verdadeiras`,fbd_desc_OR:`OU: verdadeiro se alguma entrada for verdadeira`,fbd_desc_XOR:`OU exclusivo: verdadeiro para um número ímpar de entradas verdadeiras`,fbd_desc_NOT:`NÃO: inverte a entrada`,fbd_desc_RS:`Flip-flop com prioridade de reset`,fbd_desc_SR:`Flip-flop com prioridade de set`,fbd_desc_R_TRIG:`Flanco ascendente: verdadeiro por um ciclo quando a entrada se torna verdadeira`,fbd_desc_F_TRIG:`Flanco descendente: verdadeiro por um ciclo quando a entrada se torna falsa`,fbd_desc_TON:`Atraso na ligação: Q fica verdadeiro quando IN esteve verdadeiro durante PT`,fbd_desc_TOF:`Atraso no desligamento: Q permanece verdadeiro durante PT depois de IN ficar falso`,fbd_desc_TP:`Impulso: um flanco ascendente de IN gera um impulso de duração PT`,fbd_desc_GT:`Maior que`,fbd_desc_GE:`Maior ou igual`,fbd_desc_LT:`Menor que`,fbd_desc_LE:`Menor ou igual`,fbd_desc_EQ:`Igual`,fbd_desc_NE:`Diferente`,fbd_desc_ADD:`Adição`,fbd_desc_SUB:`Subtração`,fbd_desc_MUL:`Multiplicação`,fbd_desc_DIV:`Divisão (por 0 dá 0)`,fbd_desc_MIN:`Menor entrada`,fbd_desc_MAX:`Maior entrada`,fbd_desc_STATE_IN:`Lê um estado do ioBroker`,fbd_desc_STATE_OUT:`Escreve um estado do ioBroker quando o valor muda`,fbd_desc_CONST:`Um valor constante`,fbd_online:`Online`,fbd_online_tooltip:`Mostrar os valores do diagrama em execução`,fbd_online_waiting:`À espera de dados…`,fbd_online_no_data:`Sem dados há %s s - o script está a correr?`,fbd_online_stalled:`O diagrama deixou de ser executado (ciclo %s)`,fbd_online_cycle:`Ciclo %s`,fbd_online_event:`à espera de entradas`,fbd_online_not_running:`O script não está a correr`,fbd_online_changed:`O diagrama foi alterado - os valores pertencem à versão guardada`,fbd_runtime_error:`Erro durante a execução: %s`,fbd_online_no_values:`Ciclo %s - guarde o diagrama uma vez para ver os valores`,fbd_category_interface:`Interface`,fbd_category_user:`Blocos próprios`,fbd_desc_FB_IN:`Uma entrada deste bloco`,fbd_desc_FB_OUT:`Uma saída deste bloco`,fbd_param_pin:`Nome do pino`,fbd_invalid_name:`Apenas letras, dígitos e _, sem começar por um dígito`,fbd_no_user_blocks:`Ainda não há blocos próprios - um diagrama torna-se um com "Este diagrama é um bloco" nas definições`,fbd_is_block:`Este diagrama é um bloco`,fbd_block_hint:`Um bloco é colocado noutros diagramas, as vezes que forem precisas. Os seus blocos FB_IN e FB_OUT são os pinos; cada alteração guardada é uma nova versão.`,fbd_block_name:`Nome do bloco`,fbd_block_description:`Descrição`,fbd_block_type:`Tipo %s, versão %s`,fbd_block_duplicate:`O diagrama "%s" define o mesmo tipo`,fbd_block_newer:`A versão %s está disponível`,fbd_block_update:`Atualizar`,fbd_block_update_hint:`Aplica a nova versão a todas as instâncias deste diagrama`,fbd_block_open:`Abrir bloco`,fbd_block_outdated:`Nova versão de "%s": %s (neste diagrama: %s)`,"Inputs and outputs of a block only work in the diagram of a block":`As entradas e saídas de um bloco só funcionam no diagrama de um bloco`,"A block cannot read or write states - give it inputs and outputs instead":`Um bloco não pode ler nem escrever estados - use entradas e saídas`,"Invalid pin name %s":`Nome de pino inválido %s`,"The pin name %s is used twice":`O nome de pino %s é usado duas vezes`,"The block %s contains itself":`O bloco %s contém-se a si próprio`,"The block %s has errors: %s":`O bloco %s tem erros: %s`,"Invalid block type %s":`Tipo de bloco inválido %s`,fbd_category_control:`Controle`,fbd_desc_HYST:`Interruptor de dois pontos: Q fica verdadeiro quando IN sobe acima de HIGH e falso quando cai abaixo de LOW`,fbd_desc_RAMP:`Rampa: OUT segue IN, no máximo UP por segundo para cima e DOWN por segundo para baixo (0: sem limite)`,fbd_desc_PT1:`Passa-baixa de primeira ordem (PT1): OUT segue IN com a constante de tempo T`,fbd_desc_PID:`Controlador PID: referência SP, valor do processo PV, saída Y entre YMIN e YMAX; TN ou TV 0 omite essa parte`,fbd_online_paused:`Pausado (ciclo %s)`,fbd_online_paused_at:`Parado antes de %s (ciclo %s)`,fbd_debug_resume:`Continuar (F8)`,fbd_debug_pause:`Pausar (F8)`,fbd_debug_cycle:`Um ciclo`,fbd_debug_step:`Um bloco (F10)`,fbd_debug_save_once:`Salve o diagrama uma vez, então pontos de parada e passos únicos funcionam`,fbd_debug_forced_count:`Valores forçados: %s`,fbd_debug_release_all:`Liberar todos`,fbd_debug_breakpoint_count:`Pontos de parada: %s`,fbd_debug_remove_all:`Remover todos`,fbd_debug_breakpoint_set:`Definir ponto de parada (F9)`,fbd_debug_breakpoint_remove:`Remover ponto de parada (F9)`,fbd_debug_breakpoint:`Ponto de parada`,fbd_debug_breakpoint_hint:`O diagrama para antes deste bloco (F9)`,fbd_debug_forced:`forçado`,fbd_debug_force:`Forçar`,fbd_debug_release:`Liberar`,fbd_debug_force_hint:`Um valor forçado vale até ser liberado ou até a visão online terminar - e também atinge os estados que o diagrama escreve.`,fbd_link:`Ligação`,fbd_link_mark:`Mostrar como marca de ligação`,fbd_link_mark_hint:`Em vez de uma linha pelo diagrama, as duas pontas mostram uma marca com um nome; um clique duplo salta para a outra ponta.`,fbd_link_label:`Nome da marca`,fbd_layout:`Organizar automaticamente`,fbd_find:`Procurar no diagrama (Ctrl+F)`,fbd_find_placeholder:`Nome, tipo, estado…`,fbd_find_none:`nada`,fbd_find_previous:`Anterior (Shift+Enter)`,fbd_find_next:`Próximo (Enter)`,fbd_find_close:`Fechar (Esc)`,"The diagram does not run":`O diagrama não está em execução`,"The diagram is not shown online":`O diagrama não está sendo mostrado online`,"The diagram was saved before values could be forced - save it once":`O diagrama foi salvo antes de ser possível forçar valores - salve-o uma vez`,"The diagram was saved before it could stop at blocks - save it once":`O diagrama foi salvo antes de poder parar em blocos - salve-o uma vez`,fbd_instance_open:`Vista interna`,fbd_instance_open_hint:`Mostra esta instância por dentro - online com os seus próprios valores (clique duplo)`,fbd_instance_title:`Instância "%s" de "%s", versão %s`,fbd_instance_readonly:`Só leitura: é o bloco como este diagrama o guarda. É alterado no seu próprio diagrama. Aqui podem forçar-se valores; pontos de parada só no próprio diagrama.`,fbd_instance_save_once:`Salve o diagrama uma vez, então aparecem os valores dentro das instâncias`,fbd_instance_back:`Voltar (Esc)`,fbd_link_refused_type:`Não ligado: %s não combina com %s (%s). Só INT passa a REAL sozinho.`,fbd_link_refused_taken:`Não ligado: %s já está ligado - uma entrada aceita só uma ligação`,fbd_category_memory:`Memória`,fbd_tab_blocks:`Blocos`,fbd_tab_variables:`Variáveis`,fbd_tab_favorites:`Favoritos`,fbd_favorite_add:`Adicionar aos favoritos`,fbd_favorite_remove:`Remover dos favoritos`,fbd_no_variables:`Ainda não há estados no diagrama - eles vêm com STATE_IN e STATE_OUT`,fbd_no_favorites:`Ainda não há favoritos - a estrela num bloco coloca-o aqui`,fbd_expand_all:`Abrir todos`,fbd_collapse_all:`Fechar todos`,fbd_menu:`Mais`,fbd_menu_properties:`Propriedades`,fbd_menu_duplicate:`Duplicar`,fbd_tab_properties:`Propriedades`,fbd_tab_docs:`Documentação`,fbd_section_general:`Geral`,fbd_section_params:`Parâmetros`,fbd_section_preview:`Pré-visualização`,fbd_section_block:`Bloco`,fbd_name:`Nome`,fbd_type:`Tipo`,fbd_comment_field:`Comentário`,fbd_comment_placeholder:`Comentário…`,fbd_invert_short:`invertido`,fbd_is_block_short:`É um bloco`,fbd_link_from_to:`De → para`,fbd_link_mark_short:`Como marca`,fbd_outputs:`Saídas`,fbd_doc_keys:`Teclas`,fbd_key_undo:`Desfazer / refazer`,fbd_key_copy:`Copiar / recortar / colar`,fbd_key_delete:`Excluir o selecionado`,fbd_key_find:`Procurar no diagrama`,fbd_key_pause:`Pausar / continuar (online)`,fbd_key_breakpoint:`Ponto de parada no bloco selecionado (online)`,fbd_key_step:`Um bloco adiante (online)`,fbd_key_back:`Sair de uma instância`,fbd_doc_double_click:`Um clique duplo numa instância de um bloco próprio mostra-a por dentro; numa marca de ligação salta para a outra ponta.`,fbd_doc_stateful:`Lembra o seu estado de um ciclo para o outro`,fbd_doc_time:`Depende do tempo - um diagrama com ele corre ciclicamente`,fbd_instance:`Instância`,fbd_grid:`Grelha`,fbd_links_curved:`Ligações como curvas`,fbd_links_orthogonal:`Ligações em ângulo reto`,fbd_zoom_in:`Aproximar`,fbd_zoom_out:`Afastar`,fbd_zoom_reset:`Para 100 %`,fbd_link_const_retyped:`%s agora é do tipo %s (valor %s)`,fbd_link_refused_const:`Não ligado: %s já alimenta entradas que não aceitam %s (%s)`,fbd_state_type_taken:`%s agora lê o estado como %s, como diz o objeto - altere nas propriedades se necessário`,fbd_desc_LOG:`Escreve uma linha no registo: numa borda de subida de TRIG ou quando IN muda. %s no texto é o valor de IN`,fbd_param_text:`Texto`,fbd_param_level:`Nível`,fbd_param_when:`Quando`,fbd_option_edge:`na borda de subida de TRIG`,fbd_option_change:`quando IN muda`,fbd_online_changed_short:`alterado`,fbd_category_counters:`Contadores`,fbd_category_convert:`Conversão`,fbd_category_calendar:`Calendário`,fbd_category_messages:`Mensagens`,fbd_category_expert:`Especialista`,fbd_desc_BLINK:`Pisca: enquanto EN for verdadeiro, Q fica verdadeiro durante TH e falso durante TL`,fbd_desc_CTU:`Contador crescente: conta as bordas de subida de CU, R põe CV a 0. Q: CV atingiu PV`,fbd_desc_CTD:`Contador decrescente: desconta nas bordas de subida de CD, LD carrega PV. Q: CV atingiu 0`,fbd_desc_CTUD:`Contador crescente/decrescente: CU soma, CD subtrai, R põe 0, LD carrega PV. QU: CV atingiu PV, QD: CV atingiu 0`,fbd_desc_ROUND:`Arredonda IN a DIGITS casas decimais`,fbd_desc_TO_BOOL:`Converte para BOOL: 0, texto vazio e "false" são falsos`,fbd_desc_TO_INT:`Converte para INT, arredondado; uma vírgula decimal conta como ponto, o que não é número dá 0`,fbd_desc_TO_REAL:`Converte para REAL; uma vírgula decimal conta como ponto, o que não é número dá 0`,fbd_desc_TO_TIME:`Converte para TIME: um número são ms, um texto pode ser "2s", "1m30s" ou "08:30"`,fbd_desc_TO_STRING:`Converte para texto`,fbd_desc_CONCAT:`Junta as entradas num texto - arredonde os números antes com ROUND`,fbd_desc_CLOCK:`A hora local: hora do dia, hora, minuto, dia da semana (1 segunda ... 7 domingo), dia, mês e ano`,fbd_desc_TIMEWINDOW:`Janela horária: verdadeiro de START a END nos dias escolhidos; uma janela que passa a meia-noite pertence ao dia em que começa`,fbd_desc_SCHEDULE:`Agendamento: Q fica verdadeiro durante um ciclo quando chega a hora do padrão cron`,fbd_desc_ASTRO:`Sol: Q é verdadeiro de um evento do sol a outro, como do pôr ao nascer do sol; START e END são as suas horas de hoje`,fbd_desc_NOTIFY:`Envia uma notificação do ioBroker: numa borda de subida de TRIG ou quando IN muda. No máximo 5 por minuto`,fbd_desc_SENDTO:`Envia uma mensagem a um adaptador como telegram.0 ou pushover.0 (text, message, title, subject): numa borda de subida de TRIG ou quando IN muda. No máximo 5 por minuto`,fbd_desc_JS:`JavaScript próprio: recebe IN1 ... INn, dt, firstScan e state (mantido entre ciclos), devolve OUT1 ou [OUT1, OUT2, ...]`,fbd_param_days:`Dias`,fbd_param_cron:`Padrão cron`,fbd_param_start:`De`,fbd_param_end:`Até`,fbd_param_startOffset:`Desvio do início`,fbd_param_endOffset:`Desvio do fim`,fbd_offset_hint:`Em minutos, negativo é mais cedo`,fbd_param_category:`Tipo`,fbd_param_instance:`Instância`,fbd_param_title:`Título`,fbd_param_command:`Comando`,fbd_param_code:`Código`,fbd_param_outputs:`Número de saídas`,fbd_option_all:`todos os dias`,fbd_option_weekdays:`segunda a sexta`,fbd_option_weekend:`sábado e domingo`,fbd_option_message:`Mensagem`,fbd_option_alert:`Alerta`,fbd_cron_dialog:`Definir a hora`,fbd_cron_hint:`Minuto hora dia mês dia_da_semana, como "0 8 * * 1-5": às 8:00 de segunda a sexta. Com segundos à frente, "*/5 * * * * *" é a cada 5 segundos`,fbd_code_hint:`O código recebe %s e devolve o valor de OUT1, ou [OUT1, OUT2, ...]; undefined deixa uma saída como está`,"The code has an error: %s":`O código tem um erro: %s`,fbd_option_nightEnd:`Fim de noite`,fbd_option_nauticalDawn:`Madrugada náutica`,fbd_option_dawn:`alvorecer`,fbd_option_sunrise:`nascer do sol`,fbd_option_sunriseEnd:`Fim do nascer do sol`,fbd_option_goldenHourEnd:`Fim da hora de ouro`,fbd_option_solarNoon:`Meio-dia solar`,fbd_option_goldenHour:`Hora dourada`,fbd_option_sunsetStart:`Começo do pôr do sol`,fbd_option_sunset:`pôr do sol`,fbd_option_dusk:`Crepúsculo`,fbd_option_nauticalDusk:`Crepúsculo náutico`,fbd_option_night:`Noite`,fbd_option_nadir:`nadir`},ru:{fbd_search:`Поиск`,fbd_category_iobroker:`ioBroker`,fbd_category_logic:`Логика`,fbd_category_timers:`Таймеры`,fbd_category_compare:`Сравнение`,fbd_category_arithmetic:`Арифметика`,fbd_category_structure:`Структура`,fbd_comment:`Комментарий`,fbd_comment_desc:`Заметка на схеме; не выполняется`,fbd_no_state:`состояние не выбрано`,fbd_select_state:`Выбрать состояние`,fbd_instance_name:`Имя экземпляра`,fbd_inputs:`Входы`,fbd_connected:`подключён`,fbd_inverted:`Инвертировать %s`,fbd_invalid_time:`Время, например 500ms, 2s, 1m30s`,fbd_invalid_number:`Не число`,fbd_param_oid:`Состояние`,fbd_param_type:`Тип`,fbd_param_ack:`Записывать как подтверждённое (ack)`,fbd_param_minInterval:`Минимальный интервал между записями`,fbd_param_value:`Значение`,fbd_param_inputs:`Количество входов`,fbd_diagram:`Схема`,fbd_cycle_mode:`Выполнение`,fbd_mode_auto:`Автоматически`,fbd_mode_cyclic:`Циклически`,fbd_mode_event:`При изменении входа`,fbd_runs_cyclic:`Схема выполняется циклически`,fbd_runs_event:`Схема выполняется при изменении входа`,fbd_cycle_time:`Время цикла (мс)`,fbd_empty_hint:`Перетащите блоки слева на поле и соедините выход со входом`,fbd_no_diagram:`Этот скрипт не содержит функциональной блок-схемы`,"Unknown block type %s":`Неизвестный тип блока %s`,"Invalid block ID %s":`Недопустимый ID блока %s`,"Duplicate block ID %s":`Повторяющийся ID блока %s`,'Parameter "%s" is not set':`Параметр "%s" не задан`,"The connection refers to a missing block or pin":`Соединение ссылается на отсутствующий блок или вывод`,"Types do not match: %s cannot be connected to %s":`Типы не совпадают: %s нельзя соединить с %s`,"Input %s is connected more than once":`Вход %s подключён более одного раза`,"Loop without a block that stores a value: %s":`Петля без запоминающего блока: %s`,"Timers need the cyclic mode, in the event mode they only run when an input changes":`Таймерам нужен циклический режим, в событийном они работают только при изменении входа`,fbd_desc_AND:`И: истина, если все входы истинны`,fbd_desc_OR:`ИЛИ: истина, если хотя бы один вход истинен`,fbd_desc_XOR:`Исключающее ИЛИ: истина при нечётном числе истинных входов`,fbd_desc_NOT:`НЕ: инвертирует вход`,fbd_desc_RS:`Триггер с приоритетом сброса`,fbd_desc_SR:`Триггер с приоритетом установки`,fbd_desc_R_TRIG:`Передний фронт: истина один цикл, когда вход становится истинным`,fbd_desc_F_TRIG:`Задний фронт: истина один цикл, когда вход становится ложным`,fbd_desc_TON:`Задержка включения: Q становится истиной, если IN был истиной в течение PT`,fbd_desc_TOF:`Задержка выключения: Q остаётся истиной PT после того, как IN стал ложным`,fbd_desc_TP:`Импульс: передний фронт IN даёт импульс длительностью PT`,fbd_desc_GT:`Больше`,fbd_desc_GE:`Больше или равно`,fbd_desc_LT:`Меньше`,fbd_desc_LE:`Меньше или равно`,fbd_desc_EQ:`Равно`,fbd_desc_NE:`Не равно`,fbd_desc_ADD:`Сложение`,fbd_desc_SUB:`Вычитание`,fbd_desc_MUL:`Умножение`,fbd_desc_DIV:`Деление (на 0 даёт 0)`,fbd_desc_MIN:`Наименьший вход`,fbd_desc_MAX:`Наибольший вход`,fbd_desc_STATE_IN:`Читает состояние ioBroker`,fbd_desc_STATE_OUT:`Записывает состояние ioBroker при изменении значения`,fbd_desc_CONST:`Постоянное значение`,fbd_online:`Онлайн`,fbd_online_tooltip:`Показать значения работающей схемы`,fbd_online_waiting:`Ожидание данных…`,fbd_online_no_data:`Нет данных %s с - скрипт запущен?`,fbd_online_stalled:`Схема больше не выполняется (цикл %s)`,fbd_online_cycle:`Цикл %s`,fbd_online_event:`ждёт входов`,fbd_online_not_running:`Скрипт не запущен`,fbd_online_changed:`Схема изменена - значения относятся к сохранённой версии`,fbd_runtime_error:`Ошибка при выполнении: %s`,fbd_online_no_values:`Цикл %s - сохраните схему один раз, чтобы увидеть значения`,fbd_category_interface:`Интерфейс`,fbd_category_user:`Свои блоки`,fbd_desc_FB_IN:`Вход этого блока`,fbd_desc_FB_OUT:`Выход этого блока`,fbd_param_pin:`Имя вывода`,fbd_invalid_name:`Только буквы, цифры и _, не начиная с цифры`,fbd_no_user_blocks:`Своих блоков пока нет - схема становится блоком через «Эта схема является блоком» в её настройках`,fbd_is_block:`Эта схема является блоком`,fbd_block_hint:`Блок используется в других схемах сколько угодно раз. Его блоки FB_IN и FB_OUT - это его выводы; каждое сохранённое изменение - новая версия.`,fbd_block_name:`Имя блока`,fbd_block_description:`Описание`,fbd_block_type:`Тип %s, версия %s`,fbd_block_duplicate:`Схема «%s» определяет тот же тип`,fbd_block_newer:`Доступна версия %s`,fbd_block_update:`Обновить`,fbd_block_update_hint:`Применяет новую версию ко всем экземплярам в этой схеме`,fbd_block_open:`Открыть блок`,fbd_block_outdated:`Новая версия «%s»: %s (в этой схеме: %s)`,"Inputs and outputs of a block only work in the diagram of a block":`Входы и выходы блока возможны только в схеме блока`,"A block cannot read or write states - give it inputs and outputs instead":`Блок не может читать или записывать состояния - используйте входы и выходы`,"Invalid pin name %s":`Недопустимое имя вывода %s`,"The pin name %s is used twice":`Имя вывода %s используется дважды`,"The block %s contains itself":`Блок %s содержит сам себя`,"The block %s has errors: %s":`В блоке %s есть ошибки: %s`,"Invalid block type %s":`Недопустимый тип блока %s`,fbd_category_control:`Регулирование`,fbd_desc_HYST:`Двухпозиционный переключатель: Q становится истинным, когда IN поднимается выше HIGH, и ложным, когда опускается ниже LOW`,fbd_desc_RAMP:`Рампа: OUT следует за IN, не более чем на UP в секунду вверх и DOWN в секунду вниз (0: без ограничения)`,fbd_desc_PT1:`Фильтр нижних частот первого порядка (PT1): OUT следует за IN с постоянной времени T`,fbd_desc_PID:`ПИД-регулятор: уставка SP, текущее значение PV, выход Y между YMIN и YMAX; TN или TV 0 отключает эту составляющую`,fbd_online_paused:`Приостановлено (цикл %s)`,fbd_online_paused_at:`Остановлено перед %s (цикл %s)`,fbd_debug_resume:`Продолжить (F8)`,fbd_debug_pause:`Приостановить (F8)`,fbd_debug_cycle:`Один цикл`,fbd_debug_step:`Один блок (F10)`,fbd_debug_save_once:`Сохраните схему один раз, тогда заработают точки останова и пошаговое выполнение`,fbd_debug_forced_count:`Принудительных значений: %s`,fbd_debug_release_all:`Отпустить все`,fbd_debug_breakpoint_count:`Точек останова: %s`,fbd_debug_remove_all:`Удалить все`,fbd_debug_breakpoint_set:`Поставить точку останова (F9)`,fbd_debug_breakpoint_remove:`Убрать точку останова (F9)`,fbd_debug_breakpoint:`Точка останова`,fbd_debug_breakpoint_hint:`Схема останавливается перед этим блоком (F9)`,fbd_debug_forced:`задано принудительно`,fbd_debug_force:`Задать`,fbd_debug_release:`Отпустить`,fbd_debug_force_hint:`Принудительное значение действует, пока его не отпустят или пока не закончится онлайн-просмотр, и влияет также на записываемые схемой состояния.`,fbd_link:`Связь`,fbd_link_mark:`Показать как метку соединения`,fbd_link_mark_hint:`Вместо линии через всю схему на обоих концах показывается метка с именем; двойной щелчок переходит к другому концу.`,fbd_link_label:`Имя метки`,fbd_layout:`Упорядочить автоматически`,fbd_find:`Найти в схеме (Ctrl+F)`,fbd_find_placeholder:`Имя, тип, состояние…`,fbd_find_none:`нет`,fbd_find_previous:`Предыдущий (Shift+Enter)`,fbd_find_next:`Следующий (Enter)`,fbd_find_close:`Закрыть (Esc)`,"The diagram does not run":`Схема не выполняется`,"The diagram is not shown online":`Схема не показана онлайн`,"The diagram was saved before values could be forced - save it once":`Схема сохранена до появления принудительных значений - сохраните её один раз`,"The diagram was saved before it could stop at blocks - save it once":`Схема сохранена до появления остановок на блоках - сохраните её один раз`,fbd_instance_open:`Внутренний вид`,fbd_instance_open_hint:`Показывает этот экземпляр изнутри - онлайн с его собственными значениями (двойной щелчок)`,fbd_instance_title:`Экземпляр «%s» блока «%s», версия %s`,fbd_instance_readonly:`Только чтение: так блок хранится в этой схеме. Изменяется он в собственной схеме. Здесь можно задавать значения принудительно, точки останова - только в самой схеме.`,fbd_instance_save_once:`Сохраните схему один раз, тогда появятся значения внутри экземпляров`,fbd_instance_back:`Назад (Esc)`,fbd_link_refused_type:`Не соединено: %s не подходит к %s (%s). Автоматически только INT становится REAL.`,fbd_link_refused_taken:`Не соединено: %s уже соединён - вход принимает только одну связь`,fbd_category_memory:`Память`,fbd_tab_blocks:`Блоки`,fbd_tab_variables:`Переменные`,fbd_tab_favorites:`Избранное`,fbd_favorite_add:`В избранное`,fbd_favorite_remove:`Убрать из избранного`,fbd_no_variables:`В схеме пока нет состояний - они появляются с STATE_IN и STATE_OUT`,fbd_no_favorites:`Пока нет избранного - звёздочка у блока добавляет его сюда`,fbd_expand_all:`Раскрыть все`,fbd_collapse_all:`Свернуть все`,fbd_menu:`Ещё`,fbd_menu_properties:`Свойства`,fbd_menu_duplicate:`Дублировать`,fbd_tab_properties:`Свойства`,fbd_tab_docs:`Документация`,fbd_section_general:`Общее`,fbd_section_params:`Параметры`,fbd_section_preview:`Предпросмотр`,fbd_section_block:`Блок`,fbd_name:`Имя`,fbd_type:`Тип`,fbd_comment_field:`Комментарий`,fbd_comment_placeholder:`Комментарий…`,fbd_invert_short:`инверсия`,fbd_is_block_short:`Это блок`,fbd_link_from_to:`Откуда → куда`,fbd_link_mark_short:`Как метка`,fbd_outputs:`Выходы`,fbd_doc_keys:`Клавиши`,fbd_key_undo:`Отменить / повторить`,fbd_key_copy:`Копировать / вырезать / вставить`,fbd_key_delete:`Удалить выбранное`,fbd_key_find:`Найти в схеме`,fbd_key_pause:`Пауза / продолжить (онлайн)`,fbd_key_breakpoint:`Точка останова у выбранного блока (онлайн)`,fbd_key_step:`На один блок дальше (онлайн)`,fbd_key_back:`Назад из экземпляра`,fbd_doc_double_click:`Двойной щелчок по экземпляру собственного блока показывает его изнутри; по метке соединения - переходит к другому концу.`,fbd_doc_stateful:`Помнит своё состояние от цикла к циклу`,fbd_doc_time:`Зависит от времени - схема с ним выполняется циклически`,fbd_instance:`Экземпляр`,fbd_grid:`Сетка`,fbd_links_curved:`Связи кривыми`,fbd_links_orthogonal:`Связи под прямым углом`,fbd_zoom_in:`Приблизить`,fbd_zoom_out:`Отдалить`,fbd_zoom_reset:`100 %`,fbd_link_const_retyped:`%s теперь типа %s (значение %s)`,fbd_link_refused_const:`Не соединено: %s уже подаёт значение на входы, которые не принимают %s (%s)`,fbd_state_type_taken:`%s теперь читает состояние как %s, как указано в объекте - при необходимости измените в свойствах`,fbd_desc_LOG:`Пишет строку в журнал: по переднему фронту TRIG или при изменении IN. %s в тексте - значение IN`,fbd_param_text:`Текст`,fbd_param_level:`Уровень`,fbd_param_when:`Когда`,fbd_option_edge:`по переднему фронту TRIG`,fbd_option_change:`при изменении IN`,fbd_online_changed_short:`изменено`,fbd_category_counters:`Счётчики`,fbd_category_convert:`Преобразование`,fbd_category_calendar:`Календарь`,fbd_category_messages:`Сообщения`,fbd_category_expert:`Эксперт`,fbd_desc_BLINK:`Мигалка: пока EN истинно, Q истинно в течение TH и ложно в течение TL`,fbd_desc_CTU:`Счётчик вверх: считает передние фронты CU, R сбрасывает CV в 0. Q: CV достиг PV`,fbd_desc_CTD:`Счётчик вниз: уменьшает по передним фронтам CD, LD загружает PV. Q: CV достиг 0`,fbd_desc_CTUD:`Реверсивный счётчик: CU вверх, CD вниз, R сбрасывает в 0, LD загружает PV. QU: CV достиг PV, QD: CV достиг 0`,fbd_desc_ROUND:`Округляет IN до DIGITS знаков после запятой`,fbd_desc_TO_BOOL:`Преобразует в BOOL: 0, пустой текст и "false" - ложь`,fbd_desc_TO_INT:`Преобразует в INT с округлением; запятая считается точкой, не число даёт 0`,fbd_desc_TO_REAL:`Преобразует в REAL; запятая считается точкой, не число даёт 0`,fbd_desc_TO_TIME:`Преобразует в TIME: число - это мс, текст может быть "2s", "1m30s" или "08:30"`,fbd_desc_TO_STRING:`Преобразует в текст`,fbd_desc_CONCAT:`Соединяет входы в один текст - числа лучше сначала округлить через ROUND`,fbd_desc_CLOCK:`Местное время: время суток, час, минута, день недели (1 понедельник ... 7 воскресенье), день, месяц и год`,fbd_desc_TIMEWINDOW:`Временное окно: истинно с START до END в выбранные дни; окно через полночь относится ко дню начала`,fbd_desc_SCHEDULE:`Расписание: Q истинно один цикл, когда наступает время cron-шаблона`,fbd_desc_ASTRO:`Солнце: Q истинно от одного события солнца до другого, например от заката до восхода; START и END - их время сегодня`,fbd_desc_NOTIFY:`Отправляет уведомление ioBroker: по переднему фронту TRIG или при изменении IN. Не более 5 в минуту`,fbd_desc_SENDTO:`Отправляет сообщение адаптеру, например telegram.0 или pushover.0 (text, message, title, subject): по переднему фронту TRIG или при изменении IN. Не более 5 в минуту`,fbd_desc_JS:`Свой JavaScript: получает IN1 ... INn, dt, firstScan и state (сохраняется между циклами), возвращает OUT1 или [OUT1, OUT2, ...]`,fbd_param_days:`Дни`,fbd_param_cron:`Cron-шаблон`,fbd_param_start:`С`,fbd_param_end:`До`,fbd_param_startOffset:`Смещение начала`,fbd_param_endOffset:`Смещение конца`,fbd_offset_hint:`В минутах, отрицательное - раньше`,fbd_param_category:`Вид`,fbd_param_instance:`Экземпляр`,fbd_param_title:`Заголовок`,fbd_param_command:`Команда`,fbd_param_code:`Код`,fbd_param_outputs:`Количество выходов`,fbd_option_all:`каждый день`,fbd_option_weekdays:`с понедельника по пятницу`,fbd_option_weekend:`суббота и воскресенье`,fbd_option_message:`Сообщение`,fbd_option_alert:`Тревога`,fbd_cron_dialog:`Задать время`,fbd_cron_hint:`Минута час день месяц день_недели, например "0 8 * * 1-5": в 8:00 с понедельника по пятницу. С секундами впереди "*/5 * * * * *" - каждые 5 секунд`,fbd_code_hint:`Код получает %s и возвращает значение OUT1 или [OUT1, OUT2, ...]; undefined оставляет выход без изменений`,"The code has an error: %s":`В коде ошибка: %s`,fbd_option_nightEnd:`Конец ночи`,fbd_option_nauticalDawn:`Морской рассвет`,fbd_option_dawn:`Рассвет`,fbd_option_sunrise:`Восход солнца`,fbd_option_sunriseEnd:`Конец восхода`,fbd_option_goldenHourEnd:`Конец золотого часа`,fbd_option_solarNoon:`Солнечный полдень`,fbd_option_goldenHour:`Золотой час`,fbd_option_sunsetStart:`Начало заката`,fbd_option_sunset:`Закат солнца`,fbd_option_dusk:`Сумерки`,fbd_option_nauticalDusk:`Морские сумерки`,fbd_option_night:`Ночь`,fbd_option_nadir:`Надир`},uk:{fbd_search:`Пошук`,fbd_category_iobroker:`ioBroker`,fbd_category_logic:`Логіка`,fbd_category_timers:`Таймери`,fbd_category_compare:`Порівняння`,fbd_category_arithmetic:`Арифметика`,fbd_category_structure:`Структура`,fbd_comment:`Коментар`,fbd_comment_desc:`Примітка на схемі; не виконується`,fbd_no_state:`стан не вибрано`,fbd_select_state:`Вибрати стан`,fbd_instance_name:`Ім'я екземпляра`,fbd_inputs:`Входи`,fbd_connected:`підключено`,fbd_inverted:`Інвертувати %s`,fbd_invalid_time:`Час, наприклад 500ms, 2s, 1m30s`,fbd_invalid_number:`Не число`,fbd_param_oid:`Стан`,fbd_param_type:`Тип`,fbd_param_ack:`Записувати як підтверджене (ack)`,fbd_param_minInterval:`Мінімальний інтервал між записами`,fbd_param_value:`Значення`,fbd_param_inputs:`Кількість входів`,fbd_diagram:`Схема`,fbd_cycle_mode:`Виконання`,fbd_mode_auto:`Автоматично`,fbd_mode_cyclic:`Циклічно`,fbd_mode_event:`При зміні входу`,fbd_runs_cyclic:`Схема виконується циклічно`,fbd_runs_event:`Схема виконується при зміні входу`,fbd_cycle_time:`Час циклу (мс)`,fbd_empty_hint:`Перетягніть блоки зліва на поле та з'єднайте вихід зі входом`,fbd_no_diagram:`Цей скрипт не містить функціональної блок-схеми`,"Unknown block type %s":`Невідомий тип блоку %s`,"Invalid block ID %s":`Недійсний ID блоку %s`,"Duplicate block ID %s":`Повторюваний ID блоку %s`,'Parameter "%s" is not set':`Параметр "%s" не задано`,"The connection refers to a missing block or pin":`З'єднання посилається на відсутній блок або вивід`,"Types do not match: %s cannot be connected to %s":`Типи не збігаються: %s не можна з'єднати з %s`,"Input %s is connected more than once":`Вхід %s підключено більше одного разу`,"Loop without a block that stores a value: %s":`Петля без блоку, що зберігає значення: %s`,"Timers need the cyclic mode, in the event mode they only run when an input changes":`Таймерам потрібен циклічний режим, у подієвому вони працюють лише при зміні входу`,fbd_desc_AND:`І: істина, якщо всі входи істинні`,fbd_desc_OR:`АБО: істина, якщо хоча б один вхід істинний`,fbd_desc_XOR:`Виключне АБО: істина при непарній кількості істинних входів`,fbd_desc_NOT:`НЕ: інвертує вхід`,fbd_desc_RS:`Тригер з пріоритетом скидання`,fbd_desc_SR:`Тригер з пріоритетом встановлення`,fbd_desc_R_TRIG:`Передній фронт: істина один цикл, коли вхід стає істинним`,fbd_desc_F_TRIG:`Задній фронт: істина один цикл, коли вхід стає хибним`,fbd_desc_TON:`Затримка ввімкнення: Q стає істиною, якщо IN був істиною протягом PT`,fbd_desc_TOF:`Затримка вимкнення: Q залишається істиною PT після того, як IN став хибним`,fbd_desc_TP:`Імпульс: передній фронт IN дає імпульс тривалістю PT`,fbd_desc_GT:`Більше ніж`,fbd_desc_GE:`Більше або дорівнює`,fbd_desc_LT:`Менше ніж`,fbd_desc_LE:`Менше або дорівнює`,fbd_desc_EQ:`Дорівнює`,fbd_desc_NE:`Не дорівнює`,fbd_desc_ADD:`Додавання`,fbd_desc_SUB:`Віднімання`,fbd_desc_MUL:`Множення`,fbd_desc_DIV:`Ділення (на 0 дає 0)`,fbd_desc_MIN:`Найменший вхід`,fbd_desc_MAX:`Найбільший вхід`,fbd_desc_STATE_IN:`Читає стан ioBroker`,fbd_desc_STATE_OUT:`Записує стан ioBroker при зміні значення`,fbd_desc_CONST:`Постійне значення`,fbd_online:`Онлайн`,fbd_online_tooltip:`Показати значення робочої схеми`,fbd_online_waiting:`Очікування даних…`,fbd_online_no_data:`Немає даних %s с - скрипт запущено?`,fbd_online_stalled:`Схема більше не виконується (цикл %s)`,fbd_online_cycle:`Цикл %s`,fbd_online_event:`чекає на входи`,fbd_online_not_running:`Скрипт не запущено`,fbd_online_changed:`Схему змінено - значення належать до збереженої версії`,fbd_runtime_error:`Помилка під час виконання: %s`,fbd_online_no_values:`Цикл %s - збережіть схему один раз, щоб побачити значення`,fbd_category_interface:`Інтерфейс`,fbd_category_user:`Власні блоки`,fbd_desc_FB_IN:`Вхід цього блоку`,fbd_desc_FB_OUT:`Вихід цього блоку`,fbd_param_pin:`Ім'я виводу`,fbd_invalid_name:`Лише літери, цифри та _, не починаючи з цифри`,fbd_no_user_blocks:`Власних блоків ще немає - схема стає блоком через «Ця схема є блоком» у її налаштуваннях`,fbd_is_block:`Ця схема є блоком`,fbd_block_hint:`Блок використовується в інших схемах скільки завгодно разів. Його блоки FB_IN і FB_OUT - це його виводи; кожна збережена зміна - нова версія.`,fbd_block_name:`Ім'я блоку`,fbd_block_description:`Опис`,fbd_block_type:`Тип %s, версія %s`,fbd_block_duplicate:`Схема «%s» визначає той самий тип`,fbd_block_newer:`Доступна версія %s`,fbd_block_update:`Оновити`,fbd_block_update_hint:`Застосовує нову версію до всіх екземплярів у цій схемі`,fbd_block_open:`Відкрити блок`,fbd_block_outdated:`Нова версія «%s»: %s (у цій схемі: %s)`,"Inputs and outputs of a block only work in the diagram of a block":`Входи та виходи блоку можливі лише у схемі блоку`,"A block cannot read or write states - give it inputs and outputs instead":`Блок не може читати або записувати стани - використовуйте входи та виходи`,"Invalid pin name %s":`Недійсне ім'я виводу %s`,"The pin name %s is used twice":`Ім'я виводу %s використано двічі`,"The block %s contains itself":`Блок %s містить сам себе`,"The block %s has errors: %s":`У блоці %s є помилки: %s`,"Invalid block type %s":`Недійсний тип блоку %s`,fbd_category_control:`Регулювання`,fbd_desc_HYST:`Двопозиційний перемикач: Q стає істинним, коли IN піднімається вище HIGH, і хибним, коли опускається нижче LOW`,fbd_desc_RAMP:`Рампа: OUT слідує за IN, не більше ніж на UP за секунду вгору та DOWN за секунду вниз (0: без обмеження)`,fbd_desc_PT1:`Фільтр нижніх частот першого порядку (PT1): OUT слідує за IN зі сталою часу T`,fbd_desc_PID:`ПІД-регулятор: уставка SP, поточне значення PV, вихід Y між YMIN і YMAX; TN або TV 0 вимикає цю складову`,fbd_online_paused:`Призупинено (цикл %s)`,fbd_online_paused_at:`Зупинено перед %s (цикл %s)`,fbd_debug_resume:`Продовжити (F8)`,fbd_debug_pause:`Призупинити (F8)`,fbd_debug_cycle:`Один цикл`,fbd_debug_step:`Один блок (F10)`,fbd_debug_save_once:`Збережіть схему один раз, тоді запрацюють точки зупинки та покрокове виконання`,fbd_debug_forced_count:`Примусових значень: %s`,fbd_debug_release_all:`Відпустити всі`,fbd_debug_breakpoint_count:`Точок зупинки: %s`,fbd_debug_remove_all:`Видалити всі`,fbd_debug_breakpoint_set:`Поставити точку зупинки (F9)`,fbd_debug_breakpoint_remove:`Прибрати точку зупинки (F9)`,fbd_debug_breakpoint:`Точка зупинки`,fbd_debug_breakpoint_hint:`Схема зупиняється перед цим блоком (F9)`,fbd_debug_forced:`задано примусово`,fbd_debug_force:`Задати`,fbd_debug_release:`Відпустити`,fbd_debug_force_hint:`Примусове значення діє, доки його не відпустять або не завершиться онлайн-перегляд, і впливає також на стани, які записує схема.`,fbd_link:`Зв'язок`,fbd_link_mark:`Показати як мітку з'єднання`,fbd_link_mark_hint:`Замість лінії через усю схему обидва кінці показують мітку з назвою; подвійний клік переходить до іншого кінця.`,fbd_link_label:`Назва мітки`,fbd_layout:`Упорядкувати автоматично`,fbd_find:`Шукати в схемі (Ctrl+F)`,fbd_find_placeholder:`Назва, тип, стан…`,fbd_find_none:`немає`,fbd_find_previous:`Попередній (Shift+Enter)`,fbd_find_next:`Наступний (Enter)`,fbd_find_close:`Закрити (Esc)`,"The diagram does not run":`Схема не виконується`,"The diagram is not shown online":`Схема не показана онлайн`,"The diagram was saved before values could be forced - save it once":`Схему збережено до появи примусових значень - збережіть її один раз`,"The diagram was saved before it could stop at blocks - save it once":`Схему збережено до появи зупинок на блоках - збережіть її один раз`,fbd_instance_open:`Внутрішній вигляд`,fbd_instance_open_hint:`Показує цей екземпляр зсередини - онлайн з його власними значеннями (подвійний клік)`,fbd_instance_title:`Екземпляр «%s» блоку «%s», версія %s`,fbd_instance_readonly:`Лише читання: так блок збережено в цій схемі. Змінюють його у власній схемі. Тут можна задавати значення примусово, точки зупинки - лише в самій схемі.`,fbd_instance_save_once:`Збережіть схему один раз, тоді з'являться значення всередині екземплярів`,fbd_instance_back:`Назад (Esc)`,fbd_link_refused_type:`Не з'єднано: %s не підходить до %s (%s). Автоматично лише INT стає REAL.`,fbd_link_refused_taken:`Не з'єднано: %s уже з'єднано - вхід приймає лише один зв'язок`,fbd_category_memory:`Пам'ять`,fbd_tab_blocks:`Блоки`,fbd_tab_variables:`Змінні`,fbd_tab_favorites:`Обране`,fbd_favorite_add:`До обраного`,fbd_favorite_remove:`Прибрати з обраного`,fbd_no_variables:`У схемі ще немає станів - вони з'являються зі STATE_IN і STATE_OUT`,fbd_no_favorites:`Ще немає обраного - зірочка біля блоку додає його сюди`,fbd_expand_all:`Розгорнути все`,fbd_collapse_all:`Згорнути все`,fbd_menu:`Більше`,fbd_menu_properties:`Властивості`,fbd_menu_duplicate:`Дублювати`,fbd_tab_properties:`Властивості`,fbd_tab_docs:`Документація`,fbd_section_general:`Загальне`,fbd_section_params:`Параметри`,fbd_section_preview:`Попередній перегляд`,fbd_section_block:`Блок`,fbd_name:`Назва`,fbd_type:`Тип`,fbd_comment_field:`Коментар`,fbd_comment_placeholder:`Коментар…`,fbd_invert_short:`інверсія`,fbd_is_block_short:`Це блок`,fbd_link_from_to:`Звідки → куди`,fbd_link_mark_short:`Як мітка`,fbd_outputs:`Виходи`,fbd_doc_keys:`Клавіші`,fbd_key_undo:`Скасувати / повторити`,fbd_key_copy:`Копіювати / вирізати / вставити`,fbd_key_delete:`Видалити вибране`,fbd_key_find:`Шукати в схемі`,fbd_key_pause:`Пауза / продовжити (онлайн)`,fbd_key_breakpoint:`Точка зупинки на вибраному блоці (онлайн)`,fbd_key_step:`На один блок далі (онлайн)`,fbd_key_back:`Назад з екземпляра`,fbd_doc_double_click:`Подвійний клік на екземплярі власного блоку показує його зсередини; на мітці з'єднання - переходить до іншого кінця.`,fbd_doc_stateful:`Пам'ятає свій стан від циклу до циклу`,fbd_doc_time:`Залежить від часу - схема з ним виконується циклічно`,fbd_instance:`Екземпляр`,fbd_grid:`Сітка`,fbd_links_curved:`Зв'язки кривими`,fbd_links_orthogonal:`Зв'язки під прямим кутом`,fbd_zoom_in:`Наблизити`,fbd_zoom_out:`Віддалити`,fbd_zoom_reset:`До 100 %`,fbd_link_const_retyped:`%s тепер типу %s (значення %s)`,fbd_link_refused_const:`Не з'єднано: %s уже подає значення на входи, що не приймають %s (%s)`,fbd_state_type_taken:`%s тепер читає стан як %s, як зазначено в об'єкті - за потреби змініть у властивостях`,fbd_desc_LOG:`Пише рядок у журнал: за переднім фронтом TRIG або коли змінюється IN. %s у тексті - значення IN`,fbd_param_text:`Текст`,fbd_param_level:`Рівень`,fbd_param_when:`Коли`,fbd_option_edge:`за переднім фронтом TRIG`,fbd_option_change:`коли змінюється IN`,fbd_online_changed_short:`змінено`,fbd_category_counters:`Лічильники`,fbd_category_convert:`Перетворення`,fbd_category_calendar:`Календар`,fbd_category_messages:`Повідомлення`,fbd_category_expert:`Експерт`,fbd_desc_BLINK:`Блимач: поки EN істинне, Q істинне протягом TH і хибне протягом TL`,fbd_desc_CTU:`Лічильник уверх: рахує передні фронти CU, R скидає CV у 0. Q: CV досяг PV`,fbd_desc_CTD:`Лічильник униз: зменшує за передніми фронтами CD, LD завантажує PV. Q: CV досяг 0`,fbd_desc_CTUD:`Реверсивний лічильник: CU уверх, CD униз, R скидає в 0, LD завантажує PV. QU: CV досяг PV, QD: CV досяг 0`,fbd_desc_ROUND:`Округлює IN до DIGITS знаків після коми`,fbd_desc_TO_BOOL:`Перетворює на BOOL: 0, порожній текст і "false" - хиба`,fbd_desc_TO_INT:`Перетворює на INT з округленням; кома вважається крапкою, не число дає 0`,fbd_desc_TO_REAL:`Перетворює на REAL; кома вважається крапкою, не число дає 0`,fbd_desc_TO_TIME:`Перетворює на TIME: число - це мс, текст може бути "2s", "1m30s" або "08:30"`,fbd_desc_TO_STRING:`Перетворює на текст`,fbd_desc_CONCAT:`Об'єднує входи в один текст - числа краще спершу округлити через ROUND`,fbd_desc_CLOCK:`Місцевий час: час доби, година, хвилина, день тижня (1 понеділок ... 7 неділя), день, місяць і рік`,fbd_desc_TIMEWINDOW:`Часове вікно: істинне з START до END у вибрані дні; вікно через північ належить дню початку`,fbd_desc_SCHEDULE:`Розклад: Q істинне один цикл, коли настає час cron-шаблону`,fbd_desc_ASTRO:`Сонце: Q істинне від однієї події сонця до іншої, наприклад від заходу до сходу; START і END - їхній час сьогодні`,fbd_desc_NOTIFY:`Надсилає сповіщення ioBroker: за переднім фронтом TRIG або при зміні IN. Не більше 5 за хвилину`,fbd_desc_SENDTO:`Надсилає повідомлення адаптеру, наприклад telegram.0 або pushover.0 (text, message, title, subject): за переднім фронтом TRIG або при зміні IN. Не більше 5 за хвилину`,fbd_desc_JS:`Власний JavaScript: отримує IN1 ... INn, dt, firstScan і state (зберігається між циклами), повертає OUT1 або [OUT1, OUT2, ...]`,fbd_param_days:`Дні`,fbd_param_cron:`Cron-шаблон`,fbd_param_start:`З`,fbd_param_end:`До`,fbd_param_startOffset:`Зсув початку`,fbd_param_endOffset:`Зсув кінця`,fbd_offset_hint:`У хвилинах, від'ємне - раніше`,fbd_param_category:`Вид`,fbd_param_instance:`Екземпляр`,fbd_param_title:`Заголовок`,fbd_param_command:`Команда`,fbd_param_code:`Код`,fbd_param_outputs:`Кількість виходів`,fbd_option_all:`щодня`,fbd_option_weekdays:`з понеділка по п'ятницю`,fbd_option_weekend:`субота й неділя`,fbd_option_message:`Повідомлення`,fbd_option_alert:`Тривога`,fbd_cron_dialog:`Задати час`,fbd_cron_hint:`Хвилина година день місяць день_тижня, наприклад "0 8 * * 1-5": о 8:00 з понеділка по п'ятницю. Із секундами попереду "*/5 * * * * *" - кожні 5 секунд`,fbd_code_hint:`Код отримує %s і повертає значення OUT1 або [OUT1, OUT2, ...]; undefined залишає вихід без змін`,"The code has an error: %s":`У коді помилка: %s`,fbd_option_nightEnd:`Кінець ночі`,fbd_option_nauticalDawn:`Морський світанок`,fbd_option_dawn:`Світанок`,fbd_option_sunrise:`схід сонця`,fbd_option_sunriseEnd:`Кінець сходу сонця`,fbd_option_goldenHourEnd:`Кінець золотої години`,fbd_option_solarNoon:`Сонячний полудень`,fbd_option_goldenHour:`Золота година`,fbd_option_sunsetStart:`Початок заходу сонця`,fbd_option_sunset:`Захід сонця`,fbd_option_dusk:`Сутінки`,fbd_option_nauticalDusk:`Морські сутінки`,fbd_option_night:`ніч`,fbd_option_nadir:`Надір`},"zh-cn":{fbd_search:`搜索`,fbd_category_iobroker:`ioBroker`,fbd_category_logic:`逻辑`,fbd_category_timers:`定时器`,fbd_category_compare:`比较`,fbd_category_arithmetic:`算术`,fbd_category_structure:`结构`,fbd_comment:`注释`,fbd_comment_desc:`图中的注释,不会被执行`,fbd_no_state:`未选择状态`,fbd_select_state:`选择状态`,fbd_instance_name:`实例名称`,fbd_inputs:`输入`,fbd_connected:`已连接`,fbd_inverted:`取反 %s`,fbd_invalid_time:`时间,例如 500ms、2s、1m30s`,fbd_invalid_number:`不是数字`,fbd_param_oid:`状态`,fbd_param_type:`类型`,fbd_param_ack:`以已确认 (ack) 写入`,fbd_param_minInterval:`两次写入的最短间隔`,fbd_param_value:`值`,fbd_param_inputs:`输入数量`,fbd_diagram:`图`,fbd_cycle_mode:`执行方式`,fbd_mode_auto:`自动`,fbd_mode_cyclic:`循环`,fbd_mode_event:`输入变化时`,fbd_runs_cyclic:`该图循环执行`,fbd_runs_event:`该图在输入变化时执行`,fbd_cycle_time:`周期时间 (ms)`,fbd_empty_hint:`从左侧将功能块拖到画布上,并把输出连接到输入`,fbd_no_diagram:`此脚本不包含功能块图`,"Unknown block type %s":`未知的功能块类型 %s`,"Invalid block ID %s":`无效的功能块 ID %s`,"Duplicate block ID %s":`重复的功能块 ID %s`,'Parameter "%s" is not set':`未设置参数“%s”`,"The connection refers to a missing block or pin":`连接指向了不存在的功能块或引脚`,"Types do not match: %s cannot be connected to %s":`类型不匹配:%s 不能连接到 %s`,"Input %s is connected more than once":`输入 %s 被连接了多次`,"Loop without a block that stores a value: %s":`没有存储值的功能块的回路:%s`,"Timers need the cyclic mode, in the event mode they only run when an input changes":`定时器需要循环模式,在事件模式下只有输入变化时才会运行`,fbd_desc_AND:`与:所有输入为真时为真`,fbd_desc_OR:`或:任一输入为真时为真`,fbd_desc_XOR:`异或:真输入的个数为奇数时为真`,fbd_desc_NOT:`非:对输入取反`,fbd_desc_RS:`触发器,复位优先`,fbd_desc_SR:`触发器,置位优先`,fbd_desc_R_TRIG:`上升沿:输入变为真时保持一个周期为真`,fbd_desc_F_TRIG:`下降沿:输入变为假时保持一个周期为真`,fbd_desc_TON:`接通延时:IN 为真持续 PT 后 Q 变为真`,fbd_desc_TOF:`断开延时:IN 变为假后 Q 仍保持 PT 为真`,fbd_desc_TP:`脉冲:IN 的上升沿产生长度为 PT 的脉冲`,fbd_desc_GT:`大于`,fbd_desc_GE:`大于等于`,fbd_desc_LT:`小于`,fbd_desc_LE:`小于等于`,fbd_desc_EQ:`等于`,fbd_desc_NE:`不等于`,fbd_desc_ADD:`加法`,fbd_desc_SUB:`减法`,fbd_desc_MUL:`乘法`,fbd_desc_DIV:`除法(除以 0 得 0)`,fbd_desc_MIN:`最小输入`,fbd_desc_MAX:`最大输入`,fbd_desc_STATE_IN:`读取 ioBroker 状态`,fbd_desc_STATE_OUT:`值变化时写入 ioBroker 状态`,fbd_desc_CONST:`常量值`,fbd_online:`在线`,fbd_online_tooltip:`显示运行中图的数值`,fbd_online_waiting:`正在等待数据…`,fbd_online_no_data:`%s 秒没有数据 - 脚本在运行吗?`,fbd_online_stalled:`该图已停止运算(周期 %s)`,fbd_online_cycle:`周期 %s`,fbd_online_event:`等待输入`,fbd_online_not_running:`脚本未运行`,fbd_online_changed:`图已被修改 - 数值属于已保存的版本`,fbd_runtime_error:`运行时出错:%s`,fbd_online_no_values:`周期 %s - 保存一次该图即可看到数值`,fbd_category_interface:`接口`,fbd_category_user:`自定义功能块`,fbd_desc_FB_IN:`此功能块的一个输入`,fbd_desc_FB_OUT:`此功能块的一个输出`,fbd_param_pin:`引脚名称`,fbd_invalid_name:`只能使用字母、数字和 _,且不能以数字开头`,fbd_no_user_blocks:`还没有自定义功能块 - 在图的设置中打开“此图是一个功能块”即可`,fbd_is_block:`此图是一个功能块`,fbd_block_hint:`功能块可在其他图中多次使用。它的 FB_IN 和 FB_OUT 块就是它的引脚;每次保存的修改都是一个新版本。`,fbd_block_name:`功能块名称`,fbd_block_description:`描述`,fbd_block_type:`类型 %s,版本 %s`,fbd_block_duplicate:`图“%s”定义了相同的类型`,fbd_block_newer:`有可用的版本 %s`,fbd_block_update:`更新`,fbd_block_update_hint:`为此图中的所有实例采用新版本`,fbd_block_open:`打开功能块`,fbd_block_outdated:`“%s”有新版本:%s(此图中:%s)`,"Inputs and outputs of a block only work in the diagram of a block":`功能块的输入和输出只能用在功能块的图中`,"A block cannot read or write states - give it inputs and outputs instead":`功能块不能读写状态 - 请改用输入和输出`,"Invalid pin name %s":`无效的引脚名称 %s`,"The pin name %s is used twice":`引脚名称 %s 被使用了两次`,"The block %s contains itself":`功能块 %s 包含了它自己`,"The block %s has errors: %s":`功能块 %s 有错误:%s`,"Invalid block type %s":`无效的功能块类型 %s`,fbd_category_control:`控制`,fbd_desc_HYST:`两点开关:IN 高于 HIGH 时 Q 为真,低于 LOW 时 Q 为假`,fbd_desc_RAMP:`斜坡:OUT 跟随 IN,每秒最多上升 UP、下降 DOWN(0:不限制)`,fbd_desc_PT1:`一阶低通(PT1):OUT 以时间常数 T 跟随 IN`,fbd_desc_PID:`PID 控制器:设定值 SP,过程值 PV,输出 Y 介于 YMIN 与 YMAX 之间;TN 或 TV 为 0 时不含该部分`,fbd_online_paused:`已暂停(周期 %s)`,fbd_online_paused_at:`停在 %s 之前(周期 %s)`,fbd_debug_resume:`继续(F8)`,fbd_debug_pause:`暂停(F8)`,fbd_debug_cycle:`单个周期`,fbd_debug_step:`单个功能块(F10)`,fbd_debug_save_once:`先保存一次图,之后断点和单步即可使用`,fbd_debug_forced_count:`强制值:%s`,fbd_debug_release_all:`全部释放`,fbd_debug_breakpoint_count:`断点:%s`,fbd_debug_remove_all:`全部移除`,fbd_debug_breakpoint_set:`设置断点(F9)`,fbd_debug_breakpoint_remove:`移除断点(F9)`,fbd_debug_breakpoint:`断点`,fbd_debug_breakpoint_hint:`图在此功能块之前停下(F9)`,fbd_debug_forced:`已强制`,fbd_debug_force:`强制`,fbd_debug_release:`释放`,fbd_debug_force_hint:`强制值一直有效,直到被释放或在线视图结束——并且也会影响图写入的状态。`,fbd_link:`连接`,fbd_link_mark:`显示为连接标记`,fbd_link_mark_hint:`两端显示带名称的标记,而不是穿过整个图的连线;双击跳到另一端。`,fbd_link_label:`标记名称`,fbd_layout:`自动排列`,fbd_find:`在图中查找(Ctrl+F)`,fbd_find_placeholder:`名称、类型、状态…`,fbd_find_none:`无`,fbd_find_previous:`上一个(Shift+Enter)`,fbd_find_next:`下一个(Enter)`,fbd_find_close:`关闭(Esc)`,"The diagram does not run":`图未运行`,"The diagram is not shown online":`图未在线显示`,"The diagram was saved before values could be forced - save it once":`该图保存于支持强制值之前——请重新保存一次`,"The diagram was saved before it could stop at blocks - save it once":`该图保存于支持在功能块处停下之前——请重新保存一次`,fbd_instance_open:`内部视图`,fbd_instance_open_hint:`从内部显示此实例——在线时显示它自己的值(双击)`,fbd_instance_title:`“%s”的实例“%s”,版本 %s`,fbd_instance_readonly:`只读:这是此图中保存的功能块。要修改请在它自己的图中进行。这里可以强制值,断点只能在图本身中设置。`,fbd_instance_save_once:`先保存一次图,之后实例内部的值就会显示`,fbd_instance_back:`返回(Esc)`,fbd_link_refused_type:`未连接:%s 与 %s(%s)不匹配。只有 INT 会自动转为 REAL。`,fbd_link_refused_taken:`未连接:%s 已有连接——一个输入只接受一条连接`,fbd_category_memory:`存储`,fbd_tab_blocks:`功能块`,fbd_tab_variables:`变量`,fbd_tab_favorites:`收藏`,fbd_favorite_add:`加入收藏`,fbd_favorite_remove:`从收藏中移除`,fbd_no_variables:`图中还没有状态——通过 STATE_IN 和 STATE_OUT 添加`,fbd_no_favorites:`还没有收藏——点击功能块上的星标即可加入`,fbd_expand_all:`全部展开`,fbd_collapse_all:`全部折叠`,fbd_menu:`更多`,fbd_menu_properties:`属性`,fbd_menu_duplicate:`复制`,fbd_tab_properties:`属性`,fbd_tab_docs:`文档`,fbd_section_general:`常规`,fbd_section_params:`参数`,fbd_section_preview:`预览`,fbd_section_block:`功能块`,fbd_name:`名称`,fbd_type:`类型`,fbd_comment_field:`注释`,fbd_comment_placeholder:`注释…`,fbd_invert_short:`取反`,fbd_is_block_short:`是功能块`,fbd_link_from_to:`从 → 到`,fbd_link_mark_short:`作为标记`,fbd_outputs:`输出`,fbd_doc_keys:`快捷键`,fbd_key_undo:`撤销 / 重做`,fbd_key_copy:`复制 / 剪切 / 粘贴`,fbd_key_delete:`删除所选`,fbd_key_find:`在图中查找`,fbd_key_pause:`暂停 / 继续(在线)`,fbd_key_breakpoint:`在所选功能块设置断点(在线)`,fbd_key_step:`前进一个功能块(在线)`,fbd_key_back:`退出实例`,fbd_doc_double_click:`双击自定义功能块的实例可从内部查看;双击连接标记会跳到另一端。`,fbd_doc_stateful:`在周期之间保持状态`,fbd_doc_time:`依赖时间——包含它的图会周期运行`,fbd_instance:`实例`,fbd_grid:`网格`,fbd_links_curved:`连线显示为曲线`,fbd_links_orthogonal:`连线显示为直角`,fbd_zoom_in:`放大`,fbd_zoom_out:`缩小`,fbd_zoom_reset:`恢复 100%`,fbd_link_const_retyped:`%s 现在的类型是 %s(值 %s)`,fbd_link_refused_const:`未连接:%s 已连接到不接受 %s 的输入(%s)`,fbd_state_type_taken:`%s 现在按对象所述以 %s 读取该状态——如有需要可在属性中修改`,fbd_desc_LOG:`向日志写入一行:在 TRIG 上升沿或 IN 变化时。文本中的 %s 为 IN 的值`,fbd_param_text:`文本`,fbd_param_level:`级别`,fbd_param_when:`何时`,fbd_option_edge:`在 TRIG 上升沿时`,fbd_option_change:`当 IN 变化时`,fbd_online_changed_short:`已修改`,fbd_category_counters:`计数器`,fbd_category_convert:`转换`,fbd_category_calendar:`日历`,fbd_category_messages:`消息`,fbd_category_expert:`专家`,fbd_desc_BLINK:`闪烁器:EN 为真时,Q 在 TH 内为真,在 TL 内为假`,fbd_desc_CTU:`加计数器:对 CU 的上升沿计数,R 将 CV 清零。Q:CV 达到 PV`,fbd_desc_CTD:`减计数器:在 CD 的上升沿递减,LD 载入 PV。Q:CV 达到 0`,fbd_desc_CTUD:`加减计数器:CU 加计数,CD 减计数,R 清零,LD 载入 PV。QU:CV 达到 PV,QD:CV 达到 0`,fbd_desc_ROUND:`将 IN 四舍五入到 DIGITS 位小数`,fbd_desc_TO_BOOL:`转换为 BOOL:0、空文本和 "false" 为假`,fbd_desc_TO_INT:`转换为 INT 并四舍五入;小数逗号视为小数点,非数字得 0`,fbd_desc_TO_REAL:`转换为 REAL;小数逗号视为小数点,非数字得 0`,fbd_desc_TO_TIME:`转换为 TIME:数字为毫秒,文本可以是 "2s"、"1m30s" 或 "08:30"`,fbd_desc_TO_STRING:`转换为文本`,fbd_desc_CONCAT:`将输入连接成一个文本 - 数字请先用 ROUND 取整`,fbd_desc_CLOCK:`本地时间:时刻、小时、分钟、星期(1 周一 ... 7 周日)、日、月和年`,fbd_desc_TIMEWINDOW:`时间窗:在所选日期从 START 到 END 为真;跨越午夜的时间窗属于其开始的那一天`,fbd_desc_SCHEDULE:`计划:当 cron 模式的时间到达时,Q 在一个周期内为真`,fbd_desc_ASTRO:`太阳:Q 从一个太阳事件到另一个事件为真,例如从日落到日出;START 和 END 为今天的时间`,fbd_desc_NOTIFY:`发送 ioBroker 通知:在 TRIG 的上升沿或 IN 变化时。每分钟最多 5 条`,fbd_desc_SENDTO:`向 telegram.0 或 pushover.0 等适配器发送消息(text、message、title、subject):在 TRIG 的上升沿或 IN 变化时。每分钟最多 5 条`,fbd_desc_JS:`自定义 JavaScript:接收 IN1 ... INn、dt、firstScan 和 state(在周期之间保留),返回 OUT1 或 [OUT1, OUT2, ...]`,fbd_param_days:`日期`,fbd_param_cron:`Cron 模式`,fbd_param_start:`从`,fbd_param_end:`到`,fbd_param_startOffset:`开始偏移`,fbd_param_endOffset:`结束偏移`,fbd_offset_hint:`以分钟为单位,负数表示提前`,fbd_param_category:`类别`,fbd_param_instance:`实例`,fbd_param_title:`标题`,fbd_param_command:`命令`,fbd_param_code:`代码`,fbd_param_outputs:`输出数量`,fbd_option_all:`每天`,fbd_option_weekdays:`周一至周五`,fbd_option_weekend:`周六和周日`,fbd_option_message:`消息`,fbd_option_alert:`警报`,fbd_cron_dialog:`设置时间`,fbd_cron_hint:`分 时 日 月 星期,例如 "0 8 * * 1-5":周一至周五 8:00。前面加上秒时,"*/5 * * * * *" 表示每 5 秒`,fbd_code_hint:`代码接收 %s,并返回 OUT1 的值或 [OUT1, OUT2, ...];undefined 保持输出不变`,"The code has an error: %s":`代码有错误:%s`,fbd_option_nightEnd:`夜晚结束`,fbd_option_nauticalDawn:`航海黎明`,fbd_option_dawn:`黎明`,fbd_option_sunrise:`日出`,fbd_option_sunriseEnd:`日出结束`,fbd_option_goldenHourEnd:`黄金时段结束`,fbd_option_solarNoon:`星期日正午`,fbd_option_goldenHour:`黄金时段`,fbd_option_sunsetStart:`日落开始`,fbd_option_sunset:`日落`,fbd_option_dusk:`黄昏`,fbd_option_nauticalDusk:`航海黄昏`,fbd_option_night:`夜晚`,fbd_option_nadir:`最低点`}}).forEach(([e,t])=>L.extendTranslations(t,e)),p();var eg={AND:`&`,OR:`≥1`,XOR:`=1`,NOT:`¬`,RS:`RS`,SR:`SR`,R_TRIG:`↑`,F_TRIG:`↓`,GT:`>`,GE:`≥`,LT:`<`,LE:`≤`,EQ:`=`,NE:`≠`,ADD:`+`,SUB:`−`,MUL:`×`,DIV:`÷`,MIN:`min`,MAX:`max`,ROUND:`≈`,CTU:`+1`,CTD:`−1`,CTUD:`±1`,TO_BOOL:`0/1`,TO_INT:`123`,TO_REAL:`1.5`,TO_TIME:`ms`,TO_STRING:`abc`,CONCAT:`a+b`},tg={STATE_IN:Te,STATE_OUT:Ee,CONST:Ae,LOG:De,NOTIFY:K,SENDTO:se,CLOCK:G,TIMEWINDOW:he,SCHEDULE:ge,ASTRO:Ge,BLINK:ye,JS:d,TON:Be,TOF:Ve,TP:Se,HYST:ze,RAMP:He,PT1:te,PID:Ue,FB_IN:q,FB_OUT:Oe,comment:Re};function ng(e){let t=e.type.startsWith(`@userFb/`)?ve:tg[e.type];return t?O(t,{className:`fb-icon`,style:{color:e.color}}):O(`span`,{className:`fb-icon fb-icon-glyph`,style:{color:e.color},children:eg[e.type]||`?`})}var rg={BOOL:`#22c55e`,INT:`#3b82f6`,REAL:`#06b6d4`,TIME:`#f59e0b`,STRING:`#a855f7`,ANY:`#94a3b8`},ig={iobroker:`#3b82f6`,logic:`#22c55e`,memory:`#f59e0b`,timers:`#8b5cf6`,counters:`#d946ef`,compare:`#14b8a6`,arithmetic:`#0ea5e9`,convert:`#84cc16`,control:`#ec4899`,calendar:`#eab308`,messages:`#6366f1`,expert:`#78716c`,interface:`#64748b`,user:`#a855f7`},ag=[220,90];function og(e){return{nodes:[...e.comments.map(e=>({id:e.id,type:`fbComment`,position:{x:e.pos[0],y:e.pos[1]},width:e.size[0],height:e.size[1],zIndex:-1,data:{text:e.text}})),...e.blocks.map(e=>{let t={...e};return delete t.order,{id:t.id,type:`fbBlock`,position:{x:t.pos[0],y:t.pos[1]},data:{block:t}}})],edges:e.links.map(e=>{let t={id:e.id,type:`fbLink`,source:e.from[0],sourceHandle:e.from[1],target:e.to[0],targetHandle:e.to[1]};return(e.mark||e.label)&&(t.data={mark:e.mark,label:e.label}),t})}}function sg(e,t,n){let r=[],i=[];for(let t of e){let e=[Math.round(t.position.x),Math.round(t.position.y)];if(t.type===`fbBlock`)r.push({...t.data.block,pos:e});else{var a,o;i.push({id:t.id,pos:e,size:[Math.round(t.width??((a=t.measured)==null?void 0:a.width)??ag[0]),Math.round(t.height??((o=t.measured)==null?void 0:o.height)??ag[1])],text:t.data.text})}}return{format:1,runtime:Rm,cycle:n,blocks:r,links:t.map(e=>{var t,n;let r={id:e.id,from:[e.source,e.sourceHandle||``],to:[e.target,e.targetHandle||``]};return(t=e.data)!=null&&t.mark&&(r.mark=!0),(n=e.data)!=null&&n.label&&(r.label=e.data.label),r}),comments:i}}p();var cg=class{constructor(){z(this,`values`,new Map),z(this,`listeners`,new Map)}subscribe(e,t){let n=this.listeners.get(e);return n||(n=new Set,this.listeners.set(e,n)),n.add(t),t(this.values.get(e)),()=>{n.delete(t),n.size||this.listeners.delete(e)}}update(e,t){if(t)for(let t of[...this.values.keys()])t in e||(this.values.delete(t),this.notify(t,void 0));for(let[t,n]of Object.entries(e))this.values.set(t,n),this.notify(t,n)}clear(){let e=[...this.values.keys()];this.values.clear(),e.forEach(e=>this.notify(e,void 0))}notify(e,t){var n;(n=this.listeners.get(e))==null||n.forEach(e=>e(t))}},lg=j(new cg);function ug(e,t,n){if(e==null)return`null`;if(t===`BOOL`||typeof e==`boolean`)return e?`TRUE`:`FALSE`;if(typeof e==`number`)return t===`TIME`?n?Ip(e):Fp(e):String(Math.round(e*1e3)/1e3);let r=typeof e==`string`?e:JSON.stringify(e);return`"${r.length>20?`${r.substring(0,19)}…`:r}"`}function dg(e){let{signal:t,type:n,clock:r}=e,a=o(lg),s=i(null);return S(()=>a.subscribe(t,e=>{let t=s.current;if(t){if(e===void 0){t.style.display=`none`;return}t.style.display=``,t.textContent=ug(e,n,r),t.dataset.bool=typeof e==`boolean`?String(e):``}}),[a,t,n,r]),O(`div`,{ref:s,className:`fb-live`,"data-forced":e.forced?`true`:void 0,style:{...e.style,display:`none`}})}function fg(e){let{signal:t,type:n}=e,r=o(lg),a=i(null);return S(()=>r.subscribe(t,e=>{a.current&&(a.current.textContent=e===void 0?`…`:ug(e,n))}),[r,t,n]),O(`span`,{ref:a})}async function pg(e,t,n,r){let i=await e.sendTo(t,`fbdDebug`,{script:n,...r});if(!(i!=null&&i.status))throw Error((i==null?void 0:i.error)||`No answer`);return i.status}var mg=1e4,hg=5e3;function gg(e){let{active:t,socket:n,instance:r,scriptId:a,bus:o,path:s}=e,c=i(e);c.current=e;let l=i(s);S(()=>{t&&r&&s!==l.current&&n.sendTo(r,`fbdWatch`,{script:a,watch:!0,path:s}).catch(()=>{}),l.current=s},[t,n,r,a,s]),S(()=>{if(!t||!r)return;let e=`${r}.debug.fbd`,i=Date.now(),s=0,u=-1,d=0,f=`event`,p=!1,m=!1,h=()=>{let e=Date.now(),t;t=s?e-s>hg?{kind:`no-data`,seconds:Math.round((e-s)/1e3)}:m?{kind:`paused`,cycle:u}:f===`cyclic`&&e-d>hg?{kind:`stalled`,cycle:u}:p?{kind:`no-values`,cycle:u}:{kind:`running`,cycle:u,mode:f}:e-i>hg?{kind:`no-data`,seconds:Math.round((e-i)/1e3)}:{kind:`waiting`},c.current.onStatus(t)},g=(e,t)=>{if(typeof(t==null?void 0:t.val)!=`string`)return;let n;try{n=JSON.parse(t.val)}catch{return}n.script===a&&(s=Date.now(),n.cycle!==u&&(u=n.cycle,d=s),f=n.mode,n.values&&o.update(n.values,!!n.full),n.full&&(p=!Object.keys(n.values||{}).length),`error`in n&&c.current.onError(n.error||null),n.debug&&(m=n.debug.paused,c.current.onDebug(n.debug)),h())},_=e=>{n.sendTo(r,`fbdWatch`,{script:a,watch:!0,full:e,path:l.current}).catch(()=>{})};n.subscribeState(e,g),_(!0),h();let v=setInterval(()=>_(!1),mg),y=setInterval(h,1e3);return()=>{clearInterval(v),clearInterval(y),n.unsubscribeState(e,g),n.sendTo(r,`fbdWatch`,{script:a,watch:!1}).catch(()=>{}),o.clear(),c.current.onError(null),c.current.onDebug(null)}},[t,n,r,a,o])}p();var _g={enabled:!1,breakpoints:new Set,at:null,forced:new Set,toggleBreakpoint:()=>{}};function vg(e,t,n,r=t.userBlocks||{}){let i=new Set,a=new Set;e.issues.filter(e=>e.severity===`error`).forEach(e=>{var t;e.blockId&&i.add(e.blockId),(t=e.blockIds)==null||t.forEach(e=>i.add(e)),e.linkId&&a.add(e.linkId)});let o=new Map(t.blocks.map(e=>[e.id,e])),s=new Set(e.feedback),c={};for(let e of t.links){let t=o.get(e.from[0]),n=t?oh(t,Xm(t.type,r)):[],i=n.find(t=>t.id===e.from[1]);c[e.id]={type:(i==null?void 0:i.type)||`ANY`,feedback:s.has(e.id),error:a.has(e.id),name:t?n.length>1?`${t.name}.${e.from[1]}`:t.name:e.from.join(`.`)}}return{order:e.order,errors:i,links:c,background:n?`#141414`:`#ffffff`,runtimeError:null,userBlocks:r,debug:_g,prefix:``,linkStyle:`curved`}}var yg=j({order:{},errors:new Set,links:{},background:`#fff`,runtimeError:null,userBlocks:{},debug:_g,prefix:``,linkStyle:`curved`});p();var bg=28,xg=24,Sg={header:52,detail:30,pin:24,frame:8},Cg=Sg.pin;function wg(e,t){var n;return Tg(((n=t.params)==null?void 0:n[e.id])??e.default,e.type,e.clock)}function Tg(e,t,n){return e==null?``:t===`TIME`&&typeof e==`number`?n?Ip(e):Fp(e):String(e)}function Eg(e){let t=Math.round(Number(e))||0;return t?`${t>0?`+`:`−`}${Math.abs(t)}'`:``}function Dg(e){let t=String(e??``).split(`
15
+ `).map(e=>e.trim());return t.find(e=>e&&!e.startsWith(`//`))||t.find(e=>e)||``}function Og(e,t){switch(t){case`TIME`:return Pp(e);case`INT`:return/^-?\d+$/.test(e.trim())?parseInt(e,10):null;case`REAL`:return e.trim()!==``&&Number.isFinite(Number(e))?Number(e):null;default:return e}}function kg(e){let{value:t,type:n,onChange:r}=e,i=Tg(t,n,e.clock),[a,o]=N(i);if(S(()=>o(i),[i]),n===`BOOL`){let e=t===!0||t===`true`;return O(`button`,{type:`button`,className:`fb-inline fb-inline-bool nodrag${e?` fb-on`:``}`,disabled:!r,onClick:t=>{t.stopPropagation(),r==null||r(!e)},children:e?`TRUE`:`FALSE`})}let s=`fb-inline${e.wide?` fb-inline-wide`:``}${n===`STRING`?` fb-inline-string`:``}`;if(!r)return O(`span`,{className:s,children:i});let c=Og(a,n);return O(`input`,{className:`${s} nodrag nopan${c===null?` fb-invalid`:``}`,value:a,spellCheck:!1,onChange:e=>o(e.target.value),onBlur:()=>{c!==null&&a!==i?r(c):o(i)},onKeyDown:e=>{e.key===`Enter`?e.currentTarget.blur():e.key===`Escape`&&o(i)},title:c===null?L.t(n===`TIME`?`fbd_invalid_time`:`fbd_invalid_number`):void 0})}function Ag(e){var t;return!!(e!=null&&e.user)||!!(e!=null&&(t=e.params)!=null&&t.length)}function jg({id:e,data:t,selected:n}){var r;let i=o(yg),a=qf({handleType:`target`}),[c,l]=N(null),{block:u}=t,{actions:d,debug:p}=i,m=Xm(u.type,i.userBlocks),h=ih(u,m),_=oh(u,m),y=Ag(m),b=Math.max(h.length,_.length,1),x=Sg.header+(y?Sg.detail:0),S=new Set(a.map(e=>e.targetHandle)),w=m?ig[m.category]:`#ef4444`,T=((r=i.runtimeError)==null?void 0:r.blockId)===e?i.runtimeError.message:null,E=i.errors.has(e)||!!T,D=p.breakpoints.has(e),A=p.at===e,j=d?(e,t)=>d.change({...u,params:{...u.params,[e]:t}}):void 0,P=m!=null&&m.user?m.user.description||m.user.name:m?L.t(`fbd_desc_${u.type}`):L.t(`Unknown block type %s`,u.type),F=T?L.t(`fbd_runtime_error`,T):u.comment?`${u.comment}\n\n${P}`:P,R=()=>{var e;if(m!=null&&m.user)return I(`span`,{className:`fb-block-version`,children:[`v`,m.user.version]});if(u.type===`CONST`){var t;let e=nh(u,{param:`type`},m);return O(kg,{value:(t=u.params)==null?void 0:t.value,type:e,wide:!0,onChange:j&&(e=>j(`value`,e))})}let n=()=>{var e;return O(kg,{value:(e=u.params)==null?void 0:e.text,type:`STRING`,wide:!0,onChange:j&&(e=>j(`text`,e))})};if(u.type===`LOG`){var r;let e=String(((r=u.params)==null?void 0:r.level)||`info`);return I(V,{children:[O(`span`,{className:`fb-log-level fb-log-${e}`,children:e}),n()]})}if(u.type===`NOTIFY`){var i;let e=String(((i=u.params)==null?void 0:i.category)||`message`);return I(V,{children:[O(`span`,{className:`fb-log-level fb-log-${e===`alert`?`error`:`info`}`,children:L.t(`fbd_option_${e}`)}),n()]})}if(u.type===`SENDTO`){var a;let e=(a=u.params)!=null&&a.instance?String(u.params.instance):``;return I(V,{children:[O(`span`,{className:`fb-log-level fb-log-info fb-badge-instance${e?``:` fb-inline-empty`}`,title:e,children:e||`?`}),n()]})}if(u.type===`SCHEDULE`){var o;return O(kg,{value:(o=u.params)==null?void 0:o.cron,type:`STRING`,wide:!0,onChange:j&&(e=>j(`cron`,e))})}if(u.type===`TIMEWINDOW`){var s;return O(`span`,{className:`fb-inline fb-inline-wide`,children:L.t(`fbd_option_${String(((s=u.params)==null?void 0:s.days)||`all`)}`)})}if(u.type===`ASTRO`){let e=e=>{var t,n;return`${L.t(`fbd_option_${String(((t=u.params)==null?void 0:t[e])||``)}`)}${Eg((n=u.params)==null?void 0:n[`${e}Offset`])}`};return I(`span`,{className:`fb-inline fb-inline-wide`,children:[e(`start`),` → `,e(`end`)]})}if(u.type===`JS`){var c;let e=String(((c=u.params)==null?void 0:c.code)??``);return O(`span`,{className:`fb-inline fb-inline-wide fb-inline-code`,title:e,children:Dg(e)})}if(u.type===`FB_IN`||u.type===`FB_OUT`){var l,d;return I(`span`,{className:`fb-inline fb-inline-wide`,children:[String(((l=u.params)==null?void 0:l.pin)||`?`),`: `,String(((d=u.params)==null?void 0:d.type)||`BOOL`)]})}let f=(e=u.params)!=null&&e.oid?String(u.params.oid):``;return O(`span`,{className:`fb-inline fb-inline-wide${f?``:` fb-inline-empty`}`,title:f,children:f||L.t(`fbd_no_state`)})},z=e=>()=>{l(null),e()};return I(`div`,{className:`fb-block${n?` fb-selected`:``}${E?` fb-error`:``}${A?` fb-next`:``}`,style:{"--fb-cat":w},title:F,children:[I(`div`,{className:`fb-block-bar`,style:{height:bg},children:[D||p.enabled?O(`span`,{className:`fb-breakpoint nodrag${D?` fb-breakpoint-on`:``}`,title:L.t(D?`fbd_debug_breakpoint_remove`:`fbd_debug_breakpoint_set`),onClick:p.enabled?t=>{t.stopPropagation(),p.toggleBreakpoint(e)}:void 0}):null,O(`span`,{className:`fb-block-name`,children:u.name}),u.comment?O(Re,{className:`fb-block-note`}):null,d?I(V,{children:[O(`button`,{type:`button`,className:`fb-block-action nodrag`,title:L.t(`fbd_menu_properties`),onClick:t=>{t.stopPropagation(),d.select(e)},children:O(ee,{})}),O(`button`,{type:`button`,className:`fb-block-action nodrag`,title:L.t(`fbd_menu`),onClick:e=>{e.stopPropagation(),l(e.currentTarget)},children:O(le,{})})]}):null]}),I(`div`,{className:`fb-block-title`,style:{height:xg},children:[O(ng,{type:u.type,color:w}),O(`span`,{className:`fb-block-type`,children:m!=null&&m.user?m.user.name:u.type}),i.order[e]===void 0?null:O(`span`,{className:`fb-block-order`,children:i.order[e]})]}),y?O(`div`,{className:`fb-block-detail`,style:{height:Sg.detail},children:R()}):null,Array.from({length:b},(e,t)=>{var n;let r=h[t],i=_[t];return I(`div`,{className:`fb-pin-row`,style:{height:Cg},children:[O(`span`,{className:`fb-pin-in`,children:r?I(V,{children:[r.id,S.has(r.id)?null:O(kg,{value:((n=u.params)==null?void 0:n[r.id])??r.default,type:r.type,clock:r.clock,onChange:j&&(e=>j(r.id,e))})]}):null}),O(`span`,{className:`fb-pin-out`,children:i?i.id:null})]},t)}),O(`div`,{style:{height:Sg.frame}}),h.map((e,t)=>{var n;let r=x+t*Cg+Cg/2;return I(k.Fragment,{children:[O(od,{type:`target`,position:Y.Left,id:e.id,className:`fb-handle`,style:{top:r,"--fb-pin":rg[e.type]},title:e.type}),(n=u.pins)!=null&&(n=n[e.id])!=null&&n.inverted?O(`div`,{className:`fb-inverted`,style:{top:r}}):null]},`in-${e.id}`)}),_.map((t,n)=>{let r=x+n*Cg+Cg/2;return I(k.Fragment,{children:[O(od,{type:`source`,position:Y.Right,id:t.id,className:`fb-handle`,style:{top:r,"--fb-pin":rg[t.type]},title:t.type}),O(dg,{signal:`${i.prefix}${e}.${t.id}`,type:t.type,clock:t.clock,forced:p.forced.has(`${i.prefix}${e}.${t.id}`),style:{top:r-Cg+2}})]},`out-${t.id}`)}),c&&d?I(v,{anchorEl:c,open:!0,onClose:()=>l(null),onClick:e=>e.stopPropagation(),children:[I(f,{onClick:z(()=>d.select(e)),children:[O(M,{children:O(ee,{fontSize:`small`})}),O(g,{children:L.t(`fbd_menu_properties`)})]}),m!=null&&m.user?I(f,{onClick:z(()=>d.openInstance(e)),children:[O(M,{children:O(Ke,{fontSize:`small`})}),O(g,{children:L.t(`fbd_instance_open`)})]}):null,p.enabled?I(f,{onClick:z(()=>p.toggleBreakpoint(e)),children:[O(M,{children:O(me,{fontSize:`small`})}),O(g,{children:L.t(D?`fbd_debug_breakpoint_remove`:`fbd_debug_breakpoint_set`)})]}):null,I(f,{onClick:z(()=>d.duplicate(e)),children:[O(M,{children:O(C,{fontSize:`small`})}),O(g,{children:L.t(`fbd_menu_duplicate`)})]}),I(f,{onClick:z(()=>d.remove(e)),children:[O(M,{children:O(s,{fontSize:`small`,color:`error`})}),O(g,{children:L.t(`Delete`)})]})]}):null]})}var Mg=W(jg);p();function Ng({data:e,selected:t}){return I(V,{children:[O(jp,{isVisible:t,minWidth:80,minHeight:40}),O(`div`,{className:`fb-comment${t?` fb-selected`:``}`,children:e.text})]})}var Pg=W(Ng);p();var Fg=14,Ig=6.6;function Lg(e){let{x:t,y:n,width:r}=e;return I(V,{children:[O(`polygon`,{points:`${t},${n-8} ${t+r},${n-8} ${t+r+6},${n} ${t+r},${n+8} ${t},${n+8}`,style:{stroke:e.stroke,fill:e.fill},strokeWidth:1.5}),O(`text`,{x:t+5,y:n+3.5,className:`fb-mark-text`,children:e.text})]})}function Rg({id:e,source:t,sourceHandleId:n,sourceX:r,sourceY:a,targetX:s,targetY:c,sourcePosition:l,targetPosition:u,selected:d,data:f}){let p=o(yg),m=o(lg),h=i(null),g=i(null),_=p.links[e],v=(_==null?void 0:_.type)||`ANY`,[y,b,x]=p.linkStyle===`orthogonal`?ic({sourceX:r,sourceY:a,targetX:s,targetY:c,sourcePosition:l,targetPosition:u,borderRadius:0,offset:12}):Gs({sourceX:r,sourceY:a,targetX:s,targetY:c,sourcePosition:l,targetPosition:u}),C=_!=null&&_.error?`#f44336`:rg[v],w=d?3:2,T=!!(f!=null&&f.mark),E=!T&&v!==`BOOL`&&Math.abs(s-r)+Math.abs(c-a)>120;if(S(()=>m.subscribe(`${p.prefix}${t}.${n}`,e=>{if(v===`BOOL`){if(e===void 0){var t;(t=h.current)==null||t.style.removeProperty(`--fb-live`)}else{var n;(n=h.current)==null||n.style.setProperty(`--fb-live`,e?`#00e676`:`#78909c`)}}else g.current&&(g.current.textContent=e===void 0?``:ug(e,v))}),[m,p.prefix,t,n,v,E]),T){let t=(f==null?void 0:f.label)||(_==null?void 0:_.name)||``,n=Math.max(24,t.length*Ig+10),i=`var(--fb-live, ${C})`,o=`M ${r} ${a} h ${Fg} M ${s-Fg} ${c} H ${s}`;return I(`g`,{ref:h,className:`fb-mark`,children:[O(`path`,{id:e,d:o,fill:`none`,className:`react-flow__edge-path`,style:{stroke:i,strokeWidth:w,strokeDasharray:_!=null&&_.error?`4 3`:void 0}}),O(`path`,{d:o,fill:`none`,strokeOpacity:0,strokeWidth:16,className:`react-flow__edge-interaction`}),O(Lg,{x:r+Fg,y:a,width:n,text:t,stroke:i,fill:p.background}),O(Lg,{x:s-Fg-n-6,y:c,width:n,text:t,stroke:i,fill:p.background})]})}return I(`g`,{ref:h,children:[_!=null&&_.feedback?O(`path`,{d:y,fill:`none`,style:{stroke:`var(--fb-live, ${C})`},strokeWidth:w+4}):null,O(`path`,{id:e,d:y,fill:`none`,className:`react-flow__edge-path`,style:{stroke:_!=null&&_.feedback?p.background:`var(--fb-live, ${C})`,strokeWidth:_!=null&&_.feedback?2:w,strokeDasharray:_!=null&&_.error?`6 4`:void 0}}),O(`path`,{d:y,fill:`none`,strokeOpacity:0,strokeWidth:16,className:`react-flow__edge-interaction`}),E?O(`text`,{ref:g,x:b,y:x-5,textAnchor:`middle`,className:`fb-live-label`}):null]})}var zg=W(Rg);p();function Bg(e,t,n){switch(e.kind){case`waiting`:return{text:L.t(`fbd_online_waiting`)};case`no-data`:return{text:L.t(`fbd_online_no_data`,e.seconds),color:`warning`};case`stalled`:return{text:L.t(`fbd_online_stalled`,e.cycle),color:`error`};case`no-values`:return{text:L.t(`fbd_online_no_values`,e.cycle),color:`warning`};case`paused`:return{text:t!=null&&t.at?L.t(`fbd_online_paused_at`,n(t.at),e.cycle):L.t(`fbd_online_paused`,e.cycle),color:`warning`};default:return{text:e.mode===`event`?`${L.t(`fbd_online_cycle`,e.cycle)} · ${L.t(`fbd_online_event`)}`:L.t(`fbd_online_cycle`,e.cycle)}}}function Vg(e){let{active:t,running:n,changed:r,debug:i,onCommand:a}=e,s=o(lg),[c,l]=N({kind:`waiting`}),u=x(e=>l(t=>JSON.stringify(t)===JSON.stringify(e)?t:e),[]);gg({active:t,socket:e.socket,instance:e.instance,scriptId:e.scriptId,path:e.path,bus:s,onStatus:u,onError:e.onError,onDebug:e.onDebug});let{text:d,color:f}=Bg(c,i,e.nameOf),p=i?Object.keys(i.forced).length:0,m=(i==null?void 0:i.breakpoints.length)||0,h=t&&n&&!!i,g=[h&&p?I(B,{variant:`caption`,color:`warning`,component:`div`,children:[L.t(`fbd_debug_forced_count`,p),` `,O(T,{size:`small`,color:`warning`,className:`fb-online-link`,onClick:()=>a({command:`release`}),children:L.t(`fbd_debug_release_all`)})]},`forced`):null,h&&m?I(B,{variant:`caption`,component:`div`,children:[L.t(`fbd_debug_breakpoint_count`,m),` `,O(T,{size:`small`,className:`fb-online-link`,onClick:()=>a({command:`breakpoint`,on:!1}),children:L.t(`fbd_debug_remove_all`)})]},`breakpoints`):null,e.commandError?O(B,{variant:`caption`,color:`error`,component:`div`,children:e.commandError},`error`):null].filter(e=>e);return I(`div`,{className:`fb-online`,children:[h?I(`div`,{className:`fb-online-steer`,children:[i.paused?O(`button`,{type:`button`,className:`fb-tool fb-tool-go`,title:L.t(`fbd_debug_resume`),onClick:()=>a({command:`resume`}),children:O(fe,{})}):O(`button`,{type:`button`,className:`fb-tool`,title:L.t(`fbd_debug_pause`),onClick:()=>a({command:`pause`}),children:O(pe,{})}),O(`button`,{type:`button`,className:`fb-tool`,title:L.t(`fbd_debug_cycle`),onClick:()=>a({command:`cycle`}),children:O(Fe,{})}),O(`button`,{type:`button`,className:`fb-tool`,disabled:!i.breaks,title:L.t(i.breaks?`fbd_debug_step`:`fbd_debug_save_once`),onClick:()=>a({command:`step`}),children:O(je,{})})]}):null,n?t?I(B,{variant:`caption`,color:f,className:`fb-online-status`,title:r?`${d}\n${L.t(`fbd_online_changed`)}`:d,children:[d,r?I(B,{component:`span`,variant:`caption`,color:`warning`,children:[` `,`· `,L.t(`fbd_online_changed_short`)]}):null]}):null:O(B,{variant:`caption`,color:`warning`,className:`fb-online-status`,title:L.t(`fbd_online_not_running`),children:L.t(`fbd_online_not_running`)}),I(`button`,{type:`button`,className:`fb-online-toggle${t?` fb-online-on`:``}`,onClick:e.onToggle,title:L.t(`fbd_online_tooltip`),children:[O(t?A:We,{}),L.t(`fbd_online`)]}),g.length?O(`div`,{className:`fb-online-notices`,children:g}):null]})}p();var Hg=`application/x-iobroker-fbd`;function Ug(e,t){let[n,r]=N(()=>{try{let n=window.localStorage.getItem(e);return n?JSON.parse(n):t}catch{return t}});return[n,t=>{r(t);try{window.localStorage.setItem(e,JSON.stringify(t))}catch{}}]}function Wg(e){let{onAdd:t,isBlock:n,userBlocks:r}=e,[i,a]=N(``),[o,s]=Ug(`FbEditor.palette.tab`,`blocks`),[c,l]=Ug(`FbEditor.palette.collapsed`,[]),[u,d]=Ug(`FbEditor.favorites`,[]),f=i.trim().toLowerCase(),p=(...e)=>!f||e.some(e=>e==null?void 0:e.toLowerCase().includes(f)),m=[...n?[`interface`]:[],...Um,`user`,`structure`],h=[...Hm.filter(e=>e.category!==`interface`||n).map(e=>({type:e.type,label:e.type,color:ig[e.category],title:L.t(`fbd_desc_${e.type}`),group:e.category})),...r.map(e=>({type:e.type,label:e.name,color:ig.user,title:`${e.description?`${e.description}\n`:``}${e.type}, v${e.version}`,group:`user`})),{type:`comment`,label:L.t(`fbd_comment`),color:`#94a3b8`,title:L.t(`fbd_comment_desc`),group:`structure`}].filter(e=>p(e.label,e.title)),g=e=>d(u.includes(e)?u.filter(t=>t!==e):[...u,e]),_=e=>{let n=u.includes(e.type);return I(`div`,{className:`fb-palette-item`,style:{"--fb-cat":e.color},draggable:!0,title:e.title,onDragStart:t=>{t.dataTransfer.setData(Hg,e.type),t.dataTransfer.effectAllowed=`move`},onClick:()=>t(e.type),children:[O(ng,{type:e.type,color:e.color}),O(`span`,{className:`fb-palette-label`,children:e.label}),O(`button`,{type:`button`,className:`fb-palette-star${n?` fb-on`:``}`,title:L.t(n?`fbd_favorite_remove`:`fbd_favorite_add`),onClick:t=>{t.stopPropagation(),g(e.type)},children:O(n?Ie:Le,{})})]},e.type)},v=e=>{let t=h.filter(t=>t.group===e),n=e===`user`&&!f&&!r.length?O(`div`,{className:`fb-palette-hint`,children:L.t(`fbd_no_user_blocks`)}):null;if(!t.length&&!n)return null;let i=!!f||!c.includes(e);return I(`div`,{children:[I(`div`,{className:`fb-palette-category`,onClick:()=>l(i?[...c,e]:c.filter(t=>t!==e)),children:[O(i?oe:ae,{}),O(`span`,{children:L.t(`fbd_category_${e}`)}),O(`span`,{className:`fb-palette-count`,children:t.length||``})]}),i?I(V,{children:[t.map(_),n]}):null]},e)},y;if(o===`variables`){let t=e.variables.filter(e=>p(e.name,e.oid));y=t.length?O(V,{children:t.map(t=>I(`div`,{className:`fb-palette-variable`,onClick:()=>e.onShowVariable(t.blockId),title:t.oid,children:[O(ng,{type:t.direction===`in`?`STATE_IN`:`STATE_OUT`,color:ig.iobroker}),I(`div`,{className:`fb-palette-variable-text`,children:[O(`div`,{children:t.name}),O(`div`,{className:`fb-palette-variable-oid`,children:t.oid||L.t(`fbd_no_state`)})]})]},t.blockId))}):O(`div`,{className:`fb-palette-hint`,children:L.t(`fbd_no_variables`)})}else if(o===`favorites`){let e=h.filter(e=>u.includes(e.type));y=e.length?O(V,{children:e.map(_)}):O(`div`,{className:`fb-palette-hint`,children:L.t(`fbd_no_favorites`)})}else y=O(V,{children:m.map(v)});let b=m.every(e=>c.includes(e));return I(`div`,{className:`fb-palette`,children:[I(`div`,{className:`fb-palette-search`,children:[O(ce,{}),O(`input`,{value:i,placeholder:L.t(`fbd_search`),onChange:e=>a(e.target.value)}),o===`blocks`?O(`button`,{type:`button`,className:`fb-palette-fold`,title:L.t(b?`fbd_expand_all`:`fbd_collapse_all`),onClick:()=>l(b?[]:m),children:O(b?de:ue,{})}):null]}),O(`div`,{className:`fb-tabs`,children:[`blocks`,`variables`,`favorites`].map(e=>O(`button`,{type:`button`,className:`fb-tab${o===e?` fb-tab-active`:``}`,onClick:()=>s(e),children:L.t(`fbd_tab_${e}`)},e))}),O(`div`,{className:`fb-palette-list`,children:y})]})}var Gg=160;function Kg(e,t,n){var r,i,a;let o=((r=e.params)==null?void 0:r[n])??((i=t.inputs.find(e=>e.id===n))==null?void 0:i.default);if(((a=t.inputs.find(e=>e.id===n))==null?void 0:a.type)===`TIME`)return Pp(o)??0;let s=typeof o==`number`?o:Number(o);return Number.isFinite(s)?s:0}function qg(e){return t=>e.some(([e,n])=>t>=e&&t<n)}function Jg(e,t){let n=e/Gg,r=[];for(let e=0;e<=Gg;e++)r.push(t(e?n:0,e/Gg,!e));return r[0].map((e,t)=>r.map(e=>e[t]))}function Yg(e,t,n=0){for(let r=Math.max(n,1);r<e.length;r++)if(e[r]===t&&e[r-1]!==t)return r;return-1}function Xg(e,t,n){let r=Kg(t,n,`PT`)||1e3,i=r*3.4,a=qg((e=>e.map(([e,t])=>[e*r/i,t*r/i]))(e===`TON`?[[.2,.8],[1.2,3.1]]:e===`TOF`?[[.2,.6],[2,2.3]]:[[.2,.45],[1.8,3.1]])),o=Lp[e](),[s,c,l]=Jg(i,(e,t)=>{let n=a(t);return o.run(n,r,e),[+!!n,+!!o.Q,o.ET]}),u,d;if(e===`TP`)u=Yg(c,1),d=Yg(c,0,u);else if(e===`TON`)for(d=Yg(c,1),u=d;u>0&&s[u-1]===1;)u--;else u=Yg(s,0),d=Yg(c,0,u);return{duration:i,traces:[{id:`IN`,kind:`bool`,values:s,min:0,max:1},{id:`Q`,kind:`bool`,values:c,min:0,max:1},{id:`ET`,kind:`number`,values:l,min:0,max:r}],span:u>=0&&d>u?{id:`PT`,from:u,to:d,label:Fp(r)}:void 0}}function Zg(e){let t=qg([[.1,.35],[.55,.8]]),n=Lp[e](),[r,i]=Jg(1e3,(e,r,i)=>{let a=t(r);return n.run(a,i),[+!!a,+!!n.Q]});return{duration:1e3,traces:[{id:`CLK`,kind:`bool`,values:r,min:0,max:1},{id:`Q`,kind:`bool`,values:i,min:0,max:1}]}}function Qg(e){let t=qg([[.1,.2],[.55,.75]]),n=qg([[.35,.45],[.62,.68]]),r=Lp[e](),[i,a,o]=Jg(1e3,(e,i)=>{let a=t(i),o=n(i);return r.run(a,o),[+!!a,+!!o,+!!r.Q1]});return{duration:1e3,traces:[{id:e===`RS`?`S`:`S1`,kind:`bool`,values:i,min:0,max:1},{id:e===`RS`?`R1`:`R`,kind:`bool`,values:a,min:0,max:1},{id:`Q1`,kind:`bool`,values:o,min:0,max:1}]}}function $g(e,t){let n=Kg(e,t,`HIGH`),r=Kg(e,t,`LOW`);n<=r&&(n=r+1);let i=(n+r)/2,a=(n-r)*1.4,o=wm(),[s,c]=Jg(1e3,(e,t)=>{let s=i+a*Math.sin(t*Math.PI*4);return o.run(s,n,r),[s,+!!o.Q]});return{duration:1e3,traces:[{id:`IN`,kind:`number`,values:s,min:i-a,max:i+a,levels:[{value:n,label:`HIGH`},{value:r,label:`LOW`}]},{id:`Q`,kind:`bool`,values:c,min:0,max:1}]}}function e_(e,t){let n=Kg(e,t,`UP`),r=Kg(e,t,`DOWN`),i=Math.max(n>0?10/n:1,r>0?7/r:1),a=Math.min(Math.max(i*2.4*1e3,1e3),36e5),o=Tm(),[s,c]=Jg(a,(e,t,i)=>{let a=t<.1?0:t<.55?10:3;return o.run(a,n,r,e,i),[a,o.OUT]});return{duration:a,traces:[{id:`IN`,kind:`number`,values:s,min:0,max:10},{id:`OUT`,kind:`number`,values:c,min:0,max:10}]}}function t_(e,t){let n=Kg(e,t,`T`)||1e3,r=n*6,i=Em(),[a,o]=Jg(r,(e,t,r)=>{let a=t<.1?0:1;return i.run(a,n,e,r),[a,i.OUT]}),s=Yg(a,1);return{duration:r,traces:[{id:`IN`,kind:`number`,values:a,min:0,max:1},{id:`OUT`,kind:`number`,values:o,min:0,max:1,levels:[{value:.632,label:`63%`}]}],span:{id:`T`,from:s,to:s+Math.round(n/r*Gg),label:Fp(n)}}}function n_(e,t,n){let r=Math.round(Kg(t,n,`PV`)),i=Math.min(Math.max(r,1),8)+1,a=qg(Array.from({length:i},(e,t)=>{let n=.12+t*.72/i;return[n,n+.3/i]})),o=qg(e===`CTU`?[[.9,.95]]:[[.02,.07]]),s=Lp[e](),[c,l,u,d]=Jg(1e3,(e,t,n)=>{let i=a(t),c=o(t);return s.run(i,c,r,n),[+!!i,+!!c,s.CV,+!!s.Q]});return{duration:1e3,traces:[{id:e===`CTU`?`CU`:`CD`,kind:`bool`,values:c,min:0,max:1},{id:e===`CTU`?`R`:`LD`,kind:`bool`,values:l,min:0,max:1},{id:`CV`,kind:`number`,values:u,min:Math.min(0,...u),max:Math.max(1,r,...u),levels:[{value:r,label:`PV`}]},{id:`Q`,kind:`bool`,values:d,min:0,max:1}]}}function r_(e,t){let n=Kg(e,t,`TH`)||1e3,r=Kg(e,t,`TL`)||1e3,i=(n+r)*3.5,a=qg([[.08,.85]]),o=Im(),[s,c]=Jg(i,(e,t)=>{let i=a(t);return o.run(i,n,r,e),[+!!i,+!!o.Q]}),l=Yg(c,1),u=Yg(c,0,l);return{duration:i,traces:[{id:`EN`,kind:`bool`,values:s,min:0,max:1},{id:`Q`,kind:`bool`,values:c,min:0,max:1}],span:l>=0&&u>l?{id:`TH`,from:l,to:u,label:Fp(n)}:void 0}}function i_(e,t){if(!t||t.user)return null;switch(e.type){case`TON`:case`TOF`:case`TP`:return Xg(e.type,e,t);case`R_TRIG`:case`F_TRIG`:return Zg(e.type);case`RS`:case`SR`:return Qg(e.type);case`HYST`:return $g(e,t);case`RAMP`:return e_(e,t);case`PT1`:return t_(e,t);case`CTU`:case`CTD`:return n_(e.type,e,t);case`BLINK`:return r_(e,t);default:return null}}p();var a_=280,o_=38,s_=30,c_=6,l_={IN:`#22c55e`,CLK:`#22c55e`,S:`#22c55e`,S1:`#22c55e`,R:`#ef4444`,R1:`#ef4444`,Q:`#f59e0b`,Q1:`#f59e0b`,OUT:`#f59e0b`,ET:`#a855f7`,PT:`#3b82f6`,T:`#3b82f6`};function u_(e,t,n){let r=e=>o_+238*e/n,i=n=>{let r=e.max-e.min||1;return t+s_-c_-(n-e.min)/r*18},a=[];return e.values.forEach((t,n)=>{e.kind===`bool`&&n&&a.push(`${r(n)},${i(e.values[n-1])}`),a.push(`${r(n)},${i(t)}`)}),a.join(` `)}function d_(e){let{block:t,def:n}=e,r=_(()=>i_(t,n),[t,n]);if(!r)return null;let i=r.traces[0].values.length-1,a=e=>o_+238*e/i,o=r.traces.length+ +!!r.span;return I(`svg`,{className:`fb-preview`,viewBox:`0 0 ${a_} ${o*s_}`,children:[r.traces.map((e,t)=>{var n;let r=t*s_,a=l_[e.id]||`#94a3b8`,o=e.max-e.min||1;return I(`g`,{children:[O(`text`,{x:4,y:r+s_/2+4,className:`fb-preview-label`,children:e.id}),(n=e.levels)==null?void 0:n.map(t=>{let n=r+s_-c_-(t.value-e.min)/o*18;return O(`line`,{x1:o_,x2:276,y1:n,y2:n,className:`fb-preview-level`},t.label)}),O(`polyline`,{points:u_(e,r,i),fill:`none`,stroke:a,strokeWidth:2,strokeLinejoin:`round`})]},e.id)}),r.span?(()=>{let{span:e}=r,t=r.traces.length*s_,n=a(e.from),i=a(e.to),o=t+s_/2,s=l_[e.id]||`#3b82f6`;return I(`g`,{children:[O(`text`,{x:4,y:o+4,className:`fb-preview-label`,children:e.id}),[n,i].map(e=>O(`line`,{x1:e,x2:e,y1:0,y2:t+s_-4,className:`fb-preview-mark`},e)),O(`line`,{x1:n+2,x2:i-2,y1:o+6,y2:o+6,stroke:s,strokeWidth:1.5,markerStart:`url(#fb-arrow)`,markerEnd:`url(#fb-arrow)`}),O(`text`,{x:(n+i)/2,y:o,textAnchor:`middle`,className:`fb-preview-label`,children:e.label}),O(`defs`,{children:O(`marker`,{id:`fb-arrow`,viewBox:`0 0 10 10`,refX:`5`,refY:`5`,markerWidth:`6`,markerHeight:`6`,orient:`auto-start-reverse`,children:O(`path`,{d:`M 0 0 L 10 5 L 0 10 z`,fill:s})})})]})})():null]})}p();var f_=/^[A-Za-z_][A-Za-z0-9_]*$/;function p_(e){let t=`fbd_option_${e}`,n=L.t(t);return n===t?e:n}var m_=`FbEditor.properties.closed`;function h_(){try{return JSON.parse(window.localStorage.getItem(m_)||`[]`)}catch{return[]}}function g_(e){let[t,n]=N(()=>!h_().includes(e.id));return I(`div`,{className:`fb-section`,children:[I(`div`,{className:`fb-section-head`,onClick:()=>{n(!t);try{let n=h_().filter(t=>t!==e.id);window.localStorage.setItem(m_,JSON.stringify(t?[...n,e.id]:n))}catch{}},children:[O(t?_e:oe,{}),O(`span`,{children:e.title})]}),t?O(`div`,{className:`fb-section-body`,children:e.children}):null]})}function $(e){return I(`div`,{className:`fb-row`,children:[O(`div`,{className:`fb-row-label`,children:e.label}),I(`div`,{className:`fb-row-field`,children:[e.children,e.hint?O(`div`,{className:`fb-row-hint`,children:e.hint}):null]})]})}function __(e){let{value:t,type:n,onChange:r}=e,i=t=>n===`TIME`&&typeof t==`number`?e.clock?Ip(t):Fp(t):t===void 0?``:String(t),[a,o]=N(i(t));S(()=>o(i(t)),[t]);let s=Og(a,n)===null,c=()=>{let e=Og(a,n);e!==null&&e!==t&&r(e)};return O(w,{size:`small`,fullWidth:!0,value:a,error:s,placeholder:e.clock?`08:30`:n,helperText:s?L.t(n===`TIME`?`fbd_invalid_time`:`fbd_invalid_number`):void 0,onChange:e=>o(e.target.value),onBlur:c,onKeyDown:e=>e.key===`Enter`&&c()})}function v_(e){let{value:t,onCommit:n}=e,[r,i]=N(t);return S(()=>i(t),[t]),O(w,{size:`small`,fullWidth:!0,multiline:e.multiline,minRows:e.multiline?2:void 0,placeholder:e.placeholder,value:r,error:e.error,helperText:e.helperText,onChange:e=>i(e.target.value),onBlur:()=>r!==t&&n(r),onKeyDown:i=>!e.multiline&&i.key===`Enter`&&r!==t&&n(r),slotProps:e.endAdornment?{input:{endAdornment:e.endAdornment}}:void 0})}var y_=null;function b_(e){let[t,n]=N([]);return S(()=>{let t=!0;return y_||=e.socket.getAdapterInstances().then(e=>(e||[]).sort((e,t)=>{var n,r;return Number(!!(t!=null&&(n=t.common)!=null&&n.messagebox))-Number(!!(e!=null&&(r=e.common)!=null&&r.messagebox))}).map(e=>{var t;return e==null||(t=e._id)==null?void 0:t.replace(`system.adapter.`,``)}).filter(e=>!!e)).catch(()=>[]),y_.then(e=>t&&n(e)),()=>{t=!1}},[e.socket]),O(m,{freeSolo:!0,size:`small`,fullWidth:!0,options:t,value:e.value,onChange:(t,n)=>e.onChange((n||``).trim()),onInputChange:(t,n,r)=>r===`input`&&e.onChange(n.trim()),renderInput:t=>O(w,{...t,error:!e.value,placeholder:`telegram.0`})})}function x_(e){let[t,n]=N(!1);return I(V,{children:[O(v_,{value:e.value,placeholder:`0 8 * * *`,error:!e.value.trim(),onCommit:t=>e.onChange(t.trim()),endAdornment:O(a,{position:`end`,children:O(re,{size:`small`,title:L.t(`fbd_cron_dialog`),onClick:()=>n(!0),children:O(Ne,{fontSize:`small`})})})}),t?O(D,{theme:e.theme,cron:e.value,noWizard:!0,onClose:()=>n(!1),onOk:t=>{n(!1),e.onChange(t)}}):null]})}function S_(e){let{value:t,parameters:n,onChange:r}=e,[i,a]=N(t);S(()=>a(t),[t]);let o=hh(i,n);return O(w,{size:`small`,fullWidth:!0,multiline:!0,minRows:6,maxRows:20,value:i,error:!!o,helperText:o||L.t(`fbd_code_hint`,n.join(`, `)),onChange:e=>a(e.target.value),onBlur:()=>i!==t&&r(i),onKeyDown:e=>{if(e.key===`Tab`&&!e.shiftKey){e.preventDefault();let t=e.target,{selectionStart:n,selectionEnd:r}=t;a(`${i.substring(0,n)} ${i.substring(r)}`),window.requestAnimationFrame(()=>t.setSelectionRange(n+4,n+4))}},slotProps:{htmlInput:{spellCheck:!1,className:`fb-code`}}})}function C_(e){let{signal:t,type:n,debug:r,onCommand:i}=e,a=Object.prototype.hasOwnProperty.call(r.forced,t),[o,s]=N(``),c=Og(o,n),l=e=>i({command:`force`,signal:t,value:e});return I(h,{className:`fb-force`,children:[I(B,{variant:`body2`,children:[e.label,` =`,` `,O(fg,{signal:t,type:n}),a?I(B,{component:`span`,variant:`caption`,color:`warning`,children:[` `,L.t(`fbd_debug_forced`)]}):null]}),I(h,{className:`fb-force-row`,children:[n===`BOOL`?I(V,{children:[O(T,{size:`small`,variant:`outlined`,onClick:()=>l(!0),children:`TRUE`}),O(T,{size:`small`,variant:`outlined`,onClick:()=>l(!1),children:`FALSE`})]}):I(V,{children:[O(w,{size:`small`,value:o,placeholder:n,error:!!o&&c===null,onChange:e=>s(e.target.value),onKeyDown:e=>e.key===`Enter`&&c!==null&&l(c),sx:{width:100}}),O(T,{size:`small`,variant:`outlined`,disabled:c===null||!o&&n!==`STRING`,onClick:()=>c!==null&&l(c),children:L.t(`fbd_debug_force`)})]}),a?O(T,{size:`small`,color:`warning`,onClick:()=>i({command:`release`,signal:t}),children:L.t(`fbd_debug_release`)}):null]})]})}function w_(e){let{block:t,def:n,debug:r,onCommand:i}=e;if(!r)return null;let a=oh(t,n);return I(g_,{id:`online`,title:L.t(`fbd_online`),children:[O($,{label:L.t(`fbd_debug_breakpoint`),hint:L.t(r.breaks?`fbd_debug_breakpoint_hint`:`fbd_debug_save_once`),children:O(b,{size:`small`,disabled:!r.breaks,checked:r.breakpoints.includes(t.id),onChange:e=>i({command:`breakpoint`,block:t.id,on:e.target.checked})})}),a.map(e=>O(C_,{label:e.id,signal:`${t.id}.${e.id}`,type:e.type,debug:r,onCommand:i},e.id)),a.length?O(`div`,{className:`fb-row-hint`,children:L.t(`fbd_debug_force_hint`)}):null]})}function T_(e){var t,n;let{edge:r,edgeView:i,onEdgeChange:a,debug:o}=e,s=!!((t=r.data)!=null&&t.mark);return I(V,{children:[I(g_,{id:`link`,title:L.t(`fbd_link`),children:[O($,{label:L.t(`fbd_link_from_to`),children:O(B,{variant:`body2`,children:i?`${i.from} → ${i.to}`:`${r.source} → ${r.target}`})}),i?O($,{label:L.t(`fbd_type`),children:O(B,{variant:`body2`,children:i.type})}):null,O($,{label:L.t(`fbd_link_mark_short`),hint:L.t(`fbd_link_mark_hint`),children:O(b,{size:`small`,checked:s,onChange:e=>a({...r,data:{...r.data,mark:e.target.checked}})})}),s?O($,{label:L.t(`fbd_link_label`),children:O(v_,{value:((n=r.data)==null?void 0:n.label)||``,placeholder:i==null?void 0:i.name,onCommit:e=>a({...r,data:{...r.data,label:e.trim()||void 0}})})}):null]}),e.online&&o&&i?O(g_,{id:`online`,title:L.t(`fbd_online`),children:O(C_,{label:i.from,signal:`${r.source}.${r.sourceHandle}`,type:i.type,debug:o,onCommand:e.onCommand})}):null]})}function E_(e){var t;let{block:n,onBlockChange:r,connectedInputs:i}=e,o=Xm(n.type,e.userBlocks);if(!o)return O(B,{color:`error`,children:L.t(`Unknown block type %s`,n.type)});let s=(e,t)=>r({...n,params:{...n.params,[e]:t}}),c=t=>{var r;let i=((r=n.params)==null?void 0:r[t.id])??t.default,c=L.t(`fbd_param_${t.id}`);if(t.type===`OID`)return O($,{label:c,children:O(w,{size:`small`,fullWidth:!0,value:i===void 0?``:String(i),error:t.required&&!i,onChange:e=>s(t.id,e.target.value.trim()),slotProps:{input:{endAdornment:O(a,{position:`end`,children:O(re,{size:`small`,title:L.t(`fbd_select_state`),onClick:()=>e.onSelectId(t.id),children:O(U,{fontSize:`small`})})})}}})},t.id);if(t.type===`ENUM`)return O($,{label:c,children:O(w,{select:!0,size:`small`,fullWidth:!0,value:i===void 0?``:String(i),onChange:e=>s(t.id,e.target.value),children:(t.options||[]).map(e=>O(f,{value:e,children:p_(e)},e))})},t.id);if(t.type===`NAME`){let e=i===void 0?``:String(i);return O($,{label:c,children:O(w,{size:`small`,fullWidth:!0,value:e,error:!f_.test(e),helperText:f_.test(e)?void 0:L.t(`fbd_invalid_name`),onChange:e=>s(t.id,e.target.value.trim())})},t.id)}if(t.type===`INSTANCE`)return O($,{label:c,children:O(b_,{value:i===void 0?``:String(i),socket:e.socket,onChange:e=>s(t.id,e)})},t.id);if(t.type===`CRON`)return O($,{label:c,hint:L.t(`fbd_cron_hint`),children:O(x_,{value:i===void 0?``:String(i),theme:e.theme,onChange:e=>s(t.id,e)})},t.id);if(t.type===`CODE`)return O(`div`,{className:`fb-code-row`,children:O(S_,{value:i===void 0?``:String(i),parameters:ph(n,o),onChange:e=>s(t.id,e)})},t.id);let l=nh(n,t.type,o);return O($,{label:c,hint:t.id.endsWith(`Offset`)?L.t(`fbd_offset_hint`):void 0,children:l===`BOOL`?O(b,{size:`small`,checked:i===!0,onChange:e=>s(t.id,e.target.checked)}):O(__,{value:i,type:l,onChange:e=>s(t.id,e)},`${t.id}-${l}`)},t.id)},l=ih(n,o),u=o.user,d=u?e.library[u.type]:void 0,p=!!i_(n,o);return I(V,{children:[I(g_,{id:`general`,title:L.t(`fbd_section_general`),children:[O($,{label:L.t(`fbd_name`),children:O(v_,{value:n.name,onCommit:e=>e.trim()&&r({...n,name:e.trim()})})}),O($,{label:L.t(`fbd_type`),children:O(w,{size:`small`,fullWidth:!0,disabled:!0,value:u?`${u.name} (v${u.version})`:`${n.type} - ${L.t(`fbd_desc_${n.type}`)}`,title:u?u.description:L.t(`fbd_desc_${n.type}`)})}),O($,{label:L.t(`fbd_comment_field`),children:O(v_,{value:n.comment||``,placeholder:L.t(`fbd_comment_placeholder`),multiline:!0,onCommit:e=>{let t={...n,comment:e.trim()||void 0};t.comment||delete t.comment,r(t)}})}),u?I(h,{className:`fb-row-actions`,children:[d&&d.user.version>u.version?I(V,{children:[O(B,{variant:`body2`,color:`warning`,component:`div`,children:L.t(`fbd_block_newer`,d.user.version)}),O(T,{size:`small`,variant:`outlined`,onClick:()=>e.onUpdateUserBlock(u.type),title:L.t(`fbd_block_update_hint`),children:L.t(`fbd_block_update`)})]}):null,O(T,{size:`small`,onClick:()=>e.onOpenInstance(n),title:L.t(`fbd_instance_open_hint`),children:L.t(`fbd_instance_open`)}),d&&e.onOpenScript?O(T,{size:`small`,onClick:()=>e.onOpenScript(d.scriptId),children:L.t(`fbd_block_open`)}):null]}):null]}),e.online?O(w_,{...e,block:n,def:o}):null,(t=o.params)!=null&&t.length||o.extensible||o.extensibleOutputs?I(g_,{id:`params`,title:L.t(`fbd_section_params`),children:[(o.params||[]).map(c),o.extensible?O($,{label:L.t(`fbd_param_inputs`),children:O(w,{select:!0,size:`small`,fullWidth:!0,value:l.length,onChange:e=>s(`inputs`,Number(e.target.value)),children:Array.from({length:o.extensible.max-o.extensible.min+1},(e,t)=>o.extensible.min+t).map(e=>O(f,{value:e,children:e},e))})}):null,o.extensibleOutputs?O($,{label:L.t(`fbd_param_outputs`),children:O(w,{select:!0,size:`small`,fullWidth:!0,value:oh(n,o).length,onChange:e=>s(`outputs`,Number(e.target.value)),children:Array.from({length:o.extensibleOutputs.max-o.extensibleOutputs.min+1},(e,t)=>o.extensibleOutputs.min+t).map(e=>O(f,{value:e,children:e},e))})}):null]}):null,l.length?O(g_,{id:`inputs`,title:L.t(`fbd_inputs`),children:l.map(e=>{var t,a,o;return O($,{label:`${e.id} (${e.type})`,children:I(`div`,{className:`fb-input-field`,children:[i.has(e.id)?O(B,{variant:`body2`,className:`fb-dim`,children:L.t(`fbd_connected`)}):e.type===`BOOL`?O(b,{size:`small`,checked:(((t=n.params)==null?void 0:t[e.id])??e.default)===!0,onChange:t=>s(e.id,t.target.checked)}):O(__,{value:((a=n.params)==null?void 0:a[e.id])??e.default,type:e.type,clock:e.clock,onChange:t=>s(e.id,t)}),e.type===`BOOL`?I(`label`,{className:`fb-invert`,title:L.t(`fbd_inverted`,e.id),children:[O(R,{size:`small`,checked:!!((o=n.pins)!=null&&(o=o[e.id])!=null&&o.inverted),onChange:t=>r({...n,pins:{...n.pins,[e.id]:{inverted:t.target.checked}}})}),L.t(`fbd_invert_short`)]}):null]})},e.id)})}):null,p?O(g_,{id:`preview`,title:L.t(`fbd_section_preview`),children:O(d_,{block:n,def:o})}):null]})}function D_(e){let{blockInfo:t,onBlockInfoChange:n}=e,r=t?e.library[t.type]:void 0;return I(g_,{id:`block`,title:L.t(`fbd_section_block`),children:[O($,{label:L.t(`fbd_is_block_short`),hint:L.t(`fbd_block_hint`),children:O(b,{size:`small`,checked:!!t,onChange:t=>n(t.target.checked?vh(e.scriptName):void 0),title:L.t(`fbd_is_block`)})}),t?I(V,{children:[O($,{label:L.t(`fbd_block_name`),children:O(v_,{value:t.name,onCommit:e=>e.trim()&&n({...t,name:e.trim()})})}),O($,{label:L.t(`fbd_block_description`),children:O(v_,{value:t.description||``,multiline:!0,onCommit:e=>n({...t,description:e.trim()})})}),O(`div`,{className:`fb-row-hint`,children:L.t(`fbd_block_type`,t.type,t.version)}),r?O(B,{variant:`caption`,component:`div`,color:`warning`,children:L.t(`fbd_block_duplicate`,r.user.name)}):null]}):null]})}function O_(e){var t;let n=((t=e.node)==null?void 0:t.type)===`fbBlock`?e.node.data.block:null;if(!n)return I(g_,{id:`doc-keys`,title:L.t(`fbd_doc_keys`),children:[[[`Ctrl+Z / Ctrl+Y`,`fbd_key_undo`],[`Ctrl+C / Ctrl+X / Ctrl+V`,`fbd_key_copy`],[`Del`,`fbd_key_delete`],[`Ctrl+F`,`fbd_key_find`],[`F8`,`fbd_key_pause`],[`F9`,`fbd_key_breakpoint`],[`F10`,`fbd_key_step`],[`Esc`,`fbd_key_back`]].map(([e,t])=>O($,{label:O(`code`,{children:e}),children:O(B,{variant:`body2`,children:L.t(t)})},e)),O(`div`,{className:`fb-row-hint`,children:L.t(`fbd_doc_double_click`)})]});let r=Xm(n.type,e.userBlocks);if(!r)return O(B,{color:`error`,children:L.t(`Unknown block type %s`,n.type)});let i=e=>e.map(e=>O($,{label:O(`code`,{children:e.id}),children:I(B,{variant:`body2`,children:[e.type,e.default===void 0?``:` = ${e.clock&&typeof e.default==`number`?Ip(e.default):String(e.default)}`]})},e.id)),a=ih(n,r),o=oh(n,r);return I(V,{children:[I(g_,{id:`doc-block`,title:r.user?r.user.name:n.type,children:[O(B,{variant:`body2`,sx:{mb:1},children:r.user?r.user.description||r.user.name:L.t(`fbd_desc_${n.type}`)}),r.stateful?O(`div`,{className:`fb-row-hint`,children:L.t(`fbd_doc_stateful`)}):null,r.timeDependent?O(`div`,{className:`fb-row-hint`,children:L.t(`fbd_doc_time`)}):null]}),a.length?O(g_,{id:`doc-inputs`,title:L.t(`fbd_inputs`),children:i(a)}):null,o.length?O(g_,{id:`doc-outputs`,title:L.t(`fbd_outputs`),children:i(o)}):null,i_(n,r)?O(g_,{id:`preview`,title:L.t(`fbd_section_preview`),children:O(d_,{block:n,def:r})}):null]})}function k_(e){var t;let{node:n,edge:r,cycle:i,mode:a,onCycleChange:o}=e,[c,l]=N(null),[u,d]=N(`properties`),p=(n==null?void 0:n.type)===`fbBlock`?n.data.block:null;S(()=>{e.showProperties&&d(`properties`)},[e.showProperties]);let m;return m=u===`docs`?O(O_,{...e}):p?O(E_,{...e,block:p,onSelectId:l}):(n==null?void 0:n.type)===`fbComment`?O(g_,{id:`comment`,title:L.t(`fbd_comment`),children:O(w,{size:`small`,fullWidth:!0,multiline:!0,minRows:4,value:n.data.text,onChange:t=>e.onCommentChange(n.id,t.target.value)})}):r?O(T_,{...e,edge:r}):I(V,{children:[e.blockInfo?null:I(g_,{id:`diagram`,title:L.t(`fbd_diagram`),children:[O($,{label:L.t(`fbd_cycle_mode`),hint:L.t(a===`cyclic`?`fbd_runs_cyclic`:`fbd_runs_event`),children:I(w,{select:!0,size:`small`,fullWidth:!0,value:i.mode,onChange:e=>o({...i,mode:e.target.value}),children:[O(f,{value:`auto`,children:L.t(`fbd_mode_auto`)}),O(f,{value:`cyclic`,children:L.t(`fbd_mode_cyclic`)}),O(f,{value:`event`,children:L.t(`fbd_mode_event`)})]})}),a===`cyclic`?O($,{label:L.t(`fbd_cycle_time`),hint:`50 - ${Qm} ms`,children:O(w,{size:`small`,fullWidth:!0,type:`number`,value:i.ms,slotProps:{htmlInput:{min:50,max:Qm,step:50}},onChange:e=>o({...i,ms:Number(e.target.value)||0})})}):null]}),O(D_,{...e})]}),I(`div`,{className:`fb-properties`,children:[O(`div`,{className:`fb-tabs`,children:[`properties`,`docs`].map(e=>O(`button`,{type:`button`,className:`fb-tab${u===e?` fb-tab-active`:``}`,onClick:()=>d(e),children:L.t(e===`properties`?`fbd_tab_properties`:`fbd_tab_docs`)},e))}),I(`div`,{className:`fb-properties-content`,children:[m,(n||r)&&u===`properties`?O(T,{size:`small`,color:`error`,startIcon:O(s,{}),onClick:e.onDelete,sx:{mt:1},children:L.t(`Delete`)}):null]}),c&&p?O(F,{theme:e.theme,imagePrefix:`../..`,themeName:e.themeName,themeType:e.themeType,socket:e.socket,selected:String(((t=p.params)==null?void 0:t[c])||``),types:[`state`],onClose:()=>l(null),onOk:t=>{let n=Array.isArray(t)?t[0]:t;l(null),n&&A_(p,c,n,e)}}):null]})}function A_(e,t,n,r){r.onBlockChange({...e,params:{...e.params,[t]:n}})}p();function j_(e){let{text:t,count:n,index:r,onMove:a,onClose:o}=e,s=i(null);return S(()=>{var e,t;(e=s.current)==null||e.focus(),(t=s.current)==null||t.select()},[e.focusKey]),I(h,{className:`fb-search`,sx:{bgcolor:`background.paper`},children:[O(ce,{fontSize:`small`,sx:{opacity:.6}}),O(ne,{inputRef:s,value:t,placeholder:L.t(`fbd_find_placeholder`),onChange:t=>e.onText(t.target.value),onKeyDown:e=>{e.key===`Enter`?(e.preventDefault(),a(e.shiftKey?-1:1)):e.key===`Escape`&&(e.preventDefault(),o())},sx:{fontSize:13,width:180}}),O(B,{variant:`caption`,className:`fb-search-count`,color:t.trim()&&!n?`error`:void 0,children:t.trim()?n?`${r+1}/${n}`:L.t(`fbd_find_none`):``}),O(re,{size:`small`,disabled:n<2,title:L.t(`fbd_find_previous`),onClick:()=>a(-1),children:O(we,{fontSize:`small`})}),O(re,{size:`small`,disabled:n<2,title:L.t(`fbd_find_next`),onClick:()=>a(1),children:O(Ce,{fontSize:`small`})}),O(re,{size:`small`,title:L.t(`fbd_find_close`),onClick:o,children:O(l,{fontSize:`small`})})]})}p();var M_={fbBlock:Mg,fbComment:Pg},N_={fbLink:zg};function P_(e){return e.map(e=>e.blockId).join(`/`)}function F_(e,t){var n;if(e.type!==`fbBlock`)return null;let{block:r}=e.data;return(n=Xm(r.type,t))!=null&&n.user?{blockId:r.id,type:r.type,name:r.name}:null}function I_(e){let{path:t,userBlocks:n,dark:r,onEnter:i,onSelect:a}=e,o=n[t[t.length-1].type],s=_(()=>og(o.graph),[o]),[c,,l]=Wf(s.nodes),u=_(()=>({...vg(jh(o.graph,{userBlocks:n,isBlock:!0}),o.graph,r,n),debug:{..._g,forced:e.forced},prefix:`${P_(t)}/`,linkStyle:e.linkStyle}),[o,n,r,e.forced,t,e.linkStyle]),d=c.filter(e=>e.selected),f=d.length===1&&d[0].type===`fbBlock`?d[0].data.block:null;return S(()=>a(f),[f,a]),O(yg.Provider,{value:u,children:I(Bf,{nodes:c,edges:s.edges,nodeTypes:M_,edgeTypes:N_,onNodesChange:l,onNodeDoubleClick:(e,t)=>{let r=F_(t,n);r&&i(r)},nodesDraggable:!1,nodesConnectable:!1,edgesReconnectable:!1,deleteKeyCode:null,colorMode:r?`dark`:`light`,fitView:!0,fitViewOptions:{maxZoom:1.2},minZoom:.2,children:[e.grid?O(ep,{variant:Xf.Lines,gap:20,color:`var(--fb-grid)`}):null,O(lp,{showInteractive:!1})]})})}function L_(e){return!e.path.length||!e.userBlocks[e.path[e.path.length-1].type]?null:O(`div`,{className:`fb-instance`,children:O(If,{children:O(I_,{...e})},P_(e.path))})}function R_(e){let{path:t,userBlocks:n,block:r,debug:i}=e,a=t[t.length-1],o=n[a==null?void 0:a.type];if(!o)return null;let s=`${P_(t)}/`,c=e.online&&!!(i!=null&&i.inside),l;if(r){let t=Xm(r.type,n),a=new Set(o.graph.links.filter(e=>e.to[0]===r.id).map(e=>e.to[1])),u=t!=null&&t.user?{blockId:r.id,type:r.type,name:r.name}:null;l=I(V,{children:[I(g_,{id:`general`,title:L.t(`fbd_section_general`),children:[O($,{label:L.t(`fbd_name`),children:O(B,{variant:`body2`,children:r.name})}),O($,{label:L.t(`fbd_type`),children:O(B,{variant:`body2`,children:t!=null&&t.user?`${t.user.name} (v${t.user.version})`:`${r.type} - ${L.t(`fbd_desc_${r.type}`)}`})}),r.comment?O($,{label:L.t(`fbd_comment_field`),children:O(B,{variant:`body2`,children:r.comment})}):null,((t==null?void 0:t.params)||[]).map(e=>{var t;return O($,{label:L.t(`fbd_param_${e.id}`),children:O(B,{variant:`body2`,className:`fb-mono`,children:String(((t=r.params)==null?void 0:t[e.id])??e.default??``)})},e.id)}),ih(r,t).filter(e=>!a.has(e.id)).map(e=>O($,{label:`${e.id} (${e.type})`,children:O(B,{variant:`body2`,className:`fb-mono`,children:wg(e,r)})},e.id)),u?O(T,{size:`small`,onClick:()=>e.onEnter(u),title:L.t(`fbd_instance_open_hint`),children:L.t(`fbd_instance_open`)}):null]}),c&&i&&t?O(g_,{id:`online`,title:L.t(`fbd_online`),children:oh(r,t).map(t=>O(C_,{label:t.id,signal:`${s}${r.id}.${t.id}`,type:t.type,debug:i,onCommand:e.onCommand},t.id))}):null,t&&i_(r,t)?O(g_,{id:`preview`,title:L.t(`fbd_section_preview`),children:O(d_,{block:r,def:t})}):null]})}else l=O(g_,{id:`instance`,title:L.t(`fbd_instance`),children:O(B,{variant:`body2`,children:L.t(`fbd_instance_title`,a.name,o.name,o.version)})});return O(`div`,{className:`fb-properties`,children:I(`div`,{className:`fb-properties-content`,children:[l,O(`div`,{className:`fb-row-hint`,children:L.t(`fbd_instance_readonly`)}),e.online&&i&&!i.inside?O(B,{variant:`caption`,component:`div`,color:`warning`,sx:{mt:1},children:L.t(`fbd_instance_save_once`)}):null,O(T,{size:`small`,onClick:()=>e.onNavigate(t.length-1),sx:{mt:1},children:L.t(`fbd_instance_back`)})]})})}var z_=`FbEditor.clipboard`,B_=null;function V_(e,t,n){let r=e.filter(e=>e.selected);if(!r.length)return null;let i=new Set(r.map(e=>e.id)),a=sg(r,t.filter(e=>i.has(e.source)&&i.has(e.target)),{mode:`auto`,ms:0});B_={blocks:a.blocks,links:a.links,comments:a.comments};let o=Sh(a,n);if(o.length){let e={};o.forEach(t=>e[t]=n[t]),B_.userBlocks=e}try{window.localStorage.setItem(z_,JSON.stringify(B_))}catch{}return B_}function H_(){if(B_)return B_;try{let e=window.localStorage.getItem(z_);return e?JSON.parse(e):null}catch{return null}}function U_(e,t,n,r){let i=new Set(t.map(e=>e.id)),a=new Set(t.map(e=>e.type===`fbBlock`?e.data.block.name:``).filter(e=>e)),o=new Set(n.map(e=>e.id)),s=new Map,c=e.blocks.map(e=>{let t=ch(`b`,i);i.add(t),s.set(e.id,t);let n=e.name;return a.has(n)&&(n=ch(`${n.replace(/_\d+$/,``)}_`,a)),a.add(n),{...e,id:t,name:n,pos:[e.pos[0]+r,e.pos[1]+r]}}),l=e.comments.map(e=>{let t=ch(`c`,i);return i.add(t),{...e,id:t,pos:[e.pos[0]+r,e.pos[1]+r]}}),u=og({format:1,runtime:``,cycle:{mode:`auto`,ms:0},blocks:c,links:e.links.filter(e=>s.has(e.from[0])&&s.has(e.to[0])).map(e=>{let t=ch(`l`,o);return o.add(t),{...e,id:t,from:[s.get(e.from[0]),e.from[1]],to:[s.get(e.to[0]),e.to[1]]}}),comments:l});return{nodes:u.nodes.map(e=>({...e,selected:!0})),edges:u.edges}}function W_(e,t,n,r){return e.type!==`CONST`||n===`ANY`||sh(t,n)?null:r.every(e=>sh(n,e))?n:null}function G_(e,t){let n=e==null?``:String(e).trim();switch(t){case`BOOL`:return e===!0||/^(true|1|on|yes)$/i.test(n);case`STRING`:return n;case`INT`:{let t=Number(typeof e==`boolean`?e:n);return Number.isFinite(t)?Math.round(t):0}case`REAL`:{let t=Number(typeof e==`boolean`?e:n);return Number.isFinite(t)?t:0}default:return Og(n,`TIME`)??0}}function K_(e,t,n,r){let i=n.trim().toLowerCase();if(!i)return[];let a=e=>e!=null&&String(e).toLowerCase().includes(i),o=new Set;for(let t of e){var s;if(t.type===`fbComment`){a(t.data.text)&&o.add(t.id);continue}let{block:e}=t.data,n=(s=Xm(e.type,r))==null?void 0:s.user;[e.name,e.type,n==null?void 0:n.name,...Object.values(e.params||{})].some(a)&&o.add(t.id)}for(let e of t){var c;a((c=e.data)==null?void 0:c.label)&&(o.add(e.source),o.add(e.target))}return e.filter(e=>o.has(e.id)).sort((e,t)=>e.position.x-t.position.x||e.position.y-t.position.y).map(e=>e.id)}p();var q_={fbBlock:Mg,fbComment:Pg},J_={fbLink:zg},Y_={type:`fbLink`},X_=[`Delete`,`Backspace`],Z_=[10,10],Q_=300,$_=100,ev=40,tv=`FbEditor.online`,nv=600,rv={boolean:`BOOL`,number:`REAL`,string:`STRING`,json:`STRING`,object:`STRING`,array:`STRING`},iv=`FbEditor.grid`,av=`FbEditor.links`;function ov(e,t){try{return window.localStorage.getItem(e)??t}catch{return t}}function sv(e,t){try{window.localStorage.setItem(e,t)}catch{}}function cv(e,t){let n={};for(let[r,i]of Object.entries(e||{})){let e=i==null?void 0:i.common;if(r===t||(i==null?void 0:i.type)!==`script`||(e==null?void 0:e.engineType)!==`FBD`)continue;let a=dh(e==null?void 0:e.source),o=a&&bh(a);o&&(!n[o.type]||n[o.type].user.version<o.version)&&(n[o.type]={scriptId:r,user:o,userBlocks:a.userBlocks||{}})}return n}function lv(e,t,n,r,i,a){let o=sg(e,t,n);if(Object.keys(i).length&&(o.userBlocks=i),r){let e=JSON.stringify({...o,block:{...r,version:0}});o.block={...r,version:e===a.content?a.version:a.version+1}}return o}function uv(e){return JSON.stringify(e.block?{...e,block:{...e.block,version:0}}:e)}function dv(e){let t=e.args||[];return e.message===`Parameter "%s" is not set`?L.t(e.message,...t.map(e=>L.t(`fbd_param_${e}`))):L.t(e.message,...t)}function fv(){let{zoom:e}=Uf(),{zoomIn:t,zoomOut:n,zoomTo:r}=Nu();return I(`div`,{className:`fb-zoom`,children:[O(`button`,{type:`button`,className:`fb-tool`,title:L.t(`fbd_zoom_out`),onClick:()=>void n({duration:150}),children:O(Me,{})}),I(`button`,{type:`button`,className:`fb-zoom-value`,title:L.t(`fbd_zoom_reset`),onClick:()=>void r(1,{duration:150}),children:[Math.round(e*100),`%`]}),O(`button`,{type:`button`,className:`fb-tool`,title:L.t(`fbd_zoom_in`),onClick:()=>void t({duration:150}),children:O(P,{})})]})}function pv(e){let t=e.target;return!!t&&(t.isContentEditable||[`INPUT`,`TEXTAREA`,`SELECT`].includes(t.tagName)||!!t.closest(`[role="dialog"]`))}function mv(e){var t;let{onChange:n,themeType:r}=e,a=r===`dark`,o=_(()=>og(e.initial),[e.initial]),[s,c,l]=Wf(o.nodes),[d,f,p]=Gf(o.edges),[m,g]=N(e.initial.cycle),[v,y]=N(()=>jh(e.initial)),[b,C]=N(()=>vg(v,e.initial,a)),[w,T]=N(()=>{try{return window.localStorage.getItem(tv)===`true`}catch{return!1}}),[E,D]=N(null),[A,j]=N(null),[M,P]=N(null),[F,ee]=N(null),[R,z]=N([]),[te,H]=N(null),U=i(R);U.current=R;let ne=_(()=>new cg,[]),{screenToFlowPosition:re,getNode:W,getNodes:G,getEdges:K,deleteElements:oe,fitView:se}=Nu(),le=Vf(),ue=i(null),[de,fe]=N(e.initial.block),[q,pe]=N(e.initial.userBlocks||{}),me=_(()=>cv(e.scripts,e.scriptId),[e.scripts,e.scriptsHash,e.scriptId]),he=i(n);he.current=n;let ge=i(m);ge.current=m;let _e=i(de);_e.current=de;let ve=i(q),ye=x(e=>{ve.current=e,pe(e)},[]),[Se]=N(()=>{var t;let n=t=>lv(o.nodes,o.edges,e.initial.cycle,e.initial.block,e.initial.userBlocks||{},t),r={content:uv(n({content:``,version:0})),version:((t=e.initial.block)==null?void 0:t.version)||0};return{counting:r,json:JSON.stringify(n(r))}}),Ce=i(Se.counting),we=x(()=>lv(G(),K(),ge.current,_e.current,ve.current,Ce.current),[G,K]),Te=i(Se.json),[Ee,De]=N((t=e.initial.block)==null?void 0:t.version);S(()=>{if(!e.changed){var t;let e=JSON.parse(Te.current);Ce.current={content:uv(e),version:((t=e.block)==null?void 0:t.version)||0}}},[e.changed]);let Oe=i({past:[],future:[],restoring:!1}),Ae=i(0),je=x(e=>{var t;let n=JSON.stringify(e);if(n===Te.current)return;let r=Oe.current;r.restoring?r.restoring=!1:(r.past.push(Te.current),r.past.length>$_&&r.past.shift(),r.future=[]),Te.current=n,De((t=e.block)==null?void 0:t.version);let i=Uh(e);y(i.analysis),C(vg(i.analysis,e,a)),he.current(i.source)},[a]);S(()=>{let e=setTimeout(()=>je(lv(s,d,m,de,q,Ce.current)),Q_);return()=>clearTimeout(e)},[s,d,m,de,q,je]),S(()=>C(e=>({...e,background:a?`#141414`:`#ffffff`})),[a]);let Me=x(e=>{if(e===Te.current)return;let t=JSON.parse(e),n=og(t);Oe.current.restoring=!0,c(n.nodes),f(n.edges),g(t.cycle),fe(t.block),ye(t.userBlocks||{})},[c,f,ye]),Ne=x(()=>{if(U.current.length)return;je(we());let e=Oe.current.past.pop();e!==void 0&&(Oe.current.future.push(Te.current),Me(e))},[je,Me,we]),Fe=x(()=>{if(U.current.length)return;je(we());let e=Oe.current.future.pop();e!==void 0&&(Oe.current.past.push(Te.current),Me(e))},[je,Me,we]);u(e.apiRef,()=>({undo:Ne,redo:Fe}),[Ne,Fe]);let Ie=x(()=>(Ae.current=0,!!V_(G(),K(),ve.current)),[G,K]),Le=x(()=>{let e=H_();if(!e||!e.blocks.length&&!e.comments.length)return!1;e.userBlocks&&ye(xh(ve.current,e.userBlocks)),Ae.current++;let t=U_(e,G(),K(),ev*Ae.current);return c(e=>[...e.map(e=>e.selected?{...e,selected:!1}:e),...t.nodes]),f(e=>[...e.map(e=>e.selected?{...e,selected:!1}:e),...t.edges]),!0},[G,K,c,f,ye]);S(()=>{let e=e=>{if(!(e.ctrlKey||e.metaKey)||e.altKey||pv(e)||U.current.length)return;let t=e.key.toLowerCase();if(t===`z`&&!e.shiftKey)Ne();else if(t===`y`||t===`z`&&e.shiftKey)Fe();else if(t===`c`||t===`x`){var n;if((n=window.getSelection())!=null&&n.toString()||!Ie())return;t===`x`&&oe({nodes:G().filter(e=>e.selected),edges:K().filter(e=>e.selected)})}else if(t===`v`){if(!Le())return}else return;e.preventDefault()};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[Ne,Fe,Ie,Le,oe,G,K]);let[Re,ze]=N(null);S(()=>{if(!Re)return;let e=setTimeout(()=>ze(null),4e3);return()=>clearTimeout(e)},[Re]);let Be=x((e,t,n,r)=>{let i=W(e),a=W(n);if((i==null?void 0:i.type)!==`fbBlock`||(a==null?void 0:a.type)!==`fbBlock`)return null;let o=e=>Xm(e.type,ve.current),s=e=>{let t=W(e.target);return(t==null?void 0:t.type)===`fbBlock`?ih(t.data.block,o(t.data.block)).find(t=>t.id===e.targetHandle):void 0},c=oh(i.data.block,o(i.data.block)).find(e=>e.id===t),l=ih(a.data.block,o(a.data.block)).find(e=>e.id===r);if(!c||!l)return null;let u=K().filter(n=>n.source===e&&n.sourceHandle===t).map(e=>{var t;return((t=s(e))==null?void 0:t.type)||`ANY`});return{source:i.data.block,target:a.data.block,output:c,input:l,retype:W_(i.data.block,c.type,l.type,u)}},[W,K]),Ve=x(e=>{let t=Be(e.source,e.sourceHandle,e.target,e.targetHandle);return!t||!sh(t.output.type,t.input.type)&&!t.retype?!1:!K().some(t=>t.target===e.target&&t.targetHandle===e.targetHandle)},[Be,K]),He=x(e=>{let t=Be(e.source,e.sourceHandle,e.target,e.targetHandle);if(t!=null&&t.retype){var n;let{source:e,retype:r}=t,i=G_((n=e.params)==null?void 0:n.value,r),a={...e,params:{...e.params,type:r,value:i}};c(t=>t.map(t=>t.id===e.id&&t.type===`fbBlock`?{...t,data:{block:a}}:t)),ze({text:L.t(`fbd_link_const_retyped`,e.name,r,wg({id:`value`,type:r},a)),warning:!1})}f(t=>Su({...e,id:ch(`l`,t.map(e=>e.id)),type:`fbLink`},t))},[Be,c,f]),Ue=x((e,t)=>{if(t.isValid!==!1||!t.fromHandle||!t.toHandle)return;let[n,r]=t.fromHandle.type===`source`?[t.fromHandle,t.toHandle]:[t.toHandle,t.fromHandle];if(n.type!==`source`||r.type!==`target`)return;let i=Be(n.nodeId,n.id,r.nodeId,r.id);if(!i)return;let{source:a,target:o,output:s,input:c}=i,l=`${o.name}.${c.id}`,u;u=sh(s.type,c.type)||i.retype?L.t(`fbd_link_refused_taken`,l):a.type===`CONST`&&c.type!==`ANY`?L.t(`fbd_link_refused_const`,a.name,c.type,l):L.t(`fbd_link_refused_type`,s.type,c.type,l),ze({text:u,warning:!0})},[Be]),We=x((e,t)=>{let n=F_(t,ve.current);n&&(z([n]),H(null))},[]),Ge=x((e,t)=>{let n=ve.current;if(e.startsWith(`@userFb/`)&&!n[e]){let t=me[e];if(!t)return;n=xh(n,{...t.userBlocks,[e]:t.user}),ye(n)}c(r=>{let i=Math.round(t.x/10)*10,a=Math.round(t.y/10)*10;for(;r.some(e=>Math.abs(e.position.x-i)<20&&Math.abs(e.position.y-a)<20);)i+=30,a+=30;let o=r.map(e=>e.selected?{...e,selected:!1}:e);if(e===`comment`)return[{id:ch(`c`,r.map(e=>e.id)),type:`fbComment`,position:{x:i,y:a},width:ag[0],height:ag[1],zIndex:-1,selected:!0,data:{text:L.t(`fbd_comment`)}},...o];if(!Xm(e,n))return r;let s={...sg(r,[],ge.current),userBlocks:n},c=lh(e,[i,a],s);return[...o,{id:c.id,type:`fbBlock`,position:{x:i,y:a},selected:!0,data:{block:c}}]})},[c,ye,me]),Ke=x(e=>{let t=me[e];if(!t)return;let n=xh(ve.current,{...t.userBlocks,[e]:t.user},[e]);ye(n);let r=Xm(e,n),i=new Set(r.inputs.map(e=>e.id)),a=new Set(r.outputs.map(e=>e.id)),o=new Set(G().filter(t=>t.type===`fbBlock`&&t.data.block.type===e).map(e=>e.id));f(e=>e.filter(e=>!(o.has(e.target)&&!i.has(e.targetHandle||``))&&!(o.has(e.source)&&!a.has(e.sourceHandle||``)))),requestAnimationFrame(()=>o.forEach(e=>le(e)))},[me,ye,G,f,le]),J=_(()=>Object.values(q).filter(e=>me[e.type]&&me[e.type].user.version>e.version&&s.some(t=>t.type===`fbBlock`&&t.data.block.type===e.type)),[q,me,s]),qe=_(()=>Object.values(me).filter(e=>!de||e.user.type!==de.type&&!Ch(e.user.type,de.type,{...e.userBlocks,[e.user.type]:e.user})).map(e=>e.user).sort((e,t)=>e.name.localeCompare(t.name)),[me,de]),Je=x(e=>{var t;let n=(t=ue.current)==null?void 0:t.getBoundingClientRect(),r=n?re({x:n.left+n.width/2-60,y:n.top+n.height/3}):{x:0,y:0};Ge(e,r)},[Ge,re]),Ye=x(e=>{let t=e.dataTransfer.getData(Hg);t&&(e.preventDefault(),Ge(t,re({x:e.clientX,y:e.clientY})))},[Ge,re]),Xe=x(e=>{e.dataTransfer.types.includes(`application/x-iobroker-fbd`)&&(e.preventDefault(),e.dataTransfer.dropEffect=`move`)},[]),Ze=i(new Map);S(()=>{let e=Ze.current;return()=>e.forEach(e=>clearTimeout(e))},[]);let Qe=x((t,n)=>{clearTimeout(Ze.current.get(t)),Ze.current.set(t,setTimeout(()=>{Ze.current.delete(t),e.socket.getObject(n).then(e=>{var r,i,a,o;let s=W(t);if((e==null?void 0:e.type)!==`state`||(s==null?void 0:s.type)!==`fbBlock`||((r=s.data.block.params)==null?void 0:r.oid)!==n)return;let l=s.data.block,u=e.common,d={...l,params:{...l.params}},f=u!=null&&u.type?rv[u.type]:void 0;l.type===`STATE_IN`&&f&&((i=l.params)==null?void 0:i.type)!==f&&(d.params.type=f),RegExp(`^${l.type}_\\d+$`).test(l.name)&&(d.name=n.split(`.`).pop()||l.name),(d.params.type!==((a=l.params)==null?void 0:a.type)||d.name!==l.name)&&(c(e=>e.map(e=>e.id===t&&e.type===`fbBlock`?{...e,data:{block:d}}:e)),requestAnimationFrame(()=>le(t)),d.params.type!==((o=l.params)==null?void 0:o.type)&&ze({text:L.t(`fbd_state_type_taken`,d.name,String(d.params.type)),warning:!1}))}).catch(()=>{})},nv))},[e.socket,W,c,le]),$e=x(e=>{var t,n;let r=W(e.id),i=(t=e.params)==null?void 0:t.oid;typeof i==`string`&&i&&(r==null?void 0:r.type)===`fbBlock`&&((n=r.data.block.params)==null?void 0:n.oid)!==i&&Qe(e.id,i),c(t=>t.map(t=>t.id===e.id&&t.type===`fbBlock`?{...t,data:{block:e}}:t));let a=new Set(ih(e,Xm(e.type,ve.current)).map(e=>e.id));f(t=>t.filter(t=>t.target!==e.id||a.has(t.targetHandle||``))),requestAnimationFrame(()=>le(e.id))},[W,Qe,c,f,le]),et=x((e,t)=>c(n=>n.map(n=>n.id===e&&n.type===`fbComment`?{...n,data:{text:t}}:n)),[c]),tt=s.filter(e=>e.selected),nt=tt.length===1?tt[0]:null,rt=tt.length?null:d.find(e=>e.selected)||null,it=_(()=>new Set(nt?d.filter(e=>e.target===nt.id).map(e=>e.targetHandle||``):[]),[d,nt]),at=x(()=>{oe({nodes:s.filter(e=>e.selected),edges:d.filter(e=>e.selected)})},[oe,s,d]),ot=x(e=>{e.length&&(c(t=>t.map(t=>({...t,selected:e.includes(t.id)}))),se({nodes:e.map(e=>({id:e})),maxZoom:1.5,duration:300}))},[c,se]),st=x(()=>{T(e=>{try{window.localStorage.setItem(tv,String(!e))}catch{}return!e})},[]),[ct,lt]=N(()=>ov(iv,`true`)===`true`),[ut,dt]=N(()=>ov(av,`curved`)===`orthogonal`?`orthogonal`:`curved`),ft=x(()=>{lt(e=>(sv(iv,String(!e)),!e))},[]),pt=x(()=>{dt(e=>{let t=e===`curved`?`orthogonal`:`curved`;return sv(av,t),t})},[]),[mt,ht]=N(0),gt=x(t=>{pg(e.socket,e.instance,e.scriptId,t).then(e=>{j(e),P(null)}).catch(e=>P(L.t(e.message)))},[e.socket,e.instance,e.scriptId]);S(()=>{if(!M)return;let e=setTimeout(()=>P(null),5e3);return()=>clearTimeout(e)},[M]);let _t=w&&!de&&e.running&&!!A,vt=i({debug:A,steerable:_t});vt.current={debug:A,steerable:_t};let yt=x(e=>{var t;return gt({command:`breakpoint`,block:e,on:!((t=vt.current.debug)!=null&&t.breakpoints.includes(e))})},[gt]),bt=_(()=>_t&&A?{enabled:A.breaks,breakpoints:new Set(A.breakpoints),at:A.paused&&A.at||null,forced:new Set(Object.keys(A.forced)),toggleBreakpoint:yt}:_g,[_t,A,yt]),xt=x(e=>{let t=W(e);return(t==null?void 0:t.type)===`fbBlock`?t.data.block.name:e},[W]),St=i(!1),Ct=x(()=>{let e={};for(let n of G()){var t;n.type===`fbBlock`&&(t=n.measured)!=null&&t.width&&n.measured.height&&(e[n.id]={width:n.measured.width,height:n.measured.height})}let n=$h(we(),{sizes:e,metrics:Sg});St.current=!0,c(e=>e.map(e=>{let t=n[e.id];return t?{...e,position:{x:t[0],y:t[1]}}:e}))},[G,we,c]);S(()=>{St.current&&(St.current=!1,se({maxZoom:1.2,duration:300}))},[s,se]);let wt=x(()=>ee(e=>({text:(e==null?void 0:e.text)||``,index:(e==null?void 0:e.index)||0,focus:((e==null?void 0:e.focus)||0)+1})),[]),Tt=x((e,t)=>{let n=K_(G(),K(),e,ve.current);if(!n.length)return 0;let r=(t%n.length+n.length)%n.length;return ot([n[r]]),r},[G,K,ot]),Et=x(e=>{let t=Tt(e,0);ee(n=>n&&{...n,text:e,index:t})},[Tt]),Dt=x(e=>{F&&ee({...F,index:Tt(F.text,F.index+e)})},[F,Tt]),Ot=_(()=>F?K_(s,d,F.text,q).length:0,[F,s,d,q]),kt=x(e=>{z([{blockId:e.id,type:e.type,name:e.name}]),H(null)},[]),At=x(e=>{z(t=>[...t,e]),H(null)},[]),jt=x(e=>{z(t=>t.slice(0,e)),H(null)},[]);S(()=>{(R.length&&!s.some(e=>e.id===R[0].blockId&&e.type===`fbBlock`&&e.data.block.type===R[0].type)||R.some(e=>!q[e.type]))&&jt(0)},[R,s,q,jt]),S(()=>{let e=e=>{if(e.key===`Escape`&&U.current.length&&!pv(e)){jt(U.current.length-1);return}if(e.ctrlKey||e.metaKey||e.altKey||!/^F(8|9|10)$/.test(e.key)){if((e.ctrlKey||e.metaKey)&&!e.altKey&&e.key.toLowerCase()===`f`&&!U.current.length){var t,n;(t=e.target)!=null&&(n=t.closest)!=null&&n.call(t,`[role="dialog"]`)||(e.preventDefault(),wt())}return}if(vt.current.steerable&&!pv(e)){if(e.preventDefault(),e.key===`F8`){var r;gt({command:(r=vt.current.debug)!=null&&r.paused?`resume`:`pause`})}else e.key===`F10`?gt({command:`step`}):U.current.length||G().filter(e=>e.selected&&e.type===`fbBlock`).forEach(e=>yt(e.id))}};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[wt,gt,yt,G,jt]);let Mt=x(e=>f(t=>t.map(t=>t.id===e.id?{...t,data:e.data}:t)),[f]),Nt=x((e,t)=>{var n;if(!((n=t.data)!=null&&n.mark))return;let r=re({x:e.clientX,y:e.clientY}),i=W(t.source),a=W(t.target);if(!i||!a)return;let o=e=>{var t,n;return Math.hypot(e.position.x+(((t=e.measured)==null?void 0:t.width)||0)/2-r.x,e.position.y+(((n=e.measured)==null?void 0:n.height)||0)/2-r.y)};ot([o(i)<o(a)?a.id:i.id])},[re,W,ot]),Pt=_(()=>{if(!rt)return null;let e=(e,t)=>{let n=s.find(t=>t.id===e);return`${(n==null?void 0:n.type)===`fbBlock`?n.data.block.name:e}.${t||``}`},t=b.links[rt.id];return{type:(t==null?void 0:t.type)||`ANY`,name:(t==null?void 0:t.name)||``,from:e(rt.source,rt.sourceHandle),to:e(rt.target,rt.targetHandle)}},[rt,s,b.links]),Ft=x(e=>{c(t=>t.map(t=>!!t.selected==(t.id===e)?t:{...t,selected:t.id===e})),f(e=>e.map(e=>e.selected?{...e,selected:!1}:e)),ht(e=>e+1)},[c,f]),It=x(e=>{let t=W(e);if((t==null?void 0:t.type)!==`fbBlock`)return;let n=U_({blocks:[{...t.data.block,pos:[t.position.x,t.position.y]}],links:[],comments:[]},G(),K(),30);c(e=>[...e.map(e=>e.selected?{...e,selected:!1}:e),...n.nodes])},[W,G,K,c]),Lt=_(()=>({change:$e,select:Ft,duplicate:It,remove:e=>void oe({nodes:[{id:e}]}),openInstance:e=>{let t=W(e);(t==null?void 0:t.type)===`fbBlock`&&kt(t.data.block)}}),[$e,Ft,It,oe,W,kt]),Rt=_(()=>s.filter(e=>e.type===`fbBlock`&&(e.data.block.type===`STATE_IN`||e.data.block.type===`STATE_OUT`)).map(e=>{var t;let n=e.data.block;return{blockId:n.id,name:n.name,oid:String(((t=n.params)==null?void 0:t.oid)||``),direction:n.type===`STATE_IN`?`in`:`out`}}).sort((e,t)=>e.name.localeCompare(t.name)),[s]),zt=_(()=>({...b,runtimeError:E,userBlocks:q,debug:bt,actions:Lt,linkStyle:ut}),[b,E,q,bt,Lt,ut]);return O(lg.Provider,{value:ne,children:O(yg.Provider,{value:zt,children:I(`div`,{className:`fb-editor fb-theme-${a?`dark`:`light`}`,children:[O(Wg,{onAdd:Je,isBlock:!!de,userBlocks:qe,variables:Rt,onShowVariable:e=>ot([e])}),I(`div`,{className:`fb-main`,children:[I(`div`,{className:`fb-toolbar`,children:[I(`div`,{className:`fb-toolbar-path`,children:[I(`button`,{type:`button`,className:`fb-toolbar-step${R.length?``:` fb-toolbar-step-active`}`,onClick:()=>jt(0),children:[O(Pe,{}),e.scriptName]}),R.map((e,t)=>{var n;return I(k.Fragment,{children:[O(ae,{className:`fb-toolbar-separator`}),I(`button`,{type:`button`,className:`fb-toolbar-step${t===R.length-1?` fb-toolbar-step-active`:``}`,onClick:()=>jt(t+1),title:(n=q[e.type])==null?void 0:n.name,children:[O(ng,{type:e.type}),e.name]})]},e.blockId)})]}),I(`div`,{className:`fb-toolbar-tools`,children:[R.length?null:O(fv,{}),O(`span`,{className:`fb-toolbar-gap`}),O(`button`,{type:`button`,className:`fb-tool`,title:L.t(`fbd_layout`),disabled:!s.length||!!R.length,onClick:Ct,children:O(ie,{})}),O(`button`,{type:`button`,className:`fb-tool`,title:L.t(`fbd_find`),disabled:!!R.length,onClick:wt,children:O(ce,{})}),O(`button`,{type:`button`,className:`fb-tool${ct?` fb-tool-active`:``}`,title:L.t(`fbd_grid`),onClick:ft,children:O(xe,{})}),O(`button`,{type:`button`,className:`fb-tool`,title:L.t(ut===`curved`?`fbd_links_orthogonal`:`fbd_links_curved`),onClick:pt,children:O(ut===`curved`?be:ke,{})}),de?null:I(V,{children:[O(`span`,{className:`fb-toolbar-gap`}),O(Vg,{active:w,onToggle:st,socket:e.socket,instance:e.instance,scriptId:e.scriptId,path:P_(R),running:e.running,changed:e.changed,onError:D,debug:A,onDebug:j,onCommand:gt,commandError:M,nameOf:xt})]})]})]}),I(`div`,{className:`fb-canvas`,ref:ue,children:[I(Bf,{nodes:s,edges:d,nodeTypes:q_,edgeTypes:J_,defaultEdgeOptions:Y_,onNodesChange:l,onEdgesChange:p,onConnect:He,onConnectEnd:Ue,onEdgeDoubleClick:Nt,onNodeDoubleClick:We,isValidConnection:Ve,onDrop:Ye,onDragOver:Xe,connectionLineType:ut===`curved`?zo.Bezier:zo.Step,deleteKeyCode:X_,snapToGrid:ct,snapGrid:Z_,colorMode:a?`dark`:`light`,fitView:!0,fitViewOptions:{maxZoom:1.2},minZoom:.2,children:[ct?O(ep,{variant:Xf.Lines,gap:20,color:`var(--fb-grid)`}):null,O(lp,{showInteractive:!1}),F?O(Gl,{position:`top-center`,children:O(j_,{text:F.text,onText:Et,count:Ot,index:Math.min(F.index,Math.max(Ot-1,0)),onMove:Dt,onClose:()=>ee(null),focusKey:F.focus})}):null,O(Ep,{position:`bottom-right`,style:{width:150,height:90},pannable:!0,zoomable:!0,bgColor:`var(--fb-panel)`,maskColor:`var(--fb-mask)`,nodeColor:e=>{var t;return e.type===`fbBlock`?ig[((t=Xm(e.data.block.type,ve.current))==null?void 0:t.category)||`logic`]:`#9e9e9e`}}),v.issues.length||E||J.length?O(Gl,{position:`bottom-center`,children:I(h,{className:`fb-issues`,children:[E?O(B,{variant:`body2`,color:`error`,className:`fb-issue`,onClick:()=>ot(E.blockId?[E.blockId]:[]),children:L.t(`fbd_runtime_error`,E.message)}):null,v.issues.map((e,t)=>O(B,{variant:`body2`,color:e.severity===`error`?`error`:`warning`,className:`fb-issue`,onClick:()=>ot(e.blockIds||(e.blockId?[e.blockId]:[])),children:dv(e)},t)),J.map(e=>O(B,{variant:`body2`,color:`warning`,className:`fb-issue`,onClick:()=>ot(s.filter(t=>t.type===`fbBlock`&&t.data.block.type===e.type).map(e=>e.id)),children:L.t(`fbd_block_outdated`,e.name,me[e.type].user.version,e.version)},e.type))]})}):null,Re?O(Gl,{position:`top-center`,children:O(h,{className:`fb-refused`,children:O(B,{variant:`body2`,color:Re.warning?`warning`:`info`,children:Re.text})})}):null,s.length?null:O(Gl,{position:`top-center`,children:O(B,{variant:`body2`,className:`fb-hint`,children:L.t(`fbd_empty_hint`)})})]}),O(L_,{path:R,userBlocks:q,dark:a,forced:bt.forced,grid:ct,linkStyle:ut,onEnter:At,onSelect:H})]})]}),R.length?O(R_,{path:R,userBlocks:q,block:te,online:_t,debug:A,onCommand:gt,onEnter:At,onNavigate:jt}):O(k_,{node:nt,edge:rt,connectedInputs:it,cycle:m,mode:v.mode,onCycleChange:g,onBlockChange:$e,onCommentChange:et,onDelete:at,blockInfo:de&&{...de,version:Ee??de.version},onBlockInfoChange:fe,scriptName:e.scriptName,userBlocks:q,library:me,onUpdateUserBlock:Ke,onOpenScript:e.onOpenScript,onOpenInstance:kt,showProperties:mt,edgeView:Pt,onEdgeChange:Mt,online:_t,debug:A,onCommand:gt,socket:e.socket,theme:e.theme,themeName:e.themeName,themeType:r})]})})})}function hv({ref:e,...t}){let{onChange:n}=t,r=i(null),[a,o]=N(()=>({code:t.code,graph:dh(t.code),key:0}));S(()=>{t.code!==(r.current??a.code)&&(r.current=null,o(e=>({code:t.code,graph:dh(t.code),key:e.key+1})))},[t.code,a.code]);let s=x(e=>{r.current=e,n(e)},[n]);return a.graph?O(If,{children:O(mv,{...t,apiRef:e,initial:a.graph,onChange:s})},a.key):O(h,{sx:{p:2},children:O(B,{color:`error`,children:L.t(`fbd_no_diagram`)})})}export{hv as default};