@synnaxlabs/pluto 0.12.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (290) hide show
  1. package/dist/Center-8mBjm1cO.js +126 -0
  2. package/dist/{Center-gEKkAkdh.js.map → Center-8mBjm1cO.js.map} +1 -1
  3. package/dist/Center-ER_owvfX.cjs +2 -0
  4. package/dist/{Center-ZAcURh-3.cjs.map → Center-ER_owvfX.cjs.map} +1 -1
  5. package/dist/Header-9CR1VnwV.js +34 -0
  6. package/dist/{Header-7x6367IV.js.map → Header-9CR1VnwV.js.map} +1 -1
  7. package/dist/Header-PpcdP7hn.cjs +2 -0
  8. package/dist/{Header-5YX6FUn6.cjs.map → Header-PpcdP7hn.cjs.map} +1 -1
  9. package/dist/Item--h4UWJZo.js +80 -0
  10. package/dist/{Item-owLU4Xop.js.map → Item--h4UWJZo.js.map} +1 -1
  11. package/dist/Item-EBiM5yGJ.cjs +2 -0
  12. package/dist/{Item-HWzX7RK2.cjs.map → Item-EBiM5yGJ.cjs.map} +1 -1
  13. package/dist/Item-_og4CdwZ.cjs +2 -0
  14. package/dist/{Item-rkSKzZoh.cjs.map → Item-_og4CdwZ.cjs.map} +1 -1
  15. package/dist/Item-kbCoFEj2.js +137 -0
  16. package/dist/{Item-EDdYN2NK.js.map → Item-kbCoFEj2.js.map} +1 -1
  17. package/dist/Keyboard-IWRXgioJ.js +14 -0
  18. package/dist/{Keyboard-mE03PKwA.js.map → Keyboard-IWRXgioJ.js.map} +1 -1
  19. package/dist/Keyboard-bXNOi0bP.cjs +2 -0
  20. package/dist/{Keyboard-w372197S.cjs.map → Keyboard-bXNOi0bP.cjs.map} +1 -1
  21. package/dist/Link-16dbGK7G.cjs +2 -0
  22. package/dist/{Link-xlTZan29.cjs.map → Link-16dbGK7G.cjs.map} +1 -1
  23. package/dist/Link-fRQvqiYx.js +11 -0
  24. package/dist/{Link-laNlv47N.js.map → Link-fRQvqiYx.js.map} +1 -1
  25. package/dist/SelectLevel-DrdlLBOs.cjs +2 -0
  26. package/dist/{SelectLevel-bGb0dRXh.cjs.map → SelectLevel-DrdlLBOs.cjs.map} +1 -1
  27. package/dist/SelectLevel-Uod3Ez6y.js +121 -0
  28. package/dist/{SelectLevel-cewIWtOv.js.map → SelectLevel-Uod3Ez6y.js.map} +1 -1
  29. package/dist/Selector-8rTHUToj.cjs +2 -0
  30. package/dist/{Selector-hQLSIYum.cjs.map → Selector-8rTHUToj.cjs.map} +1 -1
  31. package/dist/Selector-R4SumEUV.js +233 -0
  32. package/dist/{Selector-R3lL41_i.js.map → Selector-R4SumEUV.js.map} +1 -1
  33. package/dist/Swatch--Prmb5q_.cjs +2 -0
  34. package/dist/Swatch--Prmb5q_.cjs.map +1 -0
  35. package/dist/Swatch-IH4OmVdd.js +82 -0
  36. package/dist/Swatch-IH4OmVdd.js.map +1 -0
  37. package/dist/TimeRangeChip-jI9Nn9z8.js +7384 -0
  38. package/dist/TimeRangeChip-jI9Nn9z8.js.map +1 -0
  39. package/dist/TimeRangeChip-jQH9NacG.cjs +50 -0
  40. package/dist/TimeRangeChip-jQH9NacG.cjs.map +1 -0
  41. package/dist/Toggle-HVxv8bv2.js +10648 -0
  42. package/dist/Toggle-HVxv8bv2.js.map +1 -0
  43. package/dist/Toggle-QnKinMl4.cjs +73 -0
  44. package/dist/Toggle-QnKinMl4.cjs.map +1 -0
  45. package/dist/Video-iiPAk_ej.cjs +2 -0
  46. package/dist/{Video-a7BUKvzF.cjs.map → Video-iiPAk_ej.cjs.map} +1 -1
  47. package/dist/Video-vyIORMaH.js +11 -0
  48. package/dist/{Video-Vpwp5ao1.js.map → Video-vyIORMaH.js.map} +1 -1
  49. package/dist/aether.cjs +1 -89
  50. package/dist/aether.cjs.map +1 -1
  51. package/dist/aether.js +76 -80
  52. package/dist/aether.js.map +1 -1
  53. package/dist/align.cjs +1 -9
  54. package/dist/align.cjs.map +1 -1
  55. package/dist/align.js +5 -5
  56. package/dist/button.cjs +1 -14
  57. package/dist/button.cjs.map +1 -1
  58. package/dist/button.js +9 -8
  59. package/dist/button.js.map +1 -1
  60. package/dist/color-9QRifwqk.js +9 -0
  61. package/dist/color-9QRifwqk.js.map +1 -0
  62. package/dist/color-gJTR__ef.cjs +2 -0
  63. package/dist/color-gJTR__ef.cjs.map +1 -0
  64. package/dist/color.cjs +2 -0
  65. package/dist/color.cjs.map +1 -0
  66. package/dist/color.js +16 -0
  67. package/dist/color.js.map +1 -0
  68. package/dist/component-LA8IXGSG.js +17961 -0
  69. package/dist/component-LA8IXGSG.js.map +1 -0
  70. package/dist/component-dgLAEMbt.cjs +23 -0
  71. package/dist/component-dgLAEMbt.cjs.map +1 -0
  72. package/dist/css-5RvvUhjr.js +6414 -0
  73. package/dist/{css-NTD4Xm8x.js.map → css-5RvvUhjr.js.map} +1 -1
  74. package/dist/css-s9KpanYu.cjs +8 -0
  75. package/dist/{css-V3VUT_Js.cjs.map → css-s9KpanYu.cjs.map} +1 -1
  76. package/dist/css.cjs +2 -0
  77. package/dist/css.cjs.map +1 -0
  78. package/dist/css.js +10 -0
  79. package/dist/css.js.map +1 -0
  80. package/dist/dimensions--C45ahLe.js +20 -0
  81. package/dist/{dimensions-guJ5PHmb.js.map → dimensions--C45ahLe.js.map} +1 -1
  82. package/dist/dimensions-HfZjDJQz.cjs +2 -0
  83. package/dist/{dimensions-Sej0Zly9.cjs.map → dimensions-HfZjDJQz.cjs.map} +1 -1
  84. package/dist/dropdown.cjs +1 -12
  85. package/dist/dropdown.cjs.map +1 -1
  86. package/dist/dropdown.js +7 -6
  87. package/dist/dropdown.js.map +1 -1
  88. package/dist/external--jsfNkbo.cjs +2 -0
  89. package/dist/external--jsfNkbo.cjs.map +1 -0
  90. package/dist/external-1DGLK9F2.js +17 -0
  91. package/dist/external-1DGLK9F2.js.map +1 -0
  92. package/dist/external-4h9H4Y_N.js +21 -0
  93. package/dist/external-4h9H4Y_N.js.map +1 -0
  94. package/dist/external-4uqucf0m.js +67 -0
  95. package/dist/{external-QuVTCnGl.js.map → external-4uqucf0m.js.map} +1 -1
  96. package/dist/external-A_eQgT5T.cjs +2 -0
  97. package/dist/external-A_eQgT5T.cjs.map +1 -0
  98. package/dist/external-FCO_hdNr.js +24 -0
  99. package/dist/external-FCO_hdNr.js.map +1 -0
  100. package/dist/external-HZ6f2KvU.cjs +2 -0
  101. package/dist/external-HZ6f2KvU.cjs.map +1 -0
  102. package/dist/external-LPdjowBG.cjs +2 -0
  103. package/dist/external-LPdjowBG.cjs.map +1 -0
  104. package/dist/external-O1b3FJKI.cjs +2 -0
  105. package/dist/external-O1b3FJKI.cjs.map +1 -0
  106. package/dist/external-RGdrJX7y.cjs +2 -0
  107. package/dist/{external-9Ncn2J9B.cjs.map → external-RGdrJX7y.cjs.map} +1 -1
  108. package/dist/external-WiHGqQPA.js +30 -0
  109. package/dist/external-WiHGqQPA.js.map +1 -0
  110. package/dist/external-eWu6hCLU.cjs +2 -0
  111. package/dist/external-eWu6hCLU.cjs.map +1 -0
  112. package/dist/external-kvAz85mu.js +18 -0
  113. package/dist/external-kvAz85mu.js.map +1 -0
  114. package/dist/external-mpVdVPF1.js +88 -0
  115. package/dist/external-mpVdVPF1.js.map +1 -0
  116. package/dist/external-nTDD8IMd.cjs +2 -0
  117. package/dist/external-nTDD8IMd.cjs.map +1 -0
  118. package/dist/external-phknItOL.js +15 -0
  119. package/dist/external-phknItOL.js.map +1 -0
  120. package/dist/external-rGcWjp84.cjs +2 -0
  121. package/dist/{external-zBiIxeDG.cjs.map → external-rGcWjp84.cjs.map} +1 -1
  122. package/dist/external-r_2-tYfC.js +88 -0
  123. package/dist/{external-up1sE3F6.js.map → external-r_2-tYfC.js.map} +1 -1
  124. package/dist/external-sHbzLUrP.js +17 -0
  125. package/dist/external-sHbzLUrP.js.map +1 -0
  126. package/dist/external-tZiYBM94.cjs +2 -0
  127. package/dist/external-tZiYBM94.cjs.map +1 -0
  128. package/dist/external-tnCo64yx.cjs +2 -0
  129. package/dist/external-tnCo64yx.cjs.map +1 -0
  130. package/dist/external-uR-7_68y.js +16 -0
  131. package/dist/external-uR-7_68y.js.map +1 -0
  132. package/dist/external-uSIsCKNG.js +15 -0
  133. package/dist/external-uSIsCKNG.js.map +1 -0
  134. package/dist/external-z6BLlxur.cjs +2 -0
  135. package/dist/external-z6BLlxur.cjs.map +1 -0
  136. package/dist/font-HpLrwPSD.js +16 -0
  137. package/dist/{font-t7KoGNFX.js.map → font-HpLrwPSD.js.map} +1 -1
  138. package/dist/font-yosRgv9n.cjs +2 -0
  139. package/dist/{font-wlgaMRYN.cjs.map → font-yosRgv9n.cjs.map} +1 -1
  140. package/dist/fontString-_dtZSiPk.cjs +2 -0
  141. package/dist/{fontString-i24UxKCQ.cjs.map → fontString-_dtZSiPk.cjs.map} +1 -1
  142. package/dist/fontString-lodjYTYz.js +12 -0
  143. package/dist/{fontString-RKvYIr5H.js.map → fontString-lodjYTYz.js.map} +1 -1
  144. package/dist/header.cjs +1 -14
  145. package/dist/header.cjs.map +1 -1
  146. package/dist/header.js +9 -8
  147. package/dist/header.js.map +1 -1
  148. package/dist/index.cjs +1 -1174
  149. package/dist/index.cjs.map +1 -1
  150. package/dist/index.js +737 -930
  151. package/dist/index.js.map +1 -1
  152. package/dist/input/Input.stories.d.ts +1 -0
  153. package/dist/input/TextArea.d.ts +20 -0
  154. package/dist/input/external.d.ts +1 -0
  155. package/dist/input/types.d.ts +4 -2
  156. package/dist/input.cjs +1 -14
  157. package/dist/input.cjs.map +1 -1
  158. package/dist/input.js +9 -8
  159. package/dist/input.js.map +1 -1
  160. package/dist/jsx-runtime-NmMXPjeo.js +632 -0
  161. package/dist/{jsx-runtime-rX5tAIG2.js.map → jsx-runtime-NmMXPjeo.js.map} +1 -1
  162. package/dist/jsx-runtime-evvPGacs.cjs +28 -0
  163. package/dist/{jsx-runtime-N1ikfypN.cjs.map → jsx-runtime-evvPGacs.cjs.map} +1 -1
  164. package/dist/list.cjs +1 -26
  165. package/dist/list.cjs.map +1 -1
  166. package/dist/list.js +21 -19
  167. package/dist/list.js.map +1 -1
  168. package/dist/menu.cjs +1 -15
  169. package/dist/menu.cjs.map +1 -1
  170. package/dist/menu.js +10 -9
  171. package/dist/menu.js.map +1 -1
  172. package/dist/style.css +1 -3119
  173. package/dist/table-MJysJcCC.js +10312 -0
  174. package/dist/table-MJysJcCC.js.map +1 -0
  175. package/dist/table-NIrLpFOm.cjs +69 -0
  176. package/dist/table-NIrLpFOm.cjs.map +1 -0
  177. package/dist/tabs.cjs +1 -14
  178. package/dist/tabs.cjs.map +1 -1
  179. package/dist/tabs.js +9 -8
  180. package/dist/tabs.js.map +1 -1
  181. package/dist/text.cjs +1 -16
  182. package/dist/text.cjs.map +1 -1
  183. package/dist/text.js +11 -10
  184. package/dist/text.js.map +1 -1
  185. package/dist/theming.cjs +1 -15
  186. package/dist/theming.cjs.map +1 -1
  187. package/dist/theming.js +10 -9
  188. package/dist/theming.js.map +1 -1
  189. package/dist/tree.cjs +1 -25
  190. package/dist/tree.cjs.map +1 -1
  191. package/dist/tree.js +20 -18
  192. package/dist/tree.js.map +1 -1
  193. package/dist/triggers.cjs +1 -15
  194. package/dist/triggers.cjs.map +1 -1
  195. package/dist/triggers.js +10 -9
  196. package/dist/triggers.js.map +1 -1
  197. package/dist/useDrag-4o21IpGy.js +36 -0
  198. package/dist/{useDrag-rQt5hv4R.js.map → useDrag-4o21IpGy.js.map} +1 -1
  199. package/dist/useDrag-l_moa7e3.cjs +2 -0
  200. package/dist/{useDrag-KRQ7DTg1.cjs.map → useDrag-l_moa7e3.cjs.map} +1 -1
  201. package/dist/video.cjs +1 -9
  202. package/dist/video.cjs.map +1 -1
  203. package/dist/video.js +3 -3
  204. package/package.json +61 -51
  205. package/dist/Center-ZAcURh-3.cjs +0 -148
  206. package/dist/Center-gEKkAkdh.js +0 -149
  207. package/dist/Header-5YX6FUn6.cjs +0 -35
  208. package/dist/Header-7x6367IV.js +0 -36
  209. package/dist/Item-EDdYN2NK.js +0 -171
  210. package/dist/Item-HWzX7RK2.cjs +0 -170
  211. package/dist/Item-owLU4Xop.js +0 -97
  212. package/dist/Item-rkSKzZoh.cjs +0 -96
  213. package/dist/Keyboard-mE03PKwA.js +0 -14
  214. package/dist/Keyboard-w372197S.cjs +0 -13
  215. package/dist/Link-laNlv47N.js +0 -13
  216. package/dist/Link-xlTZan29.cjs +0 -12
  217. package/dist/SelectLevel-bGb0dRXh.cjs +0 -152
  218. package/dist/SelectLevel-cewIWtOv.js +0 -153
  219. package/dist/Selector-R3lL41_i.js +0 -267
  220. package/dist/Selector-hQLSIYum.cjs +0 -266
  221. package/dist/TimeRangeChip-XXXLMCrf.cjs +0 -9316
  222. package/dist/TimeRangeChip-XXXLMCrf.cjs.map +0 -1
  223. package/dist/TimeRangeChip-eDCX5pUC.js +0 -9301
  224. package/dist/TimeRangeChip-eDCX5pUC.js.map +0 -1
  225. package/dist/Toggle-eOKYw1OT.cjs +0 -13664
  226. package/dist/Toggle-eOKYw1OT.cjs.map +0 -1
  227. package/dist/Toggle-kLunfJtR.js +0 -13665
  228. package/dist/Toggle-kLunfJtR.js.map +0 -1
  229. package/dist/Video-Vpwp5ao1.js +0 -12
  230. package/dist/Video-a7BUKvzF.cjs +0 -11
  231. package/dist/component-joFaJiQW.cjs +0 -24719
  232. package/dist/component-joFaJiQW.cjs.map +0 -1
  233. package/dist/component-k78Jq9I7.js +0 -24720
  234. package/dist/component-k78Jq9I7.js.map +0 -1
  235. package/dist/css-NTD4Xm8x.js +0 -9206
  236. package/dist/css-V3VUT_Js.cjs +0 -9204
  237. package/dist/dimensions-Sej0Zly9.cjs +0 -26
  238. package/dist/dimensions-guJ5PHmb.js +0 -27
  239. package/dist/external-2Aicsb3l.js +0 -88
  240. package/dist/external-2Aicsb3l.js.map +0 -1
  241. package/dist/external-9Ncn2J9B.cjs +0 -93
  242. package/dist/external-9RCzxzgZ.js +0 -30
  243. package/dist/external-9RCzxzgZ.js.map +0 -1
  244. package/dist/external-9pS8-DvV.js +0 -15
  245. package/dist/external-9pS8-DvV.js.map +0 -1
  246. package/dist/external-KxlyA74C.js +0 -20
  247. package/dist/external-KxlyA74C.js.map +0 -1
  248. package/dist/external-OSLzuRs1.cjs +0 -14
  249. package/dist/external-OSLzuRs1.cjs.map +0 -1
  250. package/dist/external-PS3nzqUn.cjs +0 -23
  251. package/dist/external-PS3nzqUn.cjs.map +0 -1
  252. package/dist/external-QRmqSjV0.js +0 -18
  253. package/dist/external-QRmqSjV0.js.map +0 -1
  254. package/dist/external-QuVTCnGl.js +0 -71
  255. package/dist/external-U5HRPaDI.cjs +0 -17
  256. package/dist/external-U5HRPaDI.cjs.map +0 -1
  257. package/dist/external-_CtRDtih.js +0 -17
  258. package/dist/external-_CtRDtih.js.map +0 -1
  259. package/dist/external-eQU48hM4.cjs +0 -87
  260. package/dist/external-eQU48hM4.cjs.map +0 -1
  261. package/dist/external-kbDFnfuk.js +0 -24
  262. package/dist/external-kbDFnfuk.js.map +0 -1
  263. package/dist/external-oX1JmOFf.js +0 -17
  264. package/dist/external-oX1JmOFf.js.map +0 -1
  265. package/dist/external-oZe6tF4A.cjs +0 -14
  266. package/dist/external-oZe6tF4A.cjs.map +0 -1
  267. package/dist/external-tVcmKSsT.cjs +0 -19
  268. package/dist/external-tVcmKSsT.cjs.map +0 -1
  269. package/dist/external-up1sE3F6.js +0 -94
  270. package/dist/external-uvx0b-Jw.cjs +0 -16
  271. package/dist/external-uvx0b-Jw.cjs.map +0 -1
  272. package/dist/external-vXBQOmKv.js +0 -15
  273. package/dist/external-vXBQOmKv.js.map +0 -1
  274. package/dist/external-yiqRIIvW.cjs +0 -16
  275. package/dist/external-yiqRIIvW.cjs.map +0 -1
  276. package/dist/external-zBiIxeDG.cjs +0 -70
  277. package/dist/external-zw9fckWT.cjs +0 -29
  278. package/dist/external-zw9fckWT.cjs.map +0 -1
  279. package/dist/font-t7KoGNFX.js +0 -17
  280. package/dist/font-wlgaMRYN.cjs +0 -16
  281. package/dist/fontString-RKvYIr5H.js +0 -13
  282. package/dist/fontString-i24UxKCQ.cjs +0 -12
  283. package/dist/jsx-runtime-N1ikfypN.cjs +0 -931
  284. package/dist/jsx-runtime-rX5tAIG2.js +0 -932
  285. package/dist/table-8MFXzE4C.js +0 -13664
  286. package/dist/table-8MFXzE4C.js.map +0 -1
  287. package/dist/table-VNkSG_Cj.cjs +0 -13661
  288. package/dist/table-VNkSG_Cj.cjs.map +0 -1
  289. package/dist/useDrag-KRQ7DTg1.cjs +0 -48
  290. package/dist/useDrag-rQt5hv4R.js +0 -49
@@ -1 +0,0 @@
1
- {"version":3,"file":"table-VNkSG_Cj.cjs","sources":["../../alamos/ts/dist/index.js","../src/telem/aether/telem.ts","../src/telem/aether/context.ts","../src/telem/aether/noop.ts","../src/telem/aether/pipeline.ts","../src/telem/aether/remote.ts","../src/telem/aether/static.ts","../src/telem/aether/transformers.ts","../src/telem/aether/factory.ts","../src/alamos/aether/alamos.ts","../src/synnax/aether/provider.ts","../../node_modules/.pnpm/async-mutex@0.4.0/node_modules/async-mutex/index.mjs","../src/telem/aether/convertSeries.ts","../src/telem/client/cache/dynamic.ts","../src/telem/client/cache/static.ts","../src/telem/client/cache/cache.ts","../src/telem/client/client.ts","../src/telem/aether/provider.ts","../src/vis/line/aether/frag.glsl?raw","../src/vis/line/aether/vert.glsl?raw","../src/vis/draw2d/canvas.ts","../src/vis/render/clear/frag.glsl?raw","../src/vis/render/clear/vert.glsl?raw","../src/vis/render/GLProgram.ts","../src/vis/render/clear/program.ts","../src/vis/render/loop.ts","../src/vis/render/context.ts","../src/vis/render/eraser.ts","../src/vis/render/controller.ts","../src/vis/line/aether/line.ts","../src/vis/canvas/aether/canvas.ts","../src/vis/lineplot/aether/grid.ts","../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/ascending.js","../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/descending.js","../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/bisector.js","../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/number.js","../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/bisect.js","../../node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/ticks.js","../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/init.js","../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/define.js","../../node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/color.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/constant.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/color.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/rgb.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/numberArray.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/array.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/date.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/number.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/object.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/string.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/value.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/round.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/decompose.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/parse.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/transform/index.js","../../node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/zoom.js","../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/constant.js","../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/number.js","../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/continuous.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatDecimal.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/exponent.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatGroup.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatNumerals.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatSpecifier.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatTrim.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatPrefixAuto.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatRounded.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/formatTypes.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/identity.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/locale.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/defaultLocale.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionFixed.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionPrefix.js","../../node_modules/.pnpm/d3-format@3.1.0/node_modules/d3-format/src/precisionRound.js","../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/tickFormat.js","../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/linear.js","../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/nice.js","../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/interval.js","../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/millisecond.js","../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/duration.js","../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/second.js","../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/minute.js","../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/hour.js","../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/day.js","../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/week.js","../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/month.js","../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/year.js","../../node_modules/.pnpm/d3-time@3.1.0/node_modules/d3-time/src/ticks.js","../../node_modules/.pnpm/d3-time-format@4.1.0/node_modules/d3-time-format/src/locale.js","../../node_modules/.pnpm/d3-time-format@4.1.0/node_modules/d3-time-format/src/defaultLocale.js","../../node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/time.js","../src/vis/axis/ticks.ts","../src/vis/axis/axis.ts","../src/vis/axis/canvas.ts","../src/vis/lineplot/aether/axis.ts","../src/vis/lineplot/aether/XAxis.ts","../src/vis/draw2d/index.ts","../src/vis/rule/aether/aether.ts","../src/vis/lineplot/aether/YAxis.ts","../src/vis/lineplot/tooltip/aether/tooltip.ts","../src/vis/measure/aether/measure.ts","../src/vis/lineplot/aether/LinePlot.ts","../src/vis/eraser/aether/eraser.ts","../../node_modules/.pnpm/classcat@5.0.4/node_modules/classcat/index.js","../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/shim/index.js","../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js","../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js","../../node_modules/.pnpm/use-sync-external-store@1.2.0_react@18.2.0/node_modules/use-sync-external-store/shim/with-selector.js","../../node_modules/.pnpm/zustand@4.4.7_@types+react@18.2.43_react@18.2.0/node_modules/zustand/esm/vanilla.mjs","../../node_modules/.pnpm/zustand@4.4.7_@types+react@18.2.43_react@18.2.0/node_modules/zustand/esm/traditional.mjs","../../node_modules/.pnpm/d3-dispatch@3.0.1/node_modules/d3-dispatch/src/dispatch.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/namespaces.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/namespace.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/creator.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selector.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/select.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/array.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selectorAll.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/selectAll.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/matcher.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/selectChild.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/selectChildren.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/filter.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/sparse.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/enter.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/constant.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/data.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/exit.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/join.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/merge.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/order.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/sort.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/call.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/nodes.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/node.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/size.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/empty.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/each.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/attr.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/window.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/style.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/property.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/classed.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/text.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/html.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/raise.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/lower.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/append.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/insert.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/remove.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/clone.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/datum.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/on.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/dispatch.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/iterator.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/index.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/select.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/sourceEvent.js","../../node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/pointer.js","../../node_modules/.pnpm/d3-drag@3.0.0/node_modules/d3-drag/src/noevent.js","../../node_modules/.pnpm/d3-drag@3.0.0/node_modules/d3-drag/src/nodrag.js","../../node_modules/.pnpm/d3-drag@3.0.0/node_modules/d3-drag/src/constant.js","../../node_modules/.pnpm/d3-drag@3.0.0/node_modules/d3-drag/src/event.js","../../node_modules/.pnpm/d3-drag@3.0.0/node_modules/d3-drag/src/drag.js","../../node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/timer.js","../../node_modules/.pnpm/d3-timer@3.0.1/node_modules/d3-timer/src/timeout.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/schedule.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/interrupt.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/interrupt.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/tween.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/interpolate.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/attr.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/attrTween.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/delay.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/duration.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/ease.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/easeVarying.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/filter.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/merge.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/on.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/remove.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/select.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/selectAll.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/selection.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/style.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/styleTween.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/text.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/textTween.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/transition.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/end.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/transition/index.js","../../node_modules/.pnpm/d3-ease@3.0.1/node_modules/d3-ease/src/cubic.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/transition.js","../../node_modules/.pnpm/d3-transition@3.0.1_d3-selection@3.0.0/node_modules/d3-transition/src/selection/index.js","../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/constant.js","../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/event.js","../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/transform.js","../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/noevent.js","../../node_modules/.pnpm/d3-zoom@3.0.0/node_modules/d3-zoom/src/zoom.js","../../node_modules/.pnpm/@reactflow+core@11.10.1_@types+react@18.2.43_react-dom@18.2.0_react@18.2.0/node_modules/@reactflow/core/dist/esm/index.mjs","../src/vis/diagram/types.ts","../src/vis/diagram/aether/Diagram.ts","../src/telem/control/aether/state.ts","../src/telem/control/aether/controller.ts","../src/telem/control/aether/indicator.ts","../src/telem/control/aether/chip.ts","../src/telem/control/aether/legend.ts","../src/telem/control/aether/registry.ts","../src/vis/button/aether/button.ts","../src/vis/toggle/aether/toggle.ts","../src/vis/value/aether/value.ts","../src/vis/table/aether/table.ts"],"sourcesContent":["import { I as Instrumentation, L as LOG_LEVELS, a as Logger, N as NOOP, b as NoopSpan, T as Tracer, _ as _Span, l as logLevelKeyFiler, c as logThresholdFilter } from \"./instrumentation-LKYcTUHj.js\";\nconst external = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({\n __proto__: null,\n Instrumentation,\n LOG_LEVELS,\n Logger,\n NOOP,\n NoopSpan,\n Tracer,\n _Span,\n logLevelKeyFiler,\n logThresholdFilter\n}, Symbol.toStringTag, { value: \"Module\" }));\nexport {\n Instrumentation,\n LOG_LEVELS,\n Logger,\n NOOP,\n NoopSpan,\n Tracer,\n _Span,\n external as alamos,\n logLevelKeyFiler,\n logThresholdFilter\n};\n//# sourceMappingURL=index.js.map\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { ValidationError } from \"@synnaxlabs/client\";\nimport { observe, type bounds, type Series, type Destructor } from \"@synnaxlabs/x\";\nimport { z } from \"zod\";\n\nimport { type color } from \"@/color/core\";\nimport { type status } from \"@/status/aether\";\n\nconst transferrable = z.union([z.instanceof(ArrayBuffer)]);\n\n/**\n * Metadata about a telemetry source. This metadata can be thought of as a pointer\n * to the underlying telemetry source, and is intended for use as a main thread proxy\n * to the telemetry source on the worker thread.\n */\nexport const specZ = z.object({\n type: z.string(),\n variant: z.enum([\"source\", \"sink\", \"source-transformer\", \"sink-transformer\"]),\n valueType: z.string(),\n props: z.any(),\n transfer: z.array(transferrable).optional(),\n});\n\nexport const sourceSpecZ = specZ.extend({ variant: z.literal(\"source\") });\nexport const sinkSpecZ = specZ.extend({ variant: z.literal(\"sink\") });\nexport const sourceTransformerSpecZ = specZ.extend({\n variant: z.literal(\"source-transformer\"),\n});\nexport const sinkTransformerSpecZ = specZ.extend({\n variant: z.literal(\"sink-transformer\"),\n});\n\n/**\n * Metadata about a telemetry source. This metadata can be thought of as a pointer\n * to the underlying telemetry source, and is intended for use as a main thread proxy\n * to the telemetry source on the worker thread.\n */\nexport type Spec = z.infer<typeof specZ>;\n\nexport type SourceSpec<V extends string> = z.infer<typeof sourceSpecZ> & {\n valueType: V;\n};\n\nexport type SinkSpec<V extends string> = z.infer<typeof sinkSpecZ> & {\n valueType: V;\n};\n\nexport interface Telem {\n cleanup?: () => void;\n}\n\nexport interface Source<V> extends Telem, observe.Observable<void> {\n value: () => Promise<V>;\n}\n\nexport interface Sink<V> extends Telem {\n set: (value: V) => Promise<void>;\n}\n\nexport interface SourceTransformer<I, O> extends Telem, Source<O> {\n setSources: (sources: Record<string, Source<I>>) => void;\n}\n\nexport interface SinkTransformer<I, O> extends Telem, Sink<I> {\n setSinks: (sinks: Record<string, Sink<O>>) => void;\n}\n\nexport type SeriesSource = Source<[bounds.Bounds, Series[]]>;\nexport const seriesSourceSpecZ = sourceSpecZ.extend({ valueType: z.literal(\"series\") });\nexport type SeriesSourceSpec = z.infer<typeof seriesSourceSpecZ>;\n\nexport type BooleanSource = Source<boolean>;\nexport const booleanSourceSpecZ = sourceSpecZ.extend({\n valueType: z.literal(\"boolean\"),\n});\nexport type BooleanSourceSpec = z.infer<typeof booleanSourceSpecZ>;\n\nexport type BooleanSink = Sink<boolean>;\nexport const booleanSinkSpecZ = sinkSpecZ.extend({ valueType: z.literal(\"boolean\") });\nexport type BooleanSinkSpec = z.infer<typeof booleanSinkSpecZ>;\n\nexport type BooleanSinkTransformer = SinkTransformer<boolean, number>;\nexport const booleanSinkTransformerSpecZ = sinkTransformerSpecZ.extend({\n valueType: z.literal(\"boolean\"),\n});\nexport type BooleanSinkTransformerSpec = z.infer<typeof booleanSinkTransformerSpecZ>;\n\nexport type BooleanSourceTransformer = SourceTransformer<number, boolean>;\nexport const booleanSourceTransformerSpecZ = sourceTransformerSpecZ.extend({\n valueType: z.literal(\"boolean\"),\n});\nexport type BooleanSourceTransformerSpec = z.infer<\n typeof booleanSourceTransformerSpecZ\n>;\n\nexport type NumberSource = Source<number>;\nexport const numberSourceSpecZ = sourceSpecZ.extend({ valueType: z.literal(\"number\") });\nexport type NumberSourceSpec = z.infer<typeof numberSourceSpecZ>;\n\nexport type NumberSink = Sink<number>;\nexport const numberSinkSpecZ = sinkSpecZ.extend({ valueType: z.literal(\"number\") });\nexport type NumberSinkSPec = z.infer<typeof numberSinkSpecZ>;\n\nexport type ColorSource = Source<color.Color>;\nexport const colorSourceSpecZ = sourceSpecZ.extend({ valueType: z.literal(\"color\") });\nexport type ColorSourceSpec = z.infer<typeof colorSourceSpecZ>;\n\nexport type StatusSource = Source<status.Spec>;\nexport const statusSourceSpecZ = sourceSpecZ.extend({ valueType: z.literal(\"status\") });\nexport type StatusSourceSpec = z.infer<typeof statusSourceSpecZ>;\n\nexport type StringSource = Source<string>;\nexport const stringSourceSpecZ = sourceSpecZ.extend({ valueType: z.literal(\"string\") });\nexport type StringSourceSpec = z.infer<typeof stringSourceSpecZ>;\n\nexport class Base<P extends z.ZodTypeAny> extends observe.Observer<void> {\n private props_: z.output<P> | undefined = undefined;\n private readonly uProps_: unknown | undefined = undefined;\n schema: P | undefined = undefined;\n\n constructor(props: unknown) {\n super();\n this.uProps_ = props;\n }\n\n get props(): z.output<P> {\n if (this.props_ == null) {\n const res = this._schema.safeParse(this.uProps_);\n if (res.success) this.props_ = res.data;\n else {\n throw new ValidationError(\n `[BaseTelem] - expected props to be valid, but found the following errors:\n ${res.error.message}`,\n );\n }\n }\n return this.props_;\n }\n\n private get _schema(): P {\n if (this.schema == null)\n throw new ValidationError(\n `[BaseTelem] - expected subclass to define props schema, but none was found.\n Make sure to define a property 'schema' on the class.`,\n );\n return this.schema;\n }\n\n cleanup(): void {}\n}\n\nexport class AbstractSource<P extends z.ZodTypeAny> extends Base<P> {}\n\nexport class AbstractSink<P extends z.ZodTypeAny> extends Base<P> {}\n\nexport class UnarySourceTransformer<I, O, P extends z.ZodTypeAny>\n extends AbstractSource<P>\n implements SourceTransformer<I, O>\n{\n sources: Record<string, Source<I>> = {};\n\n private get source(): Source<I> {\n const [source] = Object.values(this.sources);\n if (source == null)\n throw new ValidationError(\n `[UnarySourceTransformer] - expected source to exist, but none was found.`,\n );\n return source;\n }\n\n async value(): Promise<O> {\n return this.transform(await this.source.value());\n }\n\n onChange(handler: () => void): Destructor {\n return this.source.onChange(() => {\n this.source\n .value()\n .then((value) => {\n if (this.shouldNotify(value)) handler();\n })\n .catch(console.error);\n });\n }\n\n setSources(sources: Record<string, Source<I>>): void {\n this.sources = sources;\n }\n\n protected shouldNotify(value: I): boolean {\n return true;\n }\n\n protected transform(value: I): O {\n throw new ValidationError(\n `[UnarySourceTransformer] - expected subclass to define transform method, but none was found.\n Make sure to define a method 'transform' on the class.`,\n );\n }\n}\n\nexport class MultiSourceTransformer<I, O, P extends z.ZodTypeAny>\n extends AbstractSource<P>\n implements SourceTransformer<I, O>\n{\n sources: Record<string, Source<I>> = {};\n\n async value(): Promise<O> {\n const values = Object.fromEntries(\n await Promise.all(\n Object.entries(this.sources).map(async ([id, source]) => [\n id,\n await source.value(),\n ]),\n ),\n );\n return this.transform(values);\n }\n\n setSources(sources: Record<string, Source<I>>): void {\n this.sources = { ...this.sources, ...sources };\n }\n\n protected transform(values: Record<string, I>): O {\n throw new ValidationError(\n `[MultiSourceTransformer] - expected subclass to define transform method, but none was found.\n Make sure to define a method 'transform' on the class.`,\n );\n }\n}\n\nexport class UnarySinkTransformer<I, O, P extends z.ZodTypeAny>\n extends Base<P>\n implements SinkTransformer<I, O>\n{\n sinks: Record<string, Sink<O>> = {};\n\n private get sink(): Sink<O> {\n const [sink] = Object.values(this.sinks);\n if (sink == null)\n throw new ValidationError(\n `[UnarySinkTransformer] - expected sink to exist, but none was found.`,\n );\n return sink;\n }\n\n async set(value: I): Promise<void> {\n return await this.sink.set(this.transform(value));\n }\n\n setSinks(sinks: Record<string, Sink<O>>): void {\n this.sinks = { ...this.sinks, ...sinks };\n }\n\n protected transform(value: I): O {\n throw new ValidationError(\n `[UnarySinkTransformer] - expected subclass to define transform method, but none was found.\n Make sure to define a method 'transform' on the class.`,\n );\n }\n}\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type Destructor, deep } from \"@synnaxlabs/x\";\nimport { type Handler } from \"@synnaxlabs/x/dist/observe/observe\";\n\nimport { type aether } from \"@/aether/aether\";\nimport { type telem } from \"@/telem/aether\";\n\nimport { type Factory } from \"./factory\";\nimport { type Spec } from \"./telem\";\n\nexport interface Provider {\n key: string;\n equals: (other: Provider) => boolean;\n registerFactory: (f: Factory) => void;\n create: <T>(props: Spec) => T;\n}\n\nconst CONTEXT_KEY = \"pluto-telem-context\";\n\nexport const useProvider = (ctx: aether.Context): Provider =>\n ctx.get<Provider>(CONTEXT_KEY);\n\nexport const setProvider = (ctx: aether.Context, prov: Provider): void =>\n ctx.set(CONTEXT_KEY, prov);\n\nexport const registerFactory = (ctx: aether.Context, f: Factory): void =>\n useProvider(ctx).registerFactory(f);\n\nexport const shouldUpdate = (\n ctx: aether.Context,\n prevProv: Provider,\n spec: Spec,\n prevSpec: Spec,\n): boolean => {\n const nextProv = useProvider(ctx);\n if (prevProv.key !== nextProv.key) return true;\n if (prevProv.equals(nextProv)) return false;\n if (deep.equal(spec, prevSpec)) return false;\n return true;\n};\n\nclass MemoizedSource<V> implements telem.Source<V> {\n private readonly spec: Spec;\n private readonly prov: Provider;\n private readonly wrapped: telem.Source<V>;\n\n constructor(wrapped: telem.Source<V>, prevProv: Provider, prevSpec: Spec) {\n this.wrapped = wrapped;\n this.spec = prevSpec;\n this.prov = prevProv;\n }\n\n async value(): Promise<V> {\n return await this.wrapped.value();\n }\n\n cleanup(): void {\n this.wrapped.cleanup?.();\n }\n\n onChange(handler: Handler<void>): Destructor {\n return this.wrapped.onChange(handler);\n }\n\n shouldUpdate(prov: Provider, spec: Spec): boolean {\n return !this.prov.equals(prov) || !deep.equal(this.spec, spec);\n }\n}\n\nclass MemoizedSink<V> implements telem.Sink<V> {\n private readonly spec: Spec;\n private readonly prov: Provider;\n private readonly wrapped: telem.Sink<V>;\n\n constructor(wrapped: telem.Sink<V>, prevProv: Provider, prevSpec: Spec) {\n this.wrapped = wrapped;\n this.spec = prevSpec;\n this.prov = prevProv;\n }\n\n async set(value: V): Promise<void> {\n return await this.wrapped.set(value);\n }\n\n cleanup(): void {\n this.wrapped.cleanup?.();\n }\n\n shouldUpdate(prov: Provider, spec: Spec): boolean {\n return !this.prov.equals(prov) || !deep.equal(this.spec, spec);\n }\n}\n\nexport const useSource = <V>(\n ctx: aether.Context,\n spec: Spec,\n prev: telem.Source<V>,\n): telem.Source<V> => {\n const prov = useProvider(ctx);\n if (prev instanceof MemoizedSource) {\n if (!prev.shouldUpdate(prov, spec)) return prev;\n prev.cleanup?.();\n }\n return new MemoizedSource<V>(prov.create(spec), prov, spec);\n};\n\nexport const useSink = <V>(\n ctx: aether.Context,\n spec: Spec,\n prev: telem.Sink<V>,\n): telem.Sink<V> => {\n const prov = useProvider(ctx);\n if (prev instanceof MemoizedSink) {\n if (!prev.shouldUpdate(prov, spec)) return prev;\n prev.cleanup?.();\n }\n return new MemoizedSink<V>(prov.create(spec), prov, spec);\n};\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { TimeStamp, observe } from \"@synnaxlabs/x\";\n\nimport { color } from \"@/color/core\";\nimport { type status } from \"@/status/aether\";\nimport { type telem } from \"@/telem/aether\";\n\nclass Noop extends observe.Observer<void> implements telem.Telem {\n cleanup(): void {}\n}\n\nclass NoopBooleanSink extends Noop implements telem.BooleanSink {\n static readonly TYPE = \"noop-boolean-sink\";\n\n async set(): Promise<void> {\n return await Promise.resolve();\n }\n}\n\nexport const noopBooleanSinkSpec: telem.BooleanSinkSpec = {\n type: NoopBooleanSink.TYPE,\n props: {},\n variant: \"sink\",\n valueType: \"boolean\",\n};\n\nclass NumericSink extends Noop implements telem.NumberSink {\n static readonly TYPE = \"noop-numeric-sink\";\n\n async set(): Promise<void> {\n return await Promise.resolve();\n }\n}\n\nexport const noopNumericSinkSpec: telem.NumberSinkSPec = {\n type: NumericSink.TYPE,\n props: {},\n variant: \"sink\",\n valueType: \"number\",\n};\n\nclass NoopBooleanSource extends Noop implements telem.BooleanSource {\n static readonly TYPE = \"noop-boolean-source\";\n\n async value(): Promise<boolean> {\n return await Promise.resolve(false);\n }\n}\n\nexport const noopBooleanSourceSpec: telem.BooleanSourceSpec = {\n type: NoopBooleanSource.TYPE,\n props: {},\n variant: \"source\",\n valueType: \"boolean\",\n};\n\nclass NumericSource extends Noop implements telem.NumberSource {\n static readonly TYPE = \"noop-numeric-source\";\n\n async value(): Promise<number> {\n return 0;\n }\n}\n\nexport const noopNumericSourceSpec: telem.NumberSourceSpec = {\n type: NumericSource.TYPE,\n props: {},\n variant: \"source\",\n valueType: \"number\",\n};\n\nclass StringSource extends Noop implements telem.StringSource {\n static readonly TYPE = \"noop-string-source\";\n\n async value(): Promise<string> {\n return \"\";\n }\n}\n\nexport const noopStringSourceSpec: telem.StringSourceSpec = {\n type: StringSource.TYPE,\n props: {},\n variant: \"source\",\n valueType: \"string\",\n};\n\nclass StatusSource extends Noop implements telem.StatusSource {\n static readonly TYPE = \"noop-status-source\";\n\n async value(): Promise<status.Spec> {\n return {\n key: \"noop\",\n variant: \"disabled\",\n message: \"unknown\",\n time: TimeStamp.now(),\n };\n }\n}\n\nexport const noopStatusSourceSpec: telem.StatusSourceSpec = {\n type: StatusSource.TYPE,\n props: {},\n variant: \"source\",\n valueType: \"status\",\n};\n\nclass NoopColorSource extends Noop implements telem.ColorSource {\n static readonly TYPE = \"noop-color-source\";\n\n async value(): Promise<color.Color> {\n return color.ZERO;\n }\n}\n\nexport const noopColorSourceSpec: telem.ColorSourceSpec = {\n type: NoopColorSource.TYPE,\n props: {},\n variant: \"source\",\n valueType: \"color\",\n};\n\nconst REGISTRY: Record<string, new () => telem.Telem> = {\n [NoopBooleanSink.TYPE]: NoopBooleanSink,\n [NumericSink.TYPE]: NumericSink,\n [NoopBooleanSource.TYPE]: NoopBooleanSource,\n [NumericSource.TYPE]: NumericSource,\n [StatusSource.TYPE]: StatusSource,\n [NoopColorSource.TYPE]: NoopColorSource,\n [StringSource.TYPE]: StringSource,\n};\n\nexport class NoopFactory implements telem.Factory {\n type = \"noop\";\n create(spec: telem.Spec): telem.Telem | null {\n const F = REGISTRY[spec.type];\n if (F == null) return null;\n return new F();\n }\n}\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { ValidationError } from \"@synnaxlabs/client\";\nimport { type Destructor } from \"@synnaxlabs/x\";\nimport { z } from \"zod\";\n\nimport { type Factory } from \"@/telem/aether/factory\";\nimport {\n AbstractSource,\n type Source,\n type SourceTransformer,\n type Telem,\n type Spec,\n type SourceSpec,\n sourceSpecZ,\n sinkSpecZ,\n type Sink,\n type SinkTransformer,\n AbstractSink,\n type SinkSpec,\n} from \"@/telem/aether/telem\";\n\nconst connectionZ = z.object({\n from: z.string(),\n to: z.string(),\n});\n\nexport const sourcePipelinePropsZ = z.object({\n connections: z.array(connectionZ),\n outlet: z.string(),\n segments: z.record(sourceSpecZ),\n});\n\nexport type SourcePipelineProps = z.infer<typeof sourcePipelinePropsZ>;\n\nexport class PipelineFactory implements Factory {\n type = \"pipeline\";\n factory: Factory;\n\n constructor(factory: Factory) {\n this.factory = factory;\n }\n\n create(spec: Spec): Telem | null {\n switch (spec.type) {\n case SourcePipeline.TYPE:\n return new SourcePipeline(spec.props, this.factory);\n case SinkPipeline.TYPE:\n return new SinkPipeline(spec.props, this.factory);\n default:\n return null;\n }\n }\n}\n\nexport class SourcePipeline<V>\n extends AbstractSource<typeof sourcePipelinePropsZ>\n implements Source<V>\n{\n static readonly TYPE = \"source-pipeline\";\n schema = sourcePipelinePropsZ;\n sources: Record<string, Source<any> | SourceTransformer<any, any>> = {};\n\n private get outlet(): Source<V> {\n const { outlet } = this.props;\n const source = this.sources[outlet];\n if (source == null)\n throw new ValidationError(\n `[SourcePipeline] - expected source to exist at outlet '${outlet}', but none was found.`,\n );\n return source;\n }\n\n constructor(props: unknown, factory: Factory) {\n super(props);\n const { connections, segments } = this.props;\n Object.entries(segments).forEach(([id, spec]) => {\n const t = factory.create(spec);\n if (t == null) return;\n this.sources[id] = t;\n });\n\n connections.forEach(({ from, to }) => {\n const fromSource = this.sources[from];\n const toSource = this.sources[to];\n if (fromSource == null || toSource == null) return;\n if (\"setSources\" in toSource) toSource.setSources({ [from]: fromSource });\n });\n }\n\n async value(): Promise<V> {\n return await this.outlet.value();\n }\n\n onChange(handler: () => void): Destructor {\n return this.outlet.onChange(handler);\n }\n\n cleanup(): void {\n Object.values(this.sources).forEach((source) => source.cleanup?.());\n }\n}\n\nexport const sourcePipeline = <V extends string>(\n valueType: V,\n props: SourcePipelineProps,\n): SourceSpec<V> => {\n return {\n variant: \"source\",\n props,\n type: SourcePipeline.TYPE,\n valueType,\n };\n};\n\nexport const sinkPipelinePropsZ = z.object({\n connections: z.array(connectionZ),\n inlet: z.string(),\n segments: z.record(sinkSpecZ),\n});\n\nexport type SinkPipelineProps = z.infer<typeof sinkPipelinePropsZ>;\n\nexport class SinkPipeline<V>\n extends AbstractSink<typeof sinkPipelinePropsZ>\n implements Sink<V>\n{\n static readonly TYPE = \"sink-pipeline\";\n schema = sinkPipelinePropsZ;\n sinks: Record<string, Sink<any> | SinkTransformer<any, any>> = {};\n\n private get inlet(): Sink<V> {\n const { inlet } = this.props;\n const source = this.sinks[inlet];\n if (source == null)\n throw new ValidationError(\n `[SinkPipeline] - expected source to exist at inlet '${inlet}', but none was found.`,\n );\n return source;\n }\n\n constructor(props: unknown, factory: Factory) {\n super(props);\n const { connections, segments } = this.props;\n Object.entries(segments).forEach(([id, spec]) => {\n const t = factory.create(spec);\n if (t == null) return;\n this.sinks[id] = t;\n });\n\n connections.forEach(({ from, to }) => {\n const fromSink = this.sinks[from];\n const toSink = this.sinks[to];\n if (fromSink == null || toSink == null) return;\n if (\"setSinks\" in fromSink) {\n fromSink.setSinks({ [to]: toSink });\n }\n });\n }\n\n async set(value: V): Promise<void> {\n return await this.inlet.set(value);\n }\n\n cleanup(): void {\n Object.values(this.sinks).forEach((sink) => sink.cleanup?.());\n }\n}\n\nexport const sinkPipeline = <V extends string>(\n valueType: V,\n props: SinkPipelineProps,\n): SinkSpec<V> => ({\n variant: \"sink\",\n props,\n type: SinkPipeline.TYPE,\n valueType,\n});\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type channel } from \"@synnaxlabs/client\";\nimport {\n bounds,\n TimeRange,\n type Destructor,\n type Series,\n TimeSpan,\n TimeStamp,\n DataType,\n addSamples,\n} from \"@synnaxlabs/x\";\nimport { z } from \"zod\";\n\nimport {\n AbstractSource,\n type Spec,\n type NumberSource,\n type Telem,\n type SeriesSourceSpec,\n type NumberSourceSpec,\n type SeriesSource,\n} from \"@/telem/aether/telem\";\nimport { type client } from \"@/telem/client\";\n\nexport const streamChannelValuePropsZ = z.object({\n channel: z.number(),\n});\n\nexport type StreamChannelValueProps = z.infer<typeof streamChannelValuePropsZ>;\n\nexport class StreamChannelValue\n extends AbstractSource<typeof streamChannelValuePropsZ>\n implements NumberSource\n{\n removeStreamHandler: Destructor | null = null;\n\n static readonly TYPE = \"range-point\";\n\n schema = streamChannelValuePropsZ;\n\n private valid = false;\n private leadingBuffer: Series | null = null;\n private readonly client: client.Client;\n\n constructor(client: client.Client, props: unknown) {\n super(props);\n this.client = client;\n }\n\n cleanup(): void {\n this.removeStreamHandler?.();\n this.valid = false;\n this.leadingBuffer = null;\n this.removeStreamHandler = null;\n }\n\n async value(): Promise<number> {\n if (this.props.channel === 0) return 0;\n if (!this.valid) await this.read();\n if (this.leadingBuffer == null || this.leadingBuffer.length === 0) return 0;\n const v = this.leadingBuffer.data[this.leadingBuffer.length - 1];\n return Number(addSamples(v, this.leadingBuffer.sampleOffset));\n }\n\n async read(): Promise<void> {\n this.valid = true;\n const { channel } = this.props;\n const now = TimeStamp.now()\n .sub(TimeStamp.seconds(10))\n .spanRange(TimeSpan.seconds(20));\n const d = await this.client.read(now, [channel]);\n this.leadingBuffer = d[channel].data[0];\n await this.updateStreamHandler();\n }\n\n private async updateStreamHandler(): Promise<void> {\n this.removeStreamHandler?.();\n const { channel } = this.props;\n const handler: client.StreamHandler = (data) => {\n const res = data[channel];\n if (res.data.length > 0) this.leadingBuffer = res.data[res.data.length - 1];\n this.notify?.();\n };\n this.removeStreamHandler = await this.client.stream(handler, [channel]);\n }\n}\n\nconst fetchChannel = async (\n client: client.ChannelClient,\n channel: channel.Key,\n index: boolean,\n): Promise<channel.Channel> => {\n if (!index) return await client.retrieveChannel(channel);\n const c = await client.retrieveChannel(channel);\n return await client.retrieveChannel(c.index);\n};\n\nconst channelDataSourcePropsZ = z.object({\n timeRange: TimeRange.z,\n channel: z.number(),\n index: z.boolean().optional().default(false),\n});\n\nexport type ChannelDataProps = z.input<typeof channelDataSourcePropsZ>;\n\nexport class ChannelData\n extends AbstractSource<typeof channelDataSourcePropsZ>\n implements ChannelData\n{\n static readonly TYPE = \"series-source\";\n private readonly client: client.ReadClient & client.ChannelClient;\n private data: Series[] = [];\n schema = channelDataSourcePropsZ;\n valid: boolean = false;\n\n constructor(client: client.ReadClient & client.ChannelClient, props: unknown) {\n super(props);\n this.client = client;\n }\n\n cleanup(): void {\n this.valid = false;\n }\n\n async value(): Promise<[bounds.Bounds, Series[]]> {\n const chan = await fetchChannel(this.client, this.props.channel, this.props.index);\n if (!this.valid) await this.readFixed(chan.key);\n let b = bounds.max(this.data.map((d) => d.bounds));\n if (chan.dataType.equals(DataType.TIMESTAMP)) {\n b = {\n upper: Math.min(b.upper, this.props.timeRange.end.valueOf()),\n lower: Math.max(b.lower, this.props.timeRange.start.valueOf()),\n };\n }\n return [b, this.data];\n }\n\n private async readFixed(key: channel.Key): Promise<void> {\n const res = await this.client.read(this.props.timeRange, [key]);\n this.data = res[key].data;\n this.valid = true;\n }\n}\n\nconst streamChannelDataPropsZ = z.object({\n channel: z.number(),\n index: z.boolean().optional().default(false),\n timeSpan: TimeSpan.z,\n});\n\nexport type StreamChannelDataProps = z.input<typeof streamChannelDataPropsZ>;\n\nexport class StreamChannelData\n extends AbstractSource<typeof streamChannelDataPropsZ>\n implements SeriesSource\n{\n static readonly TYPE = \"dynamic-series-source\";\n private readonly client: client.Client;\n private readonly data: Series[] = [];\n private stopStreaming?: Destructor;\n private valid: boolean = false;\n schema = streamChannelDataPropsZ;\n\n constructor(client: client.Client, props: unknown) {\n super(props);\n this.client = client;\n }\n\n async value(): Promise<[bounds.Bounds, Series[]]> {\n const { channel, index, timeSpan } = this.props;\n const ch = await fetchChannel(this.client, channel, index);\n if (!this.valid) await this.read(ch.key);\n let b = bounds.max(this.data.map((d) => d.bounds));\n if (ch.dataType.equals(DataType.TIMESTAMP)) {\n b = {\n upper: b.upper,\n lower: Math.max(b.lower, b.upper - timeSpan.valueOf()),\n };\n }\n return [b, this.data];\n }\n\n invalidate(): void {\n this.valid = false;\n this.notify();\n }\n\n private async read(key: channel.Key): Promise<void> {\n const tr = TimeStamp.now().spanRange(-this.props.timeSpan);\n const res = await this.client.read(tr, [key]);\n this.data.push(...res[key].data);\n await this.updateStreamHandler(key);\n this.valid = true;\n }\n\n private async updateStreamHandler(key: channel.Key): Promise<void> {\n this.stopStreaming?.();\n const handler: client.StreamHandler = (data) => {\n const d = data[key];\n this.data.push(...d.data);\n this.notify();\n };\n this.stopStreaming = await this.client.stream(handler, [key]);\n }\n\n cleanup(): void {\n this.stopStreaming?.();\n this.stopStreaming = undefined;\n }\n}\n\ntype Constructor = new (client: client.Client, props: unknown) => Telem;\n\nconst REGISTRY: Record<string, Constructor> = {\n [ChannelData.TYPE]: ChannelData,\n [StreamChannelData.TYPE]: StreamChannelData,\n [StreamChannelValue.TYPE]: StreamChannelValue,\n};\n\nexport class RemoteFactory implements RemoteFactory {\n type = \"remote\";\n private readonly client: client.Client;\n constructor(client: client.Client) {\n this.client = client;\n }\n\n create(spec: Spec): Telem | null {\n if (!(spec.type in REGISTRY)) return null;\n const t = new REGISTRY[spec.type](this.client, spec.props);\n return t;\n }\n}\n\nexport const channelData = (props: ChannelDataProps): SeriesSourceSpec => ({\n type: ChannelData.TYPE,\n props,\n variant: \"source\",\n valueType: \"series\",\n});\n\nexport const streamChannelData = (props: StreamChannelDataProps): SeriesSourceSpec => ({\n type: StreamChannelData.TYPE,\n props,\n variant: \"source\",\n valueType: \"series\",\n});\n\nexport const streamChannelValue = (\n props: Omit<StreamChannelValueProps, \"units\">,\n): NumberSourceSpec => {\n return {\n type: StreamChannelValue.TYPE,\n props,\n variant: \"source\",\n valueType: \"number\",\n };\n};\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport {\n Series,\n nativeTypedArray,\n Rate,\n DataType,\n TimeRange,\n bounds,\n} from \"@synnaxlabs/x\";\nimport { z } from \"zod\";\n\nimport { type Factory } from \"./factory\";\nimport {\n AbstractSource,\n type SeriesSourceSpec,\n type NumberSource,\n type SeriesSource,\n type Spec,\n type Telem,\n type StringSourceSpec,\n type NumberSourceSpec,\n} from \"./telem\";\n\nexport class StaticFactory implements Factory {\n type = \"static\";\n create(spec: Spec): Telem | null {\n switch (spec.type) {\n case FixedSeries.TYPE:\n return new FixedSeries(spec.props);\n case IterativeSeries.TYPE:\n return new IterativeSeries(spec.props);\n case FixedNumber.TYPE:\n return new FixedNumber(spec.props);\n case FixedString.TYPE:\n return new FixedString(spec.props);\n default:\n return null;\n }\n }\n}\n\nexport const fixedSeriesPropsZ = z.object({\n data: z.array(nativeTypedArray),\n offsets: z.array(z.number()).optional().default([]),\n});\n\nexport type FixedArrayProps = z.input<typeof fixedSeriesPropsZ>;\n\nclass FixedSeries extends AbstractSource<typeof fixedSeriesPropsZ> {\n data: Series[];\n\n static readonly TYPE = \"static-series\";\n\n constructor(props: unknown) {\n super(props);\n this.data = this.props.data.map(\n (x, i) =>\n new Series(x, DataType.FLOAT32, TimeRange.ZERO, this.props.offsets[i] ?? 0),\n );\n }\n\n async value(): Promise<[bounds.Bounds, Series[]]> {\n const b = bounds.max(this.data.map((x) => x.bounds));\n return [b, this.data];\n }\n}\n\nexport const iterativeSeriesPropsZ = fixedSeriesPropsZ.extend({\n rate: Rate.z,\n yOffset: z.number().optional().default(0),\n scroll: z.number().optional().default(0),\n startPosition: z.number().optional().default(0),\n scrollBounds: z.boolean().optional().default(false),\n});\n\nexport type IterativeArrayProps = z.input<typeof iterativeSeriesPropsZ>;\n\nexport class IterativeSeries\n extends AbstractSource<typeof iterativeSeriesPropsZ>\n implements SeriesSource\n{\n static readonly TYPE = \"iterative-series\";\n schema = iterativeSeriesPropsZ;\n\n position: number;\n interval?: number;\n data: Series[];\n\n constructor(props: unknown) {\n super(props);\n this.position = this.props.startPosition;\n this.start(this.props.rate);\n this.data = this.props.data.map(\n (x, i) =>\n new Series(x, DataType.FLOAT32, TimeRange.ZERO, this.props.offsets[i] ?? 0),\n );\n }\n\n async value(): Promise<[bounds.Bounds, Series[]]> {\n const d = this.data.map((x) => x.slice(0, this.position));\n if (this.props.scrollBounds) {\n const lower =\n d[0].data[\n this.position - this.props.scroll < 0 ? 0 : this.position - this.props.scroll\n ];\n const upper = d[0].data[this.position - 1];\n const b = {\n lower: Number(lower),\n upper: Number(upper),\n };\n return [b, d];\n }\n const b = bounds.max(d.map((x) => x.bounds));\n return [b, d];\n }\n\n start(rate: Rate): void {\n if (this.interval != null) clearInterval(this.interval);\n this.interval = setInterval(() => {\n this.notify?.();\n this.position++;\n }, rate.period.milliseconds) as unknown as number;\n }\n\n cleanup(): void {\n clearInterval(this.interval);\n this.interval = undefined;\n }\n}\n\nexport const fixedNumberPropsZ = z.number();\n\nexport type FixedNumberProps = z.infer<typeof fixedNumberPropsZ>;\n\nexport class FixedNumber\n extends AbstractSource<typeof fixedNumberPropsZ>\n implements NumberSource\n{\n static readonly TYPE = \"static-numeric\";\n schema = fixedNumberPropsZ;\n\n async value(): Promise<number> {\n return this.props;\n }\n}\n\nexport const fixedStringPropsZ = z.string();\n\nexport type FixedStringProps = z.infer<typeof fixedStringPropsZ>;\n\nexport class FixedString extends AbstractSource<typeof fixedStringPropsZ> {\n static readonly TYPE = \"static-string\";\n schema = fixedStringPropsZ;\n\n async value(): Promise<string> {\n return this.props;\n }\n}\n\nexport const fixedArray = (props: FixedArrayProps): SeriesSourceSpec => ({\n type: FixedSeries.TYPE,\n props,\n variant: \"source\",\n valueType: \"series\",\n});\n\nexport const iterativeArray = (props: IterativeArrayProps): SeriesSourceSpec => ({\n type: IterativeSeries.TYPE,\n props,\n variant: \"source\",\n valueType: \"series\",\n});\n\nexport const fixedNumber = (value: number): NumberSourceSpec => ({\n type: FixedNumber.TYPE,\n props: value,\n variant: \"source\",\n valueType: \"number\",\n});\n\nexport const fixedString = (value: string): StringSourceSpec => ({\n type: FixedString.TYPE,\n props: value,\n variant: \"source\",\n valueType: \"string\",\n});\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { bounds } from \"@synnaxlabs/x\";\nimport { z } from \"zod\";\n\nimport { status } from \"@/status/aether\";\nimport { type Factory } from \"@/telem/aether/factory\";\nimport {\n type Telem,\n type Spec,\n type BooleanSinkSpec,\n UnarySinkTransformer,\n type BooleanSink,\n UnarySourceTransformer,\n type BooleanSource,\n type BooleanSourceSpec,\n MultiSourceTransformer,\n type StringSourceSpec,\n} from \"@/telem/aether/telem\";\n\nexport class TransformerFactory implements Factory {\n type = \"transformer\";\n create(spec: Spec): Telem | null {\n switch (spec.type) {\n case Setpoint.TYPE:\n return new Setpoint(spec.props);\n case WithinBounds.TYPE:\n return new WithinBounds(spec.props);\n case Mean.TYPE:\n return new Mean(spec.props);\n case BooleanStatus.TYPE:\n return new BooleanStatus(spec.props);\n case StringifyNumber.TYPE:\n return new StringifyNumber(spec.props);\n }\n return null;\n }\n}\n\nconst setpointProps = z.object({\n truthy: z.number().optional().default(1),\n falsy: z.number().optional().default(0),\n});\n\nexport type SetpointProps = z.infer<typeof setpointProps>;\n\nexport const setpoint = (props: SetpointProps): BooleanSinkSpec => ({\n props,\n type: Setpoint.TYPE,\n variant: \"sink\",\n valueType: \"boolean\",\n});\n\nexport class Setpoint\n extends UnarySinkTransformer<boolean, number, typeof setpointProps>\n implements BooleanSink\n{\n static readonly TYPE = \"boolean-numeric-converter-sink\";\n static readonly propsZ = setpointProps;\n schema = Setpoint.propsZ;\n\n transform(value: boolean): number {\n return value ? this.props.truthy : this.props.falsy;\n }\n}\n\nconst withinBoundsProps = z.object({ trueBound: bounds.bounds });\n\nexport type WithinBoundsProps = z.infer<typeof withinBoundsProps>;\n\nexport const withinBounds = (props: WithinBoundsProps): BooleanSourceSpec => ({\n props,\n type: WithinBounds.TYPE,\n variant: \"source\",\n valueType: \"boolean\",\n});\n\nexport class WithinBounds\n extends UnarySourceTransformer<number, boolean, typeof withinBoundsProps>\n implements BooleanSource\n{\n static readonly TYPE = \"boolean-source\";\n static readonly propsZ = withinBoundsProps;\n schema = WithinBounds.propsZ;\n curr: boolean | null = null;\n\n protected shouldNotify(value: number): boolean {\n return bounds.contains(this.props.trueBound, value) !== this.curr;\n }\n\n protected transform(value: number): boolean {\n this.curr = bounds.contains(this.props.trueBound, value);\n return this.curr;\n }\n}\n\nconst meanProps = z.object({});\n\nexport class Mean extends MultiSourceTransformer<number, number, typeof meanProps> {\n static readonly TYPE = \"mean\";\n static readonly propsZ = meanProps;\n schema = Mean.propsZ;\n\n protected transform(values: Record<string, number>): number {\n return (\n Object.values(values).reduce((a, b) => a + b, 0) / Object.keys(values).length\n );\n }\n}\n\nexport const mean = (props: z.input<typeof meanProps>): BooleanSourceSpec => ({\n props,\n type: Mean.TYPE,\n variant: \"source\",\n valueType: \"boolean\",\n});\n\nexport const booleanStatusProps = z.object({\n trueVariant: status.variantZ.optional().default(\"success\"),\n});\n\nexport class BooleanStatus extends UnarySourceTransformer<\n status.Spec,\n boolean,\n typeof booleanStatusProps\n> {\n static readonly TYPE = \"boolean-status\";\n static readonly propsZ = booleanStatusProps;\n schema = BooleanStatus.propsZ;\n\n protected transform(value: status.Spec): boolean {\n return value.variant === this.props.trueVariant;\n }\n}\n\nexport const booleanStatus = (\n props: z.input<typeof booleanStatusProps>,\n): BooleanSourceSpec => ({\n props,\n type: BooleanStatus.TYPE,\n variant: \"source\",\n valueType: \"boolean\",\n});\n\nexport const stringifyNumberProps = z.object({\n precision: z.number().optional().default(2),\n prefix: z.string().optional().default(\"\"),\n suffix: z.string().optional().default(\"\"),\n});\n\nexport class StringifyNumber extends UnarySourceTransformer<\n number,\n string,\n typeof stringifyNumberProps\n> {\n static readonly TYPE = \"stringify-number\";\n static readonly propsZ = stringifyNumberProps;\n schema = StringifyNumber.propsZ;\n\n protected transform(value: number): string {\n return `${this.props.prefix}${value.toFixed(this.props.precision)}${\n this.props.suffix\n }`;\n }\n}\n\nexport const stringifyNumber = (\n props: z.input<typeof stringifyNumberProps>,\n): StringSourceSpec => ({\n props,\n type: StringifyNumber.TYPE,\n variant: \"source\",\n valueType: \"string\",\n});\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type telem } from \"@/telem/aether\";\nimport { NoopFactory } from \"@/telem/aether/noop\";\nimport { PipelineFactory } from \"@/telem/aether/pipeline\";\nimport { RemoteFactory } from \"@/telem/aether/remote\";\nimport { StaticFactory } from \"@/telem/aether/static\";\nimport { TransformerFactory } from \"@/telem/aether/transformers\";\nimport { type client } from \"@/telem/client\";\n\nexport interface Factory {\n type: string;\n create: (spec: telem.Spec) => telem.Telem | null;\n}\n\nexport class CompoundTelemFactory {\n factories: Factory[];\n\n type = \"compound\";\n\n constructor(factories: Factory[]) {\n this.factories = factories;\n }\n\n add(factory: Factory): void {\n this.factories = [\n ...this.factories.filter((f) => f.type !== factory.type),\n factory,\n ];\n }\n\n create(props: telem.Spec): telem.Telem | null {\n for (const factory of this.factories) {\n const telem = factory.create(props);\n if (telem != null) return telem;\n }\n return null;\n }\n}\n\nexport const factory = (client?: client.Client): CompoundTelemFactory => {\n const base = [new TransformerFactory(), new StaticFactory(), new NoopFactory()];\n const f = new CompoundTelemFactory(base);\n if (client != null) f.add(new RemoteFactory(client));\n f.add(new PipelineFactory(f));\n return f;\n};\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { alamos } from \"@synnaxlabs/alamos\";\nimport { z } from \"zod\";\n\nimport { aether } from \"@/aether/aether\";\n\nexport const providerStateZ = z.object({\n include: z.string().array().optional(),\n exclude: z.string().array().optional(),\n level: z.enum(alamos.LOG_LEVELS).optional().default(\"info\"),\n});\nexport type ProviderState = z.input<typeof providerStateZ>;\n\nconst CONTEXT_KEY = \"alamos-provider\";\n\nexport interface InternalState {\n ins: alamos.Instrumentation;\n}\n\nexport class Provider extends aether.Composite<typeof providerStateZ, InternalState> {\n static readonly TYPE = \"AlamosProvider\";\n schema = providerStateZ;\n\n afterUpdate(): void {\n const v = this.ctx.getOptional<alamos.Instrumentation>(CONTEXT_KEY);\n if (v != null) return;\n\n const filters: alamos.LogLevelFilter[] = [];\n const { include, exclude, level } = this.state;\n if (include != null || exclude != null)\n filters.push(alamos.logLevelKeyFiler({ include, exclude }));\n if (level != null) filters.push(alamos.logThresholdFilter(level));\n if (filters.length === 0) filters.push(() => false);\n\n this.internal.ins = new alamos.Instrumentation({\n key: \"aether\",\n logger: new alamos.Logger({ filters }),\n });\n this.ctx.set(CONTEXT_KEY, this.internal.ins);\n }\n}\n\nexport const useInstrumentation = (\n ctx: aether.Context,\n name?: string,\n): alamos.Instrumentation => {\n const ins = ctx.get<alamos.Instrumentation>(CONTEXT_KEY);\n if (ins == null) throw new Error(\"No instrumentation provider\");\n return name == null ? ins : ins.child(name);\n};\n\nexport const REGISTRY: aether.ComponentRegistry = {\n [Provider.TYPE]: Provider,\n};\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type connection, Synnax, synnaxPropsZ } from \"@synnaxlabs/client\";\nimport { deep } from \"@synnaxlabs/x\";\nimport { z } from \"zod\";\n\nimport { aether } from \"@/aether/aether\";\n\nconst stateZ = z.object({\n props: synnaxPropsZ.nullable(),\n state: Synnax.connectivity.connectionStateZ.nullable(),\n});\n\nexport interface ContextValue {\n synnax: Synnax | null;\n state: connection.State;\n}\n\nexport const ZERO_CONTEXT_VALUE: ContextValue = {\n synnax: null,\n state: Synnax.connectivity.DEFAULT,\n};\n\nexport class Provider extends aether.Composite<typeof stateZ, ContextValue> {\n static readonly TYPE = \"SynnaxProvider\";\n static readonly stateZ = stateZ;\n schema = Provider.stateZ;\n\n afterUpdate(): void {\n if (!this.ctx.has(CONTEXT_KEY)) set(this.ctx, ZERO_CONTEXT_VALUE);\n if (this.state.props == null) {\n if (this.internal.synnax != null) {\n this.setState((p) => ({ ...p, state: Synnax.connectivity.DEFAULT }));\n this.internal.synnax?.close();\n this.internal.synnax = null;\n }\n return;\n }\n\n if (\n this.prevState.props != null &&\n deep.equal(this.state.props, this.prevState.props) &&\n this.internal.synnax != null\n ) {\n return;\n }\n\n this.internal.synnax = new Synnax(this.state.props);\n this.internal.synnax.connectivity.onChange((state) =>\n this.setState((p) => ({ ...p, state })),\n );\n set(this.ctx, this.internal);\n }\n}\n\nconst CONTEXT_KEY = \"pluto-client-context\";\n\nconst set = (ctx: aether.Context, value: ContextValue): void =>\n ctx.set(CONTEXT_KEY, value);\n\nexport const use = (ctx: aether.Context): Synnax | null =>\n ctx.get<ContextValue>(CONTEXT_KEY).synnax;\n\nexport const REGISTRY: aether.ComponentRegistry = {\n [Provider.TYPE]: Provider,\n};\n","const E_TIMEOUT = new Error('timeout while waiting for mutex to become available');\nconst E_ALREADY_LOCKED = new Error('mutex already locked');\nconst E_CANCELED = new Error('request for lock canceled');\n\nvar __awaiter$2 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nclass Semaphore {\n constructor(_value, _cancelError = E_CANCELED) {\n this._value = _value;\n this._cancelError = _cancelError;\n this._weightedQueues = [];\n this._weightedWaiters = [];\n }\n acquire(weight = 1) {\n if (weight <= 0)\n throw new Error(`invalid weight ${weight}: must be positive`);\n return new Promise((resolve, reject) => {\n if (!this._weightedQueues[weight - 1])\n this._weightedQueues[weight - 1] = [];\n this._weightedQueues[weight - 1].push({ resolve, reject });\n this._dispatch();\n });\n }\n runExclusive(callback, weight = 1) {\n return __awaiter$2(this, void 0, void 0, function* () {\n const [value, release] = yield this.acquire(weight);\n try {\n return yield callback(value);\n }\n finally {\n release();\n }\n });\n }\n waitForUnlock(weight = 1) {\n if (weight <= 0)\n throw new Error(`invalid weight ${weight}: must be positive`);\n return new Promise((resolve) => {\n if (!this._weightedWaiters[weight - 1])\n this._weightedWaiters[weight - 1] = [];\n this._weightedWaiters[weight - 1].push(resolve);\n this._dispatch();\n });\n }\n isLocked() {\n return this._value <= 0;\n }\n getValue() {\n return this._value;\n }\n setValue(value) {\n this._value = value;\n this._dispatch();\n }\n release(weight = 1) {\n if (weight <= 0)\n throw new Error(`invalid weight ${weight}: must be positive`);\n this._value += weight;\n this._dispatch();\n }\n cancel() {\n this._weightedQueues.forEach((queue) => queue.forEach((entry) => entry.reject(this._cancelError)));\n this._weightedQueues = [];\n }\n _dispatch() {\n var _a;\n for (let weight = this._value; weight > 0; weight--) {\n const queueEntry = (_a = this._weightedQueues[weight - 1]) === null || _a === void 0 ? void 0 : _a.shift();\n if (!queueEntry)\n continue;\n const previousValue = this._value;\n const previousWeight = weight;\n this._value -= weight;\n weight = this._value + 1;\n queueEntry.resolve([previousValue, this._newReleaser(previousWeight)]);\n }\n this._drainUnlockWaiters();\n }\n _newReleaser(weight) {\n let called = false;\n return () => {\n if (called)\n return;\n called = true;\n this.release(weight);\n };\n }\n _drainUnlockWaiters() {\n for (let weight = this._value; weight > 0; weight--) {\n if (!this._weightedWaiters[weight - 1])\n continue;\n this._weightedWaiters[weight - 1].forEach((waiter) => waiter());\n this._weightedWaiters[weight - 1] = [];\n }\n }\n}\n\nvar __awaiter$1 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nclass Mutex {\n constructor(cancelError) {\n this._semaphore = new Semaphore(1, cancelError);\n }\n acquire() {\n return __awaiter$1(this, void 0, void 0, function* () {\n const [, releaser] = yield this._semaphore.acquire();\n return releaser;\n });\n }\n runExclusive(callback) {\n return this._semaphore.runExclusive(() => callback());\n }\n isLocked() {\n return this._semaphore.isLocked();\n }\n waitForUnlock() {\n return this._semaphore.waitForUnlock();\n }\n release() {\n if (this._semaphore.isLocked())\n this._semaphore.release();\n }\n cancel() {\n return this._semaphore.cancel();\n }\n}\n\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nfunction withTimeout(sync, timeout, timeoutError = E_TIMEOUT) {\n return {\n acquire: (weight) => {\n if (weight !== undefined && weight <= 0) {\n throw new Error(`invalid weight ${weight}: must be positive`);\n }\n return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {\n let isTimeout = false;\n const handle = setTimeout(() => {\n isTimeout = true;\n reject(timeoutError);\n }, timeout);\n try {\n const ticket = yield sync.acquire(weight);\n if (isTimeout) {\n const release = Array.isArray(ticket) ? ticket[1] : ticket;\n release();\n }\n else {\n clearTimeout(handle);\n resolve(ticket);\n }\n }\n catch (e) {\n if (!isTimeout) {\n clearTimeout(handle);\n reject(e);\n }\n }\n }));\n },\n runExclusive(callback, weight) {\n return __awaiter(this, void 0, void 0, function* () {\n let release = () => undefined;\n try {\n const ticket = yield this.acquire(weight);\n if (Array.isArray(ticket)) {\n release = ticket[1];\n return yield callback(ticket[0]);\n }\n else {\n release = ticket;\n return yield callback();\n }\n }\n finally {\n release();\n }\n });\n },\n release(weight) {\n sync.release(weight);\n },\n cancel() {\n return sync.cancel();\n },\n waitForUnlock: (weight) => {\n if (weight !== undefined && weight <= 0) {\n throw new Error(`invalid weight ${weight}: must be positive`);\n }\n return new Promise((resolve, reject) => {\n sync.waitForUnlock(weight).then(resolve);\n setTimeout(() => reject(timeoutError), timeout);\n });\n },\n isLocked: () => sync.isLocked(),\n getValue: () => sync.getValue(),\n setValue: (value) => sync.setValue(value),\n };\n}\n\n// eslint-disable-next-lisne @typescript-eslint/explicit-module-boundary-types\nfunction tryAcquire(sync, alreadyAcquiredError = E_ALREADY_LOCKED) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return withTimeout(sync, 0, alreadyAcquiredError);\n}\n\nexport { E_ALREADY_LOCKED, E_CANCELED, E_TIMEOUT, Mutex, Semaphore, tryAcquire, withTimeout };\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { DataType, type Series, type SampleValue } from \"@synnaxlabs/x\";\n\n/**\n * Converts the given serie\n *\n * @param series\n * @param offset\n * @returns\n */\nexport const convertSeriesFloat32 = (series: Series, offset?: SampleValue): Series => {\n if (offset == null && series.dataType.equals(DataType.TIMESTAMP))\n offset = BigInt(series.data[0]);\n return series.convert(DataType.FLOAT32, offset);\n};\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { DataType, Series, TimeStamp } from \"@synnaxlabs/x\";\n\nimport { convertSeriesFloat32 } from \"@/telem/aether/convertSeries\";\n\nexport interface DynamicWriteResponse {\n flushed: Series[];\n allocated: Series[];\n}\n\n/**\n * A cache for channel data that maintains a single, rolling Series as a buffer\n * for channel data.\n */\nexport class Dynamic {\n buffer: Series | null;\n private readonly cap: number;\n private readonly dataType: DataType;\n\n /**\n * @constructor\n *\n * @param cap - The capacity of the cache buffer.\n * @param dataType - The data type of the channel.\n */\n constructor(cap: number, dataType: DataType) {\n this.cap = cap;\n this.dataType = dataType;\n this.buffer = null;\n }\n\n /** @returns the number of samples currenly held in the cache. */\n get length(): number {\n return this.buffer?.length ?? 0;\n }\n\n /**\n * Writes the given arrays to the cache.\n *\n * @returns a list of buffers that were filled by the cache during the write. If\n * the current buffer is able to fit all writes, no buffers will be returned.\n */\n write(series: Series[]): DynamicWriteResponse {\n const responses = series.flatMap((arr) => this._write(arr));\n return {\n flushed: responses.flatMap((res) => res.flushed),\n allocated: responses.flatMap((res) => res.allocated),\n };\n }\n\n private allocate(length: number, alignment: number): Series {\n const start = TimeStamp.now();\n return Series.alloc(\n length,\n DataType.FLOAT32,\n start.spanRange(TimeStamp.MAX),\n this.dataType.equals(DataType.TIMESTAMP) ? start.valueOf() : 0,\n \"dynamic\",\n alignment,\n );\n }\n\n private _write(series: Series): DynamicWriteResponse {\n // This only happens on the first write to the cache.\n const res: DynamicWriteResponse = { flushed: [], allocated: [] };\n if (this.buffer == null) {\n this.buffer = this.allocate(this.cap, series.alignment);\n res.allocated.push(this.buffer);\n } else if (\n Math.abs(this.buffer.alignment + this.buffer.length - series.alignment) > 1\n ) {\n // This case occurs when the alignment of the incoming series does not match\n // the alignment of the current buffer. In this case, we flush the current buffer\n // and allocate a new one.\n res.flushed.push(this.buffer);\n this.buffer = this.allocate(this.cap, series.alignment);\n res.allocated.push(this.buffer);\n }\n const converted = convertSeriesFloat32(series, this.buffer.sampleOffset);\n const amountWritten = this.buffer.write(converted);\n if (amountWritten === series.length) return res;\n res.flushed.push(this.buffer);\n this.buffer = this.allocate(this.cap, series.alignment + amountWritten);\n res.allocated.push(this.buffer);\n const nextRes = this._write(series.slice(amountWritten));\n res.flushed.push(...nextRes.flushed);\n res.allocated.push(...nextRes.allocated);\n return res;\n }\n}\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { TimeRange, type Series, type Destructor } from \"@synnaxlabs/x\";\nimport { Mutex } from \"async-mutex\";\n\nimport { convertSeriesFloat32 } from \"@/telem/aether/convertSeries\";\n\nexport interface DirtyReadResult {\n series: Series[];\n gaps: TimeRange[];\n}\n\nexport interface DirtyReadForWriteResult {\n series: Series[];\n gaps: TimeRange[];\n done: Destructor;\n}\n\n/**\n * A cache for channel data that only accepts pre-written arrays i.e. it performs\n * no allocatio, buffering, or modification of new arrays.\n */\nexport class Static {\n private readonly mu = new Mutex();\n private readonly entries: CachedRead[];\n\n constructor() {\n this.entries = [];\n }\n\n /**\n * @returns the total time range of all entries in the cache.\n */\n get extent(): TimeRange {\n if (this.entries.length === 0) return TimeRange.ZERO;\n const first = this.entries[0].timeRange;\n const last = this.entries[this.entries.length - 1].timeRange;\n return new TimeRange(first.start, last.end);\n }\n\n /**\n * @returns a list of all gaps between cache reads.\n */\n get gaps(): TimeRange[] {\n return this.entries.map((r) => r.gap);\n }\n\n write(tr: TimeRange, series: Series[]): void {\n if (series.length === 0) return;\n if (series.length === 0 || this.entries.some((e) => e.timeRange.overlapsWith(tr)))\n return;\n series = series.map((s) => convertSeriesFloat32(s));\n const read = new CachedRead(tr, series);\n const i = this.getInsertionIndex(tr);\n if (i !== this.entries.length) {\n read.gap = new TimeRange(this.entries[i].timeRange.end, tr.end);\n }\n if (i !== 0) {\n const prev = this.entries[i - 1];\n prev.gap = new TimeRange(prev.timeRange.end, tr.start);\n }\n this.entries.splice(i, 0, new CachedRead(tr, series));\n }\n\n private getInsertionIndex(tr: TimeRange): number {\n let i = 0;\n while (i < this.entries.length && this.entries[i].timeRange.start < tr.start) i++;\n return i;\n }\n\n async dirtyReadForWrite(tr: TimeRange): Promise<DirtyReadForWriteResult> {\n const done = await this.mu.acquire();\n return {\n ...this.dirtyRead(tr),\n done,\n };\n }\n\n dirtyRead(tr: TimeRange): DirtyReadResult {\n const reads = this.entries.filter((r) => r.timeRange.overlapsWith(tr));\n if (reads.length === 0) return { series: [], gaps: [tr] };\n const gaps = reads\n .map((r) => r.gap)\n .filter((t, i) => i !== reads.length - 1 && !t.isZero);\n const leadingGap = new TimeRange(tr.start, reads[0].timeRange.start);\n const trailingGap = new TimeRange(reads[reads.length - 1].timeRange.end, tr.end);\n if (leadingGap.isValid && !leadingGap.isZero) gaps.unshift(leadingGap);\n if (trailingGap.isValid && !trailingGap.isZero) gaps.push(trailingGap);\n return {\n series: reads.flatMap((r) => r.data).filter((d) => d.timeRange.overlapsWith(tr)),\n gaps,\n };\n }\n}\n\nclass CachedRead {\n timeRange: TimeRange;\n data: Series[];\n gap: TimeRange;\n\n constructor(timeRange: TimeRange, data: Series[]) {\n this.timeRange = timeRange;\n this.data = data;\n this.gap = TimeRange.ZERO;\n }\n}\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type Channel, TimeRange } from \"@synnaxlabs/client\";\nimport { type Series } from \"@synnaxlabs/x\";\n\nimport { Dynamic } from \"@/telem/client/cache/dynamic\";\nimport {\n type DirtyReadResult,\n Static,\n type DirtyReadForWriteResult,\n} from \"@/telem/client/cache/static\";\n\nexport class Cache {\n channel: Channel;\n static: Static;\n dynamic: Dynamic;\n\n constructor(dynamicCap: number, channel: Channel) {\n this.static = new Static();\n this.dynamic = new Dynamic(dynamicCap, channel.dataType);\n this.channel = channel;\n }\n\n writeDynamic(series: Series[]): Series[] {\n const { flushed, allocated } = this.dynamic.write(series);\n // Buffers that have been flushed out of the dynamic cache are written to the\n // static cache.\n if (flushed.length > 0) {\n this.static.write(\n new TimeRange(\n flushed[0].timeRange.start,\n flushed[flushed.length - 1].timeRange.end,\n ),\n flushed,\n );\n }\n return allocated;\n }\n\n writeStatic(tr: TimeRange, series: Series[]): void {\n this.static.write(tr, series);\n }\n\n dirtyRead(tr: TimeRange): DirtyReadResult {\n return this.static.dirtyRead(tr);\n }\n\n async dirtyReadForStaticWrite(tr: TimeRange): Promise<DirtyReadForWriteResult> {\n return await this.static.dirtyReadForWrite(tr);\n }\n}\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type alamos } from \"@synnaxlabs/alamos\";\nimport {\n type Channel,\n type channel,\n QueryError,\n type framer,\n type Synnax,\n} from \"@synnaxlabs/client\";\nimport {\n compare,\n type Destructor,\n type Series,\n TimeRange,\n type SeriesDigest,\n TimeSpan,\n} from \"@synnaxlabs/x\";\nimport { Mutex } from \"async-mutex\";\nimport { nanoid } from \"nanoid\";\n\nimport { cache } from \"@/telem/client/cache\";\n\nexport const CACHE_BUFFER_SIZE = 10000;\n\nexport type StreamHandler = (data: Record<channel.Key, ReadResponse>) => void;\n\n/**\n * A client that can be used to retrieve a channel from the Synnax cluster\n * by its key.\n */\nexport interface ChannelClient {\n /**\n * Retrieves a channel from the Synnax cluster by its key.\n *\n * @param key - The key of the channel to retrieve.\n * @returns the channel with the given key.\n * @throws QueryError if the channel does not exist.\n */\n retrieveChannel: (key: channel.Key) => Promise<Channel>;\n}\n\n/** A client that can be used to read telemetry from the Synnax cluster. */\nexport interface ReadClient {\n /**\n * Reads telemetry from the given channels for the given time range.\n *\n * @param tr - The time range to read from.\n * @param keys - The keys of the channels to read from.\n * @returns a record with a read response for each channel in keys, regardless of\n * whether or not data was found for the given chnannel. NOTE: Responses are not\n * guaranteed to have the same topology i.e each response may contain a different\n * number of Series with different lengths. It's up to the caller to use the\n * 'alignment' field of the Series to normalize the data shape if necessary.\n */\n read: (\n tr: TimeRange,\n keys: channel.Keys,\n ) => Promise<Record<channel.Key, ReadResponse>>;\n}\n\n/** A client that can be used to stream telemetry from the Synnax cluster. */\nexport interface StreamClient {\n stream: (handler: StreamHandler, keys: channel.Keys) => Promise<Destructor>;\n}\n\n/**\n * Client provides an interface for performing basic telemetry operations\n * against a Synnax cluster. This interface is a simplification of the Synnax\n * client to make it easy to stub out for testing.\n */\nexport interface Client extends ChannelClient, ReadClient, StreamClient {\n /** Close closes the client, releasing all resources from the cache. */\n close: () => void;\n}\n\n/**\n * Proxy is a Client implementation that proxies all operations to another Client,\n * allowing the underlying Client to be swapped out at runtime. If no Client is\n * set, all operations will throw an error.\n */\nexport class Proxy implements Client {\n readonly _client: Client | null = null;\n\n swap(client: Client | null): void {\n this._client?.close();\n this._client = client;\n }\n\n /** Implements ChannelClient. */\n async retrieveChannel(key: channel.Key): Promise<Channel> {\n return await this.client.retrieveChannel(key);\n }\n\n /** Implements ReadClient. */\n async read(\n tr: TimeRange,\n channels: channel.Keys,\n ): Promise<Record<channel.Key, ReadResponse>> {\n return await this.client.read(tr, channels);\n }\n\n /** Stream implements StreamClient. */\n async stream(handler: StreamHandler, keys: channel.Keys): Promise<Destructor> {\n return await this.client.stream(handler, keys);\n }\n\n /** Close implements CLient. */\n close(): void {\n this.client.close();\n }\n\n private get client(): Client {\n if (this._client == null) throw new QueryError(\"No cluster has been connected\");\n return this._client;\n }\n}\n\n/**\n * Core wraps a Synnax client to implement the pluto telemetry Client interface,\n * adding a transparent caching layer.\n */\nexport class Core implements Client {\n readonly key: string = nanoid();\n private readonly core: Synnax;\n private readonly ins: alamos.Instrumentation;\n private readonly mu: Mutex = new Mutex();\n private readonly cache = new Map<channel.Key, cache.Cache>();\n private readonly listeners = new Map<StreamHandler, channel.Keys>();\n private _streamer: framer.Streamer | null = null;\n\n constructor(wrap: Synnax, ins: alamos.Instrumentation) {\n this.core = wrap;\n this.ins = ins;\n }\n\n /** Implements ChannelClient. */\n async retrieveChannel(key: channel.Key): Promise<Channel> {\n return await this.core.channels.retrieve(key);\n }\n\n /** Implements ReadClient. */\n async read(\n tr: TimeRange,\n channels: channel.Keys,\n ): Promise<Record<channel.Key, ReadResponse>> {\n this.ins.L.debug(\"starting read\", { tr: tr.toPrettyString(), channels });\n const start = performance.now();\n // Instead of executing a fetch for each channel, we'll batch related time ranges\n // together to get the most out of each fetch.\n const toFetch = new Map<string, [TimeRange, channel.Keys]>();\n const releasers: Destructor[] = [];\n const responses: Record<channel.Key, ReadResponse> = {};\n\n try {\n for (const key of channels) {\n // Read from cache.\n const cache = await this.getCache(key);\n const { series, gaps, done } = await cache.dirtyReadForStaticWrite(tr);\n releasers.push(done);\n // In this case we have all the data we need and don't need to execute a fetch\n // for this channel.\n if (gaps.length === 0) responses[key] = new ReadResponse(cache.channel, series);\n\n // For each gap in the data, add it in the fetch map.\n gaps.forEach((gap) => {\n const exists = toFetch.get(gap.toString());\n if (exists == null) toFetch.set(gap.toString(), [gap, [key]]);\n else toFetch.set(gap.toString(), [gap, [...exists[1], key]]);\n });\n }\n\n if (toFetch.size === 0) {\n this.ins.L.debug(\"read satisfied by cache\", {\n tr: tr.toPrettyString(),\n channels,\n responses: responseDigests(Object.values(responses)),\n time: TimeSpan.milliseconds(performance.now() - start).toString(),\n });\n return responses;\n }\n\n this.ins.L.debug(\"read cache miss\", {\n tr: tr.toPrettyString(),\n channels,\n toFetch: Array.from(toFetch.values()).map(([r, k]) => ({\n timeRange: r.toPrettyString(),\n channels: k,\n })),\n responses: responseDigests(Object.values(responses)),\n });\n\n // Fetch any missing gaps in the data. Writing to the cache will automatically\n // order the data correctly.\n for (const [, [range, keys]] of toFetch) {\n const frame = await this.core.telem.read(range, keys);\n for (const key of keys) {\n const cache = await this.getCache(key);\n cache.writeStatic(range, frame.get(key));\n }\n }\n } finally {\n releasers.forEach((r) => r());\n }\n\n // Re-read from cache so we get correct ordering.\n for (const key of channels) {\n const cache = await this.getCache(key);\n const { series } = cache.dirtyRead(tr);\n responses[key] = new ReadResponse(cache.channel, series);\n }\n\n this.ins.L.debug(\"read satisfied by fetch\", {\n tr: tr.toPrettyString(),\n channels,\n responses: responseDigests(Object.values(responses)),\n time: TimeSpan.milliseconds(performance.now() - start).toString(),\n });\n\n return responses;\n }\n\n /** Implements StreamClient. */\n async stream(handler: StreamHandler, keys: channel.Keys): Promise<Destructor> {\n return await this.mu.runExclusive(async () => {\n this.ins.L.debug(\"updating stream\", { keys });\n this.listeners.set(handler, keys);\n const dynamicBuffs: Record<channel.Key, ReadResponse> = {};\n for (const key of keys) {\n const c = await this.getCache(key);\n dynamicBuffs[key] = new ReadResponse(\n c.channel,\n c.dynamic.buffer != null ? [c.dynamic.buffer] : [],\n );\n }\n handler(dynamicBuffs);\n await this.updateStreamer();\n return () => this.removeStreamHandler(handler);\n });\n }\n\n /** Implements Client. */\n close(): void {\n this.ins.L.info(\"closing client\", { key: this.key });\n this.cache.clear();\n this._streamer?.close();\n }\n\n private removeStreamHandler(handler: StreamHandler): void {\n void this.mu.runExclusive(async () => {\n this.ins.L.debug(\"removing stream handler\", { handler });\n if (this.listeners.delete(handler)) return await this.updateStreamer();\n this.ins.L.warn(\"attempted to remove non-existent stream handler\", { handler });\n });\n }\n\n private async getCache(key: channel.Key): Promise<cache.Cache> {\n const c = this.cache.get(key);\n if (c != null) return c;\n const channel = await this.core.channels.retrieve(key);\n const cache_ = new cache.Cache(CACHE_BUFFER_SIZE, channel);\n this.cache.set(key, cache_);\n return cache_;\n }\n\n private async updateStreamer(): Promise<void> {\n // Assemble the set of keys we need to stream.\n const keys = new Set<channel.Key>();\n this.listeners.forEach((v) => v.forEach((k) => keys.add(k)));\n\n // If we have no keys to stream, close the streamer to save network chatter.\n if (keys.size === 0) {\n this.ins.L.info(\"no keys to stream, closing streamer\");\n this._streamer?.close();\n this._streamer = null;\n return;\n }\n\n const arrKeys = Array.from(keys);\n if (compare.primitiveArrays(arrKeys, this._streamer?.keys ?? []) === compare.EQUAL)\n return;\n\n // Update or create the streamer.\n if (this._streamer == null) {\n this.ins.L.info(\"creating new streamer\", { keys: arrKeys });\n this._streamer = await this.core.telem.newStreamer(arrKeys);\n void this.start(this._streamer);\n }\n\n this.ins.L.debug(\"updating streamer\", { prev: this._streamer.keys, next: arrKeys });\n\n await this._streamer.update(arrKeys);\n }\n\n private async start(streamer: framer.Streamer): Promise<void> {\n for await (const frame of streamer) {\n const changed: ReadResponse[] = [];\n for (const k of frame.keys) {\n const series = frame.get(k);\n const cache = await this.getCache(k);\n const out = cache.writeDynamic(series);\n changed.push(new ReadResponse(cache.channel, out));\n }\n this.listeners.forEach((keys, handler) => {\n const notify = changed.filter((r) => keys.includes(r.channel.key));\n if (notify.length === 0) return;\n const d = Object.fromEntries(notify.map((r) => [r.channel.key, r]));\n handler(d);\n });\n }\n }\n}\n\nexport interface ReadResponseDigest {\n channel: channel.Key;\n timeRange: string;\n series: SeriesDigest[];\n}\n\nexport const responseDigests = (responses: ReadResponse[]): ReadResponseDigest[] =>\n responses.map((r) => r.digest);\n\nexport class ReadResponse {\n channel: Channel;\n data: Series[];\n\n constructor(channel: Channel, data: Series[]) {\n this.channel = channel;\n this.data = data;\n }\n\n get timeRange(): TimeRange {\n if (this.data.length === 0) return TimeRange.ZERO;\n const first = this.data[0].timeRange;\n const last = this.data[this.data.length - 1].timeRange;\n return new TimeRange(first.start, last.end);\n }\n\n get digest(): ReadResponseDigest {\n return {\n channel: this.channel.key,\n timeRange: this.timeRange.toPrettyString(),\n series: this.data.map((s) => s.digest),\n };\n }\n}\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type Instrumentation } from \"@synnaxlabs/alamos\";\nimport { UnexpectedError } from \"@synnaxlabs/client\";\nimport { z } from \"zod\";\n\nimport { aether } from \"@/aether/aether\";\nimport { alamos } from \"@/alamos/aether\";\nimport { synnax } from \"@/synnax/aether\";\nimport { telem } from \"@/telem/aether\";\nimport { client } from \"@/telem/client\";\n\nimport { type CompoundTelemFactory } from \"./factory\";\n\nexport type ProviderState = z.input<typeof providerStateZ>;\nexport const providerStateZ = z.object({});\n\ninterface InternalState {\n instrumentation: Instrumentation;\n}\n\nexport class BaseProvider\n extends aether.Composite<typeof providerStateZ, InternalState>\n implements telem.Provider\n{\n client: client.Proxy = new client.Proxy();\n factory: CompoundTelemFactory = telem.factory(this.client);\n\n static readonly TYPE = \"TelemProvider\";\n static readonly stateZ = providerStateZ;\n schema = BaseProvider.stateZ;\n\n create<T>(spec: telem.Spec): T {\n const { instrumentation: I } = this.internal;\n I.L.debug(\"creating telem\", { spec });\n const telem = this.factory.create(spec);\n if (telem == null)\n throw new UnexpectedError(\n `Telemetry service could not find a source for type ${spec.type}`,\n );\n return telem as T;\n }\n\n registerFactory(f: telem.Factory): void {\n this.factory.add(f);\n }\n\n equals(other: telem.Provider): boolean {\n if (!(other instanceof BaseProvider)) return false;\n return this.client._client === other.client._client;\n }\n\n afterUpdate(): void {\n const client_ = synnax.use(this.ctx);\n const I = alamos.useInstrumentation(this.ctx, \"telem\");\n this.internal.instrumentation = I.child(\"provider\");\n if (client_ != null) {\n I.L.info(\"swapping client\", { client: client_ });\n this.client.swap(new client.Core(client_, this.internal.instrumentation));\n }\n return telem.setProvider(this.ctx, this);\n }\n}\n\nexport const REGISTRY: aether.ComponentRegistry = {\n [BaseProvider.TYPE]: BaseProvider,\n};\n","export default \"precision mediump float;\\nuniform highp vec4 u_color;\\n\\nvoid main(void) {\\n gl_FragColor = u_color;\\n}\\n\"","export default \"attribute float a_x;\\nattribute float a_y;\\nattribute vec2 a_translate;\\n\\nuniform vec2 u_region_scale;\\nuniform vec2 u_region_offset;\\nuniform vec2 u_scale;\\nuniform vec2 u_offset;\\n\\nvoid main(void) {\\n vec2 transformed = u_region_scale * (u_scale * vec2(a_x,a_y) + u_offset) + u_region_offset;\\n transformed = transformed + a_translate;\\n gl_Position = vec4(transformed, 0.0, 1.0);\\n}\\n\"","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { scale } from \"@synnaxlabs/x\";\n\nexport class SugaredOffscreenCanvasRenderingContext2D\n implements OffscreenCanvasRenderingContext2D\n{\n readonly scale_: scale.XY;\n readonly wrapped: OffscreenCanvasRenderingContext2D;\n\n constructor(\n wrap: OffscreenCanvasRenderingContext2D,\n scale_: scale.XY = scale.XY.IDENTITY,\n ) {\n this.wrapped = wrap;\n this.scale_ = scale_;\n }\n\n reset(): void {\n this.wrapped.reset();\n }\n\n applyScale(scale: scale.XY): SugaredOffscreenCanvasRenderingContext2D {\n return new SugaredOffscreenCanvasRenderingContext2D(this, scale);\n }\n\n get canvas(): OffscreenCanvas {\n return this.wrapped.canvas;\n }\n\n get miterLimit(): number {\n return this.wrapped.miterLimit;\n }\n\n set miterLimit(value: number) {\n this.wrapped.miterLimit = this.scale_.x.dim(value);\n }\n\n get globalAlpha(): number {\n return this.wrapped.globalAlpha;\n }\n\n set globalAlpha(value: number) {\n this.wrapped.globalAlpha = value;\n }\n\n get globalCompositeOperation(): GlobalCompositeOperation {\n return this.wrapped.globalCompositeOperation;\n }\n\n set globalCompositeOperation(value: GlobalCompositeOperation) {\n this.wrapped.globalCompositeOperation = value;\n }\n\n get fillStyle(): string | CanvasGradient | CanvasPattern {\n return this.wrapped.fillStyle;\n }\n\n set fillStyle(value: string | CanvasGradient | CanvasPattern) {\n this.wrapped.fillStyle = value;\n }\n\n get strokeStyle(): string | CanvasGradient | CanvasPattern {\n return this.wrapped.strokeStyle;\n }\n\n set strokeStyle(value: string | CanvasGradient | CanvasPattern) {\n this.wrapped.strokeStyle = value;\n }\n\n commit(): void {\n this.wrapped.commit();\n }\n\n drawImage(image: CanvasImageSource, dx: number, dy: number): void;\n drawImage(\n image: CanvasImageSource,\n dx: number,\n dy: number,\n dw: number,\n dh: number,\n ): void;\n drawImage(\n image: CanvasImageSource,\n sx: number,\n sy: number,\n sw: number,\n sh: number,\n dx: number,\n dy: number,\n dw: number,\n dh: number,\n ): void;\n drawImage(image: CanvasImageSource, dx: number, dy: number): void;\n drawImage(\n image: CanvasImageSource,\n dx: number,\n dy: number,\n dw: number,\n dh: number,\n ): void;\n drawImage(\n image: CanvasImageSource,\n sx: number,\n sy: number,\n sw: number,\n sh: number,\n dx: number,\n dy: number,\n dw: number,\n dh: number,\n ): void;\n drawImage(\n image: unknown,\n sx: unknown,\n sy: unknown,\n sw?: unknown,\n sh?: unknown,\n dx?: unknown,\n dy?: unknown,\n dw?: unknown,\n dh?: unknown,\n ): void {\n // @ts-expect-error - typescript overloads cause issues here\n this.wrapped.drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh);\n }\n\n beginPath(): void {\n this.wrapped.beginPath();\n }\n\n clip(fillRule?: CanvasFillRule | undefined): void;\n clip(path: Path2D, fillRule?: CanvasFillRule | undefined): void;\n clip(path?: unknown, fillRule?: unknown): void {\n // @ts-expect-error - typescript overloads cause issues here\n this.wrapped.clip(path, fillRule);\n }\n\n fill(fillRule?: CanvasFillRule | undefined): void;\n fill(path: Path2D, fillRule?: CanvasFillRule | undefined): void;\n fill(path?: unknown, fillRule?: unknown): void {\n if (path == null) return this.wrapped.fill();\n // @ts-expect-error - typescript overloads cause issues here\n this.wrapped.fill(path, fillRule);\n }\n\n isPointInPath(x: number, y: number, fillRule?: CanvasFillRule | undefined): boolean;\n isPointInPath(\n path: Path2D,\n x: number,\n y: number,\n fillRule?: CanvasFillRule | undefined,\n ): boolean;\n isPointInPath(path: unknown, x: unknown, y?: unknown, fillRule?: unknown): boolean {\n // @ts-expect-error - typescript overloads cause issues here\n return this.wrapped.isPointInPath(path, x, y, fillRule);\n }\n\n isPointInStroke(x: number, y: number): boolean;\n isPointInStroke(path: Path2D, x: number, y: number): boolean;\n isPointInStroke(path: unknown, x: unknown, y?: unknown): boolean {\n // @ts-expect-error - typescript overloads cause issues here\n return this.wrapped.isPointInStroke(path, x, y);\n }\n\n stroke(): void;\n stroke(path: Path2D): void;\n stroke(path?: Path2D): void {\n if (path == null) return this.wrapped.stroke();\n this.wrapped.stroke(path);\n }\n\n createConicGradient(startAngle: number, x: number, y: number): CanvasGradient {\n return this.wrapped.createConicGradient(startAngle, x, y);\n }\n\n createLinearGradient(x0: number, y0: number, x1: number, y1: number): CanvasGradient {\n return this.wrapped.createLinearGradient(x0, y0, x1, y1);\n }\n\n createPattern(\n image: CanvasImageSource,\n repetition: string | null,\n ): CanvasPattern | null {\n return this.wrapped.createPattern(image, repetition);\n }\n\n createRadialGradient(\n x0: number,\n y0: number,\n r0: number,\n x1: number,\n y1: number,\n r1: number,\n ): CanvasGradient {\n return this.wrapped.createRadialGradient(x0, y0, r0, x1, y1, r1);\n }\n\n get filter(): string {\n return this.wrapped.filter;\n }\n\n set filter(value: string) {\n this.wrapped.filter = value;\n }\n\n createImageData(\n sw: number,\n sh: number,\n settings?: ImageDataSettings | undefined,\n ): ImageData;\n createImageData(imagedata: ImageData): ImageData;\n createImageData(sw: unknown, sh?: unknown, settings?: unknown): ImageData {\n // @ts-expect-error - typescript overloads cause issues here\n return this.wrapped.createImageData(sw, sh, settings);\n }\n\n getImageData(\n sx: number,\n sy: number,\n sw: number,\n sh: number,\n settings?: ImageDataSettings | undefined,\n ): ImageData {\n return this.wrapped.getImageData(sx, sy, sw, sh, settings);\n }\n\n putImageData(imagedata: ImageData, dx: number, dy: number): void;\n putImageData(\n imagedata: ImageData,\n dx: number,\n dy: number,\n dirtyX: number,\n dirtyY: number,\n dirtyWidth: number,\n dirtyHeight: number,\n ): void;\n putImageData(\n imagedata: unknown,\n dx: unknown,\n dy: unknown,\n dirtyX?: unknown,\n dirtyY?: unknown,\n dirtyWidth?: unknown,\n dirtyHeight?: unknown,\n ): void {\n // @ts-expect-error - typescript overloads cause issues here\n this.wrapped.putImageData(\n imagedata,\n dx,\n dy,\n dirtyX,\n dirtyY,\n dirtyWidth,\n dirtyHeight,\n );\n }\n\n get imageSmoothingEnabled(): boolean {\n return this.wrapped.imageSmoothingEnabled;\n }\n\n set imageSmoothingEnabled(value: boolean) {\n this.wrapped.imageSmoothingEnabled = value;\n }\n\n get imageSmoothingQuality(): ImageSmoothingQuality {\n return this.wrapped.imageSmoothingQuality;\n }\n\n set imageSmoothingQuality(value: ImageSmoothingQuality) {\n this.wrapped.imageSmoothingQuality = value;\n }\n\n arc(\n x: number,\n y: number,\n radius: number,\n startAngle: number,\n endAngle: number,\n counterclockwise?: boolean | undefined,\n ): void {\n this.wrapped.arc(\n this.scale_.x.pos(x),\n this.scale_.y.pos(y),\n this.scale_.x.dim(radius),\n startAngle,\n endAngle,\n counterclockwise,\n );\n }\n\n arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void {\n this.wrapped.arcTo(\n this.scale_.x.pos(x1),\n this.scale_.y.pos(y1),\n this.scale_.x.pos(x2),\n this.scale_.y.pos(y2),\n this.scale_.x.dim(radius),\n );\n }\n\n bezierCurveTo(\n cp1x: number,\n cp1y: number,\n cp2x: number,\n cp2y: number,\n x: number,\n y: number,\n ): void {\n this.wrapped.bezierCurveTo(\n this.scale_.x.pos(cp1x),\n this.scale_.y.pos(cp1y),\n this.scale_.x.pos(cp2x),\n this.scale_.y.pos(cp2y),\n this.scale_.x.pos(x),\n this.scale_.y.pos(y),\n );\n }\n\n closePath(): void {\n this.wrapped.closePath();\n }\n\n ellipse(\n x: number,\n y: number,\n radiusX: number,\n radiusY: number,\n rotation: number,\n startAngle: number,\n endAngle: number,\n counterclockwise?: boolean | undefined,\n ): void {\n this.wrapped.ellipse(\n this.scale_.x.pos(x),\n this.scale_.y.pos(y),\n this.scale_.x.dim(radiusX),\n this.scale_.y.dim(radiusY),\n rotation,\n startAngle,\n endAngle,\n counterclockwise,\n );\n }\n\n lineTo(x: number, y: number): void {\n this.wrapped.lineTo(this.scale_.x.pos(x), this.scale_.y.pos(y));\n }\n\n moveTo(x: number, y: number): void {\n this.wrapped.moveTo(this.scale_.x.pos(x), this.scale_.y.pos(y));\n }\n\n quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void {\n this.wrapped.quadraticCurveTo(\n this.scale_.x.pos(cpx),\n this.scale_.y.pos(cpy),\n this.scale_.x.pos(x),\n this.scale_.y.pos(y),\n );\n }\n\n rect(x: number, y: number, w: number, h: number): void {\n this.wrapped.rect(\n this.scale_.x.pos(x),\n this.scale_.y.pos(y),\n this.scale_.x.dim(w),\n this.scale_.y.dim(h),\n );\n }\n\n roundRect(\n x: number,\n y: number,\n w: number,\n h: number,\n radii?: number | DOMPointInit | Array<number | DOMPointInit> | undefined,\n ): void {\n this.wrapped.roundRect(\n this.scale_.x.pos(x),\n this.scale_.y.pos(y),\n this.scale_.x.dim(w),\n this.scale_.y.dim(h),\n typeof radii === \"number\" ? this.scale_.x.dim(radii) : radii,\n );\n }\n\n get lineCap(): CanvasLineCap {\n return this.wrapped.lineCap;\n }\n\n set lineCap(value: CanvasLineCap) {\n this.wrapped.lineCap = value;\n }\n\n get lineDashOffset(): number {\n return this.wrapped.lineDashOffset;\n }\n\n set lineDashOffset(value: number) {\n this.wrapped.lineDashOffset = this.scale_.x.dim(value);\n }\n\n get lineJoin(): CanvasLineJoin {\n return this.wrapped.lineJoin;\n }\n\n set lineJoin(value: CanvasLineJoin) {\n this.wrapped.lineJoin = value;\n }\n\n get lineWidth(): number {\n return this.wrapped.lineWidth;\n }\n\n set lineWidth(value: number) {\n this.wrapped.lineWidth = this.scale_.x.dim(value);\n }\n\n getLineDash(): number[] {\n return this.wrapped.getLineDash();\n }\n\n setLineDash(segments: number[]): void;\n setLineDash(segments: Iterable<number>): void;\n setLineDash(segments: number[] | Iterable<number>): void {\n const scaled = Array.from(segments).map((v) => this.scale_.x.dim(v));\n this.wrapped.setLineDash(scaled);\n }\n\n clearRect(x: number, y: number, w: number, h: number): void {\n this.wrapped.clearRect(x, y, w, h);\n }\n\n fillRect(x: number, y: number, w: number, h: number): void {\n this.wrapped.fillRect(\n this.scale_.x.pos(x),\n this.scale_.y.pos(y),\n this.scale_.x.dim(w),\n this.scale_.y.dim(h),\n );\n }\n\n strokeRect(x: number, y: number, w: number, h: number): void {\n this.wrapped.strokeRect(\n this.scale_.x.pos(x),\n this.scale_.y.pos(y),\n this.scale_.x.dim(w),\n this.scale_.y.dim(h),\n );\n }\n\n get shadowBlur(): number {\n return this.wrapped.shadowBlur;\n }\n\n set shadowBlur(value: number) {\n this.wrapped.shadowBlur = value;\n }\n\n get shadowColor(): string {\n return this.wrapped.shadowColor;\n }\n\n set shadowColor(value: string) {\n this.wrapped.shadowColor = value;\n }\n\n get shadowOffsetX(): number {\n return this.wrapped.shadowOffsetX;\n }\n\n set shadowOffsetX(value: number) {\n this.wrapped.shadowOffsetX = value;\n }\n\n get shadowOffsetY(): number {\n return this.wrapped.shadowOffsetY;\n }\n\n restore(): void {\n this.wrapped.restore();\n }\n\n save(): void {\n this.wrapped.save();\n }\n\n fillText(text: string, x: number, y: number, maxWidth?: number | undefined): void {\n this.wrapped.fillText(\n text,\n this.scale_.x.pos(x),\n this.scale_.y.pos(y),\n maxWidth != null ? this.scale_.x.dim(maxWidth) : undefined,\n );\n }\n\n measureText(text: string): TextMetrics {\n this.wrapped.font = scaleFontSize(this.wrapped.font, this.scale_.x.reverse());\n const metrics = this.wrapped.measureText(text);\n this.wrapped.font = scaleFontSize(this.wrapped.font, this.scale_.x);\n return metrics;\n }\n\n strokeText(text: string, x: number, y: number, maxWidth?: number | undefined): void {\n this.wrapped.strokeText(\n text,\n this.scale_.x.pos(x),\n this.scale_.y.pos(y),\n maxWidth != null ? this.scale_.x.dim(maxWidth) : undefined,\n );\n }\n\n get direction(): CanvasDirection {\n return this.wrapped.direction;\n }\n\n set direction(value: CanvasDirection) {\n this.wrapped.direction = value;\n }\n\n get font(): string {\n return this.wrapped.font;\n }\n\n set font(value: string) {\n this.wrapped.font = scaleFontSize(value, this.scale_.x);\n }\n\n get fontKerning(): CanvasFontKerning {\n return this.wrapped.fontKerning;\n }\n\n set fontKerning(value: CanvasFontKerning) {\n this.wrapped.fontKerning = value;\n }\n\n get textAlign(): CanvasTextAlign {\n return this.wrapped.textAlign;\n }\n\n set textAlign(value: CanvasTextAlign) {\n this.wrapped.textAlign = value;\n }\n\n get textBaseline(): CanvasTextBaseline {\n return this.wrapped.textBaseline;\n }\n\n set textBaseline(value: CanvasTextBaseline) {\n this.wrapped.textBaseline = value;\n }\n\n getTransform(): DOMMatrix {\n return this.wrapped.getTransform();\n }\n\n resetTransform(): void {\n this.wrapped.resetTransform();\n }\n\n rotate(angle: number): void {\n this.wrapped.rotate(angle);\n }\n\n scale(x: number, y: number): void {\n this.wrapped.scale(x, y);\n }\n\n setTransform(a: number, b: number, c: number, d: number, e: number, f: number): void;\n setTransform(transform?: DOMMatrix2DInit | undefined): void;\n setTransform(\n a?: unknown,\n b?: unknown,\n c?: unknown,\n d?: unknown,\n e?: unknown,\n f?: unknown,\n ): void {\n // @ts-expect-error\n this.wrapped.setTransform(a, b, c, d, e, f);\n }\n\n transform(a: number, b: number, c: number, d: number, e: number, f: number): void {\n this.wrapped.transform(a, b, c, d, e, f);\n }\n\n translate(x: number, y: number): void {\n this.wrapped.translate(x, y);\n }\n}\n\n// fInd the term 'px' and then get all the numbers before it, INCLUDING DECIMALS.\n// /(\\d+)px/ is wrong, so don't use it.\nconst FONT_REGEX = /(\\d+(\\.\\d+)?)px/;\n\nconst scaleFontSize = (font: string, scale: scale.Scale): string => {\n const fontSize = Number(font.match(FONT_REGEX)?.[1]);\n if (fontSize == null) return font;\n const scaled = scale.dim(fontSize);\n return font.replace(FONT_REGEX, `${scaled}px`);\n};\n","export default \"precision mediump float;\\n\\nvoid main(void) {\\n gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); \\n}\\n\"","export default \"attribute vec4 a_position;\\n\\nvoid main(void) {\\n gl_Position = a_position;\\n}\\n\"","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type Destructor, xy } from \"@synnaxlabs/x\";\n\nimport { type color } from \"@/color/core\";\nimport { type Context } from \"@/vis/render/context\";\n\nconst errorCompile = (msg: string): Error =>\n new Error(`failed to compile webgl program: ${msg}`);\n\nconst ERROR_BAD_SHADER = new Error(\"null shader encountered\");\n\n/**\n * A general purpose compiler and utility container for workign with WebGL programs.\n */\nexport class GLProgram {\n /** The render context used by this program. */\n readonly ctx: Context;\n /** The underlying webgl program. */\n readonly prog: WebGLProgram;\n /** The code for the vertex shader. */\n private readonly vertShader: string;\n /** The code for the fragment shader. */\n private readonly fragShader: string;\n\n /**\n * @constructor compiles the given vertex and fragment shaders under the given\n * render context into a program.\n *\n * @param ctx - The render context to use.\n * @param vertShader - The vertex shader code.\n * @param fragShader - The fragment shader code.\n */\n constructor(ctx: Context, vertShader: string, fragShader: string) {\n this.ctx = ctx;\n const prog = ctx.gl.createProgram();\n if (prog == null) throw errorCompile(\"failed to create program\");\n this.prog = prog;\n this.vertShader = vertShader;\n this.fragShader = fragShader;\n this.compile();\n }\n\n /** Sets the current program as the active program used by the context. */\n setAsActive(): Destructor {\n this.ctx.gl.useProgram(this.prog);\n return (): void => this.ctx.gl.useProgram(null);\n }\n\n /**\n * Sets a uniform XY coordinate value.\n *\n * @param name - The name of the uniform.\n * @param value - The value to set.\n */\n uniformXY(name: string, value: xy.Crude): void {\n this.ctx.gl.uniform2fv(this.getUniformLoc(name), xy.couple(xy.construct(value)));\n }\n\n /**\n * Sets a uniform color value.\n *\n * @param name - The name of the uniform.\n * @param value - The value to set.\n */\n uniformColor(name: string, value: color.Color): void {\n this.ctx.gl.uniform4fv(this.getUniformLoc(name), value.rgba1);\n }\n\n private getUniformLoc(name: string): WebGLUniformLocation {\n const loc = this.ctx.gl.getUniformLocation(this.prog, name);\n if (loc == null) throw new Error(`unexpected missing uniform ${name}`);\n return loc;\n }\n\n private compile(): void {\n const gl = this.ctx.gl;\n this.compileShader(this.vertShader, gl.VERTEX_SHADER);\n this.compileShader(this.fragShader, gl.FRAGMENT_SHADER);\n gl.linkProgram(this.prog);\n }\n\n private compileShader(shader: string, type: number): void {\n const gl = this.ctx.gl;\n const vs = gl.createShader(type);\n if (vs == null) throw ERROR_BAD_SHADER;\n gl.shaderSource(vs, shader);\n gl.compileShader(vs);\n const compiled = gl.getShaderParameter(vs, gl.COMPILE_STATUS) as GLboolean;\n if (!compiled) {\n const error = gl.getShaderInfoLog(vs);\n gl.deleteShader(vs);\n throw errorCompile(error ?? \"unknown\");\n }\n gl.attachShader(this.prog, vs);\n }\n}\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport FRAG_SHADER from \"@/vis/render/clear/frag.glsl?raw\";\nimport VERT_SHADER from \"@/vis/render/clear/vert.glsl?raw\";\nimport { type Context } from \"@/vis/render/context\";\nimport { GLProgram } from \"@/vis/render/GLProgram\";\n\nconst POSITIONS = new Float32Array([0, 0, 0, 0, 0, 0]);\n\n/**\n * You may be wondering, why does this program that draws a colorless, zero-footprint\n * triangle exist? It turns out that the WeBGL implementation on windows doesn't actually\n * clear a scissored region of the screen when you call `gl.clear`, you actually need\n * to make a draw call to replace what's currently in the framebuffer. This is a\n * workaround that does exactly that.\n */\nexport class Program extends GLProgram {\n private readonly positionBuffer: WebGLBuffer;\n\n constructor(ctx: Context) {\n super(ctx, VERT_SHADER, FRAG_SHADER);\n this.positionBuffer = ctx.gl.createBuffer()!;\n ctx.gl.bindBuffer(ctx.gl.ARRAY_BUFFER, this.positionBuffer);\n ctx.gl.bufferData(ctx.gl.ARRAY_BUFFER, POSITIONS, ctx.gl.STATIC_DRAW);\n }\n\n exec(): void {\n const { gl } = this.ctx;\n const positionAttr = gl.getAttribLocation(this.prog, \"a_position\");\n gl.bindBuffer(gl.ARRAY_BUFFER, this.positionBuffer);\n const vao = gl.createVertexArray();\n gl.bindVertexArray(vao);\n gl.enableVertexAttribArray(positionAttr);\n gl.vertexAttribPointer(positionAttr, 2, gl.FLOAT, false, 0, 0);\n this.setAsActive();\n gl.drawArrays(gl.TRIANGLES, 0, 3);\n }\n}\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { Mutex } from \"async-mutex\";\n\nimport { type CanvasVariant } from \"@/vis/render/context\";\n\n/**\n * An async function that executes the render in the loop. This function can return an\n * optional cleanup that is executed before the next render. This cleanup function will\n * be passed the signature of the previous render request.\n */\nexport type Func = () => Promise<Cleanup | undefined>;\n\n/**\n * A request to render a component in the aether visualization tree. Submit a complete\n * version of this request to the {@link Loop} to render a component.\n */\nexport interface Request {\n /**\n * A key identifying the component requesting the render. This helps to prevent\n * duplicate renders for the same component from being executed.\n */\n key: string;\n /**\n * A priority (\"high\" or \"low\") for the render. High priority renders that have\n * an equal or greater number of canvases will replace low priority renders already\n * requested.\n */\n priority: Priority;\n /**\n * A list of canvases that the component is requesting to render to. This provides\n * information to cleanup functions about which canvases to clear. The component should\n * ONLY render to these canvases, otherwise the cleanup function may unnecessarily\n * clear canvases that should persist.\n */\n canvases: CanvasVariant[];\n /**\n * An async function that performs the render. This function can return an optional\n * cleanup that is executed before the next render. This cleanup function will be\n * passed the signature of the previous render request.\n */\n render: Func;\n}\n\n/**\n * A cleanup function that receives the request from the previous render. Cleanup\n * functions should clear canvases and other resources that need to be freed from\n * the previous render.\n */\nexport type Cleanup = (req: Request) => void;\n\nexport type Priority = \"high\" | \"low\";\n\nconst PRIORITY_ORDER: Record<Priority, number> = { high: 1, low: 0 };\n\n/**\n * Implements the core rendering loop for Synnax's aether components, accepting requests\n * into a queue and rendering them in sync with the browser animation frame.\n */\nexport class Loop {\n /** Protect concurrent access on the requests map. */\n private readonly mutex = new Mutex();\n /** Stores the current requests for rendering. */\n private readonly requests = new Map<string, Request>();\n /** Stores render cleanup functions for clearing canvases and other resources. */\n private readonly cleanup = new Map<string, Cleanup>();\n\n constructor() {\n void this.start();\n }\n\n /**\n * Sets a new request in the queue according to a set of rules:\n *\n * 1. If no request with the same key exists, add the request to the queue.\n * 2. If a request with the same key exists, replace it if the new request has a\n * greater or equal priority and a greater or equal number of canvases that are\n * being rendered to.\n *\n * @param req - The request to set.\n */\n async set(req: Request): Promise<void> {\n await this.mutex.runExclusive((): undefined => {\n const existing = this.requests.get(req.key);\n if (existing == null) {\n this.requests.set(req.key, req);\n return;\n }\n const priorityOK =\n PRIORITY_ORDER[req.priority] >= PRIORITY_ORDER[existing.priority];\n const canvasesOK = req.canvases.length >= existing.canvases.length;\n if (priorityOK && canvasesOK) this.requests.set(req.key, req);\n });\n }\n\n /** Execute the render. */\n private async render(): Promise<void> {\n await this.mutex.runExclusive(async () => {\n if (this.requests.size === 0) return;\n const { requests: queue, cleanup } = this;\n for (const [k, f] of cleanup.entries()) {\n /** Execute all of our cleanup functions BEFORE we re-render. */\n const req = queue.get(k);\n if (req != null) {\n f(req);\n cleanup.delete(k);\n }\n }\n /** Render components. */\n for (const req of queue.values()) {\n const cleanup = await req.render();\n // We're safe to set the cleanup function here because we know that req.key\n // is unique in the queue.\n if (cleanup != null) this.cleanup.set(req.key, cleanup);\n }\n this.requests.clear();\n });\n }\n\n /** Starts the rendering loop. */\n private async start(): Promise<void> {\n do {\n try {\n await this.render();\n } catch (e) {\n console.error(e);\n }\n await this.sleep();\n } while (true);\n }\n\n private async sleep(): Promise<number> {\n return await new Promise(requestAnimationFrame);\n }\n}\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport {\n type Destructor,\n box,\n scale,\n xy,\n dimensions,\n type runtime,\n} from \"@synnaxlabs/x\";\nimport { z } from \"zod\";\n\nimport { type aether } from \"@/aether/aether\";\nimport { color } from \"@/color/core\";\nimport { CSS } from \"@/css\";\nimport { SugaredOffscreenCanvasRenderingContext2D } from \"@/vis/draw2d/canvas\";\nimport { clear } from \"@/vis/render/clear\";\nimport { Loop } from \"@/vis/render/loop\";\n\nexport type CanvasVariant = \"upper2d\" | \"lower2d\" | \"gl\";\n\n/**\n * A hybrid rendering context containing both 2D and WebGL canvases and contexts.\n * Implements several utility methods for correctly scaling the canvas, restricting\n * drawing to a region, and erasing portions of the canvas.\n */\nexport class Context {\n /* The canvas element used by WebGL. */\n readonly glCanvas: OffscreenCanvas;\n\n /** The canvas element used by the 2D canvas. */\n readonly upper2dCanvas: OffscreenCanvas;\n\n /** The canvas element used by the 2D canvas. */\n readonly lower2dCanvas: OffscreenCanvas;\n\n /** The WebGL rendering context. */\n readonly gl: WebGL2RenderingContext;\n\n /** A 2D canvas that sits below the WebGL canvas. */\n lower2d: SugaredOffscreenCanvasRenderingContext2D;\n\n /** A 2D canvas that sits above the WebGL canvas. */\n upper2d: SugaredOffscreenCanvasRenderingContext2D;\n\n /** The region the canvas occupies in pixel space */\n region: box.Box;\n\n /** The device pixel ratio of the canvas */\n dpr: number;\n\n /** queue render transitions onto the stack */\n readonly loop: Loop;\n\n /** See the @link{clear.Program} for why this is necessary. */\n private readonly clearProgram?: clear.Program;\n\n private readonly os: runtime.OS;\n\n private static readonly CONTEXT_KEY = CSS.B(\"render-context\");\n\n static create(\n ctx: aether.Context,\n glCanvas: OffscreenCanvas,\n lower2dCanvas: OffscreenCanvas,\n upper2dCanvas: OffscreenCanvas,\n os: runtime.OS,\n ): Context {\n const render = new Context(glCanvas, lower2dCanvas, upper2dCanvas, os);\n ctx.set(Context.CONTEXT_KEY, render);\n return render;\n }\n\n private constructor(\n glCanvas: OffscreenCanvas,\n lower2dCanvas: OffscreenCanvas,\n upper2dCanvas: OffscreenCanvas,\n os: runtime.OS,\n ) {\n this.upper2dCanvas = upper2dCanvas;\n this.lower2dCanvas = lower2dCanvas;\n this.glCanvas = glCanvas;\n this.os = os;\n this.loop = new Loop();\n\n const lowerCtx = this.lower2dCanvas.getContext(\"2d\");\n if (lowerCtx == null) throw new Error(\"Could not get 2D context\");\n this.lower2d = new SugaredOffscreenCanvasRenderingContext2D(lowerCtx);\n\n const upperCtx = this.upper2dCanvas.getContext(\"2d\");\n if (upperCtx == null) throw new Error(\"Could not get 2D context\");\n this.upper2d = new SugaredOffscreenCanvasRenderingContext2D(upperCtx);\n\n const gl = this.glCanvas.getContext(\"webgl2\", {\n preserveDrawingBuffer: true,\n depth: false,\n });\n if (gl == null) throw new Error(\"Could not get WebGL context\");\n this.gl = gl;\n\n this.region = box.ZERO;\n this.dpr = 1;\n\n if (this.os === \"Windows\") this.clearProgram = new clear.Program(this);\n }\n\n static useOptional(ctx: aether.Context): Context | null {\n return ctx.getOptional<Context>(Context.CONTEXT_KEY);\n }\n\n static use(ctx: aether.Context): Context {\n return ctx.get<Context>(Context.CONTEXT_KEY);\n }\n\n update(ctx: aether.Context): void {\n ctx.set(Context.CONTEXT_KEY, this);\n }\n\n /**\n * Resizes the canvas to the given region and device pixel ratio. Ensuring\n * that all drawing operations and viewports are scaled correctly.\n */\n resize(region: box.Box, dpr: number): void {\n if (box.equals(this.region, region) && this.dpr === dpr) return;\n this.region = region;\n this.dpr = dpr;\n this.resizeCanvas(this.glCanvas);\n this.resizeCanvas(this.upper2dCanvas);\n this.resizeCanvas(this.lower2dCanvas);\n this.lower2d.scale(this.dpr, this.dpr);\n this.upper2d.scale(this.dpr, this.dpr);\n this.gl.viewport(0, 0, box.width(region) * dpr, box.height(region) * dpr);\n }\n\n private resizeCanvas(canvas: OffscreenCanvas): void {\n canvas.width = box.width(this.region) * this.dpr;\n canvas.height = box.height(this.region) * this.dpr;\n }\n\n /** @returns the aspect ratio of the canvas. */\n get aspect(): number {\n return box.aspect(this.region);\n }\n\n /**\n * Takes the given box in PIXEL space and produces a transform\n * in CLIP space representing the sub-region represented by the box\n * in the canvas.\n */\n scaleRegion(b: box.Box): scale.XY {\n return new scale.XY(\n // Accept a value in decimal.\n scale.Scale.scale(0, 1)\n // Turn it to pixels relative to the child width.\n .scale(box.width(b))\n // Translate the value to the left based on the parent and childs position.\n .translate(box.left(b))\n // Rebound the scale to the canvas width.\n .reBound(box.width(this.region))\n // Rescale the value to clip space.\n .scale(-1, 1),\n // Accept a value in decimal.\n scale.Scale.scale(0, 1)\n // Turn it to pixels relative to the child height.\n .scale(box.height(b))\n // Invert the scale since we read pixels from the top.\n .invert()\n // Translate the value to the top based on the parent and childs position.\n .translate(box.top(b))\n // Rebound the scale to the canvas height.\n .reBound(box.height(this.region))\n // Rescale the value to clip space.\n .scale(-1, 1)\n // Invert the scale since we read clip space from the bottom.\n .invert(),\n );\n }\n\n scissor(\n region: box.Box,\n overscan: xy.XY = xy.ZERO,\n canvases: CanvasVariant[],\n ): Destructor {\n const destructor: Destructor[] = [];\n if (canvases.includes(\"upper2d\"))\n destructor.push(this.scissorCanvas(this.upper2d, region, overscan));\n if (canvases.includes(\"lower2d\"))\n destructor.push(this.scissorCanvas(this.lower2d, region, overscan));\n if (canvases.includes(\"gl\")) destructor.push(this.scissorGL(region, overscan));\n return () => destructor.forEach((d) => d());\n }\n\n private scissorCanvas(\n c: OffscreenCanvasRenderingContext2D,\n region: box.Box,\n overscan: xy.XY = xy.ZERO,\n ): Destructor {\n const p = new Path2D();\n region = applyOverscan(region, overscan);\n p.rect(...xy.couple(box.topLeft(region)), ...dimensions.couple(box.dims(region)));\n c.save();\n c.clip(p);\n return () => c.restore();\n }\n\n private scissorGL(region: box.Box, overscan: xy.XY = xy.ZERO): Destructor {\n this.gl.enable(this.gl.SCISSOR_TEST);\n region = applyOverscan(region, overscan);\n this.gl.scissor(\n box.left(region) * this.dpr,\n (box.height(this.region) - box.bottom(region)) * this.dpr,\n box.width(region) * this.dpr,\n box.height(region) * this.dpr,\n );\n return () => this.gl.disable(this.gl.SCISSOR_TEST);\n }\n\n erase(\n region: box.Box,\n overscan: xy.Crude = xy.ZERO,\n ...canvases: CanvasVariant[]\n ): void {\n overscan = xy.construct(overscan);\n if (canvases.length === 0) canvases = [\"upper2d\", \"lower2d\", \"gl\"];\n if (canvases.includes(\"upper2d\")) this.eraseCanvas(this.upper2d, region, overscan);\n if (canvases.includes(\"lower2d\")) this.eraseCanvas(this.lower2d, region, overscan);\n if (canvases.includes(\"gl\")) this.eraseGL(region, overscan);\n }\n\n private eraseGL(box: box.Box, overscan: xy.XY = xy.ZERO): void {\n const { gl } = this;\n const removeScissor = this.scissorGL(applyOverscan(box, overscan));\n gl.clearColor(...color.ZERO.rgba1);\n gl.clear(gl.COLOR_BUFFER_BIT);\n // See the documentation for the clear program for why this is necessary.\n if (this.os === \"Windows\") this.clearProgram?.exec();\n removeScissor();\n }\n\n private eraseCanvas(\n c: OffscreenCanvasRenderingContext2D,\n b: box.Box,\n overscan: xy.XY = xy.ZERO,\n ): void {\n const os = applyOverscan(b, overscan);\n c.clearRect(...xy.couple(box.topLeft(os)), ...dimensions.couple(box.dims(os)));\n }\n}\n\nconst applyOverscan = (b: box.Box, overscan: xy.XY): box.Box =>\n box.construct(\n box.left(b) - overscan.x,\n box.top(b) - overscan.y,\n box.width(b) + overscan.x * 2,\n box.height(b) + overscan.y * 2,\n );\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { box, type xy } from \"@synnaxlabs/x\";\n\nimport { type CanvasVariant, type Context } from \"@/vis/render/context\";\n\nexport class Eraser {\n prevErase = box.ZERO;\n\n erase(\n ctx: Context,\n next: box.Box,\n prev: box.Box,\n overscan: xy.Crude,\n canvases: CanvasVariant[],\n ): void {\n if (!box.equals(prev, next) && !box.equals(this.prevErase, prev)) {\n ctx.erase(prev, overscan, ...canvases);\n this.prevErase = prev;\n } else ctx.erase(next, overscan, ...canvases);\n }\n}\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type aether } from \"@/aether/aether\";\nexport type RequestF = (reason: string) => void;\n\nexport const REASON_LAYOUT = \"layout\";\nexport const REASON_DATA = \"data\";\nexport const REASON_TOOL = \"tool\";\n\nexport class Controller {\n f: RequestF;\n\n static readonly CONTEXT_KEY = \"pluto-vis-renderer\";\n\n private constructor(f: RequestF) {\n this.f = f;\n }\n\n static control(ctx: aether.Context, f: RequestF): void {\n ctx.set(Controller.CONTEXT_KEY, new Controller(f));\n }\n\n static useRequest(ctx: aether.Context): RequestF {\n return ctx.get<Controller>(Controller.CONTEXT_KEY).f;\n }\n\n static useOptionalRequest(ctx: aether.Context): RequestF | null {\n return ctx.getOptional<Controller>(Controller.CONTEXT_KEY)?.f ?? null;\n }\n\n static requestRender(ctx: aether.Context, reason: string): void {\n this.useRequest(ctx)(reason);\n }\n}\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type Instrumentation } from \"@synnaxlabs/alamos\";\nimport {\n DataType,\n bounds,\n type box,\n scale,\n xy,\n type Series,\n type direction,\n type SeriesDigest,\n} from \"@synnaxlabs/x\";\nimport { z } from \"zod\";\n\nimport { aether } from \"@/aether/aether\";\nimport { alamos } from \"@/alamos/aether\";\nimport { color } from \"@/color/core\";\nimport { telem } from \"@/telem/aether\";\nimport FRAG_SHADER from \"@/vis/line/aether/frag.glsl?raw\";\nimport VERT_SHADER from \"@/vis/line/aether/vert.glsl?raw\";\nimport { render } from \"@/vis/render\";\n\nconst FLOAT_32_DENSITY = DataType.FLOAT32.density.valueOf();\n\nexport const stateZ = z.object({\n x: telem.seriesSourceSpecZ,\n y: telem.seriesSourceSpecZ,\n label: z.string().optional(),\n color: color.Color.z,\n strokeWidth: z.number().default(1),\n downsample: z.number().min(1).max(50).optional().default(1),\n});\n\nexport type State = z.input<typeof stateZ>;\nexport type ParsedState = z.output<typeof stateZ>;\n\nexport interface FindResult {\n // The line key that the point belongs to.\n key: string;\n // The decimal position of the point in the region.\n position: xy.XY;\n // The data value of the point.\n value: xy.XY;\n // The color of the line.\n color: color.Color;\n // The label of the line.\n label?: string;\n // The units of the line.\n units?: string;\n}\n\nexport const ZERO_FIND_RESULT: FindResult = {\n key: \"\",\n position: xy.NAN,\n value: xy.NAN,\n color: color.ZERO,\n};\n\nexport interface LineProps {\n /**\n * A box in pixel space representing the region of the display that the line\n * should be rendered in. The root of the pixel coordinate system is the top\n * left of the canvas.\n */\n region: box.Box;\n /** An XY scale that maps from the data space to decimal space. */\n dataToDecimalScale: scale.XY;\n}\n\nexport class Context extends render.GLProgram {\n translationBuffer: WebGLBuffer;\n\n private static readonly CONTEXT_KEY = \"pluto-line-gl-program\";\n\n private constructor(ctx: render.Context) {\n super(ctx, VERT_SHADER, FRAG_SHADER);\n this.translationBuffer = ctx.gl.createBuffer() as WebGLBuffer;\n }\n\n bindPropsAndState(\n { dataToDecimalScale: s, region }: LineProps,\n { strokeWidth, color }: ParsedState,\n ): number {\n const scaleTransform = scale.xyScaleToTransform(s);\n const transform = scale.xyScaleToTransform(this.ctx.scaleRegion(region));\n this.uniformXY(\"u_region_scale\", transform.scale);\n this.uniformXY(\"u_region_offset\", transform.offset);\n this.uniformColor(\"u_color\", color);\n this.uniformXY(\"u_scale\", scaleTransform.scale);\n this.uniformXY(\"u_offset\", scaleTransform.offset);\n return this.attrStrokeWidth(strokeWidth);\n }\n\n draw(\n { x, y, count, downsample, xOffset, yOffset }: DrawOperation,\n instances: number,\n ): void {\n const { gl } = this.ctx;\n this.bindAttrBuffer(\"x\", x.glBuffer, downsample, xOffset);\n this.bindAttrBuffer(\"y\", y.glBuffer, downsample, yOffset);\n gl.drawArraysInstanced(gl.LINE_STRIP, 0, count / downsample, instances);\n }\n\n static create(ctx: aether.Context): Context {\n const renderCtx = render.Context.use(ctx);\n const line = new Context(renderCtx);\n ctx.set(Context.CONTEXT_KEY, line);\n return line;\n }\n\n static use(ctx: aether.Context): Context {\n return ctx.get<Context>(Context.CONTEXT_KEY);\n }\n\n private bindAttrBuffer(\n dir: direction.Crude,\n buffer: WebGLBuffer,\n downsample: number,\n alignment: number = 0,\n ): void {\n const { gl } = this.ctx;\n gl.bindBuffer(gl.ARRAY_BUFFER, buffer);\n const n = gl.getAttribLocation(this.prog, `a_${dir}`);\n gl.vertexAttribPointer(\n n,\n 1,\n gl.FLOAT,\n false,\n FLOAT_32_DENSITY * downsample,\n FLOAT_32_DENSITY * alignment,\n );\n gl.enableVertexAttribArray(n);\n }\n\n /**\n * We apply stroke width by drawing the line multiple times, each time with a slight\n * transformation. This is done as simply as possible. We draw the \"centered\" line\n * and then four more lines: one to the left, one to the right, one above, and one\n * below. We can repeat this process an arbitrary number of times to make the line\n * thicker. As we increase the stroke width, we also increase the cost of drawing the\n * line.\n */\n private attrStrokeWidth(strokeWidth: number): number {\n const { gl } = this.ctx;\n gl.bindBuffer(gl.ARRAY_BUFFER, this.translationBuffer);\n const translationBuffer = newTranslationBuffer(this.ctx.aspect, strokeWidth);\n gl.bufferData(gl.ARRAY_BUFFER, translationBuffer, gl.DYNAMIC_DRAW);\n const loc = gl.getAttribLocation(this.prog, \"a_translate\");\n gl.vertexAttribPointer(loc, 2, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(loc);\n gl.vertexAttribDivisor(loc, 1);\n return translationBuffer.length / 2;\n }\n}\n\ninterface InternalState {\n instrumentation: Instrumentation;\n prog: Context;\n xTelem: telem.SeriesSource;\n yTelem: telem.SeriesSource;\n requestRender: render.RequestF;\n}\n\nexport class Line extends aether.Leaf<typeof stateZ, InternalState> {\n static readonly TYPE = \"line\";\n schema: typeof stateZ = stateZ;\n\n afterUpdate(): void {\n const { internal: i } = this;\n i.xTelem = telem.useSource(this.ctx, this.state.x, i.xTelem);\n i.yTelem = telem.useSource(this.ctx, this.state.y, i.yTelem);\n i.instrumentation = alamos.useInstrumentation(this.ctx, \"line\");\n i.prog = Context.use(this.ctx);\n i.requestRender = render.Controller.useRequest(this.ctx);\n i.xTelem.onChange(() => i.requestRender(render.REASON_DATA));\n i.yTelem.onChange(() => i.requestRender(render.REASON_DATA));\n i.requestRender(render.REASON_LAYOUT);\n }\n\n afterDelete(): void {\n const { internal: i } = this;\n i.xTelem.cleanup?.();\n i.yTelem.cleanup?.();\n i.requestRender(render.REASON_LAYOUT);\n }\n\n async xBounds(): Promise<bounds.Bounds> {\n const [b] = await this.internal.xTelem.value();\n return b;\n }\n\n async yBounds(): Promise<bounds.Bounds> {\n const [b] = await this.internal.yTelem.value();\n return b;\n }\n\n async findByXValue(props: LineProps, target: number): Promise<FindResult> {\n const { xTelem } = this.internal;\n const [, data] = await xTelem.value();\n let [index, series] = [-1, -1];\n data.find((x, i) => {\n const v = x.binarySearch(target);\n const valid = v !== -1 && v !== x.length;\n if (valid) [index, series] = [v, i];\n return valid;\n });\n\n const value = await this.xyValue(series, index);\n const { key } = this;\n const { color, label } = this.state;\n const position = {\n x: props.dataToDecimalScale.x.pos(value.x),\n y: props.dataToDecimalScale.y.pos(value.y),\n };\n return { key, color, label, value, position };\n }\n\n async render(props: LineProps): Promise<void> {\n const { downsample } = this.state;\n const { xTelem, yTelem, prog } = this.internal;\n const { dataToDecimalScale } = props;\n const [, xData] = await xTelem.value();\n xData.forEach((x) => x.updateGLBuffer(prog.ctx.gl));\n const [, yData] = await yTelem.value();\n yData.forEach((y) => y.updateGLBuffer(prog.ctx.gl));\n const ops = buildDrawOperations(xData, yData, downsample);\n this.internal.instrumentation.L.debug(\"render\", {\n key: this.key,\n downsample,\n scale: scale.xyScaleToTransform(dataToDecimalScale),\n props: props.region,\n ops: digests(ops),\n });\n const clearProg = prog.setAsActive();\n ops.forEach((op) => {\n const { x, y } = op;\n const p = { ...props, dataToDecimalScale: offsetScale(dataToDecimalScale, x, y) };\n const instances = prog.bindPropsAndState(p, this.state);\n prog.draw(op, instances);\n });\n clearProg();\n }\n\n private async xyValue(series: number, index: number): Promise<xy.XY> {\n const { xTelem, yTelem } = this.internal;\n const [, x] = await xTelem.value();\n const [, y] = await yTelem.value();\n return xy.construct(\n this.getValue(series, index, x),\n this.getValue(series, index, y),\n );\n }\n\n private getValue(series: number, index: number, data: Series[]): number {\n if (series === -1 || index === -1 || series >= data.length) return NaN;\n return Number(data[series].at(index));\n }\n}\n\n/** Just makes sure that the lines we draw to make stuff thick are really close together. */\nconst THICKNESS_DIVISOR = 5000;\n\nconst newTranslationBuffer = (aspect: number, strokeWidth: number): Float32Array => {\n return copyBuffer(newDirectionBuffer(aspect), Math.ceil(strokeWidth) - 1).map(\n (v, i) => Math.floor(i / DIRECTION_COUNT) * (1 / (THICKNESS_DIVISOR * aspect)) * v,\n );\n};\n\nconst DIRECTION_COUNT = 5;\n\nconst newDirectionBuffer = (aspect: number): Float32Array =>\n // prettier-ignore\n new Float32Array([\n 0, 0, // center\n 0, aspect, // top\n 0, -aspect, // bottom\n 1, 0, // right\n -1, 0, // left\n ]);\n\nconst copyBuffer = (buf: Float32Array, times: number): Float32Array => {\n const newBuf = new Float32Array(buf.length * times);\n for (let i = 0; i < times; i++) newBuf.set(buf, i * buf.length);\n return newBuf;\n};\n\nconst offsetScale = (scale: scale.XY, x: Series, y: Series): scale.XY =>\n scale.translate(\n scale.x.dim(Number(x.sampleOffset)),\n scale.y.dim(Number(y.sampleOffset)),\n );\n\nexport const REGISTRY: aether.ComponentRegistry = {\n [Line.TYPE]: Line,\n};\n\ninterface DrawOperation {\n x: Series;\n y: Series;\n xOffset: number;\n yOffset: number;\n count: number;\n downsample: number;\n}\n\ninterface DrawOperationDigest extends Omit<DrawOperation, \"x\" | \"y\"> {\n x: SeriesDigest;\n y: SeriesDigest;\n}\n\nconst buildDrawOperations = (\n x: Series[],\n y: Series[],\n downsample: number,\n): DrawOperation[] => {\n if (x.length === 0 || y.length === 0) return [];\n\n const ops: DrawOperation[] = [];\n\n x.forEach((xs) => {\n const b = bounds.construct(xs.alignment, xs.alignment + xs.length);\n const ySeries = y.filter((y) =>\n bounds.overlapsWith(b, bounds.construct(y.alignment, y.alignment + y.length)),\n );\n ySeries.forEach((ys) => {\n if (\n ys._timeRange != null &&\n xs._timeRange != null &&\n !ys.timeRange.overlapsWith(xs.timeRange)\n )\n return;\n let xOffset = 0;\n let yOffset = 0;\n if (xs.alignment < ys.alignment) xOffset = ys.alignment - xs.alignment;\n else if (ys.alignment < xs.alignment) yOffset = xs.alignment - ys.alignment;\n const count = Math.min(xs.length - xOffset, ys.length - yOffset);\n if (count > 0) {\n ops.push({\n x: xs,\n y: ys,\n xOffset,\n yOffset,\n count,\n downsample,\n });\n }\n });\n });\n\n return ops;\n};\n\nconst digests = (ops: DrawOperation[]): DrawOperationDigest[] =>\n ops.map((op) => ({\n ...op,\n x: op.x.digest,\n y: op.y.digest,\n }));\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { UnexpectedError } from \"@synnaxlabs/client\";\nimport { box, runtime } from \"@synnaxlabs/x\";\nimport { z } from \"zod\";\n\nimport { aether } from \"@/aether/aether\";\nimport { Context } from \"@/vis/line/aether/line\";\nimport { render } from \"@/vis/render\";\nimport { OS } from \"@/os\";\n\nexport const canvasStateZ = z.object({\n dpr: z.number(),\n region: box.box,\n bootstrap: z.boolean().optional().default(false),\n bootstrapped: z.boolean().optional().default(false),\n // We set all of these to ay because nodejs can't identify OffscreenCanvas\n // and polyfilling causes more problems than it solves\n glCanvas: z.any().optional(),\n upper2dCanvas: z.any().optional(),\n lower2dCanvas: z.any().optional(),\n os: runtime.osZ,\n});\n\nexport class Canvas extends aether.Composite<typeof canvasStateZ> {\n static readonly TYPE = \"Canvas\";\n\n schema = canvasStateZ;\n renderContextSet = false;\n\n afterUpdate(): void {\n let renderCtx = render.Context.useOptional(this.ctx);\n if (renderCtx == null) {\n if (this.renderContextSet) {\n throw new UnexpectedError(\n \"[vis.worker.Canvas] - expected render context to be set\",\n );\n }\n if (!this.state.bootstrap) return;\n const { glCanvas, lower2dCanvas, upper2dCanvas, os } = this.state;\n if (glCanvas == null || lower2dCanvas == null || upper2dCanvas == null)\n throw new UnexpectedError(\n \"[vis.worker.Canvas] - expected render context bootstrap to include all canvases\",\n );\n renderCtx = render.Context.create(\n this.ctx,\n glCanvas,\n lower2dCanvas,\n upper2dCanvas,\n os,\n );\n Context.create(this.ctx);\n this.setState((p) => ({\n ...p,\n bootstrap: false,\n bootstrapped: true,\n glCanvas: undefined,\n lower2dCanvas: undefined,\n upper2dCanvas: undefined,\n }));\n } else renderCtx.update(this.ctx);\n renderCtx.resize(this.state.region, this.state.dpr);\n }\n}\n\nexport const REGISTRY: aether.ComponentRegistry = {\n [Canvas.TYPE]: Canvas,\n};\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { compare, box, direction, location, spatial, xy } from \"@synnaxlabs/x\";\nimport { z } from \"zod\";\n\nexport const gridPositionSpecZ = z.object({\n key: z.string(),\n size: z.number(),\n order: spatial.order,\n loc: location.outer,\n});\n\nexport type GridPositionSpec = z.input<typeof gridPositionSpecZ>;\n\nexport const filterGridPositions = (\n loc: location.Outer,\n grid: GridPositionSpec[],\n): GridPositionSpec[] =>\n grid\n .filter(({ loc: l }) => l === loc)\n .sort((a, b) => compare.order(a.order, b.order));\n\nexport const calculateGridPosition = (\n key: string,\n grid: GridPositionSpec[],\n container: box.Box,\n): xy.XY => {\n const axis = grid.find(({ key: k }) => k === key);\n if (axis == null) return xy.ZERO;\n const loc = location.construct(axis.loc);\n const axes = filterGridPositions(loc as location.Outer, grid);\n const filterLoc = location.construct(direction.swap(location.direction(loc)));\n const otherAxes = filterGridPositions(filterLoc as location.Outer, grid);\n const index = axes.findIndex(({ key: k }) => k === key);\n const offset = axes.slice(0, index).reduce((acc, { size }) => acc + size, 0);\n const otherOffset = otherAxes.reduce((acc, { size }) => acc + size, 0);\n switch (loc) {\n case \"left\":\n return xy.translate(box.topLeft(container), [offset, otherOffset]);\n case \"right\":\n return xy.translate(box.topRight(container), [offset - axis.size, otherOffset]);\n case \"top\":\n return xy.translate(box.topLeft(container), [offset, otherOffset]);\n default:\n return xy.translate(box.bottomLeft(container), [otherOffset, offset - axis.size]);\n }\n};\n\nexport const calculatePlotBox = (\n grid: GridPositionSpec[],\n container: box.Box,\n): box.Box => {\n const left = filterGridPositions(\"left\", grid);\n const right = filterGridPositions(\"right\", grid);\n const top = filterGridPositions(\"top\", grid);\n const bottom = filterGridPositions(\"bottom\", grid);\n const leftWidth = left.reduce((acc, { size }) => acc + size, 0);\n const rightWidth = right.reduce((acc, { size }) => acc + size, 0);\n const topWidth = top.reduce((acc, { size }) => acc + size, 0);\n const bottomWidth = bottom.reduce((acc, { size }) => acc + size, 0);\n return box.construct(\n xy.translate(box.topLeft(container), { x: leftWidth, y: topWidth }),\n box.width(container) - leftWidth - rightWidth,\n box.height(container) - topWidth - bottomWidth,\n );\n};\n","export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\nexport default (function zoomRho(rho, rho2, rho4) {\n\n // p0 = [ux0, uy0, w0]\n // p1 = [ux1, uy1, w1]\n function zoom(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000 * rho / Math.SQRT2;\n\n return i;\n }\n\n zoom.rho = function(_) {\n var _1 = Math.max(1e-3, +_), _2 = _1 * _1, _4 = _2 * _2;\n return zoomRho(_1, _2, _4);\n };\n\n return zoom;\n})(Math.SQRT2, 2, 4);\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","export default function number(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","export default function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = (date) => {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = (date) => {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = (date) => {\n const d0 = interval(date), d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = (date, step) => {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = (start, stop, step) => {\n const range = [];\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n let previous;\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = (test) => {\n return timeInterval((date) => {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, (date, step) => {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = (start, end) => {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = (step) => {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? (d) => field(d) % step === 0\n : (d) => interval.count(0, d) % step === 0);\n };\n }\n\n return interval;\n}\n","import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n // noop\n}, (date, step) => {\n date.setTime(+date + step);\n}, (start, end) => {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return timeInterval((date) => {\n date.setTime(Math.floor(date / k) * k);\n }, (date, step) => {\n date.setTime(+date + step * k);\n }, (start, end) => {\n return (end - start) / k;\n });\n};\n\nexport const milliseconds = millisecond.range;\n","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n return (end - start) / durationSecond;\n}, (date) => {\n return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n date.setUTCSeconds(0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n return timeInterval((date) => {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setDate(date.getDate() + step * 7);\n }, (start, end) => {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n return timeInterval((date) => {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, (start, end) => {\n return (end - start) / durationWeek;\n });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n return end.getFullYear() - start.getFullYear();\n}, (date) => {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport const utcYears = utcYear.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n const tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function ticks(start, stop, count) {\n const reverse = stop < start;\n if (reverse) [start, stop] = [stop, start];\n const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n return reverse ? ticks.reverse() : ticks;\n }\n\n function tickInterval(start, stop, count) {\n const target = Math.abs(stop - start) / count;\n const i = bisector(([,, step]) => step).right(tickIntervals, target);\n if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n return t.every(step);\n }\n\n return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n var scale = continuous(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n return interval ? domain(nice(d, interval)) : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n };\n\n return scale;\n}\n\nexport default function time() {\n return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type scale, TimeStamp } from \"@synnaxlabs/x\";\nimport { scaleLinear, scaleTime } from \"d3-scale\";\nimport { z } from \"zod\";\n\nexport interface Tick {\n position: number;\n label: string;\n}\n\nexport interface TickFactory {\n generate: (ctx: TickFactoryContext) => Tick[];\n}\n\nexport const tickType = z.enum([\"linear\", \"time\"]);\n\nexport type TickType = z.infer<typeof tickType>;\n\nexport const tickFactoryProps = z.object({\n tickSpacing: z.number().default(75),\n type: tickType.optional().default(\"linear\"),\n});\n\nexport type TickFactoryProps = z.input<typeof tickFactoryProps>;\ntype ParsedTickFactoryProps = z.output<typeof tickFactoryProps>;\n\nexport interface TickFactoryContext {\n /**\n * Scale takes a value in decimal space and returns the corresponding data value.\n */\n decimalToDataScale: scale.Scale;\n /**\n * Size is the length of the axis in pixels.\n */\n size: number;\n}\n\nexport const newTickFactory = (props: TickFactoryProps): TickFactory => {\n const parsed = tickFactoryProps.parse(props);\n return TICK_FACTORIES[parsed.type](parsed);\n};\n\nclass TimeTickFactory implements TickFactory {\n private readonly props: ParsedTickFactoryProps;\n\n constructor(props: ParsedTickFactoryProps) {\n this.props = props;\n }\n\n generate({ decimalToDataScale: scale, size }: TickFactoryContext): Tick[] {\n const range = [0, size];\n const domain = [\n new TimeStamp(scale.pos(0)).date(),\n new TimeStamp(scale.pos(1)).date(),\n ];\n const d3Scale = scaleTime().domain(domain).range(range);\n const ticks = d3Scale.ticks(calcTickCount(size, this.props.tickSpacing));\n return ticks.map((tick) => ({\n label: this.tickLabel(tick),\n position: d3Scale(tick),\n }));\n }\n\n tickLabel(date: Date): string {\n const value = new TimeStamp(date).date();\n // remove trailing 0s\n\n let formatted: string = `:${value.getSeconds()}`;\n const ms = value.getMilliseconds();\n if (ms !== 0) {\n const millisecondString = Math.round(value.getMilliseconds())\n .toString()\n .padStart(3, \"0\")\n .replace(/0+$/, \"\");\n formatted += `.${millisecondString}`;\n }\n // If we're on the minute, show the hour and minute in military time\n if (value.getSeconds() === 0 && value.getMilliseconds() === 0)\n formatted = `${value.getHours()}:${value\n .getMinutes()\n .toString()\n .padStart(2, \"0\")}`;\n return formatted;\n }\n}\n\nclass LinearTickFactory implements TickFactory {\n private readonly props: ParsedTickFactoryProps;\n\n constructor(props: ParsedTickFactoryProps) {\n this.props = props;\n }\n\n generate({ decimalToDataScale: scale, size }: TickFactoryContext): Tick[] {\n const range = [0, size];\n const domain = [scale.pos(0), scale.pos(1)];\n const d3Scale = scaleLinear().domain(domain).range(range);\n const count = calcTickCount(size, this.props.tickSpacing);\n const ticks = d3Scale.ticks(count);\n return ticks.map((tick) => ({\n label: this.tickLabel(tick),\n position: d3Scale(tick),\n }));\n }\n\n tickLabel(value: number): string {\n return value.toString();\n }\n}\n\nconst calcTickCount = (size: number, pixelsPerTick: number): number => {\n const tickCount = Math.floor(size / pixelsPerTick);\n return tickCount > 0 ? tickCount : 1;\n};\n\nconst TICK_FACTORIES: Record<TickType, (props: ParsedTickFactoryProps) => TickFactory> =\n {\n linear: (p) => new LinearTickFactory(p),\n time: (p) => new TimeTickFactory(p),\n };\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type box, location, type xy } from \"@synnaxlabs/x\";\nimport { z } from \"zod\";\n\nimport { color } from \"@/color/core\";\nimport { type TickFactoryContext, tickFactoryProps, tickType } from \"@/vis/axis/ticks\";\n\nexport interface RenderResult {\n size: number;\n}\n\nexport const axisStateZ = tickFactoryProps.extend({\n color: color.Color.z,\n type: tickType.optional().default(\"linear\"),\n font: z.string(),\n showGrid: z.boolean().optional().default(true),\n location: location.outer,\n gridColor: color.Color.z,\n size: z.number().default(0),\n});\n\nexport type AxisState = z.input<typeof axisStateZ>;\nexport type ParsedAxisState = z.output<typeof axisStateZ>;\n\nexport interface AxisProps extends Omit<TickFactoryContext, \"size\"> {\n plot: box.Box;\n position: xy.XY;\n}\n\nexport interface Axis {\n setState: (state: AxisState) => void;\n render: (props: AxisProps) => RenderResult;\n}\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { bounds, box, dimensions, xy } from \"@synnaxlabs/x\";\n\nimport { dimensions as textDimensions } from \"@/text/dimensions\";\nimport { prettyParse } from \"@/util/zod\";\nimport {\n type Axis,\n type AxisProps,\n type RenderResult,\n axisStateZ,\n type AxisState,\n type ParsedAxisState,\n} from \"@/vis/axis/axis\";\nimport { type Tick, type TickFactory, newTickFactory } from \"@/vis/axis/ticks\";\nimport { type render } from \"@/vis/render\";\n\nconst TICK_LINE_SIZE = 4;\n\nexport class Canvas implements Axis {\n ctx: render.Context;\n state: ParsedAxisState;\n tickFactory: TickFactory;\n\n constructor(ctx: render.Context, state: ParsedAxisState) {\n this.ctx = ctx;\n this.state = state;\n this.tickFactory = newTickFactory(this.state);\n }\n\n setState(state: AxisState): void {\n this.state = prettyParse(axisStateZ, state);\n this.tickFactory = newTickFactory(state);\n }\n\n render(props: AxisProps): RenderResult {\n const { lower2d: canvas } = this.ctx;\n canvas.font = this.state.font;\n canvas.fillStyle = this.state.color.hex;\n canvas.lineWidth = 1;\n\n switch (this.state.location) {\n case \"left\":\n return this.drawLeft(props);\n case \"right\":\n return this.drawRight(props);\n case \"top\":\n return this.drawTop(props);\n default:\n return this.drawBottom(props);\n }\n }\n\n drawBottom(ctx: AxisProps): RenderResult {\n const { lower2d: canvas } = this.ctx;\n const { plot: plottingRegion } = ctx;\n const size = box.width(plottingRegion);\n const gridSize = box.height(plottingRegion);\n const p = ctx.position;\n const ticks = this.tickFactory.generate({ ...ctx, size });\n this.maybeDrawGrid(size, ticks, (tick) => [\n xy.translateX(p, tick.position),\n xy.translate(p, { x: tick.position, y: -gridSize }),\n ]);\n canvas.strokeStyle = this.state.color.hex;\n this.drawLine(p, xy.translateX(p, size));\n const maxTickDims = this.drawTicks(ticks, (d, tick) => {\n canvas.moveTo(p.x + tick.position, p.y);\n canvas.lineTo(p.x + tick.position, p.y + TICK_LINE_SIZE);\n canvas.stroke();\n canvas.fillText(\n tick.label,\n p.x + tick.position - d.width / 2,\n p.y + 5 + d.height,\n );\n });\n return { size: maxTickDims.height + TICK_LINE_SIZE };\n }\n\n drawTop(ctx: AxisProps): RenderResult {\n const { lower2d: canvas } = this.ctx;\n const { plot: plottingRegion } = ctx;\n const size = box.width(plottingRegion);\n const gridSize = box.height(plottingRegion);\n const p = xy.translateY(ctx.position, this.state.size);\n const ticks = this.tickFactory.generate({ ...ctx, size });\n this.maybeDrawGrid(size, ticks, (tick) => [\n xy.translateX(p, tick.position),\n xy.translate(p, { x: tick.position, y: gridSize }),\n ]);\n canvas.strokeStyle = this.state.color.hex;\n this.drawLine(p, xy.translateX(p, size));\n const maxTickDims = this.drawTicks(ticks, (d, tick) => {\n canvas.moveTo(p.x + tick.position, p.y);\n canvas.lineTo(p.x + tick.position, p.y - TICK_LINE_SIZE);\n canvas.stroke();\n canvas.fillText(\n tick.label,\n p.x + tick.position - d.width / 2,\n p.y - 5 - d.height,\n );\n });\n\n return { size: maxTickDims.height + TICK_LINE_SIZE };\n }\n\n drawLeft(ctx: AxisProps): RenderResult {\n const { lower2d: canvas } = this.ctx;\n const { plot: plottingRegion } = ctx;\n const size = box.height(plottingRegion);\n const gridSize = box.width(plottingRegion);\n const p = xy.translateX(ctx.position, this.state.size);\n const ticks = this.tickFactory.generate({ ...ctx, size });\n this.maybeDrawGrid(size, ticks, (tick) => [\n xy.translateY(p, tick.position),\n xy.translate(p, { x: gridSize, y: tick.position }),\n ]);\n canvas.strokeStyle = this.state.color.hex;\n this.drawLine(p, xy.translateY(p, size));\n const maxTickSize = this.drawTicks(ticks, (d, tick) => {\n canvas.moveTo(p.x, p.y + tick.position);\n canvas.lineTo(p.x - TICK_LINE_SIZE, p.y + tick.position);\n canvas.stroke();\n canvas.fillText(\n tick.label,\n p.x - d.width - TICK_LINE_SIZE * 2,\n p.y + tick.position + d.height / 3,\n );\n });\n\n return { size: maxTickSize.width + TICK_LINE_SIZE * 2 };\n }\n\n drawRight(ctx: AxisProps): RenderResult {\n const { lower2d: canvas } = this.ctx;\n const { plot: plottingRegion } = ctx;\n const size = box.height(plottingRegion);\n const gridSize = box.width(plottingRegion);\n const p = ctx.position;\n const ticks = this.tickFactory.generate({ ...ctx, size });\n this.maybeDrawGrid(size, ticks, (tick) => [\n xy.translateY(p, tick.position),\n xy.translate(p, { x: -gridSize, y: tick.position }),\n ]);\n canvas.strokeStyle = this.state.color.hex;\n this.drawLine(p, xy.translateY(p, size));\n const maxTickSize = this.drawTicks(ticks, (d, tick) => {\n canvas.moveTo(p.x, p.y + tick.position);\n canvas.lineTo(p.x + TICK_LINE_SIZE, p.y + tick.position);\n canvas.stroke();\n canvas.fillText(\n tick.label,\n p.x + TICK_LINE_SIZE + 2,\n p.y + tick.position + d.height / 3,\n );\n });\n return { size: maxTickSize.width + TICK_LINE_SIZE * 2 };\n }\n\n private drawLine(start: xy.XY, end: xy.XY): void {\n const { lower2d: canvas } = this.ctx;\n canvas.beginPath();\n canvas.moveTo(...xy.couple(start));\n canvas.lineTo(...xy.couple(end));\n canvas.stroke();\n }\n\n private drawTicks(\n ticks: Tick[],\n f: (textDimensions: dimensions.Dimensions, tick: Tick) => void,\n ): dimensions.Dimensions {\n let maxDimensions = dimensions.ZERO;\n ticks.forEach((tick) => {\n const d = textDimensions(tick.label, this.state.font, this.ctx.lower2d);\n maxDimensions = dimensions.max([maxDimensions, d]);\n f(d, tick);\n });\n return maxDimensions;\n }\n\n private maybeDrawGrid(\n size: number,\n ticks: Tick[],\n f: (tick: Tick) => [xy.XY, xy.XY],\n ): void {\n const { showGrid, gridColor } = this.state;\n if (showGrid) {\n const startBound = bounds.construct(-1, 1);\n const endBound = bounds.construct(size - 1, size + 1);\n this.ctx.lower2d.strokeStyle = gridColor.hex;\n ticks\n .filter(\n ({ position }) =>\n !bounds.contains(startBound, position) &&\n !bounds.contains(endBound, position),\n )\n .forEach((tick) => this.drawLine(...f(tick)));\n }\n }\n}\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport {\n TimeSpan,\n TimeStamp,\n bounds,\n box,\n scale,\n direction,\n throttle,\n} from \"@synnaxlabs/x\";\nimport { z } from \"zod\";\n\nimport { aether } from \"@/aether/aether\";\nimport { theming } from \"@/theming/aether\";\nimport { fontString } from \"@/theming/core/fontString\";\nimport { axis } from \"@/vis/axis\";\nimport { type TickType } from \"@/vis/axis/ticks\";\nimport { render } from \"@/vis/render\";\n\nimport { calculateGridPosition, type GridPositionSpec } from \"./grid\";\n\nexport const coreAxisStateZ = axis.axisStateZ\n .extend({\n bounds: bounds.bounds.optional(),\n autoBounds: z\n .object({\n lower: z.boolean().optional().default(true),\n upper: z.boolean().optional().default(true),\n })\n .or(z.boolean().optional().default(true)),\n autoBoundPadding: z.number().optional(),\n autoBoundUpdateInterval: TimeSpan.z.optional().default(TimeSpan.seconds(1)),\n size: z.number().optional().default(0),\n label: z.string().optional().default(\"\"),\n labelSize: z.number().optional().default(0),\n })\n .partial({ color: true, font: true, gridColor: true });\n\nexport type BaseAxisState = z.output<typeof coreAxisStateZ>;\n\nconst AXIS_SIZE_UPADTE_UPPER_THRESHOLD = 2; // px;\nconst AXIS_SIZE_UPDATE_LOWER_THRESHOLD = 7; // px;\n\nexport const withinSizeThreshold = (prev: number, next: number): boolean =>\n bounds.contains(\n {\n lower: prev - AXIS_SIZE_UPDATE_LOWER_THRESHOLD,\n upper: prev + AXIS_SIZE_UPADTE_UPPER_THRESHOLD,\n },\n next,\n );\n\nexport const EMPTY_LINEAR_BOUNDS = bounds.DECIMAL;\nconst now = TimeStamp.now();\nexport const EMPTY_TIME_BOUNDS: bounds.Bounds = {\n lower: now.valueOf(),\n upper: now.add(TimeSpan.HOUR).valueOf(),\n};\n\nexport const emptyBounds = (type: TickType): bounds.Bounds =>\n type === \"linear\" ? EMPTY_LINEAR_BOUNDS : EMPTY_TIME_BOUNDS;\n\nexport interface AxisRenderProps {\n grid: GridPositionSpec[];\n plot: box.Box;\n viewport: box.Box;\n container: box.Box;\n canvases: render.CanvasVariant[];\n hold: boolean;\n}\n\nexport const autoBounds = (\n b: bounds.Bounds[],\n padding: number = 0.1,\n type: TickType,\n): bounds.Bounds => {\n const m = bounds.max(b.filter(bounds.isFinite));\n if (!bounds.isFinite(m)) return emptyBounds(type);\n const { lower, upper } = m;\n if (upper === lower) return { lower: lower - 1, upper: upper + 1 };\n const _padding = (upper - lower) * padding;\n return { lower: lower - _padding, upper: upper + _padding };\n};\n\ninterface InternalState {\n render: render.Context;\n core: axis.Axis;\n // In the case where we're in a hold, we want to keep a snapshot of the hold bounds\n // so that we can rerender the plot in the same position even if the data changes.\n // changes.\n boundSnapshot?: bounds.Bounds;\n updateBounds?: (bounds: bounds.Bounds) => void;\n}\n\nconst DEFAULT_X_BOUND_PADDING = 0.01;\nconst DEFAULT_Y_BOUND_PADDING = 0.1;\n\nexport class CoreAxis<\n S extends typeof coreAxisStateZ,\n C extends aether.Component = aether.Component,\n> extends aether.Composite<S, InternalState, C> {\n afterUpdate(): void {\n this.internal.render = render.Context.use(this.ctx);\n const theme = theming.use(this.ctx);\n this.state.autoBoundPadding ??=\n direction.construct(this.state.location) === \"x\"\n ? DEFAULT_Y_BOUND_PADDING\n : DEFAULT_X_BOUND_PADDING;\n this.internal.core = new axis.Canvas(this.internal.render, {\n color: theme.colors.gray.l8,\n font: fontString(theme, \"small\"),\n gridColor: theme.colors.gray.l2,\n ...this.state,\n size: this.state.size + this.state.labelSize,\n });\n render.Controller.requestRender(this.ctx, render.REASON_LAYOUT);\n\n if (this.internal.updateBounds == null) {\n this.internal.updateBounds = throttle((b) => {\n this.setState((p) => ({ ...p, bounds: b }));\n }, this.state.autoBoundUpdateInterval.milliseconds);\n }\n }\n\n afterDelete(): void {\n render.Controller.requestRender(this.ctx, render.REASON_LAYOUT);\n }\n\n renderAxis(props: AxisRenderProps, decimalToDataScale: scale.Scale): void {\n if (!props.canvases.includes(\"lower2d\")) return;\n const { core } = this.internal;\n const { grid, container } = props;\n const position = calculateGridPosition(this.key, grid, container);\n const p = { ...props, position, decimalToDataScale };\n const { size } = core.render(p);\n if (!withinSizeThreshold(this.state.size, size))\n this.setState((p) => ({ ...p, size }));\n }\n\n async bounds(\n hold: boolean,\n fetchDataBounds: () => Promise<bounds.Bounds[]>,\n ): Promise<[bounds.Bounds, Error | null]> {\n if (hold && this.internal.boundSnapshot != null)\n return [this.internal.boundSnapshot, null];\n\n const { lower, upper } = parseAutoBounds(this.state.autoBounds);\n\n if (!lower && !upper && this.state.bounds != null) {\n this.internal.boundSnapshot = this.state.bounds;\n return [this.state.bounds, null];\n }\n const merge = (auto: bounds.Bounds): bounds.Bounds => ({\n upper: upper || this.state.bounds == null ? auto.upper : this.state.bounds.upper,\n lower: lower || this.state.bounds == null ? auto.lower : this.state.bounds.lower,\n });\n let ab: bounds.Bounds;\n let err: Error | null = null;\n try {\n const dataBounds = await fetchDataBounds();\n ab = autoBounds(dataBounds, this.state.autoBoundPadding, this.state.type);\n } catch (err_) {\n ab = emptyBounds(this.state.type);\n err = err_ as Error;\n }\n const bounds = merge(ab);\n this.internal.boundSnapshot = bounds;\n if (\n this.state.bounds == null ||\n (lower && this.state.bounds.lower !== bounds.lower) ||\n (upper && this.state.bounds.upper !== bounds.upper)\n )\n this.internal.updateBounds?.(bounds);\n return [bounds, err];\n }\n\n async dataToDecimalScale(\n hold: boolean,\n fetchDataBounds: () => Promise<bounds.Bounds[]>,\n viewport: box.Box,\n ): Promise<[scale.Scale, Error | null]> {\n const [bounds, err] = await this.bounds(hold, fetchDataBounds);\n const dir = direction.swap(direction.construct(this.state.location));\n return [\n scale.Scale.scale(bounds)\n .scale(1)\n .translate(-box.root(viewport)[dir])\n .magnify(1 / box.dim(viewport, dir)),\n err,\n ];\n }\n}\n\nexport const parseAutoBounds = (\n autoBounds: boolean | { lower?: boolean; upper?: boolean },\n): { lower: boolean; upper: boolean } => {\n if (typeof autoBounds === \"boolean\") return { lower: autoBounds, upper: autoBounds };\n return {\n lower: autoBounds?.lower ?? true,\n upper: autoBounds?.upper ?? true,\n };\n};\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type bounds, type scale } from \"@synnaxlabs/x\";\n\nimport { CSS } from \"@/css\";\nimport { type FindResult } from \"@/vis/line/aether/line\";\nimport { type YAxis } from \"@/vis/lineplot/aether/YAxis\";\n\nimport { type AxisRenderProps, coreAxisStateZ, CoreAxis } from \"./axis\";\n\nexport const xAxisStateZ = coreAxisStateZ;\n\nexport interface XAxisRenderProps extends AxisRenderProps {}\n\nexport class XAxis extends CoreAxis<typeof coreAxisStateZ, YAxis> {\n static readonly TYPE = CSS.BE(\"line-plot\", \"x-axis\");\n schema = coreAxisStateZ;\n\n async render(props: XAxisRenderProps): Promise<void> {\n if (this.deleted) return;\n const [dataToDecimal, err] = await this.dataToDecimalScale(\n props.hold,\n this.dataBounds.bind(this),\n props.viewport,\n );\n this.renderAxis(props, dataToDecimal.reverse());\n await this.renderYAxes(props, dataToDecimal);\n // Throw the error here to that the user still has a visible axis.\n if (err != null) throw err;\n }\n\n async findByXDecimal(\n props: Omit<XAxisRenderProps, \"canvases\">,\n target: number,\n ): Promise<FindResult[]> {\n const [scale, err] = await this.dataToDecimalScale(\n props.hold,\n this.dataBounds.bind(this),\n props.viewport,\n );\n if (err != null) throw err;\n return await this.findByXValue(props, scale.reverse().pos(target));\n }\n\n async findByXValue(\n props: Omit<XAxisRenderProps, \"canvases\">,\n target: number,\n ): Promise<FindResult[]> {\n const [xDataToDecimalScale, error] = await this.dataToDecimalScale(\n props.hold,\n this.dataBounds.bind(this),\n props.viewport,\n );\n if (error != null) throw error;\n const p = { ...props, xDataToDecimalScale };\n const prom = this.children.map(async (el) => await el.findByXValue(p, target));\n return (await Promise.all(prom)).flat();\n }\n\n private async renderYAxes(\n props: XAxisRenderProps,\n xDataToDecimalScale: scale.Scale,\n ): Promise<void> {\n const p = { ...props, xDataToDecimalScale };\n await Promise.all(this.children.map(async (el) => await el.render(p)));\n }\n\n private async dataBounds(): Promise<bounds.Bounds[]> {\n return await Promise.all(this.children.map(async (el) => await el.xBounds()));\n }\n}\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { box, direction, xy, type dimensions } from \"@synnaxlabs/x\";\n\nimport { type color } from \"@/color/core\";\nimport { dimensions as textDimensions } from \"@/text/dimensions\";\nimport { type Level } from \"@/text/types\";\nimport { type theming } from \"@/theming/aether\";\nimport { fontString } from \"@/theming/core/fontString\";\n\nexport interface Draw2DLineProps {\n stroke: color.Color;\n lineWidth: number;\n lineDash: number;\n start: xy.XY;\n end: xy.XY;\n}\n\nexport interface Draw2DRuleProps extends Omit<Draw2DLineProps, \"start\" | \"end\"> {\n direction: direction.Direction;\n region: box.Box;\n position: number;\n}\n\nexport interface Draw2DCircleProps {\n fill: color.Color;\n radius: number;\n position: xy.XY;\n}\n\nexport interface Draw2DContainerProps {\n region: box.Box;\n bordered?: boolean;\n rounded?: boolean;\n borderColor?: color.Color;\n borderRadius?: number;\n borderWidth?: number;\n backgroundColor?: color.Color;\n}\n\nexport interface DrawTextProps {\n text: string;\n position: xy.XY;\n level: Level;\n direction: direction.Direction;\n}\n\nexport interface DrawTextInCenterProps\n extends Omit<DrawTextProps, \"position\" | \"direction\"> {\n box: box.Box;\n}\n\nexport interface Draw2DMeasureTextContainerProps {\n text: string[];\n direction: direction.Direction;\n level: Level;\n spacing?: number;\n}\n\nexport interface Draw2DTextContainerProps\n extends Omit<Draw2DContainerProps, \"region\">,\n Draw2DMeasureTextContainerProps {\n position: xy.XY;\n}\n\nexport class Draw2D {\n readonly canvas: OffscreenCanvasRenderingContext2D;\n readonly theme: theming.Theme;\n\n constructor(canvas: OffscreenCanvasRenderingContext2D, theme: theming.Theme) {\n this.canvas = canvas;\n this.theme = theme;\n }\n\n rule({ direction, region, position, ...props }: Draw2DRuleProps): void {\n if (direction === \"x\")\n return this.line({\n start: xy.construct(box.left(region), position),\n end: xy.construct(box.right(region), position),\n ...props,\n });\n return this.line({\n start: xy.construct(position, box.top(region)),\n end: xy.construct(position, box.bottom(region)),\n ...props,\n });\n }\n\n line({ stroke, lineWidth, lineDash, start, end }: Draw2DLineProps): void {\n const ctx = this.canvas;\n ctx.strokeStyle = stroke.hex;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash([lineDash]);\n ctx.beginPath();\n ctx.moveTo(...xy.couple(start));\n ctx.lineTo(...xy.couple(end));\n ctx.stroke();\n }\n\n circle({ fill, radius, position }: Draw2DCircleProps): void {\n const ctx = this.canvas;\n ctx.fillStyle = fill.hex;\n ctx.beginPath();\n ctx.arc(...xy.couple(position), radius, 0, 2 * Math.PI);\n ctx.fill();\n }\n\n container({\n region,\n bordered = true,\n rounded = true,\n borderColor,\n borderRadius,\n borderWidth,\n backgroundColor,\n }: Draw2DContainerProps): void {\n if (borderColor == null) borderColor = this.theme.colors.border;\n if (backgroundColor == null) backgroundColor = this.theme.colors.gray.l1;\n if (borderRadius == null) borderRadius = this.theme.sizes.border.radius;\n if (borderWidth == null) borderWidth = 1;\n\n const ctx = this.canvas;\n ctx.fillStyle = backgroundColor.hex;\n ctx.strokeStyle = borderColor.hex;\n ctx.setLineDash([]);\n ctx.lineWidth = 1;\n ctx.beginPath();\n if (rounded)\n ctx.roundRect(\n ...xy.couple(box.topLeft(region)),\n ...xy.couple(box.dims(region)),\n borderRadius,\n );\n else ctx.rect(...xy.couple(box.topLeft(region)), ...xy.couple(box.dims(region)));\n ctx.fill();\n if (bordered) ctx.stroke();\n }\n\n textContainer(props: Draw2DTextContainerProps): void {\n const [dims, draw] = this.spacedTextDrawF(props);\n const { position } = props;\n this.container({\n region: box.construct(position, dims.width + 12, dims.height + 12),\n ...props,\n });\n draw(xy.translate(position, [6, 6]));\n }\n\n spacedTextDrawF({\n text,\n direction: d,\n spacing = 1,\n level = \"p\",\n }: Draw2DMeasureTextContainerProps): [dimensions.Dimensions, (base: xy.XY) => void] {\n const font = fontString(this.theme, level);\n const textDims = text.map((t) => textDimensions(t, font, this.canvas));\n const spacingPx = this.theme.sizes.base * spacing;\n const offset =\n Math.max(...textDims.map((td) => td[direction.dimension(d)])) + spacingPx;\n return [\n {\n [direction.dimension(direction.swap(d)) as \"width\"]: Math.max(\n ...textDims.map((td) => td[direction.dimension(direction.swap(d))]),\n ),\n [direction.dimension(d) as \"height\"]: offset * text.length - spacingPx,\n },\n\n (position: xy.XY) => {\n const font = fontString(this.theme, level);\n this.canvas.font = font;\n this.canvas.fillStyle = this.theme.colors.text.hex;\n this.canvas.textBaseline = \"top\";\n text.forEach((v, i) => {\n this.canvas.fillText(v, position.x, position.y + offset * i);\n });\n },\n ];\n }\n\n drawTextInCenter({ text, box: b, level = \"p\" }: DrawTextInCenterProps): void {\n this.canvas.font = fontString(this.theme, level);\n this.canvas.fillStyle = this.theme.colors.text.hex;\n const dims = textDimensions(text, this.canvas.font, this.canvas);\n const pos = box.positionInCenter(box.construct(xy.ZERO, dims), b);\n this.canvas.fillText(text, box.left(pos), box.bottom(pos));\n }\n}\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { z } from \"zod\";\n\nimport { aether } from \"@/aether/aether\";\nimport { color } from \"@/color/core\";\nimport { theming } from \"@/theming/aether\";\nimport { Draw2D } from \"@/vis/draw2d\";\nimport { render } from \"@/vis/render\";\nimport { box, location, scale } from \"@synnaxlabs/x\";\n\nexport const ruleStateZ = z.object({\n position: z.number().optional(),\n pixelPosition: z.number().optional(),\n dragging: z.boolean(),\n lineWidth: z.number().optional().default(1),\n lineDash: z.number().optional().default(20),\n color: color.Color.z,\n});\n\nexport interface RuleProps {\n location: location.Location;\n decimalToDataScale: scale.Scale;\n plot: box.Box;\n container: box.Box;\n}\n\ninterface InternalState {\n renderCtx: render.Context;\n draw: Draw2D;\n}\n\nexport class Rule extends aether.Leaf<typeof ruleStateZ, InternalState> {\n static readonly TYPE = \"Rule\";\n\n schema = ruleStateZ;\n\n afterUpdate(): void {\n this.internal.renderCtx = render.Context.use(this.ctx);\n const theme = theming.use(this.ctx);\n this.internal.draw = new Draw2D(this.internal.renderCtx.upper2d, theme);\n render.Controller.requestRender(this.ctx, render.REASON_TOOL);\n }\n\n afterDelete(): void {\n render.Controller.requestRender(this.ctx, render.REASON_TOOL);\n }\n\n updatePositions({ decimalToDataScale: scale, plot, container }: RuleProps): number {\n if (this.state.dragging && this.state.pixelPosition != null) {\n const pos = scale.pos(\n (this.state.pixelPosition - box.top(plot) + box.top(container)) / box.height(plot),\n );\n this.setState((p) => ({ ...p, position: pos }));\n return this.state.pixelPosition;\n }\n if (this.state.position == null) {\n // Calculate the position of the rule at the middle of the plot\n const pos = scale.pos(0.5);\n this.setState((p) => ({ ...p, position: pos }));\n }\n const pixelPos =\n scale.reverse().pos(this.state.position as number) * box.height(plot) +\n box.top(plot) -\n box.top(container);\n if (!isNaN(pixelPos)) this.setState((p) => ({ ...p, pixelPosition: pixelPos }));\n return pixelPos;\n }\n\n async render(props: RuleProps): Promise<void> {\n if (this.deleted) return;\n const { renderCtx } = this.internal;\n const { location: l, plot: plottingRegion } = props;\n const direction = location.direction(l);\n const { upper2d: canvas } = renderCtx;\n const draw = this.internal.draw;\n\n let pixelPos = this.updatePositions(props);\n pixelPos += box.top(props.container);\n\n draw.rule({\n stroke: this.state.color,\n lineWidth: this.state.lineWidth,\n lineDash: this.state.lineDash,\n direction,\n region: plottingRegion,\n position: pixelPos,\n });\n\n canvas.fillStyle = this.state.color.hex;\n canvas.beginPath();\n if (l === \"left\") {\n canvas.moveTo(box.left(plottingRegion), pixelPos);\n canvas.lineTo(box.left(plottingRegion) - 5, pixelPos - 5);\n canvas.lineTo(box.left(plottingRegion) - 5, pixelPos + 5);\n } else if (l === \"right\") {\n canvas.moveTo(box.right(plottingRegion), pixelPos);\n canvas.lineTo(box.right(plottingRegion) + 5, pixelPos - 5);\n canvas.lineTo(box.right(plottingRegion) + 5, pixelPos + 5);\n }\n canvas.closePath();\n canvas.fill();\n }\n}\n\nexport const REGISTRY: aether.ComponentRegistry = {\n [Rule.TYPE]: Rule,\n};\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { box, bounds, scale, location, xy } from \"@synnaxlabs/x\";\n\nimport { CSS } from \"@/css\";\nimport { line } from \"@/vis/line/aether\";\nimport { rule } from \"@/vis/rule/aether\";\n\nimport { type AxisRenderProps, CoreAxis, coreAxisStateZ } from \"./axis\";\n\nexport const yAxisStateZ = coreAxisStateZ.extend({\n location: location.x.optional().default(\"left\"),\n});\n\nexport interface YAxisProps extends AxisRenderProps {\n xDataToDecimalScale: scale.Scale;\n}\n\ntype Children = line.Line | rule.Rule;\n\nexport class YAxis extends CoreAxis<typeof coreAxisStateZ, Children> {\n static readonly TYPE = CSS.BE(\"line-plot\", \"y-axis\");\n schema = coreAxisStateZ;\n\n async xBounds(): Promise<bounds.Bounds> {\n return bounds.max(\n await Promise.all(this.lines.map(async (el) => await el.xBounds())),\n );\n }\n\n async render(props: YAxisProps): Promise<void> {\n if (this.deleted) return;\n const [dataToDecimalScale, error] = await this.dataToDecimalScale(\n props.hold,\n this.dataBounds.bind(this),\n props.viewport,\n );\n // We need to invert scale because the y-axis is inverted in decimal space.\n const decimalToDataScale = dataToDecimalScale.invert().reverse();\n this.renderAxis(props, decimalToDataScale);\n await this.renderLines(props, dataToDecimalScale);\n await this.renderRules(props, decimalToDataScale);\n // Throw the error we encounter here so that the user still has a visible axis.\n if (error != null) throw error;\n }\n\n private async renderLines(\n { xDataToDecimalScale: xScale, plot, canvases }: YAxisProps,\n yScale: scale.Scale,\n ): Promise<void> {\n if (!canvases.includes(\"gl\")) return;\n const props: line.LineProps = {\n region: plot,\n dataToDecimalScale: new scale.XY(xScale, yScale),\n };\n await Promise.all(this.lines.map(async (el) => await el.render(props)));\n }\n\n private async renderRules(\n { container, plot, canvases }: YAxisProps,\n decimalToDataScale: scale.Scale,\n ): Promise<void> {\n if (!canvases.includes(\"upper2d\")) return;\n const { location } = this.state;\n const { render } = this.internal;\n const scissor = box.construct(\n box.left(container),\n box.top(plot),\n box.width(container),\n box.height(plot),\n );\n const clearScissor = render.scissor(scissor, xy.ZERO, [\"upper2d\"]);\n const props = { container, plot, decimalToDataScale, location };\n await Promise.all(this.rules.map(async (el) => await el.render(props)));\n clearScissor();\n }\n\n async findByXValue(\n { xDataToDecimalScale, plot, viewport, hold }: Omit<YAxisProps, \"canvases\">,\n target: number,\n ): Promise<line.FindResult[]> {\n const [yDataToDecimalScale, error] = await this.dataToDecimalScale(\n hold,\n this.dataBounds.bind(this),\n viewport,\n );\n if (error != null) throw error;\n const dataToDecimalScale = new scale.XY(xDataToDecimalScale, yDataToDecimalScale);\n const props: line.LineProps = { region: plot, dataToDecimalScale };\n return (\n await Promise.all(\n this.lines.map(async (el) => await el.findByXValue(props, target)),\n )\n ).map((v) => ({ ...v, units: this.state.label }));\n }\n\n private async dataBounds(): Promise<bounds.Bounds[]> {\n return await Promise.all(this.lines.map(async (el) => await el.yBounds()));\n }\n\n private get lines(): readonly line.Line[] {\n return this.childrenOfType(line.Line.TYPE);\n }\n\n private get rules(): readonly rule.Rule[] {\n return this.childrenOfType(rule.Rule.TYPE);\n }\n}\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { bounds, box, scale, xy } from \"@synnaxlabs/x\";\nimport { z } from \"zod\";\n\nimport { aether } from \"@/aether/aether\";\nimport { color } from \"@/color/core\";\nimport { theming } from \"@/theming/aether\";\nimport { Draw2D } from \"@/vis/draw2d\";\nimport { type FindResult } from \"@/vis/line/aether/line\";\nimport { render } from \"@/vis/render\";\n\nexport const tooltipStateZ = z.object({\n position: xy.xy.or(z.null()),\n textColor: color.Color.z.optional().default(color.ZERO),\n backgroundColor: color.Color.z.optional().default(color.ZERO),\n borderColor: color.Color.z.optional().default(color.ZERO),\n ruleColor: color.Color.z.optional().default(color.ZERO),\n ruleStrokeWidth: z.number().optional().default(1),\n ruleStrokeDash: z.number().default(0),\n});\n\ninterface InternalState {\n render: render.Context;\n draw: Draw2D;\n dotColor: color.Color;\n dotColorContrast: color.Color;\n}\n\nexport interface TooltipProps {\n findByXDecimal: (position: number) => Promise<FindResult[]>;\n region: box.Box;\n}\n\nexport class Tooltip extends aether.Leaf<typeof tooltipStateZ, InternalState> {\n static readonly TYPE = \"tooltip\";\n schema = tooltipStateZ;\n\n afterUpdate(): void {\n const theme = theming.use(this.ctx);\n if (this.state.textColor.isZero) this.state.textColor = theme.colors.text;\n if (this.state.backgroundColor.isZero)\n this.state.backgroundColor = theme.colors.gray.l1;\n if (this.state.borderColor.isZero) this.state.borderColor = theme.colors.border;\n if (this.state.ruleColor.isZero) this.state.ruleColor = theme.colors.gray.l5;\n this.internal.dotColor = theme.colors.text;\n this.internal.dotColorContrast = theme.colors.textContrast;\n\n this.internal.render = render.Context.use(this.ctx);\n this.internal.draw = new Draw2D(this.internal.render.upper2d, theme);\n render.Controller.requestRender(this.ctx, render.REASON_TOOL);\n }\n\n afterDelete(): void {\n render.Controller.requestRender(this.ctx, render.REASON_TOOL);\n }\n\n async render(props: TooltipProps): Promise<void> {\n if (this.deleted || this.state.position == null) return;\n const { region } = props;\n const s = scale.XY.scale(box.DECIMAL).scale(region);\n const reverseScale = scale.XY.scale(region).scale(box.DECIMAL);\n const values = await props.findByXDecimal(\n reverseScale.x.pos(this.state.position.x),\n );\n const { draw } = this.internal;\n\n const avgXDecimal = values.reduce((p, c) => p + c.position.x, 0) / values.length;\n\n const rulePosition = s.x.pos(avgXDecimal);\n if (!bounds.contains(box.xBounds(region), rulePosition)) return;\n\n draw.rule({\n stroke: this.state.ruleColor,\n lineWidth: this.state.ruleStrokeWidth,\n lineDash: this.state.ruleStrokeDash,\n direction: \"y\",\n region,\n position: rulePosition,\n });\n\n values.forEach((r) => {\n const position = s.pos(r.position);\n draw.circle({ fill: r.color.setAlpha(0.5), radius: 8, position });\n draw.circle({ fill: r.color.setAlpha(0.8), radius: 5, position });\n draw.circle({\n fill: r.color.pickByContrast(\n this.internal.dotColor,\n this.internal.dotColorContrast,\n ),\n radius: 2,\n position,\n });\n });\n\n const text = values.map((r) => `${r.label ?? \"\"}: ${r.value.y.toFixed(2)}`);\n\n draw.textContainer({\n text,\n backgroundColor: this.state.backgroundColor,\n borderColor: this.state.borderColor,\n position: xy.translate(this.state.position, [10, 10]),\n direction: \"y\",\n level: \"small\",\n spacing: 1,\n });\n }\n}\n\nexport const REGISTRY: aether.ComponentRegistry = {\n [Tooltip.TYPE]: Tooltip,\n};\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { box, xy, scale, TimeSpan } from \"@synnaxlabs/x\";\nimport { z } from \"zod\";\n\nimport { aether } from \"@/aether/aether\";\nimport { color } from \"@/color/core\";\nimport { theming } from \"@/theming/aether\";\nimport { type Theme } from \"@/theming/core/theme\";\nimport { Draw2D } from \"@/vis/draw2d\";\nimport { type FindResult } from \"@/vis/line/aether/line\";\nimport { render } from \"@/vis/render\";\n\nexport const measureStateZ = z.object({\n one: xy.xy.nullable(),\n two: xy.xy.nullable(),\n hover: xy.xy.nullable(),\n color: z\n .union([\n color.Color.z,\n z.object({\n verticalLine: color.Color.z.optional().default(color.ZERO),\n horizontalLine: color.Color.z.optional().default(color.ZERO),\n obliqueLine: color.Color.z.optional().default(color.ZERO),\n }),\n ])\n .optional()\n .default(color.ZERO),\n strokeWidth: z.number().optional().default(1),\n strokeDash: z.number().optional().default(2),\n});\n\ninterface InternalState {\n render: render.Context;\n theme: Theme;\n draw: Draw2D;\n dataOne: xy.XY | null;\n dataTwo: xy.XY | null;\n}\n\nexport interface MeasureProps {\n findByXDecimal: (target: number) => Promise<FindResult[]>;\n findByXValue: (target: number) => Promise<FindResult[]>;\n region: box.Box;\n}\n\nexport class Measure extends aether.Leaf<typeof measureStateZ, InternalState> {\n static readonly TYPE = \"measure\";\n schema = measureStateZ;\n\n afterUpdate(): void {\n const ctx = render.Context.use(this.ctx);\n this.internal.theme = theming.use(this.ctx);\n this.internal.render = ctx;\n this.internal.draw = new Draw2D(ctx.upper2d, this.internal.theme);\n render.Controller.requestRender(this.ctx, render.REASON_TOOL);\n }\n\n afterDelete(): void {\n render.Controller.requestRender(this.ctx, render.REASON_LAYOUT);\n }\n\n private get verticalLineColor(): color.Color {\n if (this.state.color instanceof color.Color) {\n if (!this.state.color.isZero) return this.state.color;\n return this.internal.theme.colors.gray.l6;\n }\n\n if (!this.state.color.verticalLine.isZero) return this.state.color.verticalLine;\n return this.internal.theme.colors.gray.l6;\n }\n\n private get horizontalLineColor(): color.Color {\n if (this.state.color instanceof color.Color) {\n if (!this.state.color.isZero) return this.state.color;\n return this.internal.theme.colors.gray.l6;\n }\n if (!this.state.color.horizontalLine.isZero) return this.state.color.horizontalLine;\n return this.internal.theme.colors.gray.l6;\n }\n\n private get obliqueLineColor(): color.Color {\n if (this.state.color instanceof color.Color) {\n if (!this.state.color.isZero) return this.state.color;\n return this.internal.theme.colors.gray.l6;\n }\n if (!this.state.color.obliqueLine.isZero) return this.state.color.obliqueLine;\n return this.internal.theme.colors.gray.l6;\n }\n\n private async find(props: MeasureProps): Promise<[FindResult, FindResult] | null> {\n const { one, two } = this.state;\n if (one == null || two == null) return null;\n const { one: prevOne, two: prevTwo } = this.prevState;\n const { dataOne, dataTwo } = this.internal;\n if (\n prevOne != null &&\n xy.equals(one, prevOne) &&\n prevTwo != null &&\n xy.equals(two, prevTwo) &&\n dataOne != null &&\n dataTwo != null\n ) {\n const [one, two] = [\n await props.findByXValue(dataOne.x),\n await props.findByXValue(dataTwo.x),\n ];\n if (one.length === 0 || two.length === 0) return null;\n return [\n one.sort(\n (a, b) => xy.distance(dataOne, a.value) - xy.distance(dataOne, b.value),\n )[0],\n two.sort(\n (a, b) => xy.distance(dataTwo, a.value) - xy.distance(dataTwo, b.value),\n )[0],\n ];\n }\n const s = scale.XY.scale(props.region).scale(box.DECIMAL);\n const [scaledOne, scaledTwo] = [s.pos(one), s.pos(two)];\n const [oneValues, twoValues] = [\n await props.findByXDecimal(scaledOne.x),\n await props.findByXDecimal(scaledTwo.x),\n ];\n if (oneValues.length === 0 || twoValues.length === 0) return null;\n const [oneValue, twoValue] = [\n oneValues.sort(\n (a, b) =>\n xy.distance(scaledOne, a.position) - xy.distance(scaledOne, b.position),\n )[0],\n twoValues.sort(\n (a, b) =>\n xy.distance(scaledTwo, a.position) - xy.distance(scaledTwo, b.position),\n )[0],\n ];\n this.internal.dataOne = oneValue.value;\n this.internal.dataTwo = twoValue.value;\n return [oneValue, twoValue];\n }\n\n private async renderHover(props: MeasureProps): Promise<void> {\n if (this.state.hover == null) return;\n const hover: xy.XY = this.state.hover;\n\n const s = scale.XY.scale(props.region).scale(box.DECIMAL);\n const scaledPos = s.pos(hover);\n const res = await props.findByXDecimal(s.pos(hover).x);\n if (res.length === 0) return;\n const v = res.sort(\n (a, b) => xy.distance(scaledPos, a.position) - xy.distance(scaledPos, b.position),\n )[0];\n const { draw } = this.internal;\n\n draw.circle({\n fill: v.color.setAlpha(0.5),\n radius: 9,\n position: s.reverse().pos(v.position),\n });\n }\n\n async render(props: MeasureProps): Promise<void> {\n if (this.deleted) return;\n await this.renderHover(props);\n const res = await this.find(props);\n if (res == null) return;\n const [oneValue, twoValue] = res;\n const { draw } = this.internal;\n const { strokeDash, strokeWidth } = this.state;\n const s = scale.XY.scale(box.DECIMAL).scale(props.region);\n const onePos = s.pos(oneValue.position);\n const twoPos = s.pos(twoValue.position);\n const xDist = new TimeSpan(Math.abs(oneValue.value.x - twoValue.value.x));\n const yDist = Math.abs(oneValue.value.y - twoValue.value.y);\n const slope = yDist / xDist.seconds;\n draw.line({\n start: xy.construct(onePos.x, onePos.y),\n end: xy.construct(onePos.x, twoPos.y),\n stroke: this.verticalLineColor,\n lineDash: strokeDash,\n lineWidth: strokeWidth,\n });\n draw.textContainer({\n text: [`${yDist.toFixed(2)} ${oneValue.units ?? \"\"}`],\n direction: \"x\",\n position: xy.construct(onePos.x, (onePos.y + twoPos.y) / 2),\n level: \"small\",\n });\n draw.line({\n start: xy.construct(onePos.x, twoPos.y),\n end: xy.construct(twoPos.x, twoPos.y),\n stroke: this.horizontalLineColor,\n lineDash: strokeDash,\n lineWidth: strokeWidth,\n });\n draw.textContainer({\n text: [xDist.truncate(TimeSpan.MILLISECOND).toString()],\n direction: \"x\",\n position: xy.construct((onePos.x + twoPos.x) / 2, twoPos.y),\n level: \"small\",\n });\n draw.line({\n start: xy.construct(onePos.x, onePos.y),\n end: xy.construct(twoPos.x, twoPos.y),\n stroke: this.obliqueLineColor,\n lineDash: strokeDash,\n lineWidth: strokeWidth,\n });\n draw.textContainer({\n text: [`${slope.toFixed(2)} ${oneValue.units ?? \"\"} / S`],\n direction: \"x\",\n position: xy.construct((onePos.x + twoPos.x) / 2, (onePos.y + twoPos.y) / 2),\n level: \"small\",\n });\n draw.circle({ fill: oneValue.color.setAlpha(0.5), radius: 8, position: onePos });\n draw.circle({ fill: oneValue.color.setAlpha(0.8), radius: 5, position: onePos });\n draw.circle({ fill: new color.Color(\"#ffffff\"), radius: 2, position: onePos });\n\n draw.circle({ fill: twoValue.color.setAlpha(0.5), radius: 8, position: twoPos });\n draw.circle({ fill: twoValue.color.setAlpha(0.8), radius: 5, position: twoPos });\n draw.circle({ fill: new color.Color(\"#ffffff\"), radius: 2, position: twoPos });\n }\n}\n\nexport const REGISTRY: aether.ComponentRegistry = {\n [Measure.TYPE]: Measure,\n};\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type Instrumentation } from \"@synnaxlabs/alamos\";\nimport { box, xy } from \"@synnaxlabs/x\";\nimport { z } from \"zod\";\n\nimport { aether } from \"@/aether/aether\";\nimport { alamos } from \"@/alamos/aether\";\nimport { status } from \"@/status/aether\";\nimport { type FindResult } from \"@/vis/line/aether/line\";\nimport { calculatePlotBox, gridPositionSpecZ } from \"@/vis/lineplot/aether/grid\";\nimport { XAxis } from \"@/vis/lineplot/aether/XAxis\";\nimport { YAxis } from \"@/vis/lineplot/aether/YAxis\";\nimport { tooltip } from \"@/vis/lineplot/tooltip/aether\";\nimport { measure } from \"@/vis/measure/aether\";\nimport { render } from \"@/vis/render\";\n\nexport const linePlotStateZ = z.object({\n container: box.box,\n viewport: box.box,\n hold: z.boolean().optional().default(false),\n grid: z.array(gridPositionSpecZ),\n clearOverscan: xy.crudeZ,\n});\n\ninterface InternalState {\n instrumentation: Instrumentation;\n aggregate: status.Aggregate;\n renderCtx: render.Context;\n}\n\ntype Children = XAxis | tooltip.Tooltip | measure.Measure;\n\nexport class LinePlot extends aether.Composite<\n typeof linePlotStateZ,\n InternalState,\n Children\n> {\n static readonly TYPE: string = \"LinePlot\";\n private readonly eraser: render.Eraser = new render.Eraser();\n\n schema = linePlotStateZ;\n\n afterUpdate(): void {\n this.internal.instrumentation = alamos.useInstrumentation(this.ctx, \"lineplot\");\n this.internal.aggregate = status.useAggregate(this.ctx);\n this.internal.renderCtx = render.Context.use(this.ctx);\n render.Controller.control(this.ctx, (r) => this.requestRender(\"low\", r));\n this.requestRender(\"high\", render.REASON_LAYOUT);\n }\n\n afterDelete(): void {\n this.internal.renderCtx = render.Context.use(this.ctx);\n this.requestRender(\"high\", render.REASON_LAYOUT);\n }\n\n async findByXDecimal(x: number): Promise<FindResult[]> {\n const props = { ...this.state, plot: this.calculatePlot() };\n const p = this.axes.flatMap(async (xAxis) => await xAxis.findByXDecimal(props, x));\n return (await Promise.all(p)).flat();\n }\n\n async findByXValue(x: number): Promise<FindResult[]> {\n const props = { ...this.state, plot: this.calculatePlot() };\n const p = this.axes.flatMap(async (a) => await a.findByXValue(props, x));\n return (await Promise.all(p)).flat();\n }\n\n private get axes(): readonly XAxis[] {\n return this.childrenOfType<XAxis>(XAxis.TYPE);\n }\n\n private get tooltips(): readonly tooltip.Tooltip[] {\n return this.childrenOfType<tooltip.Tooltip>(tooltip.Tooltip.TYPE);\n }\n\n private get measures(): readonly measure.Measure[] {\n return this.childrenOfType<measure.Measure>(measure.Measure.TYPE);\n }\n\n private async renderAxes(\n plot: box.Box,\n canvases: render.CanvasVariant[],\n ): Promise<void> {\n const p = { ...this.state, plot, canvases };\n await Promise.all(this.axes.map(async (xAxis) => await xAxis.render(p)));\n }\n\n private async renderTooltips(\n region: box.Box,\n canvases: render.CanvasVariant[],\n ): Promise<void> {\n const p = { findByXDecimal: this.findByXDecimal.bind(this), region, canvases };\n await Promise.all(this.tooltips.map(async (t) => await t.render(p)));\n }\n\n private async renderMeasures(\n region: box.Box,\n canvases: render.CanvasVariant[],\n ): Promise<void> {\n const p = {\n findByXDecimal: this.findByXDecimal.bind(this),\n findByXValue: this.findByXValue.bind(this),\n region,\n canvases,\n };\n await Promise.all(this.measures.map(async (m) => await m.render(p)));\n }\n\n private calculatePlot(): box.Box {\n return calculatePlotBox(this.state.grid, this.state.container);\n }\n\n private async render(\n canvases: render.CanvasVariant[],\n ): Promise<render.Cleanup | undefined> {\n const { instrumentation } = this.internal;\n if (this.deleted) {\n instrumentation.L.debug(\"deleted, skipping render\", { key: this.key });\n return;\n }\n\n const plot = this.calculatePlot();\n\n instrumentation.L.debug(\"rendering\", {\n key: this.key,\n viewport: this.state.viewport,\n container: this.state.container,\n grid: this.state.grid,\n plot,\n canvases,\n });\n\n const { renderCtx } = this.internal;\n const os = xy.construct(this.state.clearOverscan);\n const removeCanvasScissor = renderCtx.scissor(\n this.state.container,\n os,\n canvases.filter((c) => c !== \"gl\"),\n );\n const removeGLScissor = renderCtx.scissor(\n plot,\n xy.ZERO,\n canvases.filter((c) => c === \"gl\"),\n );\n\n try {\n await this.renderAxes(plot, canvases);\n await this.renderTooltips(plot, canvases);\n await this.renderMeasures(plot, canvases);\n renderCtx.gl.flush();\n } catch (e) {\n this.internal.aggregate({ variant: \"error\", message: (e as Error).message });\n } finally {\n removeCanvasScissor();\n removeGLScissor();\n }\n return ({ canvases }) => {\n this.eraser.erase(\n renderCtx,\n this.state.container,\n this.prevState.container,\n this.state.clearOverscan,\n canvases,\n );\n };\n }\n\n requestRender(priority: render.Priority, reason: string): void {\n const { renderCtx: ctx } = this.internal;\n let canvases: render.CanvasVariant[] = [\"upper2d\", \"lower2d\", \"gl\"];\n // Optimization for tooltips, measures and other utilities. In this case, we only\n // need to render the upper2d canvas.\n if (reason === render.REASON_TOOL) canvases = [\"upper2d\"];\n void ctx.loop.set({\n key: `${this.type}-${this.key}`,\n render: async () => await this.render(canvases),\n priority,\n canvases,\n });\n }\n}\n\nexport const REGISTRY: aether.ComponentRegistry = {\n [LinePlot.TYPE]: LinePlot,\n [XAxis.TYPE]: XAxis,\n [YAxis.TYPE]: YAxis,\n};\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { box, xy } from \"@synnaxlabs/x\";\nimport { z } from \"zod\";\n\nimport { aether } from \"@/aether/aether\";\nimport { render } from \"@/vis/render\";\n\nexport const eraserStateZ = z.object({\n region: box.box,\n});\n\ninterface InternalState {\n render: render.Context;\n}\n\nexport class Eraser extends aether.Leaf<typeof eraserStateZ, InternalState> {\n static readonly TYPE = \"eraser\";\n schema = eraserStateZ;\n\n private readonly eraser: render.Eraser = new render.Eraser();\n\n afterUpdate(): void {\n this.internal.render = render.Context.use(this.ctx);\n this.internal.render.loop.set({\n key: `${this.type}-${this.key}`,\n render: this.render.bind(this),\n priority: \"high\",\n canvases: [\"gl\", \"lower2d\", \"upper2d\"],\n });\n }\n\n async render(): Promise<render.Cleanup> {\n return async ({ canvases }) => {\n this.eraser.erase(\n this.internal.render,\n this.state.region,\n this.prevState.region,\n xy.construct(0),\n canvases,\n );\n };\n }\n}\n\nexport const REGISTRY: aether.ComponentRegistry = {\n [Eraser.TYPE]: Eraser,\n};\n","export default function cc(names) {\n if (typeof names === \"string\" || typeof names === \"number\") return \"\" + names\n\n let out = \"\"\n\n if (Array.isArray(names)) {\n for (let i = 0, tmp; i < names.length; i++) {\n if ((tmp = cc(names[i])) !== \"\") {\n out += (out && \" \") + tmp\n }\n }\n } else {\n for (let k in names) {\n if (names[k]) out += (out && \" \") + k\n }\n }\n\n return out\n}\n","/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n\n 'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n var React = require('react');\n\nvar ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n\nfunction error(format) {\n {\n {\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n args[_key2 - 1] = arguments[_key2];\n }\n\n printWarning('error', format, args);\n }\n }\n}\n\nfunction printWarning(level, format, args) {\n // When changing this logic, you might want to also\n // update consoleWithStackDev.www.js as well.\n {\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\n var stack = ReactDebugCurrentFrame.getStackAddendum();\n\n if (stack !== '') {\n format += '%s';\n args = args.concat([stack]);\n } // eslint-disable-next-line react-internal/safe-string-coercion\n\n\n var argsWithFormat = args.map(function (item) {\n return String(item);\n }); // Careful: RN currently depends on this prefix\n\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\n // breaks IE9: https://github.com/facebook/react/issues/13610\n // eslint-disable-next-line react-internal/no-production-logging\n\n Function.prototype.apply.call(console[level], console, argsWithFormat);\n }\n}\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n ;\n}\n\nvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\n// dispatch for CommonJS interop named imports.\n\nvar useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue;\nvar didWarnOld18Alpha = false;\nvar didWarnUncachedGetSnapshot = false; // Disclaimer: This shim breaks many of the rules of React, and only works\n// because of a very particular set of implementation details and assumptions\n// -- change any one of them and it will break. The most important assumption\n// is that updates are always synchronous, because concurrent rendering is\n// only available in versions of React that also have a built-in\n// useSyncExternalStore API. And we only use this shim when the built-in API\n// does not exist.\n//\n// Do not assume that the clever hacks used by this hook also work in general.\n// The point of this shim is to replace the need for hacks by other libraries.\n\nfunction useSyncExternalStore(subscribe, getSnapshot, // Note: The shim does not use getServerSnapshot, because pre-18 versions of\n// React do not expose a way to check if we're hydrating. So users of the shim\n// will need to track that themselves and return the correct value\n// from `getSnapshot`.\ngetServerSnapshot) {\n {\n if (!didWarnOld18Alpha) {\n if (React.startTransition !== undefined) {\n didWarnOld18Alpha = true;\n\n error('You are using an outdated, pre-release alpha of React 18 that ' + 'does not support useSyncExternalStore. The ' + 'use-sync-external-store shim will not work correctly. Upgrade ' + 'to a newer pre-release.');\n }\n }\n } // Read the current snapshot from the store on every render. Again, this\n // breaks the rules of React, and only works here because of specific\n // implementation details, most importantly that updates are\n // always synchronous.\n\n\n var value = getSnapshot();\n\n {\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n\n if (!objectIs(value, cachedValue)) {\n error('The result of getSnapshot should be cached to avoid an infinite loop');\n\n didWarnUncachedGetSnapshot = true;\n }\n }\n } // Because updates are synchronous, we don't queue them. Instead we force a\n // re-render whenever the subscribed state changes by updating an some\n // arbitrary useState hook. Then, during render, we call getSnapshot to read\n // the current value.\n //\n // Because we don't actually use the state returned by the useState hook, we\n // can save a bit of memory by storing other stuff in that slot.\n //\n // To implement the early bailout, we need to track some things on a mutable\n // object. Usually, we would put that in a useRef hook, but we can stash it in\n // our useState hook instead.\n //\n // To force a re-render, we call forceUpdate({inst}). That works because the\n // new object always fails an equality check.\n\n\n var _useState = useState({\n inst: {\n value: value,\n getSnapshot: getSnapshot\n }\n }),\n inst = _useState[0].inst,\n forceUpdate = _useState[1]; // Track the latest getSnapshot function with a ref. This needs to be updated\n // in the layout phase so we can access it during the tearing check that\n // happens on subscribe.\n\n\n useLayoutEffect(function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot; // Whenever getSnapshot or subscribe changes, we need to check in the\n // commit phase if there was an interleaved mutation. In concurrent mode\n // this can happen all the time, but even in synchronous mode, an earlier\n // effect may have mutated the store.\n\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({\n inst: inst\n });\n }\n }, [subscribe, value, getSnapshot]);\n useEffect(function () {\n // Check for changes right before subscribing. Subsequent changes will be\n // detected in the subscription handler.\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({\n inst: inst\n });\n }\n\n var handleStoreChange = function () {\n // TODO: Because there is no cross-renderer API for batching updates, it's\n // up to the consumer of this library to wrap their subscription event\n // with unstable_batchedUpdates. Should we try to detect when this isn't\n // the case and print a warning in development?\n // The store changed. Check if the snapshot changed since the last time we\n // read from the store.\n if (checkIfSnapshotChanged(inst)) {\n // Force a re-render.\n forceUpdate({\n inst: inst\n });\n }\n }; // Subscribe to the store and return a clean-up function.\n\n\n return subscribe(handleStoreChange);\n }, [subscribe]);\n useDebugValue(value);\n return value;\n}\n\nfunction checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n var prevValue = inst.value;\n\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(prevValue, nextValue);\n } catch (error) {\n return true;\n }\n}\n\nfunction useSyncExternalStore$1(subscribe, getSnapshot, getServerSnapshot) {\n // Note: The shim does not use getServerSnapshot, because pre-18 versions of\n // React do not expose a way to check if we're hydrating. So users of the shim\n // will need to track that themselves and return the correct value\n // from `getSnapshot`.\n return getSnapshot();\n}\n\nvar canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\n\nvar isServerEnvironment = !canUseDOM;\n\nvar shim = isServerEnvironment ? useSyncExternalStore$1 : useSyncExternalStore;\nvar useSyncExternalStore$2 = React.useSyncExternalStore !== undefined ? React.useSyncExternalStore : shim;\n\nexports.useSyncExternalStore = useSyncExternalStore$2;\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n \n })();\n}\n","/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.development.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\nif (process.env.NODE_ENV !== \"production\") {\n (function() {\n\n 'use strict';\n\n/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error());\n}\n var React = require('react');\nvar shim = require('use-sync-external-store/shim');\n\n/**\n * inlined Object.is polyfill to avoid requiring consumers ship their own\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n */\nfunction is(x, y) {\n return x === y && (x !== 0 || 1 / x === 1 / y) || x !== x && y !== y // eslint-disable-line no-self-compare\n ;\n}\n\nvar objectIs = typeof Object.is === 'function' ? Object.is : is;\n\nvar useSyncExternalStore = shim.useSyncExternalStore;\n\n// for CommonJS interop.\n\nvar useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue; // Same as useSyncExternalStore, but supports selector and isEqual arguments.\n\nfunction useSyncExternalStoreWithSelector(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) {\n // Use this to track the rendered snapshot.\n var instRef = useRef(null);\n var inst;\n\n if (instRef.current === null) {\n inst = {\n hasValue: false,\n value: null\n };\n instRef.current = inst;\n } else {\n inst = instRef.current;\n }\n\n var _useMemo = useMemo(function () {\n // Track the memoized state using closure variables that are local to this\n // memoized instance of a getSnapshot function. Intentionally not using a\n // useRef hook, because that state would be shared across all concurrent\n // copies of the hook/component.\n var hasMemo = false;\n var memoizedSnapshot;\n var memoizedSelection;\n\n var memoizedSelector = function (nextSnapshot) {\n if (!hasMemo) {\n // The first time the hook is called, there is no memoized result.\n hasMemo = true;\n memoizedSnapshot = nextSnapshot;\n\n var _nextSelection = selector(nextSnapshot);\n\n if (isEqual !== undefined) {\n // Even if the selector has changed, the currently rendered selection\n // may be equal to the new selection. We should attempt to reuse the\n // current value if possible, to preserve downstream memoizations.\n if (inst.hasValue) {\n var currentSelection = inst.value;\n\n if (isEqual(currentSelection, _nextSelection)) {\n memoizedSelection = currentSelection;\n return currentSelection;\n }\n }\n }\n\n memoizedSelection = _nextSelection;\n return _nextSelection;\n } // We may be able to reuse the previous invocation's result.\n\n\n // We may be able to reuse the previous invocation's result.\n var prevSnapshot = memoizedSnapshot;\n var prevSelection = memoizedSelection;\n\n if (objectIs(prevSnapshot, nextSnapshot)) {\n // The snapshot is the same as last time. Reuse the previous selection.\n return prevSelection;\n } // The snapshot has changed, so we need to compute a new selection.\n\n\n // The snapshot has changed, so we need to compute a new selection.\n var nextSelection = selector(nextSnapshot); // If a custom isEqual function is provided, use that to check if the data\n // has changed. If it hasn't, return the previous selection. That signals\n // to React that the selections are conceptually equal, and we can bail\n // out of rendering.\n\n // If a custom isEqual function is provided, use that to check if the data\n // has changed. If it hasn't, return the previous selection. That signals\n // to React that the selections are conceptually equal, and we can bail\n // out of rendering.\n if (isEqual !== undefined && isEqual(prevSelection, nextSelection)) {\n return prevSelection;\n }\n\n memoizedSnapshot = nextSnapshot;\n memoizedSelection = nextSelection;\n return nextSelection;\n }; // Assigning this to a constant so that Flow knows it can't change.\n\n\n // Assigning this to a constant so that Flow knows it can't change.\n var maybeGetServerSnapshot = getServerSnapshot === undefined ? null : getServerSnapshot;\n\n var getSnapshotWithSelector = function () {\n return memoizedSelector(getSnapshot());\n };\n\n var getServerSnapshotWithSelector = maybeGetServerSnapshot === null ? undefined : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n };\n return [getSnapshotWithSelector, getServerSnapshotWithSelector];\n }, [getSnapshot, getServerSnapshot, selector, isEqual]),\n getSelection = _useMemo[0],\n getServerSelection = _useMemo[1];\n\n var value = useSyncExternalStore(subscribe, getSelection, getServerSelection);\n useEffect(function () {\n inst.hasValue = true;\n inst.value = value;\n }, [value]);\n useDebugValue(value);\n return value;\n}\n\nexports.useSyncExternalStoreWithSelector = useSyncExternalStoreWithSelector;\n /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\nif (\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' &&\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop ===\n 'function'\n) {\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(new Error());\n}\n \n })();\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var h=require(\"react\"),n=require(\"use-sync-external-store/shim\");function p(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var q=\"function\"===typeof Object.is?Object.is:p,r=n.useSyncExternalStore,t=h.useRef,u=h.useEffect,v=h.useMemo,w=h.useDebugValue;\nexports.useSyncExternalStoreWithSelector=function(a,b,e,l,g){var c=t(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f}else f=c.current;c=v(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==g&&f.hasValue){var b=f.value;if(g(b,a))return k=b}return k=a}b=k;if(q(d,a))return b;var e=l(a);if(void 0!==g&&g(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return[function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,g]);var d=r(a,c[0],c[1]);\nu(function(){f.hasValue=!0;f.value=d},[d]);w(d);return d};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.min.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const destroy = () => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected.\"\n );\n }\n listeners.clear();\n };\n const api = { setState, getState, subscribe, destroy };\n state = createState(setState, getState, api);\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\nvar vanilla = (createState) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] Default export is deprecated. Instead use import { createStore } from 'zustand/vanilla'.\"\n );\n }\n return createStore(createState);\n};\n\nexport { createStore, vanilla as default };\n","import ReactExports from 'react';\nimport useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector.js';\nimport { createStore } from 'zustand/vanilla';\n\nconst { useDebugValue } = ReactExports;\nconst { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports;\nfunction useStoreWithEqualityFn(api, selector = api.getState, equalityFn) {\n const slice = useSyncExternalStoreWithSelector(\n api.subscribe,\n api.getState,\n api.getServerState || api.getState,\n selector,\n equalityFn\n );\n useDebugValue(slice);\n return slice;\n}\nconst createWithEqualityFnImpl = (createState, defaultEqualityFn) => {\n const api = createStore(createState);\n const useBoundStoreWithEqualityFn = (selector, equalityFn = defaultEqualityFn) => useStoreWithEqualityFn(api, selector, equalityFn);\n Object.assign(useBoundStoreWithEqualityFn, api);\n return useBoundStoreWithEqualityFn;\n};\nconst createWithEqualityFn = (createState, defaultEqualityFn) => createState ? createWithEqualityFnImpl(createState, defaultEqualityFn) : createWithEqualityFnImpl;\n\nexport { createWithEqualityFn, useStoreWithEqualityFn };\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","export default function(event) {\n let sourceEvent;\n while (sourceEvent = event.sourceEvent) event = sourceEvent;\n return event;\n}\n","import sourceEvent from \"./sourceEvent.js\";\n\nexport default function(event, node) {\n event = sourceEvent(event);\n if (node === undefined) node = event.currentTarget;\n if (node) {\n var svg = node.ownerSVGElement || node;\n if (svg.createSVGPoint) {\n var point = svg.createSVGPoint();\n point.x = event.clientX, point.y = event.clientY;\n point = point.matrixTransform(node.getScreenCTM().inverse());\n return [point.x, point.y];\n }\n if (node.getBoundingClientRect) {\n var rect = node.getBoundingClientRect();\n return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];\n }\n }\n return [event.pageX, event.pageY];\n}\n","// These are typically used in conjunction with noevent to ensure that we can\n// preventDefault on the event.\nexport const nonpassive = {passive: false};\nexport const nonpassivecapture = {capture: true, passive: false};\n\nexport function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {select} from \"d3-selection\";\nimport noevent, {nonpassivecapture} from \"./noevent.js\";\n\nexport default function(view) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", noevent, nonpassivecapture);\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", noevent, nonpassivecapture);\n } else {\n root.__noselect = root.style.MozUserSelect;\n root.style.MozUserSelect = \"none\";\n }\n}\n\nexport function yesdrag(view, noclick) {\n var root = view.document.documentElement,\n selection = select(view).on(\"dragstart.drag\", null);\n if (noclick) {\n selection.on(\"click.drag\", noevent, nonpassivecapture);\n setTimeout(function() { selection.on(\"click.drag\", null); }, 0);\n }\n if (\"onselectstart\" in root) {\n selection.on(\"selectstart.drag\", null);\n } else {\n root.style.MozUserSelect = root.__noselect;\n delete root.__noselect;\n }\n}\n","export default x => () => x;\n","export default function DragEvent(type, {\n sourceEvent,\n subject,\n target,\n identifier,\n active,\n x, y, dx, dy,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n subject: {value: subject, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n identifier: {value: identifier, enumerable: true, configurable: true},\n active: {value: active, enumerable: true, configurable: true},\n x: {value: x, enumerable: true, configurable: true},\n y: {value: y, enumerable: true, configurable: true},\n dx: {value: dx, enumerable: true, configurable: true},\n dy: {value: dy, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n\nDragEvent.prototype.on = function() {\n var value = this._.on.apply(this._, arguments);\n return value === this._ ? this : value;\n};\n","import {dispatch} from \"d3-dispatch\";\nimport {select, pointer} from \"d3-selection\";\nimport nodrag, {yesdrag} from \"./nodrag.js\";\nimport noevent, {nonpassive, nonpassivecapture, nopropagation} from \"./noevent.js\";\nimport constant from \"./constant.js\";\nimport DragEvent from \"./event.js\";\n\n// Ignore right-click, since that should open the context menu.\nfunction defaultFilter(event) {\n return !event.ctrlKey && !event.button;\n}\n\nfunction defaultContainer() {\n return this.parentNode;\n}\n\nfunction defaultSubject(event, d) {\n return d == null ? {x: event.x, y: event.y} : d;\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nexport default function() {\n var filter = defaultFilter,\n container = defaultContainer,\n subject = defaultSubject,\n touchable = defaultTouchable,\n gestures = {},\n listeners = dispatch(\"start\", \"drag\", \"end\"),\n active = 0,\n mousedownx,\n mousedowny,\n mousemoving,\n touchending,\n clickDistance2 = 0;\n\n function drag(selection) {\n selection\n .on(\"mousedown.drag\", mousedowned)\n .filter(touchable)\n .on(\"touchstart.drag\", touchstarted)\n .on(\"touchmove.drag\", touchmoved, nonpassive)\n .on(\"touchend.drag touchcancel.drag\", touchended)\n .style(\"touch-action\", \"none\")\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n function mousedowned(event, d) {\n if (touchending || !filter.call(this, event, d)) return;\n var gesture = beforestart(this, container.call(this, event, d), event, d, \"mouse\");\n if (!gesture) return;\n select(event.view)\n .on(\"mousemove.drag\", mousemoved, nonpassivecapture)\n .on(\"mouseup.drag\", mouseupped, nonpassivecapture);\n nodrag(event.view);\n nopropagation(event);\n mousemoving = false;\n mousedownx = event.clientX;\n mousedowny = event.clientY;\n gesture(\"start\", event);\n }\n\n function mousemoved(event) {\n noevent(event);\n if (!mousemoving) {\n var dx = event.clientX - mousedownx, dy = event.clientY - mousedowny;\n mousemoving = dx * dx + dy * dy > clickDistance2;\n }\n gestures.mouse(\"drag\", event);\n }\n\n function mouseupped(event) {\n select(event.view).on(\"mousemove.drag mouseup.drag\", null);\n yesdrag(event.view, mousemoving);\n noevent(event);\n gestures.mouse(\"end\", event);\n }\n\n function touchstarted(event, d) {\n if (!filter.call(this, event, d)) return;\n var touches = event.changedTouches,\n c = container.call(this, event, d),\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = beforestart(this, c, event, d, touches[i].identifier, touches[i])) {\n nopropagation(event);\n gesture(\"start\", event, touches[i]);\n }\n }\n }\n\n function touchmoved(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n noevent(event);\n gesture(\"drag\", event, touches[i]);\n }\n }\n }\n\n function touchended(event) {\n var touches = event.changedTouches,\n n = touches.length, i, gesture;\n\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!\n for (i = 0; i < n; ++i) {\n if (gesture = gestures[touches[i].identifier]) {\n nopropagation(event);\n gesture(\"end\", event, touches[i]);\n }\n }\n }\n\n function beforestart(that, container, event, d, identifier, touch) {\n var dispatch = listeners.copy(),\n p = pointer(touch || event, container), dx, dy,\n s;\n\n if ((s = subject.call(that, new DragEvent(\"beforestart\", {\n sourceEvent: event,\n target: drag,\n identifier,\n active,\n x: p[0],\n y: p[1],\n dx: 0,\n dy: 0,\n dispatch\n }), d)) == null) return;\n\n dx = s.x - p[0] || 0;\n dy = s.y - p[1] || 0;\n\n return function gesture(type, event, touch) {\n var p0 = p, n;\n switch (type) {\n case \"start\": gestures[identifier] = gesture, n = active++; break;\n case \"end\": delete gestures[identifier], --active; // falls through\n case \"drag\": p = pointer(touch || event, container), n = active; break;\n }\n dispatch.call(\n type,\n that,\n new DragEvent(type, {\n sourceEvent: event,\n subject: s,\n target: drag,\n identifier,\n active: n,\n x: p[0] + dx,\n y: p[1] + dy,\n dx: p[0] - p0[0],\n dy: p[1] - p0[1],\n dispatch\n }),\n d\n );\n };\n }\n\n drag.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), drag) : filter;\n };\n\n drag.container = function(_) {\n return arguments.length ? (container = typeof _ === \"function\" ? _ : constant(_), drag) : container;\n };\n\n drag.subject = function(_) {\n return arguments.length ? (subject = typeof _ === \"function\" ? _ : constant(_), drag) : subject;\n };\n\n drag.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), drag) : touchable;\n };\n\n drag.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? drag : value;\n };\n\n drag.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, drag) : Math.sqrt(clickDistance2);\n };\n\n return drag;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","export default x => () => x;\n","export default function ZoomEvent(type, {\n sourceEvent,\n target,\n transform,\n dispatch\n}) {\n Object.defineProperties(this, {\n type: {value: type, enumerable: true, configurable: true},\n sourceEvent: {value: sourceEvent, enumerable: true, configurable: true},\n target: {value: target, enumerable: true, configurable: true},\n transform: {value: transform, enumerable: true, configurable: true},\n _: {value: dispatch}\n });\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","export function nopropagation(event) {\n event.stopImmediatePropagation();\n}\n\nexport default function(event) {\n event.preventDefault();\n event.stopImmediatePropagation();\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {dragDisable, dragEnable} from \"d3-drag\";\nimport {interpolateZoom} from \"d3-interpolate\";\nimport {select, pointer} from \"d3-selection\";\nimport {interrupt} from \"d3-transition\";\nimport constant from \"./constant.js\";\nimport ZoomEvent from \"./event.js\";\nimport {Transform, identity} from \"./transform.js\";\nimport noevent, {nopropagation} from \"./noevent.js\";\n\n// Ignore right-click, since that should open the context menu.\n// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event\nfunction defaultFilter(event) {\n return (!event.ctrlKey || event.type === 'wheel') && !event.button;\n}\n\nfunction defaultExtent() {\n var e = this;\n if (e instanceof SVGElement) {\n e = e.ownerSVGElement || e;\n if (e.hasAttribute(\"viewBox\")) {\n e = e.viewBox.baseVal;\n return [[e.x, e.y], [e.x + e.width, e.y + e.height]];\n }\n return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];\n }\n return [[0, 0], [e.clientWidth, e.clientHeight]];\n}\n\nfunction defaultTransform() {\n return this.__zoom || identity;\n}\n\nfunction defaultWheelDelta(event) {\n return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);\n}\n\nfunction defaultTouchable() {\n return navigator.maxTouchPoints || (\"ontouchstart\" in this);\n}\n\nfunction defaultConstrain(transform, extent, translateExtent) {\n var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],\n dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],\n dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],\n dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];\n return transform.translate(\n dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),\n dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)\n );\n}\n\nexport default function() {\n var filter = defaultFilter,\n extent = defaultExtent,\n constrain = defaultConstrain,\n wheelDelta = defaultWheelDelta,\n touchable = defaultTouchable,\n scaleExtent = [0, Infinity],\n translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],\n duration = 250,\n interpolate = interpolateZoom,\n listeners = dispatch(\"start\", \"zoom\", \"end\"),\n touchstarting,\n touchfirst,\n touchending,\n touchDelay = 500,\n wheelDelay = 150,\n clickDistance2 = 0,\n tapDistance = 10;\n\n function zoom(selection) {\n selection\n .property(\"__zoom\", defaultTransform)\n .on(\"wheel.zoom\", wheeled, {passive: false})\n .on(\"mousedown.zoom\", mousedowned)\n .on(\"dblclick.zoom\", dblclicked)\n .filter(touchable)\n .on(\"touchstart.zoom\", touchstarted)\n .on(\"touchmove.zoom\", touchmoved)\n .on(\"touchend.zoom touchcancel.zoom\", touchended)\n .style(\"-webkit-tap-highlight-color\", \"rgba(0,0,0,0)\");\n }\n\n zoom.transform = function(collection, transform, point, event) {\n var selection = collection.selection ? collection.selection() : collection;\n selection.property(\"__zoom\", defaultTransform);\n if (collection !== selection) {\n schedule(collection, transform, point, event);\n } else {\n selection.interrupt().each(function() {\n gesture(this, arguments)\n .event(event)\n .start()\n .zoom(null, typeof transform === \"function\" ? transform.apply(this, arguments) : transform)\n .end();\n });\n }\n };\n\n zoom.scaleBy = function(selection, k, p, event) {\n zoom.scaleTo(selection, function() {\n var k0 = this.__zoom.k,\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return k0 * k1;\n }, p, event);\n };\n\n zoom.scaleTo = function(selection, k, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t0 = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p,\n p1 = t0.invert(p0),\n k1 = typeof k === \"function\" ? k.apply(this, arguments) : k;\n return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);\n }, p, event);\n };\n\n zoom.translateBy = function(selection, x, y, event) {\n zoom.transform(selection, function() {\n return constrain(this.__zoom.translate(\n typeof x === \"function\" ? x.apply(this, arguments) : x,\n typeof y === \"function\" ? y.apply(this, arguments) : y\n ), extent.apply(this, arguments), translateExtent);\n }, null, event);\n };\n\n zoom.translateTo = function(selection, x, y, p, event) {\n zoom.transform(selection, function() {\n var e = extent.apply(this, arguments),\n t = this.__zoom,\n p0 = p == null ? centroid(e) : typeof p === \"function\" ? p.apply(this, arguments) : p;\n return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(\n typeof x === \"function\" ? -x.apply(this, arguments) : -x,\n typeof y === \"function\" ? -y.apply(this, arguments) : -y\n ), e, translateExtent);\n }, p, event);\n };\n\n function scale(transform, k) {\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));\n return k === transform.k ? transform : new Transform(k, transform.x, transform.y);\n }\n\n function translate(transform, p0, p1) {\n var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;\n return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);\n }\n\n function centroid(extent) {\n return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];\n }\n\n function schedule(transition, transform, point, event) {\n transition\n .on(\"start.zoom\", function() { gesture(this, arguments).event(event).start(); })\n .on(\"interrupt.zoom end.zoom\", function() { gesture(this, arguments).event(event).end(); })\n .tween(\"zoom\", function() {\n var that = this,\n args = arguments,\n g = gesture(that, args).event(event),\n e = extent.apply(that, args),\n p = point == null ? centroid(e) : typeof point === \"function\" ? point.apply(that, args) : point,\n w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),\n a = that.__zoom,\n b = typeof transform === \"function\" ? transform.apply(that, args) : transform,\n i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));\n return function(t) {\n if (t === 1) t = b; // Avoid rounding error on end.\n else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }\n g.zoom(null, t);\n };\n });\n }\n\n function gesture(that, args, clean) {\n return (!clean && that.__zooming) || new Gesture(that, args);\n }\n\n function Gesture(that, args) {\n this.that = that;\n this.args = args;\n this.active = 0;\n this.sourceEvent = null;\n this.extent = extent.apply(that, args);\n this.taps = 0;\n }\n\n Gesture.prototype = {\n event: function(event) {\n if (event) this.sourceEvent = event;\n return this;\n },\n start: function() {\n if (++this.active === 1) {\n this.that.__zooming = this;\n this.emit(\"start\");\n }\n return this;\n },\n zoom: function(key, transform) {\n if (this.mouse && key !== \"mouse\") this.mouse[1] = transform.invert(this.mouse[0]);\n if (this.touch0 && key !== \"touch\") this.touch0[1] = transform.invert(this.touch0[0]);\n if (this.touch1 && key !== \"touch\") this.touch1[1] = transform.invert(this.touch1[0]);\n this.that.__zoom = transform;\n this.emit(\"zoom\");\n return this;\n },\n end: function() {\n if (--this.active === 0) {\n delete this.that.__zooming;\n this.emit(\"end\");\n }\n return this;\n },\n emit: function(type) {\n var d = select(this.that).datum();\n listeners.call(\n type,\n this.that,\n new ZoomEvent(type, {\n sourceEvent: this.sourceEvent,\n target: zoom,\n type,\n transform: this.that.__zoom,\n dispatch: listeners\n }),\n d\n );\n }\n };\n\n function wheeled(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var g = gesture(this, args).event(event),\n t = this.__zoom,\n k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),\n p = pointer(event);\n\n // If the mouse is in the same location as before, reuse it.\n // If there were recent wheel events, reset the wheel idle timeout.\n if (g.wheel) {\n if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {\n g.mouse[1] = t.invert(g.mouse[0] = p);\n }\n clearTimeout(g.wheel);\n }\n\n // If this wheel event won’t trigger a transform change, ignore it.\n else if (t.k === k) return;\n\n // Otherwise, capture the mouse point and location at the start.\n else {\n g.mouse = [p, t.invert(p)];\n interrupt(this);\n g.start();\n }\n\n noevent(event);\n g.wheel = setTimeout(wheelidled, wheelDelay);\n g.zoom(\"mouse\", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));\n\n function wheelidled() {\n g.wheel = null;\n g.end();\n }\n }\n\n function mousedowned(event, ...args) {\n if (touchending || !filter.apply(this, arguments)) return;\n var currentTarget = event.currentTarget,\n g = gesture(this, args, true).event(event),\n v = select(event.view).on(\"mousemove.zoom\", mousemoved, true).on(\"mouseup.zoom\", mouseupped, true),\n p = pointer(event, currentTarget),\n x0 = event.clientX,\n y0 = event.clientY;\n\n dragDisable(event.view);\n nopropagation(event);\n g.mouse = [p, this.__zoom.invert(p)];\n interrupt(this);\n g.start();\n\n function mousemoved(event) {\n noevent(event);\n if (!g.moved) {\n var dx = event.clientX - x0, dy = event.clientY - y0;\n g.moved = dx * dx + dy * dy > clickDistance2;\n }\n g.event(event)\n .zoom(\"mouse\", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));\n }\n\n function mouseupped(event) {\n v.on(\"mousemove.zoom mouseup.zoom\", null);\n dragEnable(event.view, g.moved);\n noevent(event);\n g.event(event).end();\n }\n }\n\n function dblclicked(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var t0 = this.__zoom,\n p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),\n p1 = t0.invert(p0),\n k1 = t0.k * (event.shiftKey ? 0.5 : 2),\n t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);\n\n noevent(event);\n if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);\n else select(this).call(zoom.transform, t1, p0, event);\n }\n\n function touchstarted(event, ...args) {\n if (!filter.apply(this, arguments)) return;\n var touches = event.touches,\n n = touches.length,\n g = gesture(this, args, event.changedTouches.length === n).event(event),\n started, i, t, p;\n\n nopropagation(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n p = [p, this.__zoom.invert(p), t.identifier];\n if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;\n else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;\n }\n\n if (touchstarting) touchstarting = clearTimeout(touchstarting);\n\n if (started) {\n if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);\n interrupt(this);\n g.start();\n }\n }\n\n function touchmoved(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t, p, l;\n\n noevent(event);\n for (i = 0; i < n; ++i) {\n t = touches[i], p = pointer(t, this);\n if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;\n else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;\n }\n t = g.that.__zoom;\n if (g.touch1) {\n var p0 = g.touch0[0], l0 = g.touch0[1],\n p1 = g.touch1[0], l1 = g.touch1[1],\n dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,\n dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;\n t = scale(t, Math.sqrt(dp / dl));\n p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];\n l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];\n }\n else if (g.touch0) p = g.touch0[0], l = g.touch0[1];\n else return;\n\n g.zoom(\"touch\", constrain(translate(t, p, l), g.extent, translateExtent));\n }\n\n function touchended(event, ...args) {\n if (!this.__zooming) return;\n var g = gesture(this, args).event(event),\n touches = event.changedTouches,\n n = touches.length, i, t;\n\n nopropagation(event);\n if (touchending) clearTimeout(touchending);\n touchending = setTimeout(function() { touchending = null; }, touchDelay);\n for (i = 0; i < n; ++i) {\n t = touches[i];\n if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;\n else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;\n }\n if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;\n if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);\n else {\n g.end();\n // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.\n if (g.taps === 2) {\n t = pointer(t, this);\n if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {\n var p = select(this).on(\"dblclick.zoom\");\n if (p) p.apply(this, arguments);\n }\n }\n }\n }\n\n zoom.wheelDelta = function(_) {\n return arguments.length ? (wheelDelta = typeof _ === \"function\" ? _ : constant(+_), zoom) : wheelDelta;\n };\n\n zoom.filter = function(_) {\n return arguments.length ? (filter = typeof _ === \"function\" ? _ : constant(!!_), zoom) : filter;\n };\n\n zoom.touchable = function(_) {\n return arguments.length ? (touchable = typeof _ === \"function\" ? _ : constant(!!_), zoom) : touchable;\n };\n\n zoom.extent = function(_) {\n return arguments.length ? (extent = typeof _ === \"function\" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;\n };\n\n zoom.scaleExtent = function(_) {\n return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];\n };\n\n zoom.translateExtent = function(_) {\n return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];\n };\n\n zoom.constrain = function(_) {\n return arguments.length ? (constrain = _, zoom) : constrain;\n };\n\n zoom.duration = function(_) {\n return arguments.length ? (duration = +_, zoom) : duration;\n };\n\n zoom.interpolate = function(_) {\n return arguments.length ? (interpolate = _, zoom) : interpolate;\n };\n\n zoom.on = function() {\n var value = listeners.on.apply(listeners, arguments);\n return value === listeners ? zoom : value;\n };\n\n zoom.clickDistance = function(_) {\n return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);\n };\n\n zoom.tapDistance = function(_) {\n return arguments.length ? (tapDistance = +_, zoom) : tapDistance;\n };\n\n return zoom;\n}\n","import React, { createContext, useContext, useMemo, memo, useRef, useState, useEffect, forwardRef, useCallback } from 'react';\nimport cc from 'classcat';\nimport { useStoreWithEqualityFn, createWithEqualityFn } from 'zustand/traditional';\nimport { shallow } from 'zustand/shallow';\nimport { zoomIdentity, zoom } from 'd3-zoom';\nimport { select, pointer } from 'd3-selection';\nimport { drag } from 'd3-drag';\nimport { createPortal } from 'react-dom';\n\nconst StoreContext = createContext(null);\nconst Provider$1 = StoreContext.Provider;\n\nconst errorMessages = {\n error001: () => '[React Flow]: Seems like you have not used zustand provider as an ancestor. Help: https://reactflow.dev/error#001',\n 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.\",\n error003: (nodeType) => `Node type \"${nodeType}\" not found. Using fallback type \"default\".`,\n error004: () => 'The React Flow parent container needs a width and a height to render the graph.',\n error005: () => 'Only child nodes can use a parent extent.',\n error006: () => \"Can't create edge. An edge needs a source and a target.\",\n error007: (id) => `The old edge with id=${id} does not exist.`,\n error009: (type) => `Marker type \"${type}\" doesn't exist.`,\n error008: (sourceHandle, edge) => `Couldn't create edge for ${!sourceHandle ? 'source' : 'target'} handle id: \"${!sourceHandle ? edge.sourceHandle : edge.targetHandle}\", edge id: ${edge.id}.`,\n error010: () => 'Handle: No node id found. Make sure to only use a Handle inside a custom Node.',\n error011: (edgeType) => `Edge type \"${edgeType}\" not found. Using fallback type \"default\".`,\n error012: (id) => `Node with id \"${id}\" does not exist, it may have been removed. This can happen when a node is deleted before the \"onNodeClick\" handler is called.`,\n};\n\nconst zustandErrorMessage = errorMessages['error001']();\nfunction useStore(selector, equalityFn) {\n const store = useContext(StoreContext);\n if (store === null) {\n throw new Error(zustandErrorMessage);\n }\n return useStoreWithEqualityFn(store, selector, equalityFn);\n}\nconst useStoreApi = () => {\n const store = useContext(StoreContext);\n if (store === null) {\n throw new Error(zustandErrorMessage);\n }\n return useMemo(() => ({\n getState: store.getState,\n setState: store.setState,\n subscribe: store.subscribe,\n destroy: store.destroy,\n }), [store]);\n};\n\nconst selector$g = (s) => (s.userSelectionActive ? 'none' : 'all');\nfunction Panel({ position, children, className, style, ...rest }) {\n const pointerEvents = useStore(selector$g);\n const positionClasses = `${position}`.split('-');\n return (React.createElement(\"div\", { className: cc(['react-flow__panel', className, ...positionClasses]), style: { ...style, pointerEvents }, ...rest }, children));\n}\n\nfunction Attribution({ proOptions, position = 'bottom-right' }) {\n if (proOptions?.hideAttribution) {\n return null;\n }\n return (React.createElement(Panel, { position: position, className: \"react-flow__attribution\", \"data-message\": \"Please only hide this attribution when you are subscribed to React Flow Pro: https://reactflow.dev/pro\" },\n React.createElement(\"a\", { href: \"https://reactflow.dev\", target: \"_blank\", rel: \"noopener noreferrer\", \"aria-label\": \"React Flow attribution\" }, \"React Flow\")));\n}\n\nconst EdgeText = ({ x, y, label, labelStyle = {}, labelShowBg = true, labelBgStyle = {}, labelBgPadding = [2, 4], labelBgBorderRadius = 2, children, className, ...rest }) => {\n const edgeRef = useRef(null);\n const [edgeTextBbox, setEdgeTextBbox] = useState({ x: 0, y: 0, width: 0, height: 0 });\n const edgeTextClasses = cc(['react-flow__edge-textwrapper', className]);\n useEffect(() => {\n if (edgeRef.current) {\n const textBbox = edgeRef.current.getBBox();\n setEdgeTextBbox({\n x: textBbox.x,\n y: textBbox.y,\n width: textBbox.width,\n height: textBbox.height,\n });\n }\n }, [label]);\n if (typeof label === 'undefined' || !label) {\n return null;\n }\n return (React.createElement(\"g\", { transform: `translate(${x - edgeTextBbox.width / 2} ${y - edgeTextBbox.height / 2})`, className: edgeTextClasses, visibility: edgeTextBbox.width ? 'visible' : 'hidden', ...rest },\n labelShowBg && (React.createElement(\"rect\", { width: edgeTextBbox.width + 2 * labelBgPadding[0], x: -labelBgPadding[0], y: -labelBgPadding[1], height: edgeTextBbox.height + 2 * labelBgPadding[1], className: \"react-flow__edge-textbg\", style: labelBgStyle, rx: labelBgBorderRadius, ry: labelBgBorderRadius })),\n React.createElement(\"text\", { className: \"react-flow__edge-text\", y: edgeTextBbox.height / 2, dy: \"0.3em\", ref: edgeRef, style: labelStyle }, label),\n children));\n};\nvar EdgeText$1 = memo(EdgeText);\n\nconst getDimensions = (node) => ({\n width: node.offsetWidth,\n height: node.offsetHeight,\n});\nconst clamp = (val, min = 0, max = 1) => Math.min(Math.max(val, min), max);\nconst clampPosition = (position = { x: 0, y: 0 }, extent) => ({\n x: clamp(position.x, extent[0][0], extent[1][0]),\n y: clamp(position.y, extent[0][1], extent[1][1]),\n});\n// returns a number between 0 and 1 that represents the velocity of the movement\n// when the mouse is close to the edge of the canvas\nconst calcAutoPanVelocity = (value, min, max) => {\n if (value < min) {\n return clamp(Math.abs(value - min), 1, 50) / 50;\n }\n else if (value > max) {\n return -clamp(Math.abs(value - max), 1, 50) / 50;\n }\n return 0;\n};\nconst calcAutoPan = (pos, bounds) => {\n const xMovement = calcAutoPanVelocity(pos.x, 35, bounds.width - 35) * 20;\n const yMovement = calcAutoPanVelocity(pos.y, 35, bounds.height - 35) * 20;\n return [xMovement, yMovement];\n};\nconst getHostForElement = (element) => element.getRootNode?.() || window?.document;\nconst getBoundsOfBoxes = (box1, box2) => ({\n x: Math.min(box1.x, box2.x),\n y: Math.min(box1.y, box2.y),\n x2: Math.max(box1.x2, box2.x2),\n y2: Math.max(box1.y2, box2.y2),\n});\nconst rectToBox = ({ x, y, width, height }) => ({\n x,\n y,\n x2: x + width,\n y2: y + height,\n});\nconst boxToRect = ({ x, y, x2, y2 }) => ({\n x,\n y,\n width: x2 - x,\n height: y2 - y,\n});\nconst nodeToRect = (node) => ({\n ...(node.positionAbsolute || { x: 0, y: 0 }),\n width: node.width || 0,\n height: node.height || 0,\n});\nconst getBoundsOfRects = (rect1, rect2) => boxToRect(getBoundsOfBoxes(rectToBox(rect1), rectToBox(rect2)));\nconst getOverlappingArea = (rectA, rectB) => {\n const xOverlap = Math.max(0, Math.min(rectA.x + rectA.width, rectB.x + rectB.width) - Math.max(rectA.x, rectB.x));\n const yOverlap = Math.max(0, Math.min(rectA.y + rectA.height, rectB.y + rectB.height) - Math.max(rectA.y, rectB.y));\n return Math.ceil(xOverlap * yOverlap);\n};\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst isRectObject = (obj) => isNumeric(obj.width) && isNumeric(obj.height) && isNumeric(obj.x) && isNumeric(obj.y);\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nconst isNumeric = (n) => !isNaN(n) && isFinite(n);\nconst internalsSymbol = Symbol.for('internals');\n// used for a11y key board controls for nodes and edges\nconst elementSelectionKeys = ['Enter', ' ', 'Escape'];\nconst devWarn = (id, message) => {\n if (process.env.NODE_ENV === 'development') {\n console.warn(`[React Flow]: ${message} Help: https://reactflow.dev/error#${id}`);\n }\n};\nconst isReactKeyboardEvent = (event) => 'nativeEvent' in event;\nfunction isInputDOMNode(event) {\n const kbEvent = isReactKeyboardEvent(event) ? event.nativeEvent : event;\n // using composed path for handling shadow dom\n const target = (kbEvent.composedPath?.()?.[0] || event.target);\n const isInput = ['INPUT', 'SELECT', 'TEXTAREA'].includes(target?.nodeName) || target?.hasAttribute('contenteditable');\n // when an input field is focused we don't want to trigger deletion or movement of nodes\n return isInput || !!target?.closest('.nokey');\n}\nconst isMouseEvent = (event) => 'clientX' in event;\nconst getEventPosition = (event, bounds) => {\n const isMouseTriggered = isMouseEvent(event);\n const evtX = isMouseTriggered ? event.clientX : event.touches?.[0].clientX;\n const evtY = isMouseTriggered ? event.clientY : event.touches?.[0].clientY;\n return {\n x: evtX - (bounds?.left ?? 0),\n y: evtY - (bounds?.top ?? 0),\n };\n};\nconst isMacOs = () => typeof navigator !== 'undefined' && navigator?.userAgent?.indexOf('Mac') >= 0;\n\nconst BaseEdge = ({ id, path, labelX, labelY, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, markerEnd, markerStart, interactionWidth = 20, }) => {\n return (React.createElement(React.Fragment, null,\n React.createElement(\"path\", { id: id, style: style, d: path, fill: \"none\", className: \"react-flow__edge-path\", markerEnd: markerEnd, markerStart: markerStart }),\n interactionWidth && (React.createElement(\"path\", { d: path, fill: \"none\", strokeOpacity: 0, strokeWidth: interactionWidth, className: \"react-flow__edge-interaction\" })),\n label && isNumeric(labelX) && isNumeric(labelY) ? (React.createElement(EdgeText$1, { x: labelX, y: labelY, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius })) : null));\n};\nBaseEdge.displayName = 'BaseEdge';\n\nconst getMarkerEnd = (markerType, markerEndId) => {\n if (typeof markerEndId !== 'undefined' && markerEndId) {\n return `url(#${markerEndId})`;\n }\n return typeof markerType !== 'undefined' ? `url(#react-flow__${markerType})` : 'none';\n};\nfunction getMouseHandler$1(id, getState, handler) {\n return handler === undefined\n ? handler\n : (event) => {\n const edge = getState().edges.find((e) => e.id === id);\n if (edge) {\n handler(event, { ...edge });\n }\n };\n}\n// this is used for straight edges and simple smoothstep edges (LTR, RTL, BTT, TTB)\nfunction getEdgeCenter({ sourceX, sourceY, targetX, targetY, }) {\n const xOffset = Math.abs(targetX - sourceX) / 2;\n const centerX = targetX < sourceX ? targetX + xOffset : targetX - xOffset;\n const yOffset = Math.abs(targetY - sourceY) / 2;\n const centerY = targetY < sourceY ? targetY + yOffset : targetY - yOffset;\n return [centerX, centerY, xOffset, yOffset];\n}\nfunction getBezierEdgeCenter({ sourceX, sourceY, targetX, targetY, sourceControlX, sourceControlY, targetControlX, targetControlY, }) {\n // cubic bezier t=0.5 mid point, not the actual mid point, but easy to calculate\n // https://stackoverflow.com/questions/67516101/how-to-find-distance-mid-point-of-bezier-curve\n const centerX = sourceX * 0.125 + sourceControlX * 0.375 + targetControlX * 0.375 + targetX * 0.125;\n const centerY = sourceY * 0.125 + sourceControlY * 0.375 + targetControlY * 0.375 + targetY * 0.125;\n const offsetX = Math.abs(centerX - sourceX);\n const offsetY = Math.abs(centerY - sourceY);\n return [centerX, centerY, offsetX, offsetY];\n}\n\nvar ConnectionMode;\n(function (ConnectionMode) {\n ConnectionMode[\"Strict\"] = \"strict\";\n ConnectionMode[\"Loose\"] = \"loose\";\n})(ConnectionMode || (ConnectionMode = {}));\nvar PanOnScrollMode;\n(function (PanOnScrollMode) {\n PanOnScrollMode[\"Free\"] = \"free\";\n PanOnScrollMode[\"Vertical\"] = \"vertical\";\n PanOnScrollMode[\"Horizontal\"] = \"horizontal\";\n})(PanOnScrollMode || (PanOnScrollMode = {}));\nvar SelectionMode;\n(function (SelectionMode) {\n SelectionMode[\"Partial\"] = \"partial\";\n SelectionMode[\"Full\"] = \"full\";\n})(SelectionMode || (SelectionMode = {}));\n\nvar ConnectionLineType;\n(function (ConnectionLineType) {\n ConnectionLineType[\"Bezier\"] = \"default\";\n ConnectionLineType[\"Straight\"] = \"straight\";\n ConnectionLineType[\"Step\"] = \"step\";\n ConnectionLineType[\"SmoothStep\"] = \"smoothstep\";\n ConnectionLineType[\"SimpleBezier\"] = \"simplebezier\";\n})(ConnectionLineType || (ConnectionLineType = {}));\nvar MarkerType;\n(function (MarkerType) {\n MarkerType[\"Arrow\"] = \"arrow\";\n MarkerType[\"ArrowClosed\"] = \"arrowclosed\";\n})(MarkerType || (MarkerType = {}));\n\nvar Position;\n(function (Position) {\n Position[\"Left\"] = \"left\";\n Position[\"Top\"] = \"top\";\n Position[\"Right\"] = \"right\";\n Position[\"Bottom\"] = \"bottom\";\n})(Position || (Position = {}));\n\nfunction getControl({ pos, x1, y1, x2, y2 }) {\n if (pos === Position.Left || pos === Position.Right) {\n return [0.5 * (x1 + x2), y1];\n }\n return [x1, 0.5 * (y1 + y2)];\n}\nfunction getSimpleBezierPath({ sourceX, sourceY, sourcePosition = Position.Bottom, targetX, targetY, targetPosition = Position.Top, }) {\n const [sourceControlX, sourceControlY] = getControl({\n pos: sourcePosition,\n x1: sourceX,\n y1: sourceY,\n x2: targetX,\n y2: targetY,\n });\n const [targetControlX, targetControlY] = getControl({\n pos: targetPosition,\n x1: targetX,\n y1: targetY,\n x2: sourceX,\n y2: sourceY,\n });\n const [labelX, labelY, offsetX, offsetY] = getBezierEdgeCenter({\n sourceX,\n sourceY,\n targetX,\n targetY,\n sourceControlX,\n sourceControlY,\n targetControlX,\n targetControlY,\n });\n return [\n `M${sourceX},${sourceY} C${sourceControlX},${sourceControlY} ${targetControlX},${targetControlY} ${targetX},${targetY}`,\n labelX,\n labelY,\n offsetX,\n offsetY,\n ];\n}\nconst SimpleBezierEdge = memo(({ sourceX, sourceY, targetX, targetY, sourcePosition = Position.Bottom, targetPosition = Position.Top, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, markerEnd, markerStart, interactionWidth, }) => {\n const [path, labelX, labelY] = getSimpleBezierPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n });\n return (React.createElement(BaseEdge, { path: path, labelX: labelX, labelY: labelY, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius, style: style, markerEnd: markerEnd, markerStart: markerStart, interactionWidth: interactionWidth }));\n});\nSimpleBezierEdge.displayName = 'SimpleBezierEdge';\n\nconst handleDirections = {\n [Position.Left]: { x: -1, y: 0 },\n [Position.Right]: { x: 1, y: 0 },\n [Position.Top]: { x: 0, y: -1 },\n [Position.Bottom]: { x: 0, y: 1 },\n};\nconst getDirection = ({ source, sourcePosition = Position.Bottom, target, }) => {\n if (sourcePosition === Position.Left || sourcePosition === Position.Right) {\n return source.x < target.x ? { x: 1, y: 0 } : { x: -1, y: 0 };\n }\n return source.y < target.y ? { x: 0, y: 1 } : { x: 0, y: -1 };\n};\nconst distance = (a, b) => Math.sqrt(Math.pow(b.x - a.x, 2) + Math.pow(b.y - a.y, 2));\n// ith this function we try to mimic a orthogonal edge routing behaviour\n// It's not as good as a real orthogonal edge routing but it's faster and good enough as a default for step and smooth step edges\nfunction getPoints({ source, sourcePosition = Position.Bottom, target, targetPosition = Position.Top, center, offset, }) {\n const sourceDir = handleDirections[sourcePosition];\n const targetDir = handleDirections[targetPosition];\n const sourceGapped = { x: source.x + sourceDir.x * offset, y: source.y + sourceDir.y * offset };\n const targetGapped = { x: target.x + targetDir.x * offset, y: target.y + targetDir.y * offset };\n const dir = getDirection({\n source: sourceGapped,\n sourcePosition,\n target: targetGapped,\n });\n const dirAccessor = dir.x !== 0 ? 'x' : 'y';\n const currDir = dir[dirAccessor];\n let points = [];\n let centerX, centerY;\n const sourceGapOffset = { x: 0, y: 0 };\n const targetGapOffset = { x: 0, y: 0 };\n const [defaultCenterX, defaultCenterY, defaultOffsetX, defaultOffsetY] = getEdgeCenter({\n sourceX: source.x,\n sourceY: source.y,\n targetX: target.x,\n targetY: target.y,\n });\n // opposite handle positions, default case\n if (sourceDir[dirAccessor] * targetDir[dirAccessor] === -1) {\n centerX = center.x || defaultCenterX;\n centerY = center.y || defaultCenterY;\n // --->\n // |\n // >---\n const verticalSplit = [\n { x: centerX, y: sourceGapped.y },\n { x: centerX, y: targetGapped.y },\n ];\n // |\n // ---\n // |\n const horizontalSplit = [\n { x: sourceGapped.x, y: centerY },\n { x: targetGapped.x, y: centerY },\n ];\n if (sourceDir[dirAccessor] === currDir) {\n points = dirAccessor === 'x' ? verticalSplit : horizontalSplit;\n }\n else {\n points = dirAccessor === 'x' ? horizontalSplit : verticalSplit;\n }\n }\n else {\n // sourceTarget means we take x from source and y from target, targetSource is the opposite\n const sourceTarget = [{ x: sourceGapped.x, y: targetGapped.y }];\n const targetSource = [{ x: targetGapped.x, y: sourceGapped.y }];\n // this handles edges with same handle positions\n if (dirAccessor === 'x') {\n points = sourceDir.x === currDir ? targetSource : sourceTarget;\n }\n else {\n points = sourceDir.y === currDir ? sourceTarget : targetSource;\n }\n if (sourcePosition === targetPosition) {\n const diff = Math.abs(source[dirAccessor] - target[dirAccessor]);\n // if an edge goes from right to right for example (sourcePosition === targetPosition) and the distance between source.x and target.x is less than the offset, the added point and the gapped source/target will overlap. This leads to a weird edge path. To avoid this we add a gapOffset to the source/target\n if (diff <= offset) {\n const gapOffset = Math.min(offset - 1, offset - diff);\n if (sourceDir[dirAccessor] === currDir) {\n sourceGapOffset[dirAccessor] = (sourceGapped[dirAccessor] > source[dirAccessor] ? -1 : 1) * gapOffset;\n }\n else {\n targetGapOffset[dirAccessor] = (targetGapped[dirAccessor] > target[dirAccessor] ? -1 : 1) * gapOffset;\n }\n }\n }\n // these are conditions for handling mixed handle positions like Right -> Bottom for example\n if (sourcePosition !== targetPosition) {\n const dirAccessorOpposite = dirAccessor === 'x' ? 'y' : 'x';\n const isSameDir = sourceDir[dirAccessor] === targetDir[dirAccessorOpposite];\n const sourceGtTargetOppo = sourceGapped[dirAccessorOpposite] > targetGapped[dirAccessorOpposite];\n const sourceLtTargetOppo = sourceGapped[dirAccessorOpposite] < targetGapped[dirAccessorOpposite];\n const flipSourceTarget = (sourceDir[dirAccessor] === 1 && ((!isSameDir && sourceGtTargetOppo) || (isSameDir && sourceLtTargetOppo))) ||\n (sourceDir[dirAccessor] !== 1 && ((!isSameDir && sourceLtTargetOppo) || (isSameDir && sourceGtTargetOppo)));\n if (flipSourceTarget) {\n points = dirAccessor === 'x' ? sourceTarget : targetSource;\n }\n }\n const sourceGapPoint = { x: sourceGapped.x + sourceGapOffset.x, y: sourceGapped.y + sourceGapOffset.y };\n const targetGapPoint = { x: targetGapped.x + targetGapOffset.x, y: targetGapped.y + targetGapOffset.y };\n const maxXDistance = Math.max(Math.abs(sourceGapPoint.x - points[0].x), Math.abs(targetGapPoint.x - points[0].x));\n const maxYDistance = Math.max(Math.abs(sourceGapPoint.y - points[0].y), Math.abs(targetGapPoint.y - points[0].y));\n // we want to place the label on the longest segment of the edge\n if (maxXDistance >= maxYDistance) {\n centerX = (sourceGapPoint.x + targetGapPoint.x) / 2;\n centerY = points[0].y;\n }\n else {\n centerX = points[0].x;\n centerY = (sourceGapPoint.y + targetGapPoint.y) / 2;\n }\n }\n const pathPoints = [\n source,\n { x: sourceGapped.x + sourceGapOffset.x, y: sourceGapped.y + sourceGapOffset.y },\n ...points,\n { x: targetGapped.x + targetGapOffset.x, y: targetGapped.y + targetGapOffset.y },\n target,\n ];\n return [pathPoints, centerX, centerY, defaultOffsetX, defaultOffsetY];\n}\nfunction getBend(a, b, c, size) {\n const bendSize = Math.min(distance(a, b) / 2, distance(b, c) / 2, size);\n const { x, y } = b;\n // no bend\n if ((a.x === x && x === c.x) || (a.y === y && y === c.y)) {\n return `L${x} ${y}`;\n }\n // first segment is horizontal\n if (a.y === y) {\n const xDir = a.x < c.x ? -1 : 1;\n const yDir = a.y < c.y ? 1 : -1;\n return `L ${x + bendSize * xDir},${y}Q ${x},${y} ${x},${y + bendSize * yDir}`;\n }\n const xDir = a.x < c.x ? 1 : -1;\n const yDir = a.y < c.y ? -1 : 1;\n return `L ${x},${y + bendSize * yDir}Q ${x},${y} ${x + bendSize * xDir},${y}`;\n}\nfunction getSmoothStepPath({ sourceX, sourceY, sourcePosition = Position.Bottom, targetX, targetY, targetPosition = Position.Top, borderRadius = 5, centerX, centerY, offset = 20, }) {\n const [points, labelX, labelY, offsetX, offsetY] = getPoints({\n source: { x: sourceX, y: sourceY },\n sourcePosition,\n target: { x: targetX, y: targetY },\n targetPosition,\n center: { x: centerX, y: centerY },\n offset,\n });\n const path = points.reduce((res, p, i) => {\n let segment = '';\n if (i > 0 && i < points.length - 1) {\n segment = getBend(points[i - 1], p, points[i + 1], borderRadius);\n }\n else {\n segment = `${i === 0 ? 'M' : 'L'}${p.x} ${p.y}`;\n }\n res += segment;\n return res;\n }, '');\n return [path, labelX, labelY, offsetX, offsetY];\n}\nconst SmoothStepEdge = memo(({ sourceX, sourceY, targetX, targetY, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, sourcePosition = Position.Bottom, targetPosition = Position.Top, markerEnd, markerStart, pathOptions, interactionWidth, }) => {\n const [path, labelX, labelY] = getSmoothStepPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n borderRadius: pathOptions?.borderRadius,\n offset: pathOptions?.offset,\n });\n return (React.createElement(BaseEdge, { path: path, labelX: labelX, labelY: labelY, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius, style: style, markerEnd: markerEnd, markerStart: markerStart, interactionWidth: interactionWidth }));\n});\nSmoothStepEdge.displayName = 'SmoothStepEdge';\n\nconst StepEdge = memo((props) => (React.createElement(SmoothStepEdge, { ...props, pathOptions: useMemo(() => ({ borderRadius: 0, offset: props.pathOptions?.offset }), [props.pathOptions?.offset]) })));\nStepEdge.displayName = 'StepEdge';\n\nfunction getStraightPath({ sourceX, sourceY, targetX, targetY, }) {\n const [labelX, labelY, offsetX, offsetY] = getEdgeCenter({\n sourceX,\n sourceY,\n targetX,\n targetY,\n });\n return [`M ${sourceX},${sourceY}L ${targetX},${targetY}`, labelX, labelY, offsetX, offsetY];\n}\nconst StraightEdge = memo(({ sourceX, sourceY, targetX, targetY, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, markerEnd, markerStart, interactionWidth, }) => {\n const [path, labelX, labelY] = getStraightPath({ sourceX, sourceY, targetX, targetY });\n return (React.createElement(BaseEdge, { path: path, labelX: labelX, labelY: labelY, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius, style: style, markerEnd: markerEnd, markerStart: markerStart, interactionWidth: interactionWidth }));\n});\nStraightEdge.displayName = 'StraightEdge';\n\nfunction calculateControlOffset(distance, curvature) {\n if (distance >= 0) {\n return 0.5 * distance;\n }\n return curvature * 25 * Math.sqrt(-distance);\n}\nfunction getControlWithCurvature({ pos, x1, y1, x2, y2, c }) {\n switch (pos) {\n case Position.Left:\n return [x1 - calculateControlOffset(x1 - x2, c), y1];\n case Position.Right:\n return [x1 + calculateControlOffset(x2 - x1, c), y1];\n case Position.Top:\n return [x1, y1 - calculateControlOffset(y1 - y2, c)];\n case Position.Bottom:\n return [x1, y1 + calculateControlOffset(y2 - y1, c)];\n }\n}\nfunction getBezierPath({ sourceX, sourceY, sourcePosition = Position.Bottom, targetX, targetY, targetPosition = Position.Top, curvature = 0.25, }) {\n const [sourceControlX, sourceControlY] = getControlWithCurvature({\n pos: sourcePosition,\n x1: sourceX,\n y1: sourceY,\n x2: targetX,\n y2: targetY,\n c: curvature,\n });\n const [targetControlX, targetControlY] = getControlWithCurvature({\n pos: targetPosition,\n x1: targetX,\n y1: targetY,\n x2: sourceX,\n y2: sourceY,\n c: curvature,\n });\n const [labelX, labelY, offsetX, offsetY] = getBezierEdgeCenter({\n sourceX,\n sourceY,\n targetX,\n targetY,\n sourceControlX,\n sourceControlY,\n targetControlX,\n targetControlY,\n });\n return [\n `M${sourceX},${sourceY} C${sourceControlX},${sourceControlY} ${targetControlX},${targetControlY} ${targetX},${targetY}`,\n labelX,\n labelY,\n offsetX,\n offsetY,\n ];\n}\nconst BezierEdge = memo(({ sourceX, sourceY, targetX, targetY, sourcePosition = Position.Bottom, targetPosition = Position.Top, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, markerEnd, markerStart, pathOptions, interactionWidth, }) => {\n const [path, labelX, labelY] = getBezierPath({\n sourceX,\n sourceY,\n sourcePosition,\n targetX,\n targetY,\n targetPosition,\n curvature: pathOptions?.curvature,\n });\n return (React.createElement(BaseEdge, { path: path, labelX: labelX, labelY: labelY, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius, style: style, markerEnd: markerEnd, markerStart: markerStart, interactionWidth: interactionWidth }));\n});\nBezierEdge.displayName = 'BezierEdge';\n\nconst NodeIdContext = createContext(null);\nconst Provider = NodeIdContext.Provider;\nNodeIdContext.Consumer;\nconst useNodeId = () => {\n const nodeId = useContext(NodeIdContext);\n return nodeId;\n};\n\nconst isEdge = (element) => 'id' in element && 'source' in element && 'target' in element;\nconst isNode = (element) => 'id' in element && !('source' in element) && !('target' in element);\nconst getOutgoers = (node, nodes, edges) => {\n if (!isNode(node)) {\n return [];\n }\n const outgoerIds = edges.filter((e) => e.source === node.id).map((e) => e.target);\n return nodes.filter((n) => outgoerIds.includes(n.id));\n};\nconst getIncomers = (node, nodes, edges) => {\n if (!isNode(node)) {\n return [];\n }\n const incomersIds = edges.filter((e) => e.target === node.id).map((e) => e.source);\n return nodes.filter((n) => incomersIds.includes(n.id));\n};\nconst getEdgeId = ({ source, sourceHandle, target, targetHandle }) => `reactflow__edge-${source}${sourceHandle || ''}-${target}${targetHandle || ''}`;\nconst getMarkerId = (marker, rfId) => {\n if (typeof marker === 'undefined') {\n return '';\n }\n if (typeof marker === 'string') {\n return marker;\n }\n const idPrefix = rfId ? `${rfId}__` : '';\n return `${idPrefix}${Object.keys(marker)\n .sort()\n .map((key) => `${key}=${marker[key]}`)\n .join('&')}`;\n};\nconst connectionExists = (edge, edges) => {\n return edges.some((el) => el.source === edge.source &&\n el.target === edge.target &&\n (el.sourceHandle === edge.sourceHandle || (!el.sourceHandle && !edge.sourceHandle)) &&\n (el.targetHandle === edge.targetHandle || (!el.targetHandle && !edge.targetHandle)));\n};\nconst addEdge = (edgeParams, edges) => {\n if (!edgeParams.source || !edgeParams.target) {\n devWarn('006', errorMessages['error006']());\n return edges;\n }\n let edge;\n if (isEdge(edgeParams)) {\n edge = { ...edgeParams };\n }\n else {\n edge = {\n ...edgeParams,\n id: getEdgeId(edgeParams),\n };\n }\n if (connectionExists(edge, edges)) {\n return edges;\n }\n return edges.concat(edge);\n};\nconst updateEdge = (oldEdge, newConnection, edges, options = { shouldReplaceId: true }) => {\n const { id: oldEdgeId, ...rest } = oldEdge;\n if (!newConnection.source || !newConnection.target) {\n devWarn('006', errorMessages['error006']());\n return edges;\n }\n const foundEdge = edges.find((e) => e.id === oldEdgeId);\n if (!foundEdge) {\n devWarn('007', errorMessages['error007'](oldEdgeId));\n return edges;\n }\n // Remove old edge and create the new edge with parameters of old edge.\n const edge = {\n ...rest,\n id: options.shouldReplaceId ? getEdgeId(newConnection) : oldEdgeId,\n source: newConnection.source,\n target: newConnection.target,\n sourceHandle: newConnection.sourceHandle,\n targetHandle: newConnection.targetHandle,\n };\n return edges.filter((e) => e.id !== oldEdgeId).concat(edge);\n};\nconst pointToRendererPoint = ({ x, y }, [tx, ty, tScale], snapToGrid, [snapX, snapY]) => {\n const position = {\n x: (x - tx) / tScale,\n y: (y - ty) / tScale,\n };\n if (snapToGrid) {\n return {\n x: snapX * Math.round(position.x / snapX),\n y: snapY * Math.round(position.y / snapY),\n };\n }\n return position;\n};\nconst rendererPointToPoint = ({ x, y }, [tx, ty, tScale]) => {\n return {\n x: x * tScale + tx,\n y: y * tScale + ty,\n };\n};\nconst getNodePositionWithOrigin = (node, nodeOrigin = [0, 0]) => {\n if (!node) {\n return {\n x: 0,\n y: 0,\n positionAbsolute: {\n x: 0,\n y: 0,\n },\n };\n }\n const offsetX = (node.width ?? 0) * nodeOrigin[0];\n const offsetY = (node.height ?? 0) * nodeOrigin[1];\n const position = {\n x: node.position.x - offsetX,\n y: node.position.y - offsetY,\n };\n return {\n ...position,\n positionAbsolute: node.positionAbsolute\n ? {\n x: node.positionAbsolute.x - offsetX,\n y: node.positionAbsolute.y - offsetY,\n }\n : position,\n };\n};\nconst getNodesBounds = (nodes, nodeOrigin = [0, 0]) => {\n if (nodes.length === 0) {\n return { x: 0, y: 0, width: 0, height: 0 };\n }\n const box = nodes.reduce((currBox, node) => {\n const { x, y } = getNodePositionWithOrigin(node, nodeOrigin).positionAbsolute;\n return getBoundsOfBoxes(currBox, rectToBox({\n x,\n y,\n width: node.width || 0,\n height: node.height || 0,\n }));\n }, { x: Infinity, y: Infinity, x2: -Infinity, y2: -Infinity });\n return boxToRect(box);\n};\n// @deprecated Use `getNodesBounds`.\nconst getRectOfNodes = (nodes, nodeOrigin = [0, 0]) => {\n console.warn('[DEPRECATED] `getRectOfNodes` is deprecated. Instead use `getNodesBounds` https://reactflow.dev/api-reference/utils/get-nodes-bounds.');\n return getNodesBounds(nodes, nodeOrigin);\n};\nconst getNodesInside = (nodeInternals, rect, [tx, ty, tScale] = [0, 0, 1], partially = false, \n// set excludeNonSelectableNodes if you want to pay attention to the nodes \"selectable\" attribute\nexcludeNonSelectableNodes = false, nodeOrigin = [0, 0]) => {\n const paneRect = {\n x: (rect.x - tx) / tScale,\n y: (rect.y - ty) / tScale,\n width: rect.width / tScale,\n height: rect.height / tScale,\n };\n const visibleNodes = [];\n nodeInternals.forEach((node) => {\n const { width, height, selectable = true, hidden = false } = node;\n if ((excludeNonSelectableNodes && !selectable) || hidden) {\n return false;\n }\n const { positionAbsolute } = getNodePositionWithOrigin(node, nodeOrigin);\n const nodeRect = {\n x: positionAbsolute.x,\n y: positionAbsolute.y,\n width: width || 0,\n height: height || 0,\n };\n const overlappingArea = getOverlappingArea(paneRect, nodeRect);\n const notInitialized = typeof width === 'undefined' || typeof height === 'undefined' || width === null || height === null;\n const partiallyVisible = partially && overlappingArea > 0;\n const area = (width || 0) * (height || 0);\n const isVisible = notInitialized || partiallyVisible || overlappingArea >= area;\n if (isVisible || node.dragging) {\n visibleNodes.push(node);\n }\n });\n return visibleNodes;\n};\nconst getConnectedEdges = (nodes, edges) => {\n const nodeIds = nodes.map((node) => node.id);\n return edges.filter((edge) => nodeIds.includes(edge.source) || nodeIds.includes(edge.target));\n};\n// @deprecated Use `getViewportForBounds`.\nconst getTransformForBounds = (bounds, width, height, minZoom, maxZoom, padding = 0.1) => {\n const { x, y, zoom } = getViewportForBounds(bounds, width, height, minZoom, maxZoom, padding);\n console.warn('[DEPRECATED] `getTransformForBounds` is deprecated. Instead use `getViewportForBounds`. Beware that the return value is type Viewport (`{ x: number, y: number, zoom: number }`) instead of Transform (`[number, number, number]`). https://reactflow.dev/api-reference/utils/get-viewport-for-bounds');\n return [x, y, zoom];\n};\nconst getViewportForBounds = (bounds, width, height, minZoom, maxZoom, padding = 0.1) => {\n const xZoom = width / (bounds.width * (1 + padding));\n const yZoom = height / (bounds.height * (1 + padding));\n const zoom = Math.min(xZoom, yZoom);\n const clampedZoom = clamp(zoom, minZoom, maxZoom);\n const boundsCenterX = bounds.x + bounds.width / 2;\n const boundsCenterY = bounds.y + bounds.height / 2;\n const x = width / 2 - boundsCenterX * clampedZoom;\n const y = height / 2 - boundsCenterY * clampedZoom;\n return { x, y, zoom: clampedZoom };\n};\nconst getD3Transition = (selection, duration = 0) => {\n return selection.transition().duration(duration);\n};\n\n// this functions collects all handles and adds an absolute position\n// so that we can later find the closest handle to the mouse position\nfunction getHandles(node, handleBounds, type, currentHandle) {\n return (handleBounds[type] || []).reduce((res, h) => {\n if (`${node.id}-${h.id}-${type}` !== currentHandle) {\n res.push({\n id: h.id || null,\n type,\n nodeId: node.id,\n x: (node.positionAbsolute?.x ?? 0) + h.x + h.width / 2,\n y: (node.positionAbsolute?.y ?? 0) + h.y + h.height / 2,\n });\n }\n return res;\n }, []);\n}\nfunction getClosestHandle(event, doc, pos, connectionRadius, handles, validator) {\n // we always want to prioritize the handle below the mouse cursor over the closest distance handle,\n // because it could be that the center of another handle is closer to the mouse pointer than the handle below the cursor\n const { x, y } = getEventPosition(event);\n const domNodes = doc.elementsFromPoint(x, y);\n const handleBelow = domNodes.find((el) => el.classList.contains('react-flow__handle'));\n if (handleBelow) {\n const handleNodeId = handleBelow.getAttribute('data-nodeid');\n if (handleNodeId) {\n const handleType = getHandleType(undefined, handleBelow);\n const handleId = handleBelow.getAttribute('data-handleid');\n const validHandleResult = validator({ nodeId: handleNodeId, id: handleId, type: handleType });\n if (validHandleResult) {\n const handle = handles.find((h) => h.nodeId === handleNodeId && h.type === handleType && h.id === handleId);\n return {\n handle: {\n id: handleId,\n type: handleType,\n nodeId: handleNodeId,\n x: handle?.x || pos.x,\n y: handle?.y || pos.y,\n },\n validHandleResult,\n };\n }\n }\n }\n // if we couldn't find a handle below the mouse cursor we look for the closest distance based on the connectionRadius\n let closestHandles = [];\n let minDistance = Infinity;\n handles.forEach((handle) => {\n const distance = Math.sqrt((handle.x - pos.x) ** 2 + (handle.y - pos.y) ** 2);\n if (distance <= connectionRadius) {\n const validHandleResult = validator(handle);\n if (distance <= minDistance) {\n if (distance < minDistance) {\n closestHandles = [{ handle, validHandleResult }];\n }\n else if (distance === minDistance) {\n // when multiple handles are on the same distance we collect all of them\n closestHandles.push({\n handle,\n validHandleResult,\n });\n }\n minDistance = distance;\n }\n }\n });\n if (!closestHandles.length) {\n return { handle: null, validHandleResult: defaultResult() };\n }\n if (closestHandles.length === 1) {\n return closestHandles[0];\n }\n const hasValidHandle = closestHandles.some(({ validHandleResult }) => validHandleResult.isValid);\n const hasTargetHandle = closestHandles.some(({ handle }) => handle.type === 'target');\n // if multiple handles are layouted on top of each other we prefer the one with type = target and the one that is valid\n return (closestHandles.find(({ handle, validHandleResult }) => hasTargetHandle ? handle.type === 'target' : (hasValidHandle ? validHandleResult.isValid : true)) || closestHandles[0]);\n}\nconst nullConnection = { source: null, target: null, sourceHandle: null, targetHandle: null };\nconst defaultResult = () => ({\n handleDomNode: null,\n isValid: false,\n connection: nullConnection,\n endHandle: null,\n});\n// checks if and returns connection in fom of an object { source: 123, target: 312 }\nfunction isValidHandle(handle, connectionMode, fromNodeId, fromHandleId, fromType, isValidConnection, doc) {\n const isTarget = fromType === 'target';\n const handleToCheck = doc.querySelector(`.react-flow__handle[data-id=\"${handle?.nodeId}-${handle?.id}-${handle?.type}\"]`);\n const result = {\n ...defaultResult(),\n handleDomNode: handleToCheck,\n };\n if (handleToCheck) {\n const handleType = getHandleType(undefined, handleToCheck);\n const handleNodeId = handleToCheck.getAttribute('data-nodeid');\n const handleId = handleToCheck.getAttribute('data-handleid');\n const connectable = handleToCheck.classList.contains('connectable');\n const connectableEnd = handleToCheck.classList.contains('connectableend');\n const connection = {\n source: isTarget ? handleNodeId : fromNodeId,\n sourceHandle: isTarget ? handleId : fromHandleId,\n target: isTarget ? fromNodeId : handleNodeId,\n targetHandle: isTarget ? fromHandleId : handleId,\n };\n result.connection = connection;\n const isConnectable = connectable && connectableEnd;\n // in strict mode we don't allow target to target or source to source connections\n const isValid = isConnectable &&\n (connectionMode === ConnectionMode.Strict\n ? (isTarget && handleType === 'source') || (!isTarget && handleType === 'target')\n : handleNodeId !== fromNodeId || handleId !== fromHandleId);\n if (isValid) {\n result.endHandle = {\n nodeId: handleNodeId,\n handleId,\n type: handleType,\n };\n result.isValid = isValidConnection(connection);\n }\n }\n return result;\n}\nfunction getHandleLookup({ nodes, nodeId, handleId, handleType }) {\n return nodes.reduce((res, node) => {\n if (node[internalsSymbol]) {\n const { handleBounds } = node[internalsSymbol];\n let sourceHandles = [];\n let targetHandles = [];\n if (handleBounds) {\n sourceHandles = getHandles(node, handleBounds, 'source', `${nodeId}-${handleId}-${handleType}`);\n targetHandles = getHandles(node, handleBounds, 'target', `${nodeId}-${handleId}-${handleType}`);\n }\n res.push(...sourceHandles, ...targetHandles);\n }\n return res;\n }, []);\n}\nfunction getHandleType(edgeUpdaterType, handleDomNode) {\n if (edgeUpdaterType) {\n return edgeUpdaterType;\n }\n else if (handleDomNode?.classList.contains('target')) {\n return 'target';\n }\n else if (handleDomNode?.classList.contains('source')) {\n return 'source';\n }\n return null;\n}\nfunction resetRecentHandle(handleDomNode) {\n handleDomNode?.classList.remove('valid', 'connecting', 'react-flow__handle-valid', 'react-flow__handle-connecting');\n}\nfunction getConnectionStatus(isInsideConnectionRadius, isHandleValid) {\n let connectionStatus = null;\n if (isHandleValid) {\n connectionStatus = 'valid';\n }\n else if (isInsideConnectionRadius && !isHandleValid) {\n connectionStatus = 'invalid';\n }\n return connectionStatus;\n}\n\nfunction handlePointerDown({ event, handleId, nodeId, onConnect, isTarget, getState, setState, isValidConnection, edgeUpdaterType, onEdgeUpdateEnd, }) {\n // when react-flow is used inside a shadow root we can't use document\n const doc = getHostForElement(event.target);\n const { connectionMode, domNode, autoPanOnConnect, connectionRadius, onConnectStart, panBy, getNodes, cancelConnection, } = getState();\n let autoPanId = 0;\n let closestHandle;\n const { x, y } = getEventPosition(event);\n const clickedHandle = doc?.elementFromPoint(x, y);\n const handleType = getHandleType(edgeUpdaterType, clickedHandle);\n const containerBounds = domNode?.getBoundingClientRect();\n if (!containerBounds || !handleType) {\n return;\n }\n let prevActiveHandle;\n let connectionPosition = getEventPosition(event, containerBounds);\n let autoPanStarted = false;\n let connection = null;\n let isValid = false;\n let handleDomNode = null;\n const handleLookup = getHandleLookup({\n nodes: getNodes(),\n nodeId,\n handleId,\n handleType,\n });\n // when the user is moving the mouse close to the edge of the canvas while connecting we move the canvas\n const autoPan = () => {\n if (!autoPanOnConnect) {\n return;\n }\n const [xMovement, yMovement] = calcAutoPan(connectionPosition, containerBounds);\n panBy({ x: xMovement, y: yMovement });\n autoPanId = requestAnimationFrame(autoPan);\n };\n setState({\n connectionPosition,\n connectionStatus: null,\n // connectionNodeId etc will be removed in the next major in favor of connectionStartHandle\n connectionNodeId: nodeId,\n connectionHandleId: handleId,\n connectionHandleType: handleType,\n connectionStartHandle: {\n nodeId,\n handleId,\n type: handleType,\n },\n connectionEndHandle: null,\n });\n onConnectStart?.(event, { nodeId, handleId, handleType });\n function onPointerMove(event) {\n const { transform } = getState();\n connectionPosition = getEventPosition(event, containerBounds);\n const { handle, validHandleResult } = getClosestHandle(event, doc, pointToRendererPoint(connectionPosition, transform, false, [1, 1]), connectionRadius, handleLookup, (handle) => isValidHandle(handle, connectionMode, nodeId, handleId, isTarget ? 'target' : 'source', isValidConnection, doc));\n closestHandle = handle;\n if (!autoPanStarted) {\n autoPan();\n autoPanStarted = true;\n }\n handleDomNode = validHandleResult.handleDomNode;\n connection = validHandleResult.connection;\n isValid = validHandleResult.isValid;\n setState({\n connectionPosition: closestHandle && isValid\n ? rendererPointToPoint({\n x: closestHandle.x,\n y: closestHandle.y,\n }, transform)\n : connectionPosition,\n connectionStatus: getConnectionStatus(!!closestHandle, isValid),\n connectionEndHandle: validHandleResult.endHandle,\n });\n if (!closestHandle && !isValid && !handleDomNode) {\n return resetRecentHandle(prevActiveHandle);\n }\n if (connection.source !== connection.target && handleDomNode) {\n resetRecentHandle(prevActiveHandle);\n prevActiveHandle = handleDomNode;\n // @todo: remove the old class names \"react-flow__handle-\" in the next major version\n handleDomNode.classList.add('connecting', 'react-flow__handle-connecting');\n handleDomNode.classList.toggle('valid', isValid);\n handleDomNode.classList.toggle('react-flow__handle-valid', isValid);\n }\n }\n function onPointerUp(event) {\n if ((closestHandle || handleDomNode) && connection && isValid) {\n onConnect?.(connection);\n }\n // it's important to get a fresh reference from the store here\n // in order to get the latest state of onConnectEnd\n getState().onConnectEnd?.(event);\n if (edgeUpdaterType) {\n onEdgeUpdateEnd?.(event);\n }\n resetRecentHandle(prevActiveHandle);\n cancelConnection();\n cancelAnimationFrame(autoPanId);\n autoPanStarted = false;\n isValid = false;\n connection = null;\n handleDomNode = null;\n doc.removeEventListener('mousemove', onPointerMove);\n doc.removeEventListener('mouseup', onPointerUp);\n doc.removeEventListener('touchmove', onPointerMove);\n doc.removeEventListener('touchend', onPointerUp);\n }\n doc.addEventListener('mousemove', onPointerMove);\n doc.addEventListener('mouseup', onPointerUp);\n doc.addEventListener('touchmove', onPointerMove);\n doc.addEventListener('touchend', onPointerUp);\n}\n\nconst alwaysValid = () => true;\nconst selector$f = (s) => ({\n connectionStartHandle: s.connectionStartHandle,\n connectOnClick: s.connectOnClick,\n noPanClassName: s.noPanClassName,\n});\nconst connectingSelector = (nodeId, handleId, type) => (state) => {\n const { connectionStartHandle: startHandle, connectionEndHandle: endHandle, connectionClickStartHandle: clickHandle, } = state;\n return {\n connecting: (startHandle?.nodeId === nodeId && startHandle?.handleId === handleId && startHandle?.type === type) ||\n (endHandle?.nodeId === nodeId && endHandle?.handleId === handleId && endHandle?.type === type),\n clickConnecting: clickHandle?.nodeId === nodeId && clickHandle?.handleId === handleId && clickHandle?.type === type,\n };\n};\nconst Handle = forwardRef(({ type = 'source', position = Position.Top, isValidConnection, isConnectable = true, isConnectableStart = true, isConnectableEnd = true, id, onConnect, children, className, onMouseDown, onTouchStart, ...rest }, ref) => {\n const handleId = id || null;\n const isTarget = type === 'target';\n const store = useStoreApi();\n const nodeId = useNodeId();\n const { connectOnClick, noPanClassName } = useStore(selector$f, shallow);\n const { connecting, clickConnecting } = useStore(connectingSelector(nodeId, handleId, type), shallow);\n if (!nodeId) {\n store.getState().onError?.('010', errorMessages['error010']());\n }\n const onConnectExtended = (params) => {\n const { defaultEdgeOptions, onConnect: onConnectAction, hasDefaultEdges } = store.getState();\n const edgeParams = {\n ...defaultEdgeOptions,\n ...params,\n };\n if (hasDefaultEdges) {\n const { edges, setEdges } = store.getState();\n setEdges(addEdge(edgeParams, edges));\n }\n onConnectAction?.(edgeParams);\n onConnect?.(edgeParams);\n };\n const onPointerDown = (event) => {\n if (!nodeId) {\n return;\n }\n const isMouseTriggered = isMouseEvent(event);\n if (isConnectableStart && ((isMouseTriggered && event.button === 0) || !isMouseTriggered)) {\n handlePointerDown({\n event,\n handleId,\n nodeId,\n onConnect: onConnectExtended,\n isTarget,\n getState: store.getState,\n setState: store.setState,\n isValidConnection: isValidConnection || store.getState().isValidConnection || alwaysValid,\n });\n }\n if (isMouseTriggered) {\n onMouseDown?.(event);\n }\n else {\n onTouchStart?.(event);\n }\n };\n const onClick = (event) => {\n const { onClickConnectStart, onClickConnectEnd, connectionClickStartHandle, connectionMode, isValidConnection: isValidConnectionStore, } = store.getState();\n if (!nodeId || (!connectionClickStartHandle && !isConnectableStart)) {\n return;\n }\n if (!connectionClickStartHandle) {\n onClickConnectStart?.(event, { nodeId, handleId, handleType: type });\n store.setState({ connectionClickStartHandle: { nodeId, type, handleId } });\n return;\n }\n const doc = getHostForElement(event.target);\n const isValidConnectionHandler = isValidConnection || isValidConnectionStore || alwaysValid;\n const { connection, isValid } = isValidHandle({\n nodeId,\n id: handleId,\n type,\n }, connectionMode, connectionClickStartHandle.nodeId, connectionClickStartHandle.handleId || null, connectionClickStartHandle.type, isValidConnectionHandler, doc);\n if (isValid) {\n onConnectExtended(connection);\n }\n onClickConnectEnd?.(event);\n store.setState({ connectionClickStartHandle: null });\n };\n return (React.createElement(\"div\", { \"data-handleid\": handleId, \"data-nodeid\": nodeId, \"data-handlepos\": position, \"data-id\": `${nodeId}-${handleId}-${type}`, className: cc([\n 'react-flow__handle',\n `react-flow__handle-${position}`,\n 'nodrag',\n noPanClassName,\n className,\n {\n source: !isTarget,\n target: isTarget,\n connectable: isConnectable,\n connectablestart: isConnectableStart,\n connectableend: isConnectableEnd,\n connecting: clickConnecting,\n // this class is used to style the handle when the user is connecting\n connectionindicator: isConnectable && ((isConnectableStart && !connecting) || (isConnectableEnd && connecting)),\n },\n ]), onMouseDown: onPointerDown, onTouchStart: onPointerDown, onClick: connectOnClick ? onClick : undefined, ref: ref, ...rest }, children));\n});\nHandle.displayName = 'Handle';\nvar Handle$1 = memo(Handle);\n\nconst DefaultNode = ({ data, isConnectable, targetPosition = Position.Top, sourcePosition = Position.Bottom, }) => {\n return (React.createElement(React.Fragment, null,\n React.createElement(Handle$1, { type: \"target\", position: targetPosition, isConnectable: isConnectable }),\n data?.label,\n React.createElement(Handle$1, { type: \"source\", position: sourcePosition, isConnectable: isConnectable })));\n};\nDefaultNode.displayName = 'DefaultNode';\nvar DefaultNode$1 = memo(DefaultNode);\n\nconst InputNode = ({ data, isConnectable, sourcePosition = Position.Bottom }) => (React.createElement(React.Fragment, null,\n data?.label,\n React.createElement(Handle$1, { type: \"source\", position: sourcePosition, isConnectable: isConnectable })));\nInputNode.displayName = 'InputNode';\nvar InputNode$1 = memo(InputNode);\n\nconst OutputNode = ({ data, isConnectable, targetPosition = Position.Top }) => (React.createElement(React.Fragment, null,\n React.createElement(Handle$1, { type: \"target\", position: targetPosition, isConnectable: isConnectable }),\n data?.label));\nOutputNode.displayName = 'OutputNode';\nvar OutputNode$1 = memo(OutputNode);\n\nconst GroupNode = () => null;\nGroupNode.displayName = 'GroupNode';\n\nconst selector$e = (s) => ({\n selectedNodes: s.getNodes().filter((n) => n.selected),\n selectedEdges: s.edges.filter((e) => e.selected),\n});\nconst selectId = (obj) => obj.id;\nfunction areEqual(a, b) {\n return (shallow(a.selectedNodes.map(selectId), b.selectedNodes.map(selectId)) &&\n shallow(a.selectedEdges.map(selectId), b.selectedEdges.map(selectId)));\n}\n// This is just a helper component for calling the onSelectionChange listener.\n// @TODO: Now that we have the onNodesChange and on EdgesChange listeners, do we still need this component?\nconst SelectionListener = memo(({ onSelectionChange }) => {\n const store = useStoreApi();\n const { selectedNodes, selectedEdges } = useStore(selector$e, areEqual);\n useEffect(() => {\n const params = { nodes: selectedNodes, edges: selectedEdges };\n onSelectionChange?.(params);\n store.getState().onSelectionChange.forEach((fn) => fn(params));\n }, [selectedNodes, selectedEdges, onSelectionChange]);\n return null;\n});\nSelectionListener.displayName = 'SelectionListener';\nconst changeSelector = (s) => !!s.onSelectionChange;\nfunction Wrapper$1({ onSelectionChange }) {\n const storeHasSelectionChange = useStore(changeSelector);\n if (onSelectionChange || storeHasSelectionChange) {\n return React.createElement(SelectionListener, { onSelectionChange: onSelectionChange });\n }\n return null;\n}\n\nconst selector$d = (s) => ({\n setNodes: s.setNodes,\n setEdges: s.setEdges,\n setDefaultNodesAndEdges: s.setDefaultNodesAndEdges,\n setMinZoom: s.setMinZoom,\n setMaxZoom: s.setMaxZoom,\n setTranslateExtent: s.setTranslateExtent,\n setNodeExtent: s.setNodeExtent,\n reset: s.reset,\n});\nfunction useStoreUpdater(value, setStoreState) {\n useEffect(() => {\n if (typeof value !== 'undefined') {\n setStoreState(value);\n }\n }, [value]);\n}\n// updates with values in store that don't have a dedicated setter function\nfunction useDirectStoreUpdater(key, value, setState) {\n useEffect(() => {\n if (typeof value !== 'undefined') {\n setState({ [key]: value });\n }\n }, [value]);\n}\nconst StoreUpdater = ({ nodes, edges, defaultNodes, defaultEdges, onConnect, onConnectStart, onConnectEnd, onClickConnectStart, onClickConnectEnd, nodesDraggable, nodesConnectable, nodesFocusable, edgesFocusable, edgesUpdatable, elevateNodesOnSelect, minZoom, maxZoom, nodeExtent, onNodesChange, onEdgesChange, elementsSelectable, connectionMode, snapGrid, snapToGrid, translateExtent, connectOnClick, defaultEdgeOptions, fitView, fitViewOptions, onNodesDelete, onEdgesDelete, onNodeDrag, onNodeDragStart, onNodeDragStop, onSelectionDrag, onSelectionDragStart, onSelectionDragStop, noPanClassName, nodeOrigin, rfId, autoPanOnConnect, autoPanOnNodeDrag, onError, connectionRadius, isValidConnection, nodeDragThreshold, }) => {\n const { setNodes, setEdges, setDefaultNodesAndEdges, setMinZoom, setMaxZoom, setTranslateExtent, setNodeExtent, reset, } = useStore(selector$d, shallow);\n const store = useStoreApi();\n useEffect(() => {\n const edgesWithDefaults = defaultEdges?.map((e) => ({ ...e, ...defaultEdgeOptions }));\n setDefaultNodesAndEdges(defaultNodes, edgesWithDefaults);\n return () => {\n reset();\n };\n }, []);\n useDirectStoreUpdater('defaultEdgeOptions', defaultEdgeOptions, store.setState);\n useDirectStoreUpdater('connectionMode', connectionMode, store.setState);\n useDirectStoreUpdater('onConnect', onConnect, store.setState);\n useDirectStoreUpdater('onConnectStart', onConnectStart, store.setState);\n useDirectStoreUpdater('onConnectEnd', onConnectEnd, store.setState);\n useDirectStoreUpdater('onClickConnectStart', onClickConnectStart, store.setState);\n useDirectStoreUpdater('onClickConnectEnd', onClickConnectEnd, store.setState);\n useDirectStoreUpdater('nodesDraggable', nodesDraggable, store.setState);\n useDirectStoreUpdater('nodesConnectable', nodesConnectable, store.setState);\n useDirectStoreUpdater('nodesFocusable', nodesFocusable, store.setState);\n useDirectStoreUpdater('edgesFocusable', edgesFocusable, store.setState);\n useDirectStoreUpdater('edgesUpdatable', edgesUpdatable, store.setState);\n useDirectStoreUpdater('elementsSelectable', elementsSelectable, store.setState);\n useDirectStoreUpdater('elevateNodesOnSelect', elevateNodesOnSelect, store.setState);\n useDirectStoreUpdater('snapToGrid', snapToGrid, store.setState);\n useDirectStoreUpdater('snapGrid', snapGrid, store.setState);\n useDirectStoreUpdater('onNodesChange', onNodesChange, store.setState);\n useDirectStoreUpdater('onEdgesChange', onEdgesChange, store.setState);\n useDirectStoreUpdater('connectOnClick', connectOnClick, store.setState);\n useDirectStoreUpdater('fitViewOnInit', fitView, store.setState);\n useDirectStoreUpdater('fitViewOnInitOptions', fitViewOptions, store.setState);\n useDirectStoreUpdater('onNodesDelete', onNodesDelete, store.setState);\n useDirectStoreUpdater('onEdgesDelete', onEdgesDelete, store.setState);\n useDirectStoreUpdater('onNodeDrag', onNodeDrag, store.setState);\n useDirectStoreUpdater('onNodeDragStart', onNodeDragStart, store.setState);\n useDirectStoreUpdater('onNodeDragStop', onNodeDragStop, store.setState);\n useDirectStoreUpdater('onSelectionDrag', onSelectionDrag, store.setState);\n useDirectStoreUpdater('onSelectionDragStart', onSelectionDragStart, store.setState);\n useDirectStoreUpdater('onSelectionDragStop', onSelectionDragStop, store.setState);\n useDirectStoreUpdater('noPanClassName', noPanClassName, store.setState);\n useDirectStoreUpdater('nodeOrigin', nodeOrigin, store.setState);\n useDirectStoreUpdater('rfId', rfId, store.setState);\n useDirectStoreUpdater('autoPanOnConnect', autoPanOnConnect, store.setState);\n useDirectStoreUpdater('autoPanOnNodeDrag', autoPanOnNodeDrag, store.setState);\n useDirectStoreUpdater('onError', onError, store.setState);\n useDirectStoreUpdater('connectionRadius', connectionRadius, store.setState);\n useDirectStoreUpdater('isValidConnection', isValidConnection, store.setState);\n useDirectStoreUpdater('nodeDragThreshold', nodeDragThreshold, store.setState);\n useStoreUpdater(nodes, setNodes);\n useStoreUpdater(edges, setEdges);\n useStoreUpdater(minZoom, setMinZoom);\n useStoreUpdater(maxZoom, setMaxZoom);\n useStoreUpdater(translateExtent, setTranslateExtent);\n useStoreUpdater(nodeExtent, setNodeExtent);\n return null;\n};\n\nconst style = { display: 'none' };\nconst ariaLiveStyle = {\n position: 'absolute',\n width: 1,\n height: 1,\n margin: -1,\n border: 0,\n padding: 0,\n overflow: 'hidden',\n clip: 'rect(0px, 0px, 0px, 0px)',\n clipPath: 'inset(100%)',\n};\nconst ARIA_NODE_DESC_KEY = 'react-flow__node-desc';\nconst ARIA_EDGE_DESC_KEY = 'react-flow__edge-desc';\nconst ARIA_LIVE_MESSAGE = 'react-flow__aria-live';\nconst selector$c = (s) => s.ariaLiveMessage;\nfunction AriaLiveMessage({ rfId }) {\n const ariaLiveMessage = useStore(selector$c);\n return (React.createElement(\"div\", { id: `${ARIA_LIVE_MESSAGE}-${rfId}`, \"aria-live\": \"assertive\", \"aria-atomic\": \"true\", style: ariaLiveStyle }, ariaLiveMessage));\n}\nfunction A11yDescriptions({ rfId, disableKeyboardA11y }) {\n return (React.createElement(React.Fragment, null,\n React.createElement(\"div\", { id: `${ARIA_NODE_DESC_KEY}-${rfId}`, style: style },\n \"Press enter or space to select a node.\",\n !disableKeyboardA11y && 'You can then use the arrow keys to move the node around.',\n \" Press delete to remove it and escape to cancel.\",\n ' '),\n React.createElement(\"div\", { id: `${ARIA_EDGE_DESC_KEY}-${rfId}`, style: style }, \"Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.\"),\n !disableKeyboardA11y && React.createElement(AriaLiveMessage, { rfId: rfId })));\n}\n\n// the keycode can be a string 'a' or an array of strings ['a', 'a+d']\n// a string means a single key 'a' or a combination when '+' is used 'a+d'\n// an array means different possibilities. Explainer: ['a', 'd+s'] here the\n// user can use the single key 'a' or the combination 'd' + 's'\nvar useKeyPress = (keyCode = null, options = { actInsideInputWithModifier: true }) => {\n const [keyPressed, setKeyPressed] = useState(false);\n // we need to remember if a modifier key is pressed in order to track it\n const modifierPressed = useRef(false);\n // we need to remember the pressed keys in order to support combinations\n const pressedKeys = useRef(new Set([]));\n // keyCodes = array with single keys [['a']] or key combinations [['a', 's']]\n // keysToWatch = array with all keys flattened ['a', 'd', 'ShiftLeft']\n // used to check if we store event.code or event.key. When the code is in the list of keysToWatch\n // we use the code otherwise the key. Explainer: When you press the left \"command\" key, the code is \"MetaLeft\"\n // and the key is \"Meta\". We want users to be able to pass keys and codes so we assume that the key is meant when\n // we can't find it in the list of keysToWatch.\n const [keyCodes, keysToWatch] = useMemo(() => {\n if (keyCode !== null) {\n const keyCodeArr = Array.isArray(keyCode) ? keyCode : [keyCode];\n const keys = keyCodeArr.filter((kc) => typeof kc === 'string').map((kc) => kc.split('+'));\n const keysFlat = keys.reduce((res, item) => res.concat(...item), []);\n return [keys, keysFlat];\n }\n return [[], []];\n }, [keyCode]);\n useEffect(() => {\n const doc = typeof document !== 'undefined' ? document : null;\n const target = options?.target || doc;\n if (keyCode !== null) {\n const downHandler = (event) => {\n modifierPressed.current = event.ctrlKey || event.metaKey || event.shiftKey;\n const preventAction = (!modifierPressed.current || (modifierPressed.current && !options.actInsideInputWithModifier)) &&\n isInputDOMNode(event);\n if (preventAction) {\n return false;\n }\n const keyOrCode = useKeyOrCode(event.code, keysToWatch);\n pressedKeys.current.add(event[keyOrCode]);\n if (isMatchingKey(keyCodes, pressedKeys.current, false)) {\n event.preventDefault();\n setKeyPressed(true);\n }\n };\n const upHandler = (event) => {\n const preventAction = (!modifierPressed.current || (modifierPressed.current && !options.actInsideInputWithModifier)) &&\n isInputDOMNode(event);\n if (preventAction) {\n return false;\n }\n const keyOrCode = useKeyOrCode(event.code, keysToWatch);\n if (isMatchingKey(keyCodes, pressedKeys.current, true)) {\n setKeyPressed(false);\n pressedKeys.current.clear();\n }\n else {\n pressedKeys.current.delete(event[keyOrCode]);\n }\n // fix for Mac: when cmd key is pressed, keyup is not triggered for any other key, see: https://stackoverflow.com/questions/27380018/when-cmd-key-is-kept-pressed-keyup-is-not-triggered-for-any-other-key\n if (event.key === 'Meta') {\n pressedKeys.current.clear();\n }\n modifierPressed.current = false;\n };\n const resetHandler = () => {\n pressedKeys.current.clear();\n setKeyPressed(false);\n };\n target?.addEventListener('keydown', downHandler);\n target?.addEventListener('keyup', upHandler);\n window.addEventListener('blur', resetHandler);\n return () => {\n target?.removeEventListener('keydown', downHandler);\n target?.removeEventListener('keyup', upHandler);\n window.removeEventListener('blur', resetHandler);\n };\n }\n }, [keyCode, setKeyPressed]);\n return keyPressed;\n};\n// utils\nfunction isMatchingKey(keyCodes, pressedKeys, isUp) {\n return (keyCodes\n // we only want to compare same sizes of keyCode definitions\n // and pressed keys. When the user specified 'Meta' as a key somewhere\n // this would also be truthy without this filter when user presses 'Meta' + 'r'\n .filter((keys) => isUp || keys.length === pressedKeys.size)\n // since we want to support multiple possibilities only one of the\n // combinations need to be part of the pressed keys\n .some((keys) => keys.every((k) => pressedKeys.has(k))));\n}\nfunction useKeyOrCode(eventCode, keysToWatch) {\n return keysToWatch.includes(eventCode) ? 'code' : 'key';\n}\n\nfunction calculateXYZPosition(node, nodeInternals, result, nodeOrigin) {\n if (!node.parentNode) {\n return result;\n }\n const parentNode = nodeInternals.get(node.parentNode);\n const parentNodePosition = getNodePositionWithOrigin(parentNode, nodeOrigin);\n return calculateXYZPosition(parentNode, nodeInternals, {\n x: (result.x ?? 0) + parentNodePosition.x,\n y: (result.y ?? 0) + parentNodePosition.y,\n z: (parentNode[internalsSymbol]?.z ?? 0) > (result.z ?? 0) ? parentNode[internalsSymbol]?.z ?? 0 : result.z ?? 0,\n }, nodeOrigin);\n}\nfunction updateAbsoluteNodePositions(nodeInternals, nodeOrigin, parentNodes) {\n nodeInternals.forEach((node) => {\n if (node.parentNode && !nodeInternals.has(node.parentNode)) {\n throw new Error(`Parent node ${node.parentNode} not found`);\n }\n if (node.parentNode || parentNodes?.[node.id]) {\n const { x, y, z } = calculateXYZPosition(node, nodeInternals, {\n ...node.position,\n z: node[internalsSymbol]?.z ?? 0,\n }, nodeOrigin);\n node.positionAbsolute = {\n x,\n y,\n };\n node[internalsSymbol].z = z;\n if (parentNodes?.[node.id]) {\n node[internalsSymbol].isParent = true;\n }\n }\n });\n}\nfunction createNodeInternals(nodes, nodeInternals, nodeOrigin, elevateNodesOnSelect) {\n const nextNodeInternals = new Map();\n const parentNodes = {};\n const selectedNodeZ = elevateNodesOnSelect ? 1000 : 0;\n nodes.forEach((node) => {\n const z = (isNumeric(node.zIndex) ? node.zIndex : 0) + (node.selected ? selectedNodeZ : 0);\n const currInternals = nodeInternals.get(node.id);\n const internals = {\n width: currInternals?.width,\n height: currInternals?.height,\n ...node,\n positionAbsolute: {\n x: node.position.x,\n y: node.position.y,\n },\n };\n if (node.parentNode) {\n internals.parentNode = node.parentNode;\n parentNodes[node.parentNode] = true;\n }\n Object.defineProperty(internals, internalsSymbol, {\n enumerable: false,\n value: {\n handleBounds: currInternals?.[internalsSymbol]?.handleBounds,\n z,\n },\n });\n nextNodeInternals.set(node.id, internals);\n });\n updateAbsoluteNodePositions(nextNodeInternals, nodeOrigin, parentNodes);\n return nextNodeInternals;\n}\nfunction fitView(get, options = {}) {\n const { getNodes, width, height, minZoom, maxZoom, d3Zoom, d3Selection, fitViewOnInitDone, fitViewOnInit, nodeOrigin, } = get();\n const isInitialFitView = options.initial && !fitViewOnInitDone && fitViewOnInit;\n const d3initialized = d3Zoom && d3Selection;\n if (d3initialized && (isInitialFitView || !options.initial)) {\n const nodes = getNodes().filter((n) => {\n const isVisible = options.includeHiddenNodes ? n.width && n.height : !n.hidden;\n if (options.nodes?.length) {\n return isVisible && options.nodes.some((optionNode) => optionNode.id === n.id);\n }\n return isVisible;\n });\n const nodesInitialized = nodes.every((n) => n.width && n.height);\n if (nodes.length > 0 && nodesInitialized) {\n const bounds = getNodesBounds(nodes, nodeOrigin);\n const { x, y, zoom } = getViewportForBounds(bounds, width, height, options.minZoom ?? minZoom, options.maxZoom ?? maxZoom, options.padding ?? 0.1);\n const nextTransform = zoomIdentity.translate(x, y).scale(zoom);\n if (typeof options.duration === 'number' && options.duration > 0) {\n d3Zoom.transform(getD3Transition(d3Selection, options.duration), nextTransform);\n }\n else {\n d3Zoom.transform(d3Selection, nextTransform);\n }\n return true;\n }\n }\n return false;\n}\nfunction handleControlledNodeSelectionChange(nodeChanges, nodeInternals) {\n nodeChanges.forEach((change) => {\n const node = nodeInternals.get(change.id);\n if (node) {\n nodeInternals.set(node.id, {\n ...node,\n [internalsSymbol]: node[internalsSymbol],\n selected: change.selected,\n });\n }\n });\n return new Map(nodeInternals);\n}\nfunction handleControlledEdgeSelectionChange(edgeChanges, edges) {\n return edges.map((e) => {\n const change = edgeChanges.find((change) => change.id === e.id);\n if (change) {\n e.selected = change.selected;\n }\n return e;\n });\n}\nfunction updateNodesAndEdgesSelections({ changedNodes, changedEdges, get, set }) {\n const { nodeInternals, edges, onNodesChange, onEdgesChange, hasDefaultNodes, hasDefaultEdges } = get();\n if (changedNodes?.length) {\n if (hasDefaultNodes) {\n set({ nodeInternals: handleControlledNodeSelectionChange(changedNodes, nodeInternals) });\n }\n onNodesChange?.(changedNodes);\n }\n if (changedEdges?.length) {\n if (hasDefaultEdges) {\n set({ edges: handleControlledEdgeSelectionChange(changedEdges, edges) });\n }\n onEdgesChange?.(changedEdges);\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nconst noop = () => { };\nconst initialViewportHelper = {\n zoomIn: noop,\n zoomOut: noop,\n zoomTo: noop,\n getZoom: () => 1,\n setViewport: noop,\n getViewport: () => ({ x: 0, y: 0, zoom: 1 }),\n fitView: () => false,\n setCenter: noop,\n fitBounds: noop,\n project: (position) => position,\n screenToFlowPosition: (position) => position,\n flowToScreenPosition: (position) => position,\n viewportInitialized: false,\n};\nconst selector$b = (s) => ({\n d3Zoom: s.d3Zoom,\n d3Selection: s.d3Selection,\n});\nconst useViewportHelper = () => {\n const store = useStoreApi();\n const { d3Zoom, d3Selection } = useStore(selector$b, shallow);\n const viewportHelperFunctions = useMemo(() => {\n if (d3Selection && d3Zoom) {\n return {\n zoomIn: (options) => d3Zoom.scaleBy(getD3Transition(d3Selection, options?.duration), 1.2),\n zoomOut: (options) => d3Zoom.scaleBy(getD3Transition(d3Selection, options?.duration), 1 / 1.2),\n zoomTo: (zoomLevel, options) => d3Zoom.scaleTo(getD3Transition(d3Selection, options?.duration), zoomLevel),\n getZoom: () => store.getState().transform[2],\n setViewport: (transform, options) => {\n const [x, y, zoom] = store.getState().transform;\n const nextTransform = zoomIdentity\n .translate(transform.x ?? x, transform.y ?? y)\n .scale(transform.zoom ?? zoom);\n d3Zoom.transform(getD3Transition(d3Selection, options?.duration), nextTransform);\n },\n getViewport: () => {\n const [x, y, zoom] = store.getState().transform;\n return { x, y, zoom };\n },\n fitView: (options) => fitView(store.getState, options),\n setCenter: (x, y, options) => {\n const { width, height, maxZoom } = store.getState();\n const nextZoom = typeof options?.zoom !== 'undefined' ? options.zoom : maxZoom;\n const centerX = width / 2 - x * nextZoom;\n const centerY = height / 2 - y * nextZoom;\n const transform = zoomIdentity.translate(centerX, centerY).scale(nextZoom);\n d3Zoom.transform(getD3Transition(d3Selection, options?.duration), transform);\n },\n fitBounds: (bounds, options) => {\n const { width, height, minZoom, maxZoom } = store.getState();\n const { x, y, zoom } = getViewportForBounds(bounds, width, height, minZoom, maxZoom, options?.padding ?? 0.1);\n const transform = zoomIdentity.translate(x, y).scale(zoom);\n d3Zoom.transform(getD3Transition(d3Selection, options?.duration), transform);\n },\n // @deprecated Use `screenToFlowPosition`.\n project: (position) => {\n const { transform, snapToGrid, snapGrid } = store.getState();\n console.warn('[DEPRECATED] `project` is deprecated. Instead use `screenToFlowPosition`. There is no need to subtract the react flow bounds anymore! https://reactflow.dev/api-reference/types/react-flow-instance#screen-to-flow-position');\n return pointToRendererPoint(position, transform, snapToGrid, snapGrid);\n },\n screenToFlowPosition: (position) => {\n const { transform, snapToGrid, snapGrid, domNode } = store.getState();\n if (!domNode) {\n return position;\n }\n const { x: domX, y: domY } = domNode.getBoundingClientRect();\n const relativePosition = {\n x: position.x - domX,\n y: position.y - domY,\n };\n return pointToRendererPoint(relativePosition, transform, snapToGrid, snapGrid);\n },\n flowToScreenPosition: (position) => {\n const { transform, domNode } = store.getState();\n if (!domNode) {\n return position;\n }\n const { x: domX, y: domY } = domNode.getBoundingClientRect();\n const rendererPosition = rendererPointToPoint(position, transform);\n return {\n x: rendererPosition.x + domX,\n y: rendererPosition.y + domY,\n };\n },\n viewportInitialized: true,\n };\n }\n return initialViewportHelper;\n }, [d3Zoom, d3Selection]);\n return viewportHelperFunctions;\n};\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nfunction useReactFlow() {\n const viewportHelper = useViewportHelper();\n const store = useStoreApi();\n const getNodes = useCallback(() => {\n return store\n .getState()\n .getNodes()\n .map((n) => ({ ...n }));\n }, []);\n const getNode = useCallback((id) => {\n return store.getState().nodeInternals.get(id);\n }, []);\n const getEdges = useCallback(() => {\n const { edges = [] } = store.getState();\n return edges.map((e) => ({ ...e }));\n }, []);\n const getEdge = useCallback((id) => {\n const { edges = [] } = store.getState();\n return edges.find((e) => e.id === id);\n }, []);\n const setNodes = useCallback((payload) => {\n const { getNodes, setNodes, hasDefaultNodes, onNodesChange } = store.getState();\n const nodes = getNodes();\n const nextNodes = typeof payload === 'function' ? payload(nodes) : payload;\n if (hasDefaultNodes) {\n setNodes(nextNodes);\n }\n else if (onNodesChange) {\n const changes = nextNodes.length === 0\n ? nodes.map((node) => ({ type: 'remove', id: node.id }))\n : nextNodes.map((node) => ({ item: node, type: 'reset' }));\n onNodesChange(changes);\n }\n }, []);\n const setEdges = useCallback((payload) => {\n const { edges = [], setEdges, hasDefaultEdges, onEdgesChange } = store.getState();\n const nextEdges = typeof payload === 'function' ? payload(edges) : payload;\n if (hasDefaultEdges) {\n setEdges(nextEdges);\n }\n else if (onEdgesChange) {\n const changes = nextEdges.length === 0\n ? edges.map((edge) => ({ type: 'remove', id: edge.id }))\n : nextEdges.map((edge) => ({ item: edge, type: 'reset' }));\n onEdgesChange(changes);\n }\n }, []);\n const addNodes = useCallback((payload) => {\n const nodes = Array.isArray(payload) ? payload : [payload];\n const { getNodes, setNodes, hasDefaultNodes, onNodesChange } = store.getState();\n if (hasDefaultNodes) {\n const currentNodes = getNodes();\n const nextNodes = [...currentNodes, ...nodes];\n setNodes(nextNodes);\n }\n else if (onNodesChange) {\n const changes = nodes.map((node) => ({ item: node, type: 'add' }));\n onNodesChange(changes);\n }\n }, []);\n const addEdges = useCallback((payload) => {\n const nextEdges = Array.isArray(payload) ? payload : [payload];\n const { edges = [], setEdges, hasDefaultEdges, onEdgesChange } = store.getState();\n if (hasDefaultEdges) {\n setEdges([...edges, ...nextEdges]);\n }\n else if (onEdgesChange) {\n const changes = nextEdges.map((edge) => ({ item: edge, type: 'add' }));\n onEdgesChange(changes);\n }\n }, []);\n const toObject = useCallback(() => {\n const { getNodes, edges = [], transform } = store.getState();\n const [x, y, zoom] = transform;\n return {\n nodes: getNodes().map((n) => ({ ...n })),\n edges: edges.map((e) => ({ ...e })),\n viewport: {\n x,\n y,\n zoom,\n },\n };\n }, []);\n const deleteElements = useCallback(({ nodes: nodesDeleted, edges: edgesDeleted }) => {\n const { nodeInternals, getNodes, edges, hasDefaultNodes, hasDefaultEdges, onNodesDelete, onEdgesDelete, onNodesChange, onEdgesChange, } = store.getState();\n const nodeIds = (nodesDeleted || []).map((node) => node.id);\n const edgeIds = (edgesDeleted || []).map((edge) => edge.id);\n const nodesToRemove = getNodes().reduce((res, node) => {\n const parentHit = !nodeIds.includes(node.id) && node.parentNode && res.find((n) => n.id === node.parentNode);\n const deletable = typeof node.deletable === 'boolean' ? node.deletable : true;\n if (deletable && (nodeIds.includes(node.id) || parentHit)) {\n res.push(node);\n }\n return res;\n }, []);\n const deletableEdges = edges.filter((e) => (typeof e.deletable === 'boolean' ? e.deletable : true));\n const initialHitEdges = deletableEdges.filter((e) => edgeIds.includes(e.id));\n if (nodesToRemove || initialHitEdges) {\n const connectedEdges = getConnectedEdges(nodesToRemove, deletableEdges);\n const edgesToRemove = [...initialHitEdges, ...connectedEdges];\n const edgeIdsToRemove = edgesToRemove.reduce((res, edge) => {\n if (!res.includes(edge.id)) {\n res.push(edge.id);\n }\n return res;\n }, []);\n if (hasDefaultEdges || hasDefaultNodes) {\n if (hasDefaultEdges) {\n store.setState({\n edges: edges.filter((e) => !edgeIdsToRemove.includes(e.id)),\n });\n }\n if (hasDefaultNodes) {\n nodesToRemove.forEach((node) => {\n nodeInternals.delete(node.id);\n });\n store.setState({\n nodeInternals: new Map(nodeInternals),\n });\n }\n }\n if (edgeIdsToRemove.length > 0) {\n onEdgesDelete?.(edgesToRemove);\n if (onEdgesChange) {\n onEdgesChange(edgeIdsToRemove.map((id) => ({\n id,\n type: 'remove',\n })));\n }\n }\n if (nodesToRemove.length > 0) {\n onNodesDelete?.(nodesToRemove);\n if (onNodesChange) {\n const nodeChanges = nodesToRemove.map((n) => ({ id: n.id, type: 'remove' }));\n onNodesChange(nodeChanges);\n }\n }\n }\n }, []);\n const getNodeRect = useCallback((nodeOrRect) => {\n const isRect = isRectObject(nodeOrRect);\n const node = isRect ? null : store.getState().nodeInternals.get(nodeOrRect.id);\n const nodeRect = isRect ? nodeOrRect : nodeToRect(node);\n return [nodeRect, node, isRect];\n }, []);\n const getIntersectingNodes = useCallback((nodeOrRect, partially = true, nodes) => {\n const [nodeRect, node, isRect] = getNodeRect(nodeOrRect);\n if (!nodeRect) {\n return [];\n }\n return (nodes || store.getState().getNodes()).filter((n) => {\n if (!isRect && (n.id === node.id || !n.positionAbsolute)) {\n return false;\n }\n const currNodeRect = nodeToRect(n);\n const overlappingArea = getOverlappingArea(currNodeRect, nodeRect);\n const partiallyVisible = partially && overlappingArea > 0;\n return partiallyVisible || overlappingArea >= nodeRect.width * nodeRect.height;\n });\n }, []);\n const isNodeIntersecting = useCallback((nodeOrRect, area, partially = true) => {\n const [nodeRect] = getNodeRect(nodeOrRect);\n if (!nodeRect) {\n return false;\n }\n const overlappingArea = getOverlappingArea(nodeRect, area);\n const partiallyVisible = partially && overlappingArea > 0;\n return partiallyVisible || overlappingArea >= nodeRect.width * nodeRect.height;\n }, []);\n return useMemo(() => {\n return {\n ...viewportHelper,\n getNodes,\n getNode,\n getEdges,\n getEdge,\n setNodes,\n setEdges,\n addNodes,\n addEdges,\n toObject,\n deleteElements,\n getIntersectingNodes,\n isNodeIntersecting,\n };\n }, [\n viewportHelper,\n getNodes,\n getNode,\n getEdges,\n getEdge,\n setNodes,\n setEdges,\n addNodes,\n addEdges,\n toObject,\n deleteElements,\n getIntersectingNodes,\n isNodeIntersecting,\n ]);\n}\n\nconst deleteKeyOptions = { actInsideInputWithModifier: false };\nvar useGlobalKeyHandler = ({ deleteKeyCode, multiSelectionKeyCode }) => {\n const store = useStoreApi();\n const { deleteElements } = useReactFlow();\n const deleteKeyPressed = useKeyPress(deleteKeyCode, deleteKeyOptions);\n const multiSelectionKeyPressed = useKeyPress(multiSelectionKeyCode);\n useEffect(() => {\n if (deleteKeyPressed) {\n const { edges, getNodes } = store.getState();\n const selectedNodes = getNodes().filter((node) => node.selected);\n const selectedEdges = edges.filter((edge) => edge.selected);\n deleteElements({ nodes: selectedNodes, edges: selectedEdges });\n store.setState({ nodesSelectionActive: false });\n }\n }, [deleteKeyPressed]);\n useEffect(() => {\n store.setState({ multiSelectionActive: multiSelectionKeyPressed });\n }, [multiSelectionKeyPressed]);\n};\n\nfunction useResizeHandler(rendererNode) {\n const store = useStoreApi();\n useEffect(() => {\n let resizeObserver;\n const updateDimensions = () => {\n if (!rendererNode.current) {\n return;\n }\n const size = getDimensions(rendererNode.current);\n if (size.height === 0 || size.width === 0) {\n store.getState().onError?.('004', errorMessages['error004']());\n }\n store.setState({ width: size.width || 500, height: size.height || 500 });\n };\n updateDimensions();\n window.addEventListener('resize', updateDimensions);\n if (rendererNode.current) {\n resizeObserver = new ResizeObserver(() => updateDimensions());\n resizeObserver.observe(rendererNode.current);\n }\n return () => {\n window.removeEventListener('resize', updateDimensions);\n if (resizeObserver && rendererNode.current) {\n resizeObserver.unobserve(rendererNode.current);\n }\n };\n }, []);\n}\n\nconst containerStyle = {\n position: 'absolute',\n width: '100%',\n height: '100%',\n top: 0,\n left: 0,\n};\n\n/* eslint-disable @typescript-eslint/ban-ts-comment */\nconst viewChanged = (prevViewport, eventTransform) => prevViewport.x !== eventTransform.x || prevViewport.y !== eventTransform.y || prevViewport.zoom !== eventTransform.k;\nconst eventToFlowTransform = (eventTransform) => ({\n x: eventTransform.x,\n y: eventTransform.y,\n zoom: eventTransform.k,\n});\nconst isWrappedWithClass = (event, className) => event.target.closest(`.${className}`);\nconst isRightClickPan = (panOnDrag, usedButton) => usedButton === 2 && Array.isArray(panOnDrag) && panOnDrag.includes(2);\nconst wheelDelta = (event) => {\n const factor = event.ctrlKey && isMacOs() ? 10 : 1;\n return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * factor;\n};\nconst selector$a = (s) => ({\n d3Zoom: s.d3Zoom,\n d3Selection: s.d3Selection,\n d3ZoomHandler: s.d3ZoomHandler,\n userSelectionActive: s.userSelectionActive,\n});\nconst ZoomPane = ({ onMove, onMoveStart, onMoveEnd, onPaneContextMenu, zoomOnScroll = true, zoomOnPinch = true, panOnScroll = false, panOnScrollSpeed = 0.5, panOnScrollMode = PanOnScrollMode.Free, zoomOnDoubleClick = true, elementsSelectable, panOnDrag = true, defaultViewport, translateExtent, minZoom, maxZoom, zoomActivationKeyCode, preventScrolling = true, children, noWheelClassName, noPanClassName, }) => {\n const timerId = useRef();\n const store = useStoreApi();\n const isZoomingOrPanning = useRef(false);\n const zoomedWithRightMouseButton = useRef(false);\n const zoomPane = useRef(null);\n const prevTransform = useRef({ x: 0, y: 0, zoom: 0 });\n const { d3Zoom, d3Selection, d3ZoomHandler, userSelectionActive } = useStore(selector$a, shallow);\n const zoomActivationKeyPressed = useKeyPress(zoomActivationKeyCode);\n const mouseButton = useRef(0);\n const isPanScrolling = useRef(false);\n const panScrollTimeout = useRef();\n useResizeHandler(zoomPane);\n useEffect(() => {\n if (zoomPane.current) {\n const bbox = zoomPane.current.getBoundingClientRect();\n const d3ZoomInstance = zoom().scaleExtent([minZoom, maxZoom]).translateExtent(translateExtent);\n const selection = select(zoomPane.current).call(d3ZoomInstance);\n const updatedTransform = zoomIdentity\n .translate(defaultViewport.x, defaultViewport.y)\n .scale(clamp(defaultViewport.zoom, minZoom, maxZoom));\n const extent = [\n [0, 0],\n [bbox.width, bbox.height],\n ];\n const constrainedTransform = d3ZoomInstance.constrain()(updatedTransform, extent, translateExtent);\n d3ZoomInstance.transform(selection, constrainedTransform);\n d3ZoomInstance.wheelDelta(wheelDelta);\n store.setState({\n d3Zoom: d3ZoomInstance,\n d3Selection: selection,\n d3ZoomHandler: selection.on('wheel.zoom'),\n // we need to pass transform because zoom handler is not registered when we set the initial transform\n transform: [constrainedTransform.x, constrainedTransform.y, constrainedTransform.k],\n domNode: zoomPane.current.closest('.react-flow'),\n });\n }\n }, []);\n useEffect(() => {\n if (d3Selection && d3Zoom) {\n if (panOnScroll && !zoomActivationKeyPressed && !userSelectionActive) {\n d3Selection.on('wheel.zoom', (event) => {\n if (isWrappedWithClass(event, noWheelClassName)) {\n return false;\n }\n event.preventDefault();\n event.stopImmediatePropagation();\n const currentZoom = d3Selection.property('__zoom').k || 1;\n const _isMacOs = isMacOs();\n // macos sets ctrlKey=true for pinch gesture on a trackpad\n if (event.ctrlKey && zoomOnPinch && _isMacOs) {\n const point = pointer(event);\n const pinchDelta = wheelDelta(event);\n const zoom = currentZoom * Math.pow(2, pinchDelta);\n // @ts-ignore\n d3Zoom.scaleTo(d3Selection, zoom, point, event);\n return;\n }\n // increase scroll speed in firefox\n // firefox: deltaMode === 1; chrome: deltaMode === 0\n const deltaNormalize = event.deltaMode === 1 ? 20 : 1;\n let deltaX = panOnScrollMode === PanOnScrollMode.Vertical ? 0 : event.deltaX * deltaNormalize;\n let deltaY = panOnScrollMode === PanOnScrollMode.Horizontal ? 0 : event.deltaY * deltaNormalize;\n // this enables vertical scrolling with shift + scroll on windows\n if (!_isMacOs && event.shiftKey && panOnScrollMode !== PanOnScrollMode.Vertical) {\n deltaX = event.deltaY * deltaNormalize;\n deltaY = 0;\n }\n d3Zoom.translateBy(d3Selection, -(deltaX / currentZoom) * panOnScrollSpeed, -(deltaY / currentZoom) * panOnScrollSpeed, \n // @ts-ignore\n { internal: true });\n const nextViewport = eventToFlowTransform(d3Selection.property('__zoom'));\n const { onViewportChangeStart, onViewportChange, onViewportChangeEnd } = store.getState();\n clearTimeout(panScrollTimeout.current);\n // for pan on scroll we need to handle the event calls on our own\n // we can't use the start, zoom and end events from d3-zoom\n // because start and move gets called on every scroll event and not once at the beginning\n if (!isPanScrolling.current) {\n isPanScrolling.current = true;\n onMoveStart?.(event, nextViewport);\n onViewportChangeStart?.(nextViewport);\n }\n if (isPanScrolling.current) {\n onMove?.(event, nextViewport);\n onViewportChange?.(nextViewport);\n panScrollTimeout.current = setTimeout(() => {\n onMoveEnd?.(event, nextViewport);\n onViewportChangeEnd?.(nextViewport);\n isPanScrolling.current = false;\n }, 150);\n }\n }, { passive: false });\n }\n else if (typeof d3ZoomHandler !== 'undefined') {\n d3Selection.on('wheel.zoom', function (event, d) {\n if (!preventScrolling || isWrappedWithClass(event, noWheelClassName)) {\n return null;\n }\n event.preventDefault();\n d3ZoomHandler.call(this, event, d);\n }, { passive: false });\n }\n }\n }, [\n userSelectionActive,\n panOnScroll,\n panOnScrollMode,\n d3Selection,\n d3Zoom,\n d3ZoomHandler,\n zoomActivationKeyPressed,\n zoomOnPinch,\n preventScrolling,\n noWheelClassName,\n onMoveStart,\n onMove,\n onMoveEnd,\n ]);\n useEffect(() => {\n if (d3Zoom) {\n d3Zoom.on('start', (event) => {\n if (!event.sourceEvent || event.sourceEvent.internal) {\n return null;\n }\n // we need to remember it here, because it's always 0 in the \"zoom\" event\n mouseButton.current = event.sourceEvent?.button;\n const { onViewportChangeStart } = store.getState();\n const flowTransform = eventToFlowTransform(event.transform);\n isZoomingOrPanning.current = true;\n prevTransform.current = flowTransform;\n if (event.sourceEvent?.type === 'mousedown') {\n store.setState({ paneDragging: true });\n }\n onViewportChangeStart?.(flowTransform);\n onMoveStart?.(event.sourceEvent, flowTransform);\n });\n }\n }, [d3Zoom, onMoveStart]);\n useEffect(() => {\n if (d3Zoom) {\n if (userSelectionActive && !isZoomingOrPanning.current) {\n d3Zoom.on('zoom', null);\n }\n else if (!userSelectionActive) {\n d3Zoom.on('zoom', (event) => {\n const { onViewportChange } = store.getState();\n store.setState({ transform: [event.transform.x, event.transform.y, event.transform.k] });\n zoomedWithRightMouseButton.current = !!(onPaneContextMenu && isRightClickPan(panOnDrag, mouseButton.current ?? 0));\n if ((onMove || onViewportChange) && !event.sourceEvent?.internal) {\n const flowTransform = eventToFlowTransform(event.transform);\n onViewportChange?.(flowTransform);\n onMove?.(event.sourceEvent, flowTransform);\n }\n });\n }\n }\n }, [userSelectionActive, d3Zoom, onMove, panOnDrag, onPaneContextMenu]);\n useEffect(() => {\n if (d3Zoom) {\n d3Zoom.on('end', (event) => {\n if (!event.sourceEvent || event.sourceEvent.internal) {\n return null;\n }\n const { onViewportChangeEnd } = store.getState();\n isZoomingOrPanning.current = false;\n store.setState({ paneDragging: false });\n if (onPaneContextMenu &&\n isRightClickPan(panOnDrag, mouseButton.current ?? 0) &&\n !zoomedWithRightMouseButton.current) {\n onPaneContextMenu(event.sourceEvent);\n }\n zoomedWithRightMouseButton.current = false;\n if ((onMoveEnd || onViewportChangeEnd) && viewChanged(prevTransform.current, event.transform)) {\n const flowTransform = eventToFlowTransform(event.transform);\n prevTransform.current = flowTransform;\n clearTimeout(timerId.current);\n timerId.current = setTimeout(() => {\n onViewportChangeEnd?.(flowTransform);\n onMoveEnd?.(event.sourceEvent, flowTransform);\n }, panOnScroll ? 150 : 0);\n }\n });\n }\n }, [d3Zoom, panOnScroll, panOnDrag, onMoveEnd, onPaneContextMenu]);\n useEffect(() => {\n if (d3Zoom) {\n d3Zoom.filter((event) => {\n const zoomScroll = zoomActivationKeyPressed || zoomOnScroll;\n const pinchZoom = zoomOnPinch && event.ctrlKey;\n if ((panOnDrag === true || (Array.isArray(panOnDrag) && panOnDrag.includes(1))) &&\n event.button === 1 &&\n event.type === 'mousedown' &&\n (isWrappedWithClass(event, 'react-flow__node') || isWrappedWithClass(event, 'react-flow__edge'))) {\n return true;\n }\n // if all interactions are disabled, we prevent all zoom events\n if (!panOnDrag && !zoomScroll && !panOnScroll && !zoomOnDoubleClick && !zoomOnPinch) {\n return false;\n }\n // during a selection we prevent all other interactions\n if (userSelectionActive) {\n return false;\n }\n // if zoom on double click is disabled, we prevent the double click event\n if (!zoomOnDoubleClick && event.type === 'dblclick') {\n return false;\n }\n // if the target element is inside an element with the nowheel class, we prevent zooming\n if (isWrappedWithClass(event, noWheelClassName) && event.type === 'wheel') {\n return false;\n }\n // if the target element is inside an element with the nopan class, we prevent panning\n if (isWrappedWithClass(event, noPanClassName) &&\n (event.type !== 'wheel' || (panOnScroll && event.type === 'wheel' && !zoomActivationKeyPressed))) {\n return false;\n }\n if (!zoomOnPinch && event.ctrlKey && event.type === 'wheel') {\n return false;\n }\n // when there is no scroll handling enabled, we prevent all wheel events\n if (!zoomScroll && !panOnScroll && !pinchZoom && event.type === 'wheel') {\n return false;\n }\n // if the pane is not movable, we prevent dragging it with mousestart or touchstart\n if (!panOnDrag && (event.type === 'mousedown' || event.type === 'touchstart')) {\n return false;\n }\n // if the pane is only movable using allowed clicks\n if (Array.isArray(panOnDrag) &&\n !panOnDrag.includes(event.button) &&\n (event.type === 'mousedown' || event.type === 'touchstart')) {\n return false;\n }\n // We only allow right clicks if pan on drag is set to right click\n const buttonAllowed = (Array.isArray(panOnDrag) && panOnDrag.includes(event.button)) || !event.button || event.button <= 1;\n // default filter for d3-zoom\n return (!event.ctrlKey || event.type === 'wheel') && buttonAllowed;\n });\n }\n }, [\n userSelectionActive,\n d3Zoom,\n zoomOnScroll,\n zoomOnPinch,\n panOnScroll,\n zoomOnDoubleClick,\n panOnDrag,\n elementsSelectable,\n zoomActivationKeyPressed,\n ]);\n return (React.createElement(\"div\", { className: \"react-flow__renderer\", ref: zoomPane, style: containerStyle }, children));\n};\n\nconst selector$9 = (s) => ({\n userSelectionActive: s.userSelectionActive,\n userSelectionRect: s.userSelectionRect,\n});\nfunction UserSelection() {\n const { userSelectionActive, userSelectionRect } = useStore(selector$9, shallow);\n const isActive = userSelectionActive && userSelectionRect;\n if (!isActive) {\n return null;\n }\n return (React.createElement(\"div\", { className: \"react-flow__selection react-flow__container\", style: {\n width: userSelectionRect.width,\n height: userSelectionRect.height,\n transform: `translate(${userSelectionRect.x}px, ${userSelectionRect.y}px)`,\n } }));\n}\n\nfunction handleParentExpand(res, updateItem) {\n const parent = res.find((e) => e.id === updateItem.parentNode);\n if (parent) {\n const extendWidth = updateItem.position.x + updateItem.width - parent.width;\n const extendHeight = updateItem.position.y + updateItem.height - parent.height;\n if (extendWidth > 0 || extendHeight > 0 || updateItem.position.x < 0 || updateItem.position.y < 0) {\n parent.style = { ...parent.style } || {};\n parent.style.width = parent.style.width ?? parent.width;\n parent.style.height = parent.style.height ?? parent.height;\n if (extendWidth > 0) {\n parent.style.width += extendWidth;\n }\n if (extendHeight > 0) {\n parent.style.height += extendHeight;\n }\n if (updateItem.position.x < 0) {\n const xDiff = Math.abs(updateItem.position.x);\n parent.position.x = parent.position.x - xDiff;\n parent.style.width += xDiff;\n updateItem.position.x = 0;\n }\n if (updateItem.position.y < 0) {\n const yDiff = Math.abs(updateItem.position.y);\n parent.position.y = parent.position.y - yDiff;\n parent.style.height += yDiff;\n updateItem.position.y = 0;\n }\n parent.width = parent.style.width;\n parent.height = parent.style.height;\n }\n }\n}\nfunction applyChanges(changes, elements) {\n // we need this hack to handle the setNodes and setEdges function of the useReactFlow hook for controlled flows\n if (changes.some((c) => c.type === 'reset')) {\n return changes.filter((c) => c.type === 'reset').map((c) => c.item);\n }\n const initElements = changes.filter((c) => c.type === 'add').map((c) => c.item);\n return elements.reduce((res, item) => {\n const currentChanges = changes.filter((c) => c.id === item.id);\n if (currentChanges.length === 0) {\n res.push(item);\n return res;\n }\n const updateItem = { ...item };\n for (const currentChange of currentChanges) {\n if (currentChange) {\n switch (currentChange.type) {\n case 'select': {\n updateItem.selected = currentChange.selected;\n break;\n }\n case 'position': {\n if (typeof currentChange.position !== 'undefined') {\n updateItem.position = currentChange.position;\n }\n if (typeof currentChange.positionAbsolute !== 'undefined') {\n updateItem.positionAbsolute = currentChange.positionAbsolute;\n }\n if (typeof currentChange.dragging !== 'undefined') {\n updateItem.dragging = currentChange.dragging;\n }\n if (updateItem.expandParent) {\n handleParentExpand(res, updateItem);\n }\n break;\n }\n case 'dimensions': {\n if (typeof currentChange.dimensions !== 'undefined') {\n updateItem.width = currentChange.dimensions.width;\n updateItem.height = currentChange.dimensions.height;\n }\n if (typeof currentChange.updateStyle !== 'undefined') {\n updateItem.style = { ...(updateItem.style || {}), ...currentChange.dimensions };\n }\n if (typeof currentChange.resizing === 'boolean') {\n updateItem.resizing = currentChange.resizing;\n }\n if (updateItem.expandParent) {\n handleParentExpand(res, updateItem);\n }\n break;\n }\n case 'remove': {\n return res;\n }\n }\n }\n }\n res.push(updateItem);\n return res;\n }, initElements);\n}\nfunction applyNodeChanges(changes, nodes) {\n return applyChanges(changes, nodes);\n}\nfunction applyEdgeChanges(changes, edges) {\n return applyChanges(changes, edges);\n}\nconst createSelectionChange = (id, selected) => ({\n id,\n type: 'select',\n selected,\n});\nfunction getSelectionChanges(items, selectedIds) {\n return items.reduce((res, item) => {\n const willBeSelected = selectedIds.includes(item.id);\n if (!item.selected && willBeSelected) {\n item.selected = true;\n res.push(createSelectionChange(item.id, true));\n }\n else if (item.selected && !willBeSelected) {\n item.selected = false;\n res.push(createSelectionChange(item.id, false));\n }\n return res;\n }, []);\n}\n\n/**\n * The user selection rectangle gets displayed when a user drags the mouse while pressing shift\n */\nconst wrapHandler = (handler, containerRef) => {\n return (event) => {\n if (event.target !== containerRef.current) {\n return;\n }\n handler?.(event);\n };\n};\nconst selector$8 = (s) => ({\n userSelectionActive: s.userSelectionActive,\n elementsSelectable: s.elementsSelectable,\n dragging: s.paneDragging,\n});\nconst Pane = memo(({ isSelecting, selectionMode = SelectionMode.Full, panOnDrag, onSelectionStart, onSelectionEnd, onPaneClick, onPaneContextMenu, onPaneScroll, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, children, }) => {\n const container = useRef(null);\n const store = useStoreApi();\n const prevSelectedNodesCount = useRef(0);\n const prevSelectedEdgesCount = useRef(0);\n const containerBounds = useRef();\n const { userSelectionActive, elementsSelectable, dragging } = useStore(selector$8, shallow);\n const resetUserSelection = () => {\n store.setState({ userSelectionActive: false, userSelectionRect: null });\n prevSelectedNodesCount.current = 0;\n prevSelectedEdgesCount.current = 0;\n };\n const onClick = (event) => {\n onPaneClick?.(event);\n store.getState().resetSelectedElements();\n store.setState({ nodesSelectionActive: false });\n };\n const onContextMenu = (event) => {\n if (Array.isArray(panOnDrag) && panOnDrag?.includes(2)) {\n event.preventDefault();\n return;\n }\n onPaneContextMenu?.(event);\n };\n const onWheel = onPaneScroll ? (event) => onPaneScroll(event) : undefined;\n const onMouseDown = (event) => {\n const { resetSelectedElements, domNode } = store.getState();\n containerBounds.current = domNode?.getBoundingClientRect();\n if (!elementsSelectable ||\n !isSelecting ||\n event.button !== 0 ||\n event.target !== container.current ||\n !containerBounds.current) {\n return;\n }\n const { x, y } = getEventPosition(event, containerBounds.current);\n resetSelectedElements();\n store.setState({\n userSelectionRect: {\n width: 0,\n height: 0,\n startX: x,\n startY: y,\n x,\n y,\n },\n });\n onSelectionStart?.(event);\n };\n const onMouseMove = (event) => {\n const { userSelectionRect, nodeInternals, edges, transform, onNodesChange, onEdgesChange, nodeOrigin, getNodes } = store.getState();\n if (!isSelecting || !containerBounds.current || !userSelectionRect) {\n return;\n }\n store.setState({ userSelectionActive: true, nodesSelectionActive: false });\n const mousePos = getEventPosition(event, containerBounds.current);\n const startX = userSelectionRect.startX ?? 0;\n const startY = userSelectionRect.startY ?? 0;\n const nextUserSelectRect = {\n ...userSelectionRect,\n x: mousePos.x < startX ? mousePos.x : startX,\n y: mousePos.y < startY ? mousePos.y : startY,\n width: Math.abs(mousePos.x - startX),\n height: Math.abs(mousePos.y - startY),\n };\n const nodes = getNodes();\n const selectedNodes = getNodesInside(nodeInternals, nextUserSelectRect, transform, selectionMode === SelectionMode.Partial, true, nodeOrigin);\n const selectedEdgeIds = getConnectedEdges(selectedNodes, edges).map((e) => e.id);\n const selectedNodeIds = selectedNodes.map((n) => n.id);\n if (prevSelectedNodesCount.current !== selectedNodeIds.length) {\n prevSelectedNodesCount.current = selectedNodeIds.length;\n const changes = getSelectionChanges(nodes, selectedNodeIds);\n if (changes.length) {\n onNodesChange?.(changes);\n }\n }\n if (prevSelectedEdgesCount.current !== selectedEdgeIds.length) {\n prevSelectedEdgesCount.current = selectedEdgeIds.length;\n const changes = getSelectionChanges(edges, selectedEdgeIds);\n if (changes.length) {\n onEdgesChange?.(changes);\n }\n }\n store.setState({\n userSelectionRect: nextUserSelectRect,\n });\n };\n const onMouseUp = (event) => {\n if (event.button !== 0) {\n return;\n }\n const { userSelectionRect } = store.getState();\n // We only want to trigger click functions when in selection mode if\n // the user did not move the mouse.\n if (!userSelectionActive && userSelectionRect && event.target === container.current) {\n onClick?.(event);\n }\n store.setState({ nodesSelectionActive: prevSelectedNodesCount.current > 0 });\n resetUserSelection();\n onSelectionEnd?.(event);\n };\n const onMouseLeave = (event) => {\n if (userSelectionActive) {\n store.setState({ nodesSelectionActive: prevSelectedNodesCount.current > 0 });\n onSelectionEnd?.(event);\n }\n resetUserSelection();\n };\n const hasActiveSelection = elementsSelectable && (isSelecting || userSelectionActive);\n return (React.createElement(\"div\", { className: cc(['react-flow__pane', { dragging, selection: isSelecting }]), onClick: hasActiveSelection ? undefined : wrapHandler(onClick, container), onContextMenu: wrapHandler(onContextMenu, container), onWheel: wrapHandler(onWheel, container), onMouseEnter: hasActiveSelection ? undefined : onPaneMouseEnter, onMouseDown: hasActiveSelection ? onMouseDown : undefined, onMouseMove: hasActiveSelection ? onMouseMove : onPaneMouseMove, onMouseUp: hasActiveSelection ? onMouseUp : undefined, onMouseLeave: hasActiveSelection ? onMouseLeave : onPaneMouseLeave, ref: container, style: containerStyle },\n children,\n React.createElement(UserSelection, null)));\n});\nPane.displayName = 'Pane';\n\nfunction isParentSelected(node, nodeInternals) {\n if (!node.parentNode) {\n return false;\n }\n const parentNode = nodeInternals.get(node.parentNode);\n if (!parentNode) {\n return false;\n }\n if (parentNode.selected) {\n return true;\n }\n return isParentSelected(parentNode, nodeInternals);\n}\nfunction hasSelector(target, selector, nodeRef) {\n let current = target;\n do {\n if (current?.matches(selector))\n return true;\n if (current === nodeRef.current)\n return false;\n current = current.parentElement;\n } while (current);\n return false;\n}\n// looks for all selected nodes and created a NodeDragItem for each of them\nfunction getDragItems(nodeInternals, nodesDraggable, mousePos, nodeId) {\n return Array.from(nodeInternals.values())\n .filter((n) => (n.selected || n.id === nodeId) &&\n (!n.parentNode || !isParentSelected(n, nodeInternals)) &&\n (n.draggable || (nodesDraggable && typeof n.draggable === 'undefined')))\n .map((n) => ({\n id: n.id,\n position: n.position || { x: 0, y: 0 },\n positionAbsolute: n.positionAbsolute || { x: 0, y: 0 },\n distance: {\n x: mousePos.x - (n.positionAbsolute?.x ?? 0),\n y: mousePos.y - (n.positionAbsolute?.y ?? 0),\n },\n delta: {\n x: 0,\n y: 0,\n },\n extent: n.extent,\n parentNode: n.parentNode,\n width: n.width,\n height: n.height,\n expandParent: n.expandParent,\n }));\n}\nfunction clampNodeExtent(node, extent) {\n if (!extent || extent === 'parent') {\n return extent;\n }\n return [extent[0], [extent[1][0] - (node.width || 0), extent[1][1] - (node.height || 0)]];\n}\nfunction calcNextPosition(node, nextPosition, nodeInternals, nodeExtent, nodeOrigin = [0, 0], onError) {\n const clampedNodeExtent = clampNodeExtent(node, node.extent || nodeExtent);\n let currentExtent = clampedNodeExtent;\n if (node.extent === 'parent' && !node.expandParent) {\n if (node.parentNode && node.width && node.height) {\n const parent = nodeInternals.get(node.parentNode);\n const { x: parentX, y: parentY } = getNodePositionWithOrigin(parent, nodeOrigin).positionAbsolute;\n currentExtent =\n parent && isNumeric(parentX) && isNumeric(parentY) && isNumeric(parent.width) && isNumeric(parent.height)\n ? [\n [parentX + node.width * nodeOrigin[0], parentY + node.height * nodeOrigin[1]],\n [\n parentX + parent.width - node.width + node.width * nodeOrigin[0],\n parentY + parent.height - node.height + node.height * nodeOrigin[1],\n ],\n ]\n : currentExtent;\n }\n else {\n onError?.('005', errorMessages['error005']());\n currentExtent = clampedNodeExtent;\n }\n }\n else if (node.extent && node.parentNode && node.extent !== 'parent') {\n const parent = nodeInternals.get(node.parentNode);\n const { x: parentX, y: parentY } = getNodePositionWithOrigin(parent, nodeOrigin).positionAbsolute;\n currentExtent = [\n [node.extent[0][0] + parentX, node.extent[0][1] + parentY],\n [node.extent[1][0] + parentX, node.extent[1][1] + parentY],\n ];\n }\n let parentPosition = { x: 0, y: 0 };\n if (node.parentNode) {\n const parentNode = nodeInternals.get(node.parentNode);\n parentPosition = getNodePositionWithOrigin(parentNode, nodeOrigin).positionAbsolute;\n }\n const positionAbsolute = currentExtent && currentExtent !== 'parent'\n ? clampPosition(nextPosition, currentExtent)\n : nextPosition;\n return {\n position: {\n x: positionAbsolute.x - parentPosition.x,\n y: positionAbsolute.y - parentPosition.y,\n },\n positionAbsolute,\n };\n}\n// returns two params:\n// 1. the dragged node (or the first of the list, if we are dragging a node selection)\n// 2. array of selected nodes (for multi selections)\nfunction getEventHandlerParams({ nodeId, dragItems, nodeInternals, }) {\n const extentedDragItems = dragItems.map((n) => {\n const node = nodeInternals.get(n.id);\n return {\n ...node,\n position: n.position,\n positionAbsolute: n.positionAbsolute,\n };\n });\n return [nodeId ? extentedDragItems.find((n) => n.id === nodeId) : extentedDragItems[0], extentedDragItems];\n}\n\nconst getHandleBounds = (selector, nodeElement, zoom, nodeOrigin) => {\n const handles = nodeElement.querySelectorAll(selector);\n if (!handles || !handles.length) {\n return null;\n }\n const handlesArray = Array.from(handles);\n const nodeBounds = nodeElement.getBoundingClientRect();\n const nodeOffset = {\n x: nodeBounds.width * nodeOrigin[0],\n y: nodeBounds.height * nodeOrigin[1],\n };\n return handlesArray.map((handle) => {\n const handleBounds = handle.getBoundingClientRect();\n return {\n id: handle.getAttribute('data-handleid'),\n position: handle.getAttribute('data-handlepos'),\n x: (handleBounds.left - nodeBounds.left - nodeOffset.x) / zoom,\n y: (handleBounds.top - nodeBounds.top - nodeOffset.y) / zoom,\n ...getDimensions(handle),\n };\n });\n};\nfunction getMouseHandler(id, getState, handler) {\n return handler === undefined\n ? handler\n : (event) => {\n const node = getState().nodeInternals.get(id);\n if (node) {\n handler(event, { ...node });\n }\n };\n}\n// this handler is called by\n// 1. the click handler when node is not draggable or selectNodesOnDrag = false\n// or\n// 2. the on drag start handler when node is draggable and selectNodesOnDrag = true\nfunction handleNodeClick({ id, store, unselect = false, nodeRef, }) {\n const { addSelectedNodes, unselectNodesAndEdges, multiSelectionActive, nodeInternals, onError } = store.getState();\n const node = nodeInternals.get(id);\n if (!node) {\n onError?.('012', errorMessages['error012'](id));\n return;\n }\n store.setState({ nodesSelectionActive: false });\n if (!node.selected) {\n addSelectedNodes([id]);\n }\n else if (unselect || (node.selected && multiSelectionActive)) {\n unselectNodesAndEdges({ nodes: [node], edges: [] });\n requestAnimationFrame(() => nodeRef?.current?.blur());\n }\n}\n\nfunction useGetPointerPosition() {\n const store = useStoreApi();\n // returns the pointer position projected to the RF coordinate system\n const getPointerPosition = useCallback(({ sourceEvent }) => {\n const { transform, snapGrid, snapToGrid } = store.getState();\n const x = sourceEvent.touches ? sourceEvent.touches[0].clientX : sourceEvent.clientX;\n const y = sourceEvent.touches ? sourceEvent.touches[0].clientY : sourceEvent.clientY;\n const pointerPos = {\n x: (x - transform[0]) / transform[2],\n y: (y - transform[1]) / transform[2],\n };\n // we need the snapped position in order to be able to skip unnecessary drag events\n return {\n xSnapped: snapToGrid ? snapGrid[0] * Math.round(pointerPos.x / snapGrid[0]) : pointerPos.x,\n ySnapped: snapToGrid ? snapGrid[1] * Math.round(pointerPos.y / snapGrid[1]) : pointerPos.y,\n ...pointerPos,\n };\n }, []);\n return getPointerPosition;\n}\n\nfunction wrapSelectionDragFunc(selectionFunc) {\n return (event, _, nodes) => selectionFunc?.(event, nodes);\n}\nfunction useDrag({ nodeRef, disabled = false, noDragClassName, handleSelector, nodeId, isSelectable, selectNodesOnDrag, }) {\n const store = useStoreApi();\n const [dragging, setDragging] = useState(false);\n const dragItems = useRef([]);\n const lastPos = useRef({ x: null, y: null });\n const autoPanId = useRef(0);\n const containerBounds = useRef(null);\n const mousePosition = useRef({ x: 0, y: 0 });\n const dragEvent = useRef(null);\n const autoPanStarted = useRef(false);\n const dragStarted = useRef(false);\n const getPointerPosition = useGetPointerPosition();\n useEffect(() => {\n if (nodeRef?.current) {\n const selection = select(nodeRef.current);\n const updateNodes = ({ x, y }) => {\n const { nodeInternals, onNodeDrag, onSelectionDrag, updateNodePositions, nodeExtent, snapGrid, snapToGrid, nodeOrigin, onError, } = store.getState();\n lastPos.current = { x, y };\n let hasChange = false;\n let nodesBox = { x: 0, y: 0, x2: 0, y2: 0 };\n if (dragItems.current.length > 1 && nodeExtent) {\n const rect = getNodesBounds(dragItems.current, nodeOrigin);\n nodesBox = rectToBox(rect);\n }\n dragItems.current = dragItems.current.map((n) => {\n const nextPosition = { x: x - n.distance.x, y: y - n.distance.y };\n if (snapToGrid) {\n nextPosition.x = snapGrid[0] * Math.round(nextPosition.x / snapGrid[0]);\n nextPosition.y = snapGrid[1] * Math.round(nextPosition.y / snapGrid[1]);\n }\n // if there is selection with multiple nodes and a node extent is set, we need to adjust the node extent for each node\n // based on its position so that the node stays at it's position relative to the selection.\n const adjustedNodeExtent = [\n [nodeExtent[0][0], nodeExtent[0][1]],\n [nodeExtent[1][0], nodeExtent[1][1]],\n ];\n if (dragItems.current.length > 1 && nodeExtent && !n.extent) {\n adjustedNodeExtent[0][0] = n.positionAbsolute.x - nodesBox.x + nodeExtent[0][0];\n adjustedNodeExtent[1][0] = n.positionAbsolute.x + (n.width ?? 0) - nodesBox.x2 + nodeExtent[1][0];\n adjustedNodeExtent[0][1] = n.positionAbsolute.y - nodesBox.y + nodeExtent[0][1];\n adjustedNodeExtent[1][1] = n.positionAbsolute.y + (n.height ?? 0) - nodesBox.y2 + nodeExtent[1][1];\n }\n const updatedPos = calcNextPosition(n, nextPosition, nodeInternals, adjustedNodeExtent, nodeOrigin, onError);\n // we want to make sure that we only fire a change event when there is a change\n hasChange = hasChange || n.position.x !== updatedPos.position.x || n.position.y !== updatedPos.position.y;\n n.position = updatedPos.position;\n n.positionAbsolute = updatedPos.positionAbsolute;\n return n;\n });\n if (!hasChange) {\n return;\n }\n updateNodePositions(dragItems.current, true, true);\n setDragging(true);\n const onDrag = nodeId ? onNodeDrag : wrapSelectionDragFunc(onSelectionDrag);\n if (onDrag && dragEvent.current) {\n const [currentNode, nodes] = getEventHandlerParams({\n nodeId,\n dragItems: dragItems.current,\n nodeInternals,\n });\n onDrag(dragEvent.current, currentNode, nodes);\n }\n };\n const autoPan = () => {\n if (!containerBounds.current) {\n return;\n }\n const [xMovement, yMovement] = calcAutoPan(mousePosition.current, containerBounds.current);\n if (xMovement !== 0 || yMovement !== 0) {\n const { transform, panBy } = store.getState();\n lastPos.current.x = (lastPos.current.x ?? 0) - xMovement / transform[2];\n lastPos.current.y = (lastPos.current.y ?? 0) - yMovement / transform[2];\n if (panBy({ x: xMovement, y: yMovement })) {\n updateNodes(lastPos.current);\n }\n }\n autoPanId.current = requestAnimationFrame(autoPan);\n };\n const startDrag = (event) => {\n const { nodeInternals, multiSelectionActive, nodesDraggable, unselectNodesAndEdges, onNodeDragStart, onSelectionDragStart, } = store.getState();\n dragStarted.current = true;\n const onStart = nodeId ? onNodeDragStart : wrapSelectionDragFunc(onSelectionDragStart);\n if ((!selectNodesOnDrag || !isSelectable) && !multiSelectionActive && nodeId) {\n if (!nodeInternals.get(nodeId)?.selected) {\n // we need to reset selected nodes when selectNodesOnDrag=false\n unselectNodesAndEdges();\n }\n }\n if (nodeId && isSelectable && selectNodesOnDrag) {\n handleNodeClick({\n id: nodeId,\n store,\n nodeRef: nodeRef,\n });\n }\n const pointerPos = getPointerPosition(event);\n lastPos.current = pointerPos;\n dragItems.current = getDragItems(nodeInternals, nodesDraggable, pointerPos, nodeId);\n if (onStart && dragItems.current) {\n const [currentNode, nodes] = getEventHandlerParams({\n nodeId,\n dragItems: dragItems.current,\n nodeInternals,\n });\n onStart(event.sourceEvent, currentNode, nodes);\n }\n };\n if (disabled) {\n selection.on('.drag', null);\n }\n else {\n const dragHandler = drag()\n .on('start', (event) => {\n const { domNode, nodeDragThreshold } = store.getState();\n if (nodeDragThreshold === 0) {\n startDrag(event);\n }\n const pointerPos = getPointerPosition(event);\n lastPos.current = pointerPos;\n containerBounds.current = domNode?.getBoundingClientRect() || null;\n mousePosition.current = getEventPosition(event.sourceEvent, containerBounds.current);\n })\n .on('drag', (event) => {\n const pointerPos = getPointerPosition(event);\n const { autoPanOnNodeDrag, nodeDragThreshold } = store.getState();\n if (!autoPanStarted.current && dragStarted.current && autoPanOnNodeDrag) {\n autoPanStarted.current = true;\n autoPan();\n }\n if (!dragStarted.current) {\n const x = pointerPos.xSnapped - (lastPos?.current?.x ?? 0);\n const y = pointerPos.ySnapped - (lastPos?.current?.y ?? 0);\n const distance = Math.sqrt(x * x + y * y);\n if (distance > nodeDragThreshold) {\n startDrag(event);\n }\n }\n // skip events without movement\n if ((lastPos.current.x !== pointerPos.xSnapped || lastPos.current.y !== pointerPos.ySnapped) &&\n dragItems.current &&\n dragStarted.current) {\n dragEvent.current = event.sourceEvent;\n mousePosition.current = getEventPosition(event.sourceEvent, containerBounds.current);\n updateNodes(pointerPos);\n }\n })\n .on('end', (event) => {\n if (!dragStarted.current) {\n return;\n }\n setDragging(false);\n autoPanStarted.current = false;\n dragStarted.current = false;\n cancelAnimationFrame(autoPanId.current);\n if (dragItems.current) {\n const { updateNodePositions, nodeInternals, onNodeDragStop, onSelectionDragStop } = store.getState();\n const onStop = nodeId ? onNodeDragStop : wrapSelectionDragFunc(onSelectionDragStop);\n updateNodePositions(dragItems.current, false, false);\n if (onStop) {\n const [currentNode, nodes] = getEventHandlerParams({\n nodeId,\n dragItems: dragItems.current,\n nodeInternals,\n });\n onStop(event.sourceEvent, currentNode, nodes);\n }\n }\n })\n .filter((event) => {\n const target = event.target;\n const isDraggable = !event.button &&\n (!noDragClassName || !hasSelector(target, `.${noDragClassName}`, nodeRef)) &&\n (!handleSelector || hasSelector(target, handleSelector, nodeRef));\n return isDraggable;\n });\n selection.call(dragHandler);\n return () => {\n selection.on('.drag', null);\n };\n }\n }\n }, [\n nodeRef,\n disabled,\n noDragClassName,\n handleSelector,\n isSelectable,\n store,\n nodeId,\n selectNodesOnDrag,\n getPointerPosition,\n ]);\n return dragging;\n}\n\nfunction useUpdateNodePositions() {\n const store = useStoreApi();\n const updatePositions = useCallback((params) => {\n const { nodeInternals, nodeExtent, updateNodePositions, getNodes, snapToGrid, snapGrid, onError, nodesDraggable } = store.getState();\n const selectedNodes = getNodes().filter((n) => n.selected && (n.draggable || (nodesDraggable && typeof n.draggable === 'undefined')));\n // by default a node moves 5px on each key press, or 20px if shift is pressed\n // if snap grid is enabled, we use that for the velocity.\n const xVelo = snapToGrid ? snapGrid[0] : 5;\n const yVelo = snapToGrid ? snapGrid[1] : 5;\n const factor = params.isShiftPressed ? 4 : 1;\n const positionDiffX = params.x * xVelo * factor;\n const positionDiffY = params.y * yVelo * factor;\n const nodeUpdates = selectedNodes.map((n) => {\n if (n.positionAbsolute) {\n const nextPosition = { x: n.positionAbsolute.x + positionDiffX, y: n.positionAbsolute.y + positionDiffY };\n if (snapToGrid) {\n nextPosition.x = snapGrid[0] * Math.round(nextPosition.x / snapGrid[0]);\n nextPosition.y = snapGrid[1] * Math.round(nextPosition.y / snapGrid[1]);\n }\n const { positionAbsolute, position } = calcNextPosition(n, nextPosition, nodeInternals, nodeExtent, undefined, onError);\n n.position = position;\n n.positionAbsolute = positionAbsolute;\n }\n return n;\n });\n updateNodePositions(nodeUpdates, true, false);\n }, []);\n return updatePositions;\n}\n\nconst arrowKeyDiffs = {\n ArrowUp: { x: 0, y: -1 },\n ArrowDown: { x: 0, y: 1 },\n ArrowLeft: { x: -1, y: 0 },\n ArrowRight: { x: 1, y: 0 },\n};\nvar wrapNode = (NodeComponent) => {\n const NodeWrapper = ({ id, type, data, xPos, yPos, xPosOrigin, yPosOrigin, selected, onClick, onMouseEnter, onMouseMove, onMouseLeave, onContextMenu, onDoubleClick, style, className, isDraggable, isSelectable, isConnectable, isFocusable, selectNodesOnDrag, sourcePosition, targetPosition, hidden, resizeObserver, dragHandle, zIndex, isParent, noDragClassName, noPanClassName, initialized, disableKeyboardA11y, ariaLabel, rfId, }) => {\n const store = useStoreApi();\n const nodeRef = useRef(null);\n const prevSourcePosition = useRef(sourcePosition);\n const prevTargetPosition = useRef(targetPosition);\n const prevType = useRef(type);\n const hasPointerEvents = isSelectable || isDraggable || onClick || onMouseEnter || onMouseMove || onMouseLeave;\n const updatePositions = useUpdateNodePositions();\n const onMouseEnterHandler = getMouseHandler(id, store.getState, onMouseEnter);\n const onMouseMoveHandler = getMouseHandler(id, store.getState, onMouseMove);\n const onMouseLeaveHandler = getMouseHandler(id, store.getState, onMouseLeave);\n const onContextMenuHandler = getMouseHandler(id, store.getState, onContextMenu);\n const onDoubleClickHandler = getMouseHandler(id, store.getState, onDoubleClick);\n const onSelectNodeHandler = (event) => {\n const { nodeDragThreshold } = store.getState();\n if (isSelectable && (!selectNodesOnDrag || !isDraggable || nodeDragThreshold > 0)) {\n // this handler gets called within the drag start event when selectNodesOnDrag=true\n handleNodeClick({\n id,\n store,\n nodeRef,\n });\n }\n if (onClick) {\n const node = store.getState().nodeInternals.get(id);\n if (node) {\n onClick(event, { ...node });\n }\n }\n };\n const onKeyDown = (event) => {\n if (isInputDOMNode(event)) {\n return;\n }\n if (elementSelectionKeys.includes(event.key) && isSelectable) {\n const unselect = event.key === 'Escape';\n handleNodeClick({\n id,\n store,\n unselect,\n nodeRef,\n });\n }\n else if (!disableKeyboardA11y &&\n isDraggable &&\n selected &&\n Object.prototype.hasOwnProperty.call(arrowKeyDiffs, event.key)) {\n store.setState({\n ariaLiveMessage: `Moved selected node ${event.key\n .replace('Arrow', '')\n .toLowerCase()}. New position, x: ${~~xPos}, y: ${~~yPos}`,\n });\n updatePositions({\n x: arrowKeyDiffs[event.key].x,\n y: arrowKeyDiffs[event.key].y,\n isShiftPressed: event.shiftKey,\n });\n }\n };\n useEffect(() => {\n if (nodeRef.current && !hidden) {\n const currNode = nodeRef.current;\n resizeObserver?.observe(currNode);\n return () => resizeObserver?.unobserve(currNode);\n }\n }, [hidden]);\n useEffect(() => {\n // when the user programmatically changes the source or handle position, we re-initialize the node\n const typeChanged = prevType.current !== type;\n const sourcePosChanged = prevSourcePosition.current !== sourcePosition;\n const targetPosChanged = prevTargetPosition.current !== targetPosition;\n if (nodeRef.current && (typeChanged || sourcePosChanged || targetPosChanged)) {\n if (typeChanged) {\n prevType.current = type;\n }\n if (sourcePosChanged) {\n prevSourcePosition.current = sourcePosition;\n }\n if (targetPosChanged) {\n prevTargetPosition.current = targetPosition;\n }\n store.getState().updateNodeDimensions([{ id, nodeElement: nodeRef.current, forceUpdate: true }]);\n }\n }, [id, type, sourcePosition, targetPosition]);\n const dragging = useDrag({\n nodeRef,\n disabled: hidden || !isDraggable,\n noDragClassName,\n handleSelector: dragHandle,\n nodeId: id,\n isSelectable,\n selectNodesOnDrag,\n });\n if (hidden) {\n return null;\n }\n return (React.createElement(\"div\", { className: cc([\n 'react-flow__node',\n `react-flow__node-${type}`,\n {\n // this is overwritable by passing `nopan` as a class name\n [noPanClassName]: isDraggable,\n },\n className,\n {\n selected,\n selectable: isSelectable,\n parent: isParent,\n dragging,\n },\n ]), ref: nodeRef, style: {\n zIndex,\n transform: `translate(${xPosOrigin}px,${yPosOrigin}px)`,\n pointerEvents: hasPointerEvents ? 'all' : 'none',\n visibility: initialized ? 'visible' : 'hidden',\n ...style,\n }, \"data-id\": id, \"data-testid\": `rf__node-${id}`, onMouseEnter: onMouseEnterHandler, onMouseMove: onMouseMoveHandler, onMouseLeave: onMouseLeaveHandler, onContextMenu: onContextMenuHandler, onClick: onSelectNodeHandler, onDoubleClick: onDoubleClickHandler, onKeyDown: isFocusable ? onKeyDown : undefined, tabIndex: isFocusable ? 0 : undefined, role: isFocusable ? 'button' : undefined, \"aria-describedby\": disableKeyboardA11y ? undefined : `${ARIA_NODE_DESC_KEY}-${rfId}`, \"aria-label\": ariaLabel },\n React.createElement(Provider, { value: id },\n React.createElement(NodeComponent, { id: id, data: data, type: type, xPos: xPos, yPos: yPos, selected: selected, isConnectable: isConnectable, sourcePosition: sourcePosition, targetPosition: targetPosition, dragging: dragging, dragHandle: dragHandle, zIndex: zIndex }))));\n };\n NodeWrapper.displayName = 'NodeWrapper';\n return memo(NodeWrapper);\n};\n\n/**\n * The nodes selection rectangle gets displayed when a user\n * made a selection with on or several nodes\n */\nconst selector$7 = (s) => {\n const selectedNodes = s.getNodes().filter((n) => n.selected);\n return {\n ...getNodesBounds(selectedNodes, s.nodeOrigin),\n transformString: `translate(${s.transform[0]}px,${s.transform[1]}px) scale(${s.transform[2]})`,\n userSelectionActive: s.userSelectionActive,\n };\n};\nfunction NodesSelection({ onSelectionContextMenu, noPanClassName, disableKeyboardA11y }) {\n const store = useStoreApi();\n const { width, height, x: left, y: top, transformString, userSelectionActive } = useStore(selector$7, shallow);\n const updatePositions = useUpdateNodePositions();\n const nodeRef = useRef(null);\n useEffect(() => {\n if (!disableKeyboardA11y) {\n nodeRef.current?.focus({\n preventScroll: true,\n });\n }\n }, [disableKeyboardA11y]);\n useDrag({\n nodeRef,\n });\n if (userSelectionActive || !width || !height) {\n return null;\n }\n const onContextMenu = onSelectionContextMenu\n ? (event) => {\n const selectedNodes = store\n .getState()\n .getNodes()\n .filter((n) => n.selected);\n onSelectionContextMenu(event, selectedNodes);\n }\n : undefined;\n const onKeyDown = (event) => {\n if (Object.prototype.hasOwnProperty.call(arrowKeyDiffs, event.key)) {\n updatePositions({\n x: arrowKeyDiffs[event.key].x,\n y: arrowKeyDiffs[event.key].y,\n isShiftPressed: event.shiftKey,\n });\n }\n };\n return (React.createElement(\"div\", { className: cc(['react-flow__nodesselection', 'react-flow__container', noPanClassName]), style: {\n transform: transformString,\n } },\n React.createElement(\"div\", { ref: nodeRef, className: \"react-flow__nodesselection-rect\", onContextMenu: onContextMenu, tabIndex: disableKeyboardA11y ? undefined : -1, onKeyDown: disableKeyboardA11y ? undefined : onKeyDown, style: {\n width,\n height,\n top,\n left,\n } })));\n}\nvar NodesSelection$1 = memo(NodesSelection);\n\nconst selector$6 = (s) => s.nodesSelectionActive;\nconst FlowRenderer = ({ children, onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneContextMenu, onPaneScroll, deleteKeyCode, onMove, onMoveStart, onMoveEnd, selectionKeyCode, selectionOnDrag, selectionMode, onSelectionStart, onSelectionEnd, multiSelectionKeyCode, panActivationKeyCode, zoomActivationKeyCode, elementsSelectable, zoomOnScroll, zoomOnPinch, panOnScroll: _panOnScroll, panOnScrollSpeed, panOnScrollMode, zoomOnDoubleClick, panOnDrag: _panOnDrag, defaultViewport, translateExtent, minZoom, maxZoom, preventScrolling, onSelectionContextMenu, noWheelClassName, noPanClassName, disableKeyboardA11y, }) => {\n const nodesSelectionActive = useStore(selector$6);\n const selectionKeyPressed = useKeyPress(selectionKeyCode);\n const panActivationKeyPressed = useKeyPress(panActivationKeyCode);\n const panOnDrag = panActivationKeyPressed || _panOnDrag;\n const panOnScroll = panActivationKeyPressed || _panOnScroll;\n const isSelecting = selectionKeyPressed || (selectionOnDrag && panOnDrag !== true);\n useGlobalKeyHandler({ deleteKeyCode, multiSelectionKeyCode });\n return (React.createElement(ZoomPane, { onMove: onMove, onMoveStart: onMoveStart, onMoveEnd: onMoveEnd, onPaneContextMenu: onPaneContextMenu, elementsSelectable: elementsSelectable, zoomOnScroll: zoomOnScroll, zoomOnPinch: zoomOnPinch, panOnScroll: panOnScroll, panOnScrollSpeed: panOnScrollSpeed, panOnScrollMode: panOnScrollMode, zoomOnDoubleClick: zoomOnDoubleClick, panOnDrag: !selectionKeyPressed && panOnDrag, defaultViewport: defaultViewport, translateExtent: translateExtent, minZoom: minZoom, maxZoom: maxZoom, zoomActivationKeyCode: zoomActivationKeyCode, preventScrolling: preventScrolling, noWheelClassName: noWheelClassName, noPanClassName: noPanClassName },\n React.createElement(Pane, { onSelectionStart: onSelectionStart, onSelectionEnd: onSelectionEnd, onPaneClick: onPaneClick, onPaneMouseEnter: onPaneMouseEnter, onPaneMouseMove: onPaneMouseMove, onPaneMouseLeave: onPaneMouseLeave, onPaneContextMenu: onPaneContextMenu, onPaneScroll: onPaneScroll, panOnDrag: panOnDrag, isSelecting: !!isSelecting, selectionMode: selectionMode },\n children,\n nodesSelectionActive && (React.createElement(NodesSelection$1, { onSelectionContextMenu: onSelectionContextMenu, noPanClassName: noPanClassName, disableKeyboardA11y: disableKeyboardA11y })))));\n};\nFlowRenderer.displayName = 'FlowRenderer';\nvar FlowRenderer$1 = memo(FlowRenderer);\n\nfunction useVisibleNodes(onlyRenderVisible) {\n const nodes = useStore(useCallback((s) => onlyRenderVisible\n ? getNodesInside(s.nodeInternals, { x: 0, y: 0, width: s.width, height: s.height }, s.transform, true)\n : s.getNodes(), [onlyRenderVisible]));\n return nodes;\n}\n\nfunction createNodeTypes(nodeTypes) {\n const standardTypes = {\n input: wrapNode((nodeTypes.input || InputNode$1)),\n default: wrapNode((nodeTypes.default || DefaultNode$1)),\n output: wrapNode((nodeTypes.output || OutputNode$1)),\n group: wrapNode((nodeTypes.group || GroupNode)),\n };\n const wrappedTypes = {};\n const specialTypes = Object.keys(nodeTypes)\n .filter((k) => !['input', 'default', 'output', 'group'].includes(k))\n .reduce((res, key) => {\n res[key] = wrapNode((nodeTypes[key] || DefaultNode$1));\n return res;\n }, wrappedTypes);\n return {\n ...standardTypes,\n ...specialTypes,\n };\n}\nconst getPositionWithOrigin = ({ x, y, width, height, origin, }) => {\n if (!width || !height) {\n return { x, y };\n }\n if (origin[0] < 0 || origin[1] < 0 || origin[0] > 1 || origin[1] > 1) {\n return { x, y };\n }\n return {\n x: x - width * origin[0],\n y: y - height * origin[1],\n };\n};\n\nconst selector$5 = (s) => ({\n nodesDraggable: s.nodesDraggable,\n nodesConnectable: s.nodesConnectable,\n nodesFocusable: s.nodesFocusable,\n elementsSelectable: s.elementsSelectable,\n updateNodeDimensions: s.updateNodeDimensions,\n onError: s.onError,\n});\nconst NodeRenderer = (props) => {\n const { nodesDraggable, nodesConnectable, nodesFocusable, elementsSelectable, updateNodeDimensions, onError } = useStore(selector$5, shallow);\n const nodes = useVisibleNodes(props.onlyRenderVisibleElements);\n const resizeObserverRef = useRef();\n const resizeObserver = useMemo(() => {\n if (typeof ResizeObserver === 'undefined') {\n return null;\n }\n const observer = new ResizeObserver((entries) => {\n const updates = entries.map((entry) => ({\n id: entry.target.getAttribute('data-id'),\n nodeElement: entry.target,\n forceUpdate: true,\n }));\n updateNodeDimensions(updates);\n });\n resizeObserverRef.current = observer;\n return observer;\n }, []);\n useEffect(() => {\n return () => {\n resizeObserverRef?.current?.disconnect();\n };\n }, []);\n return (React.createElement(\"div\", { className: \"react-flow__nodes\", style: containerStyle }, nodes.map((node) => {\n let nodeType = node.type || 'default';\n if (!props.nodeTypes[nodeType]) {\n onError?.('003', errorMessages['error003'](nodeType));\n nodeType = 'default';\n }\n const NodeComponent = (props.nodeTypes[nodeType] || props.nodeTypes.default);\n const isDraggable = !!(node.draggable || (nodesDraggable && typeof node.draggable === 'undefined'));\n const isSelectable = !!(node.selectable || (elementsSelectable && typeof node.selectable === 'undefined'));\n const isConnectable = !!(node.connectable || (nodesConnectable && typeof node.connectable === 'undefined'));\n const isFocusable = !!(node.focusable || (nodesFocusable && typeof node.focusable === 'undefined'));\n const clampedPosition = props.nodeExtent\n ? clampPosition(node.positionAbsolute, props.nodeExtent)\n : node.positionAbsolute;\n const posX = clampedPosition?.x ?? 0;\n const posY = clampedPosition?.y ?? 0;\n const posOrigin = getPositionWithOrigin({\n x: posX,\n y: posY,\n width: node.width ?? 0,\n height: node.height ?? 0,\n origin: props.nodeOrigin,\n });\n return (React.createElement(NodeComponent, { key: node.id, id: node.id, className: node.className, style: node.style, type: nodeType, data: node.data, sourcePosition: node.sourcePosition || Position.Bottom, targetPosition: node.targetPosition || Position.Top, hidden: node.hidden, xPos: posX, yPos: posY, xPosOrigin: posOrigin.x, yPosOrigin: posOrigin.y, selectNodesOnDrag: props.selectNodesOnDrag, onClick: props.onNodeClick, onMouseEnter: props.onNodeMouseEnter, onMouseMove: props.onNodeMouseMove, onMouseLeave: props.onNodeMouseLeave, onContextMenu: props.onNodeContextMenu, onDoubleClick: props.onNodeDoubleClick, selected: !!node.selected, isDraggable: isDraggable, isSelectable: isSelectable, isConnectable: isConnectable, isFocusable: isFocusable, resizeObserver: resizeObserver, dragHandle: node.dragHandle, zIndex: node[internalsSymbol]?.z ?? 0, isParent: !!node[internalsSymbol]?.isParent, noDragClassName: props.noDragClassName, noPanClassName: props.noPanClassName, initialized: !!node.width && !!node.height, rfId: props.rfId, disableKeyboardA11y: props.disableKeyboardA11y, ariaLabel: node.ariaLabel }));\n })));\n};\nNodeRenderer.displayName = 'NodeRenderer';\nvar NodeRenderer$1 = memo(NodeRenderer);\n\nconst shiftX = (x, shift, position) => {\n if (position === Position.Left)\n return x - shift;\n if (position === Position.Right)\n return x + shift;\n return x;\n};\nconst shiftY = (y, shift, position) => {\n if (position === Position.Top)\n return y - shift;\n if (position === Position.Bottom)\n return y + shift;\n return y;\n};\nconst EdgeUpdaterClassName = 'react-flow__edgeupdater';\nconst EdgeAnchor = ({ position, centerX, centerY, radius = 10, onMouseDown, onMouseEnter, onMouseOut, type, }) => (React.createElement(\"circle\", { onMouseDown: onMouseDown, onMouseEnter: onMouseEnter, onMouseOut: onMouseOut, className: cc([EdgeUpdaterClassName, `${EdgeUpdaterClassName}-${type}`]), cx: shiftX(centerX, radius, position), cy: shiftY(centerY, radius, position), r: radius, stroke: \"transparent\", fill: \"transparent\" }));\n\nconst alwaysValidConnection = () => true;\nvar wrapEdge = (EdgeComponent) => {\n const EdgeWrapper = ({ id, className, type, data, onClick, onEdgeDoubleClick, selected, animated, label, labelStyle, labelShowBg, labelBgStyle, labelBgPadding, labelBgBorderRadius, style, source, target, sourceX, sourceY, targetX, targetY, sourcePosition, targetPosition, elementsSelectable, hidden, sourceHandleId, targetHandleId, onContextMenu, onMouseEnter, onMouseMove, onMouseLeave, edgeUpdaterRadius, onEdgeUpdate, onEdgeUpdateStart, onEdgeUpdateEnd, markerEnd, markerStart, rfId, ariaLabel, isFocusable, isUpdatable, pathOptions, interactionWidth, }) => {\n const edgeRef = useRef(null);\n const [updateHover, setUpdateHover] = useState(false);\n const [updating, setUpdating] = useState(false);\n const store = useStoreApi();\n const markerStartUrl = useMemo(() => `url(#${getMarkerId(markerStart, rfId)})`, [markerStart, rfId]);\n const markerEndUrl = useMemo(() => `url(#${getMarkerId(markerEnd, rfId)})`, [markerEnd, rfId]);\n if (hidden) {\n return null;\n }\n const onEdgeClick = (event) => {\n const { edges, addSelectedEdges, unselectNodesAndEdges, multiSelectionActive } = store.getState();\n const edge = edges.find((e) => e.id === id);\n if (!edge) {\n return;\n }\n if (elementsSelectable) {\n store.setState({ nodesSelectionActive: false });\n if (edge.selected && multiSelectionActive) {\n unselectNodesAndEdges({ nodes: [], edges: [edge] });\n edgeRef.current?.blur();\n }\n else {\n addSelectedEdges([id]);\n }\n }\n if (onClick) {\n onClick(event, edge);\n }\n };\n const onEdgeDoubleClickHandler = getMouseHandler$1(id, store.getState, onEdgeDoubleClick);\n const onEdgeContextMenu = getMouseHandler$1(id, store.getState, onContextMenu);\n const onEdgeMouseEnter = getMouseHandler$1(id, store.getState, onMouseEnter);\n const onEdgeMouseMove = getMouseHandler$1(id, store.getState, onMouseMove);\n const onEdgeMouseLeave = getMouseHandler$1(id, store.getState, onMouseLeave);\n const handleEdgeUpdater = (event, isSourceHandle) => {\n // avoid triggering edge updater if mouse btn is not left\n if (event.button !== 0) {\n return;\n }\n const { edges, isValidConnection: isValidConnectionStore } = store.getState();\n const nodeId = isSourceHandle ? target : source;\n const handleId = (isSourceHandle ? targetHandleId : sourceHandleId) || null;\n const handleType = isSourceHandle ? 'target' : 'source';\n const isValidConnection = isValidConnectionStore || alwaysValidConnection;\n const isTarget = isSourceHandle;\n const edge = edges.find((e) => e.id === id);\n setUpdating(true);\n onEdgeUpdateStart?.(event, edge, handleType);\n const _onEdgeUpdateEnd = (evt) => {\n setUpdating(false);\n onEdgeUpdateEnd?.(evt, edge, handleType);\n };\n const onConnectEdge = (connection) => onEdgeUpdate?.(edge, connection);\n handlePointerDown({\n event,\n handleId,\n nodeId,\n onConnect: onConnectEdge,\n isTarget,\n getState: store.getState,\n setState: store.setState,\n isValidConnection,\n edgeUpdaterType: handleType,\n onEdgeUpdateEnd: _onEdgeUpdateEnd,\n });\n };\n const onEdgeUpdaterSourceMouseDown = (event) => handleEdgeUpdater(event, true);\n const onEdgeUpdaterTargetMouseDown = (event) => handleEdgeUpdater(event, false);\n const onEdgeUpdaterMouseEnter = () => setUpdateHover(true);\n const onEdgeUpdaterMouseOut = () => setUpdateHover(false);\n const inactive = !elementsSelectable && !onClick;\n const onKeyDown = (event) => {\n if (elementSelectionKeys.includes(event.key) && elementsSelectable) {\n const { unselectNodesAndEdges, addSelectedEdges, edges } = store.getState();\n const unselect = event.key === 'Escape';\n if (unselect) {\n edgeRef.current?.blur();\n unselectNodesAndEdges({ edges: [edges.find((e) => e.id === id)] });\n }\n else {\n addSelectedEdges([id]);\n }\n }\n };\n return (React.createElement(\"g\", { className: cc([\n 'react-flow__edge',\n `react-flow__edge-${type}`,\n className,\n { selected, animated, inactive, updating: updateHover },\n ]), onClick: onEdgeClick, onDoubleClick: onEdgeDoubleClickHandler, onContextMenu: onEdgeContextMenu, onMouseEnter: onEdgeMouseEnter, onMouseMove: onEdgeMouseMove, onMouseLeave: onEdgeMouseLeave, onKeyDown: isFocusable ? onKeyDown : undefined, tabIndex: isFocusable ? 0 : undefined, role: isFocusable ? 'button' : 'img', \"data-testid\": `rf__edge-${id}`, \"aria-label\": ariaLabel === null ? undefined : ariaLabel ? ariaLabel : `Edge from ${source} to ${target}`, \"aria-describedby\": isFocusable ? `${ARIA_EDGE_DESC_KEY}-${rfId}` : undefined, ref: edgeRef },\n !updating && (React.createElement(EdgeComponent, { id: id, source: source, target: target, selected: selected, animated: animated, label: label, labelStyle: labelStyle, labelShowBg: labelShowBg, labelBgStyle: labelBgStyle, labelBgPadding: labelBgPadding, labelBgBorderRadius: labelBgBorderRadius, data: data, style: style, sourceX: sourceX, sourceY: sourceY, targetX: targetX, targetY: targetY, sourcePosition: sourcePosition, targetPosition: targetPosition, sourceHandleId: sourceHandleId, targetHandleId: targetHandleId, markerStart: markerStartUrl, markerEnd: markerEndUrl, pathOptions: pathOptions, interactionWidth: interactionWidth })),\n isUpdatable && (React.createElement(React.Fragment, null,\n (isUpdatable === 'source' || isUpdatable === true) && (React.createElement(EdgeAnchor, { position: sourcePosition, centerX: sourceX, centerY: sourceY, radius: edgeUpdaterRadius, onMouseDown: onEdgeUpdaterSourceMouseDown, onMouseEnter: onEdgeUpdaterMouseEnter, onMouseOut: onEdgeUpdaterMouseOut, type: \"source\" })),\n (isUpdatable === 'target' || isUpdatable === true) && (React.createElement(EdgeAnchor, { position: targetPosition, centerX: targetX, centerY: targetY, radius: edgeUpdaterRadius, onMouseDown: onEdgeUpdaterTargetMouseDown, onMouseEnter: onEdgeUpdaterMouseEnter, onMouseOut: onEdgeUpdaterMouseOut, type: \"target\" }))))));\n };\n EdgeWrapper.displayName = 'EdgeWrapper';\n return memo(EdgeWrapper);\n};\n\nfunction createEdgeTypes(edgeTypes) {\n const standardTypes = {\n default: wrapEdge((edgeTypes.default || BezierEdge)),\n straight: wrapEdge((edgeTypes.bezier || StraightEdge)),\n step: wrapEdge((edgeTypes.step || StepEdge)),\n smoothstep: wrapEdge((edgeTypes.step || SmoothStepEdge)),\n simplebezier: wrapEdge((edgeTypes.simplebezier || SimpleBezierEdge)),\n };\n const wrappedTypes = {};\n const specialTypes = Object.keys(edgeTypes)\n .filter((k) => !['default', 'bezier'].includes(k))\n .reduce((res, key) => {\n res[key] = wrapEdge((edgeTypes[key] || BezierEdge));\n return res;\n }, wrappedTypes);\n return {\n ...standardTypes,\n ...specialTypes,\n };\n}\nfunction getHandlePosition(position, nodeRect, handle = null) {\n const x = (handle?.x || 0) + nodeRect.x;\n const y = (handle?.y || 0) + nodeRect.y;\n const width = handle?.width || nodeRect.width;\n const height = handle?.height || nodeRect.height;\n switch (position) {\n case Position.Top:\n return {\n x: x + width / 2,\n y,\n };\n case Position.Right:\n return {\n x: x + width,\n y: y + height / 2,\n };\n case Position.Bottom:\n return {\n x: x + width / 2,\n y: y + height,\n };\n case Position.Left:\n return {\n x,\n y: y + height / 2,\n };\n }\n}\nfunction getHandle(bounds, handleId) {\n if (!bounds) {\n return null;\n }\n if (bounds.length === 1 || !handleId) {\n return bounds[0];\n }\n else if (handleId) {\n return bounds.find((d) => d.id === handleId) || null;\n }\n return null;\n}\nconst getEdgePositions = (sourceNodeRect, sourceHandle, sourcePosition, targetNodeRect, targetHandle, targetPosition) => {\n const sourceHandlePos = getHandlePosition(sourcePosition, sourceNodeRect, sourceHandle);\n const targetHandlePos = getHandlePosition(targetPosition, targetNodeRect, targetHandle);\n return {\n sourceX: sourceHandlePos.x,\n sourceY: sourceHandlePos.y,\n targetX: targetHandlePos.x,\n targetY: targetHandlePos.y,\n };\n};\nfunction isEdgeVisible({ sourcePos, targetPos, sourceWidth, sourceHeight, targetWidth, targetHeight, width, height, transform, }) {\n const edgeBox = {\n x: Math.min(sourcePos.x, targetPos.x),\n y: Math.min(sourcePos.y, targetPos.y),\n x2: Math.max(sourcePos.x + sourceWidth, targetPos.x + targetWidth),\n y2: Math.max(sourcePos.y + sourceHeight, targetPos.y + targetHeight),\n };\n if (edgeBox.x === edgeBox.x2) {\n edgeBox.x2 += 1;\n }\n if (edgeBox.y === edgeBox.y2) {\n edgeBox.y2 += 1;\n }\n const viewBox = rectToBox({\n x: (0 - transform[0]) / transform[2],\n y: (0 - transform[1]) / transform[2],\n width: width / transform[2],\n height: height / transform[2],\n });\n const xOverlap = Math.max(0, Math.min(viewBox.x2, edgeBox.x2) - Math.max(viewBox.x, edgeBox.x));\n const yOverlap = Math.max(0, Math.min(viewBox.y2, edgeBox.y2) - Math.max(viewBox.y, edgeBox.y));\n const overlappingArea = Math.ceil(xOverlap * yOverlap);\n return overlappingArea > 0;\n}\nfunction getNodeData(node) {\n const handleBounds = node?.[internalsSymbol]?.handleBounds || null;\n const isValid = handleBounds &&\n node?.width &&\n node?.height &&\n typeof node?.positionAbsolute?.x !== 'undefined' &&\n typeof node?.positionAbsolute?.y !== 'undefined';\n return [\n {\n x: node?.positionAbsolute?.x || 0,\n y: node?.positionAbsolute?.y || 0,\n width: node?.width || 0,\n height: node?.height || 0,\n },\n handleBounds,\n !!isValid,\n ];\n}\n\nconst defaultEdgeTree = [{ level: 0, isMaxLevel: true, edges: [] }];\nfunction groupEdgesByZLevel(edges, nodeInternals, elevateEdgesOnSelect = false) {\n let maxLevel = -1;\n const levelLookup = edges.reduce((tree, edge) => {\n const hasZIndex = isNumeric(edge.zIndex);\n let z = hasZIndex ? edge.zIndex : 0;\n if (elevateEdgesOnSelect) {\n const targetNode = nodeInternals.get(edge.target);\n const sourceNode = nodeInternals.get(edge.source);\n const edgeOrConnectedNodeSelected = edge.selected || targetNode?.selected || sourceNode?.selected;\n const selectedZIndex = Math.max(sourceNode?.[internalsSymbol]?.z || 0, targetNode?.[internalsSymbol]?.z || 0, 1000);\n z = (hasZIndex ? edge.zIndex : 0) + (edgeOrConnectedNodeSelected ? selectedZIndex : 0);\n }\n if (tree[z]) {\n tree[z].push(edge);\n }\n else {\n tree[z] = [edge];\n }\n maxLevel = z > maxLevel ? z : maxLevel;\n return tree;\n }, {});\n const edgeTree = Object.entries(levelLookup).map(([key, edges]) => {\n const level = +key;\n return {\n edges,\n level,\n isMaxLevel: level === maxLevel,\n };\n });\n if (edgeTree.length === 0) {\n return defaultEdgeTree;\n }\n return edgeTree;\n}\nfunction useVisibleEdges(onlyRenderVisible, nodeInternals, elevateEdgesOnSelect) {\n const edges = useStore(useCallback((s) => {\n if (!onlyRenderVisible) {\n return s.edges;\n }\n return s.edges.filter((e) => {\n const sourceNode = nodeInternals.get(e.source);\n const targetNode = nodeInternals.get(e.target);\n return (sourceNode?.width &&\n sourceNode?.height &&\n targetNode?.width &&\n targetNode?.height &&\n isEdgeVisible({\n sourcePos: sourceNode.positionAbsolute || { x: 0, y: 0 },\n targetPos: targetNode.positionAbsolute || { x: 0, y: 0 },\n sourceWidth: sourceNode.width,\n sourceHeight: sourceNode.height,\n targetWidth: targetNode.width,\n targetHeight: targetNode.height,\n width: s.width,\n height: s.height,\n transform: s.transform,\n }));\n });\n }, [onlyRenderVisible, nodeInternals]));\n return groupEdgesByZLevel(edges, nodeInternals, elevateEdgesOnSelect);\n}\n\nconst ArrowSymbol = ({ color = 'none', strokeWidth = 1 }) => {\n return (React.createElement(\"polyline\", { style: {\n stroke: color,\n strokeWidth,\n }, strokeLinecap: \"round\", strokeLinejoin: \"round\", fill: \"none\", points: \"-5,-4 0,0 -5,4\" }));\n};\nconst ArrowClosedSymbol = ({ color = 'none', strokeWidth = 1 }) => {\n return (React.createElement(\"polyline\", { style: {\n stroke: color,\n fill: color,\n strokeWidth,\n }, strokeLinecap: \"round\", strokeLinejoin: \"round\", points: \"-5,-4 0,0 -5,4 -5,-4\" }));\n};\nconst MarkerSymbols = {\n [MarkerType.Arrow]: ArrowSymbol,\n [MarkerType.ArrowClosed]: ArrowClosedSymbol,\n};\nfunction useMarkerSymbol(type) {\n const store = useStoreApi();\n const symbol = useMemo(() => {\n const symbolExists = Object.prototype.hasOwnProperty.call(MarkerSymbols, type);\n if (!symbolExists) {\n store.getState().onError?.('009', errorMessages['error009'](type));\n return null;\n }\n return MarkerSymbols[type];\n }, [type]);\n return symbol;\n}\n\nconst Marker = ({ id, type, color, width = 12.5, height = 12.5, markerUnits = 'strokeWidth', strokeWidth, orient = 'auto-start-reverse', }) => {\n const Symbol = useMarkerSymbol(type);\n if (!Symbol) {\n return null;\n }\n return (React.createElement(\"marker\", { className: \"react-flow__arrowhead\", id: id, markerWidth: `${width}`, markerHeight: `${height}`, viewBox: \"-10 -10 20 20\", markerUnits: markerUnits, orient: orient, refX: \"0\", refY: \"0\" },\n React.createElement(Symbol, { color: color, strokeWidth: strokeWidth })));\n};\nconst markerSelector = ({ defaultColor, rfId }) => (s) => {\n const ids = [];\n return s.edges\n .reduce((markers, edge) => {\n [edge.markerStart, edge.markerEnd].forEach((marker) => {\n if (marker && typeof marker === 'object') {\n const markerId = getMarkerId(marker, rfId);\n if (!ids.includes(markerId)) {\n markers.push({ id: markerId, color: marker.color || defaultColor, ...marker });\n ids.push(markerId);\n }\n }\n });\n return markers;\n }, [])\n .sort((a, b) => a.id.localeCompare(b.id));\n};\n// when you have multiple flows on a page and you hide the first one, the other ones have no markers anymore\n// when they do have markers with the same ids. To prevent this the user can pass a unique id to the react flow wrapper\n// that we can then use for creating our unique marker ids\nconst MarkerDefinitions = ({ defaultColor, rfId }) => {\n const markers = useStore(useCallback(markerSelector({ defaultColor, rfId }), [defaultColor, rfId]), \n // the id includes all marker options, so we just need to look at that part of the marker\n (a, b) => !(a.length !== b.length || a.some((m, i) => m.id !== b[i].id)));\n return (React.createElement(\"defs\", null, markers.map((marker) => (React.createElement(Marker, { id: marker.id, key: marker.id, type: marker.type, color: marker.color, width: marker.width, height: marker.height, markerUnits: marker.markerUnits, strokeWidth: marker.strokeWidth, orient: marker.orient })))));\n};\nMarkerDefinitions.displayName = 'MarkerDefinitions';\nvar MarkerDefinitions$1 = memo(MarkerDefinitions);\n\nconst selector$4 = (s) => ({\n nodesConnectable: s.nodesConnectable,\n edgesFocusable: s.edgesFocusable,\n edgesUpdatable: s.edgesUpdatable,\n elementsSelectable: s.elementsSelectable,\n width: s.width,\n height: s.height,\n connectionMode: s.connectionMode,\n nodeInternals: s.nodeInternals,\n onError: s.onError,\n});\nconst EdgeRenderer = ({ defaultMarkerColor, onlyRenderVisibleElements, elevateEdgesOnSelect, rfId, edgeTypes, noPanClassName, onEdgeUpdate, onEdgeContextMenu, onEdgeMouseEnter, onEdgeMouseMove, onEdgeMouseLeave, onEdgeClick, edgeUpdaterRadius, onEdgeDoubleClick, onEdgeUpdateStart, onEdgeUpdateEnd, children, }) => {\n const { edgesFocusable, edgesUpdatable, elementsSelectable, width, height, connectionMode, nodeInternals, onError } = useStore(selector$4, shallow);\n const edgeTree = useVisibleEdges(onlyRenderVisibleElements, nodeInternals, elevateEdgesOnSelect);\n if (!width) {\n return null;\n }\n return (React.createElement(React.Fragment, null,\n edgeTree.map(({ level, edges, isMaxLevel }) => (React.createElement(\"svg\", { key: level, style: { zIndex: level }, width: width, height: height, className: \"react-flow__edges react-flow__container\" },\n isMaxLevel && React.createElement(MarkerDefinitions$1, { defaultColor: defaultMarkerColor, rfId: rfId }),\n React.createElement(\"g\", null, edges.map((edge) => {\n const [sourceNodeRect, sourceHandleBounds, sourceIsValid] = getNodeData(nodeInternals.get(edge.source));\n const [targetNodeRect, targetHandleBounds, targetIsValid] = getNodeData(nodeInternals.get(edge.target));\n if (!sourceIsValid || !targetIsValid) {\n return null;\n }\n let edgeType = edge.type || 'default';\n if (!edgeTypes[edgeType]) {\n onError?.('011', errorMessages['error011'](edgeType));\n edgeType = 'default';\n }\n const EdgeComponent = edgeTypes[edgeType] || edgeTypes.default;\n // when connection type is loose we can define all handles as sources and connect source -> source\n const targetNodeHandles = connectionMode === ConnectionMode.Strict\n ? targetHandleBounds.target\n : (targetHandleBounds.target ?? []).concat(targetHandleBounds.source ?? []);\n const sourceHandle = getHandle(sourceHandleBounds.source, edge.sourceHandle);\n const targetHandle = getHandle(targetNodeHandles, edge.targetHandle);\n const sourcePosition = sourceHandle?.position || Position.Bottom;\n const targetPosition = targetHandle?.position || Position.Top;\n const isFocusable = !!(edge.focusable || (edgesFocusable && typeof edge.focusable === 'undefined'));\n const isUpdatable = typeof onEdgeUpdate !== 'undefined' &&\n (edge.updatable || (edgesUpdatable && typeof edge.updatable === 'undefined'));\n if (!sourceHandle || !targetHandle) {\n onError?.('008', errorMessages['error008'](sourceHandle, edge));\n return null;\n }\n const { sourceX, sourceY, targetX, targetY } = getEdgePositions(sourceNodeRect, sourceHandle, sourcePosition, targetNodeRect, targetHandle, targetPosition);\n return (React.createElement(EdgeComponent, { key: edge.id, id: edge.id, className: cc([edge.className, noPanClassName]), type: edgeType, data: edge.data, selected: !!edge.selected, animated: !!edge.animated, hidden: !!edge.hidden, label: edge.label, labelStyle: edge.labelStyle, labelShowBg: edge.labelShowBg, labelBgStyle: edge.labelBgStyle, labelBgPadding: edge.labelBgPadding, labelBgBorderRadius: edge.labelBgBorderRadius, style: edge.style, source: edge.source, target: edge.target, sourceHandleId: edge.sourceHandle, targetHandleId: edge.targetHandle, markerEnd: edge.markerEnd, markerStart: edge.markerStart, sourceX: sourceX, sourceY: sourceY, targetX: targetX, targetY: targetY, sourcePosition: sourcePosition, targetPosition: targetPosition, elementsSelectable: elementsSelectable, onEdgeUpdate: onEdgeUpdate, onContextMenu: onEdgeContextMenu, onMouseEnter: onEdgeMouseEnter, onMouseMove: onEdgeMouseMove, onMouseLeave: onEdgeMouseLeave, onClick: onEdgeClick, edgeUpdaterRadius: edgeUpdaterRadius, onEdgeDoubleClick: onEdgeDoubleClick, onEdgeUpdateStart: onEdgeUpdateStart, onEdgeUpdateEnd: onEdgeUpdateEnd, rfId: rfId, ariaLabel: edge.ariaLabel, isFocusable: isFocusable, isUpdatable: isUpdatable, pathOptions: 'pathOptions' in edge ? edge.pathOptions : undefined, interactionWidth: edge.interactionWidth }));\n }))))),\n children));\n};\nEdgeRenderer.displayName = 'EdgeRenderer';\nvar EdgeRenderer$1 = memo(EdgeRenderer);\n\nconst selector$3 = (s) => `translate(${s.transform[0]}px,${s.transform[1]}px) scale(${s.transform[2]})`;\nfunction Viewport({ children }) {\n const transform = useStore(selector$3);\n return (React.createElement(\"div\", { className: \"react-flow__viewport react-flow__container\", style: { transform } }, children));\n}\n\nfunction useOnInitHandler(onInit) {\n const rfInstance = useReactFlow();\n const isInitialized = useRef(false);\n useEffect(() => {\n if (!isInitialized.current && rfInstance.viewportInitialized && onInit) {\n setTimeout(() => onInit(rfInstance), 1);\n isInitialized.current = true;\n }\n }, [onInit, rfInstance.viewportInitialized]);\n}\n\nconst oppositePosition = {\n [Position.Left]: Position.Right,\n [Position.Right]: Position.Left,\n [Position.Top]: Position.Bottom,\n [Position.Bottom]: Position.Top,\n};\nconst ConnectionLine = ({ nodeId, handleType, style, type = ConnectionLineType.Bezier, CustomComponent, connectionStatus, }) => {\n const { fromNode, handleId, toX, toY, connectionMode } = useStore(useCallback((s) => ({\n fromNode: s.nodeInternals.get(nodeId),\n handleId: s.connectionHandleId,\n toX: (s.connectionPosition.x - s.transform[0]) / s.transform[2],\n toY: (s.connectionPosition.y - s.transform[1]) / s.transform[2],\n connectionMode: s.connectionMode,\n }), [nodeId]), shallow);\n const fromHandleBounds = fromNode?.[internalsSymbol]?.handleBounds;\n let handleBounds = fromHandleBounds?.[handleType];\n if (connectionMode === ConnectionMode.Loose) {\n handleBounds = handleBounds ? handleBounds : fromHandleBounds?.[handleType === 'source' ? 'target' : 'source'];\n }\n if (!fromNode || !handleBounds) {\n return null;\n }\n const fromHandle = handleId ? handleBounds.find((d) => d.id === handleId) : handleBounds[0];\n const fromHandleX = fromHandle ? fromHandle.x + fromHandle.width / 2 : (fromNode.width ?? 0) / 2;\n const fromHandleY = fromHandle ? fromHandle.y + fromHandle.height / 2 : fromNode.height ?? 0;\n const fromX = (fromNode.positionAbsolute?.x ?? 0) + fromHandleX;\n const fromY = (fromNode.positionAbsolute?.y ?? 0) + fromHandleY;\n const fromPosition = fromHandle?.position;\n const toPosition = fromPosition ? oppositePosition[fromPosition] : null;\n if (!fromPosition || !toPosition) {\n return null;\n }\n if (CustomComponent) {\n return (React.createElement(CustomComponent, { connectionLineType: type, connectionLineStyle: style, fromNode: fromNode, fromHandle: fromHandle, fromX: fromX, fromY: fromY, toX: toX, toY: toY, fromPosition: fromPosition, toPosition: toPosition, connectionStatus: connectionStatus }));\n }\n let dAttr = '';\n const pathParams = {\n sourceX: fromX,\n sourceY: fromY,\n sourcePosition: fromPosition,\n targetX: toX,\n targetY: toY,\n targetPosition: toPosition,\n };\n if (type === ConnectionLineType.Bezier) {\n // we assume the destination position is opposite to the source position\n [dAttr] = getBezierPath(pathParams);\n }\n else if (type === ConnectionLineType.Step) {\n [dAttr] = getSmoothStepPath({\n ...pathParams,\n borderRadius: 0,\n });\n }\n else if (type === ConnectionLineType.SmoothStep) {\n [dAttr] = getSmoothStepPath(pathParams);\n }\n else if (type === ConnectionLineType.SimpleBezier) {\n [dAttr] = getSimpleBezierPath(pathParams);\n }\n else {\n dAttr = `M${fromX},${fromY} ${toX},${toY}`;\n }\n return React.createElement(\"path\", { d: dAttr, fill: \"none\", className: \"react-flow__connection-path\", style: style });\n};\nConnectionLine.displayName = 'ConnectionLine';\nconst selector$2 = (s) => ({\n nodeId: s.connectionNodeId,\n handleType: s.connectionHandleType,\n nodesConnectable: s.nodesConnectable,\n connectionStatus: s.connectionStatus,\n width: s.width,\n height: s.height,\n});\nfunction ConnectionLineWrapper({ containerStyle, style, type, component }) {\n const { nodeId, handleType, nodesConnectable, width, height, connectionStatus } = useStore(selector$2, shallow);\n const isValid = !!(nodeId && handleType && width && nodesConnectable);\n if (!isValid) {\n return null;\n }\n return (React.createElement(\"svg\", { style: containerStyle, width: width, height: height, className: \"react-flow__edges react-flow__connectionline react-flow__container\" },\n React.createElement(\"g\", { className: cc(['react-flow__connection', connectionStatus]) },\n React.createElement(ConnectionLine, { nodeId: nodeId, handleType: handleType, style: style, type: type, CustomComponent: component, connectionStatus: connectionStatus }))));\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction useNodeOrEdgeTypes(nodeOrEdgeTypes, createTypes) {\n const typesKeysRef = useRef(null);\n const store = useStoreApi();\n const typesParsed = useMemo(() => {\n if (process.env.NODE_ENV === 'development') {\n const typeKeys = Object.keys(nodeOrEdgeTypes);\n if (shallow(typesKeysRef.current, typeKeys)) {\n store.getState().onError?.('002', errorMessages['error002']());\n }\n typesKeysRef.current = typeKeys;\n }\n return createTypes(nodeOrEdgeTypes);\n }, [nodeOrEdgeTypes]);\n return typesParsed;\n}\n\nconst GraphView = ({ nodeTypes, edgeTypes, onMove, onMoveStart, onMoveEnd, onInit, onNodeClick, onEdgeClick, onNodeDoubleClick, onEdgeDoubleClick, onNodeMouseEnter, onNodeMouseMove, onNodeMouseLeave, onNodeContextMenu, onSelectionContextMenu, onSelectionStart, onSelectionEnd, connectionLineType, connectionLineStyle, connectionLineComponent, connectionLineContainerStyle, selectionKeyCode, selectionOnDrag, selectionMode, multiSelectionKeyCode, panActivationKeyCode, zoomActivationKeyCode, deleteKeyCode, onlyRenderVisibleElements, elementsSelectable, selectNodesOnDrag, defaultViewport, translateExtent, minZoom, maxZoom, preventScrolling, defaultMarkerColor, zoomOnScroll, zoomOnPinch, panOnScroll, panOnScrollSpeed, panOnScrollMode, zoomOnDoubleClick, panOnDrag, onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneScroll, onPaneContextMenu, onEdgeUpdate, onEdgeContextMenu, onEdgeMouseEnter, onEdgeMouseMove, onEdgeMouseLeave, edgeUpdaterRadius, onEdgeUpdateStart, onEdgeUpdateEnd, noDragClassName, noWheelClassName, noPanClassName, elevateEdgesOnSelect, disableKeyboardA11y, nodeOrigin, nodeExtent, rfId, }) => {\n const nodeTypesWrapped = useNodeOrEdgeTypes(nodeTypes, createNodeTypes);\n const edgeTypesWrapped = useNodeOrEdgeTypes(edgeTypes, createEdgeTypes);\n useOnInitHandler(onInit);\n return (React.createElement(FlowRenderer$1, { onPaneClick: onPaneClick, onPaneMouseEnter: onPaneMouseEnter, onPaneMouseMove: onPaneMouseMove, onPaneMouseLeave: onPaneMouseLeave, onPaneContextMenu: onPaneContextMenu, onPaneScroll: onPaneScroll, deleteKeyCode: deleteKeyCode, selectionKeyCode: selectionKeyCode, selectionOnDrag: selectionOnDrag, selectionMode: selectionMode, onSelectionStart: onSelectionStart, onSelectionEnd: onSelectionEnd, multiSelectionKeyCode: multiSelectionKeyCode, panActivationKeyCode: panActivationKeyCode, zoomActivationKeyCode: zoomActivationKeyCode, elementsSelectable: elementsSelectable, onMove: onMove, onMoveStart: onMoveStart, onMoveEnd: onMoveEnd, zoomOnScroll: zoomOnScroll, zoomOnPinch: zoomOnPinch, zoomOnDoubleClick: zoomOnDoubleClick, panOnScroll: panOnScroll, panOnScrollSpeed: panOnScrollSpeed, panOnScrollMode: panOnScrollMode, panOnDrag: panOnDrag, defaultViewport: defaultViewport, translateExtent: translateExtent, minZoom: minZoom, maxZoom: maxZoom, onSelectionContextMenu: onSelectionContextMenu, preventScrolling: preventScrolling, noDragClassName: noDragClassName, noWheelClassName: noWheelClassName, noPanClassName: noPanClassName, disableKeyboardA11y: disableKeyboardA11y },\n React.createElement(Viewport, null,\n React.createElement(EdgeRenderer$1, { edgeTypes: edgeTypesWrapped, onEdgeClick: onEdgeClick, onEdgeDoubleClick: onEdgeDoubleClick, onEdgeUpdate: onEdgeUpdate, onlyRenderVisibleElements: onlyRenderVisibleElements, onEdgeContextMenu: onEdgeContextMenu, onEdgeMouseEnter: onEdgeMouseEnter, onEdgeMouseMove: onEdgeMouseMove, onEdgeMouseLeave: onEdgeMouseLeave, onEdgeUpdateStart: onEdgeUpdateStart, onEdgeUpdateEnd: onEdgeUpdateEnd, edgeUpdaterRadius: edgeUpdaterRadius, defaultMarkerColor: defaultMarkerColor, noPanClassName: noPanClassName, elevateEdgesOnSelect: !!elevateEdgesOnSelect, disableKeyboardA11y: disableKeyboardA11y, rfId: rfId },\n React.createElement(ConnectionLineWrapper, { style: connectionLineStyle, type: connectionLineType, component: connectionLineComponent, containerStyle: connectionLineContainerStyle })),\n React.createElement(\"div\", { className: \"react-flow__edgelabel-renderer\" }),\n React.createElement(NodeRenderer$1, { nodeTypes: nodeTypesWrapped, onNodeClick: onNodeClick, onNodeDoubleClick: onNodeDoubleClick, onNodeMouseEnter: onNodeMouseEnter, onNodeMouseMove: onNodeMouseMove, onNodeMouseLeave: onNodeMouseLeave, onNodeContextMenu: onNodeContextMenu, selectNodesOnDrag: selectNodesOnDrag, onlyRenderVisibleElements: onlyRenderVisibleElements, noPanClassName: noPanClassName, noDragClassName: noDragClassName, disableKeyboardA11y: disableKeyboardA11y, nodeOrigin: nodeOrigin, nodeExtent: nodeExtent, rfId: rfId }))));\n};\nGraphView.displayName = 'GraphView';\nvar GraphView$1 = memo(GraphView);\n\nconst infiniteExtent = [\n [Number.NEGATIVE_INFINITY, Number.NEGATIVE_INFINITY],\n [Number.POSITIVE_INFINITY, Number.POSITIVE_INFINITY],\n];\nconst initialState = {\n rfId: '1',\n width: 0,\n height: 0,\n transform: [0, 0, 1],\n nodeInternals: new Map(),\n edges: [],\n onNodesChange: null,\n onEdgesChange: null,\n hasDefaultNodes: false,\n hasDefaultEdges: false,\n d3Zoom: null,\n d3Selection: null,\n d3ZoomHandler: undefined,\n minZoom: 0.5,\n maxZoom: 2,\n translateExtent: infiniteExtent,\n nodeExtent: infiniteExtent,\n nodesSelectionActive: false,\n userSelectionActive: false,\n userSelectionRect: null,\n connectionNodeId: null,\n connectionHandleId: null,\n connectionHandleType: 'source',\n connectionPosition: { x: 0, y: 0 },\n connectionStatus: null,\n connectionMode: ConnectionMode.Strict,\n domNode: null,\n paneDragging: false,\n noPanClassName: 'nopan',\n nodeOrigin: [0, 0],\n nodeDragThreshold: 0,\n snapGrid: [15, 15],\n snapToGrid: false,\n nodesDraggable: true,\n nodesConnectable: true,\n nodesFocusable: true,\n edgesFocusable: true,\n edgesUpdatable: true,\n elementsSelectable: true,\n elevateNodesOnSelect: true,\n fitViewOnInit: false,\n fitViewOnInitDone: false,\n fitViewOnInitOptions: undefined,\n onSelectionChange: [],\n multiSelectionActive: false,\n connectionStartHandle: null,\n connectionEndHandle: null,\n connectionClickStartHandle: null,\n connectOnClick: true,\n ariaLiveMessage: '',\n autoPanOnConnect: true,\n autoPanOnNodeDrag: true,\n connectionRadius: 20,\n onError: devWarn,\n isValidConnection: undefined,\n};\n\nconst createRFStore = () => createWithEqualityFn((set, get) => ({\n ...initialState,\n setNodes: (nodes) => {\n const { nodeInternals, nodeOrigin, elevateNodesOnSelect } = get();\n set({ nodeInternals: createNodeInternals(nodes, nodeInternals, nodeOrigin, elevateNodesOnSelect) });\n },\n getNodes: () => {\n return Array.from(get().nodeInternals.values());\n },\n setEdges: (edges) => {\n const { defaultEdgeOptions = {} } = get();\n set({ edges: edges.map((e) => ({ ...defaultEdgeOptions, ...e })) });\n },\n setDefaultNodesAndEdges: (nodes, edges) => {\n const hasDefaultNodes = typeof nodes !== 'undefined';\n const hasDefaultEdges = typeof edges !== 'undefined';\n const nodeInternals = hasDefaultNodes\n ? createNodeInternals(nodes, new Map(), get().nodeOrigin, get().elevateNodesOnSelect)\n : new Map();\n const nextEdges = hasDefaultEdges ? edges : [];\n set({ nodeInternals, edges: nextEdges, hasDefaultNodes, hasDefaultEdges });\n },\n updateNodeDimensions: (updates) => {\n const { onNodesChange, nodeInternals, fitViewOnInit, fitViewOnInitDone, fitViewOnInitOptions, domNode, nodeOrigin, } = get();\n const viewportNode = domNode?.querySelector('.react-flow__viewport');\n if (!viewportNode) {\n return;\n }\n const style = window.getComputedStyle(viewportNode);\n const { m22: zoom } = new window.DOMMatrixReadOnly(style.transform);\n const changes = updates.reduce((res, update) => {\n const node = nodeInternals.get(update.id);\n if (node) {\n const dimensions = getDimensions(update.nodeElement);\n const doUpdate = !!(dimensions.width &&\n dimensions.height &&\n (node.width !== dimensions.width || node.height !== dimensions.height || update.forceUpdate));\n if (doUpdate) {\n nodeInternals.set(node.id, {\n ...node,\n [internalsSymbol]: {\n ...node[internalsSymbol],\n handleBounds: {\n source: getHandleBounds('.source', update.nodeElement, zoom, nodeOrigin),\n target: getHandleBounds('.target', update.nodeElement, zoom, nodeOrigin),\n },\n },\n ...dimensions,\n });\n res.push({\n id: node.id,\n type: 'dimensions',\n dimensions,\n });\n }\n }\n return res;\n }, []);\n updateAbsoluteNodePositions(nodeInternals, nodeOrigin);\n const nextFitViewOnInitDone = fitViewOnInitDone ||\n (fitViewOnInit && !fitViewOnInitDone && fitView(get, { initial: true, ...fitViewOnInitOptions }));\n set({ nodeInternals: new Map(nodeInternals), fitViewOnInitDone: nextFitViewOnInitDone });\n if (changes?.length > 0) {\n onNodesChange?.(changes);\n }\n },\n updateNodePositions: (nodeDragItems, positionChanged = true, dragging = false) => {\n const { triggerNodeChanges } = get();\n const changes = nodeDragItems.map((node) => {\n const change = {\n id: node.id,\n type: 'position',\n dragging,\n };\n if (positionChanged) {\n change.positionAbsolute = node.positionAbsolute;\n change.position = node.position;\n }\n return change;\n });\n triggerNodeChanges(changes);\n },\n triggerNodeChanges: (changes) => {\n const { onNodesChange, nodeInternals, hasDefaultNodes, nodeOrigin, getNodes, elevateNodesOnSelect } = get();\n if (changes?.length) {\n if (hasDefaultNodes) {\n const nodes = applyNodeChanges(changes, getNodes());\n const nextNodeInternals = createNodeInternals(nodes, nodeInternals, nodeOrigin, elevateNodesOnSelect);\n set({ nodeInternals: nextNodeInternals });\n }\n onNodesChange?.(changes);\n }\n },\n addSelectedNodes: (selectedNodeIds) => {\n const { multiSelectionActive, edges, getNodes } = get();\n let changedNodes;\n let changedEdges = null;\n if (multiSelectionActive) {\n changedNodes = selectedNodeIds.map((nodeId) => createSelectionChange(nodeId, true));\n }\n else {\n changedNodes = getSelectionChanges(getNodes(), selectedNodeIds);\n changedEdges = getSelectionChanges(edges, []);\n }\n updateNodesAndEdgesSelections({\n changedNodes,\n changedEdges,\n get,\n set,\n });\n },\n addSelectedEdges: (selectedEdgeIds) => {\n const { multiSelectionActive, edges, getNodes } = get();\n let changedEdges;\n let changedNodes = null;\n if (multiSelectionActive) {\n changedEdges = selectedEdgeIds.map((edgeId) => createSelectionChange(edgeId, true));\n }\n else {\n changedEdges = getSelectionChanges(edges, selectedEdgeIds);\n changedNodes = getSelectionChanges(getNodes(), []);\n }\n updateNodesAndEdgesSelections({\n changedNodes,\n changedEdges,\n get,\n set,\n });\n },\n unselectNodesAndEdges: ({ nodes, edges } = {}) => {\n const { edges: storeEdges, getNodes } = get();\n const nodesToUnselect = nodes ? nodes : getNodes();\n const edgesToUnselect = edges ? edges : storeEdges;\n const changedNodes = nodesToUnselect.map((n) => {\n n.selected = false;\n return createSelectionChange(n.id, false);\n });\n const changedEdges = edgesToUnselect.map((edge) => createSelectionChange(edge.id, false));\n updateNodesAndEdgesSelections({\n changedNodes,\n changedEdges,\n get,\n set,\n });\n },\n setMinZoom: (minZoom) => {\n const { d3Zoom, maxZoom } = get();\n d3Zoom?.scaleExtent([minZoom, maxZoom]);\n set({ minZoom });\n },\n setMaxZoom: (maxZoom) => {\n const { d3Zoom, minZoom } = get();\n d3Zoom?.scaleExtent([minZoom, maxZoom]);\n set({ maxZoom });\n },\n setTranslateExtent: (translateExtent) => {\n get().d3Zoom?.translateExtent(translateExtent);\n set({ translateExtent });\n },\n resetSelectedElements: () => {\n const { edges, getNodes } = get();\n const nodes = getNodes();\n const nodesToUnselect = nodes\n .filter((e) => e.selected)\n .map((n) => createSelectionChange(n.id, false));\n const edgesToUnselect = edges\n .filter((e) => e.selected)\n .map((e) => createSelectionChange(e.id, false));\n updateNodesAndEdgesSelections({\n changedNodes: nodesToUnselect,\n changedEdges: edgesToUnselect,\n get,\n set,\n });\n },\n setNodeExtent: (nodeExtent) => {\n const { nodeInternals } = get();\n nodeInternals.forEach((node) => {\n node.positionAbsolute = clampPosition(node.position, nodeExtent);\n });\n set({\n nodeExtent,\n nodeInternals: new Map(nodeInternals),\n });\n },\n panBy: (delta) => {\n const { transform, width, height, d3Zoom, d3Selection, translateExtent } = get();\n if (!d3Zoom || !d3Selection || (!delta.x && !delta.y)) {\n return false;\n }\n const nextTransform = zoomIdentity\n .translate(transform[0] + delta.x, transform[1] + delta.y)\n .scale(transform[2]);\n const extent = [\n [0, 0],\n [width, height],\n ];\n const constrainedTransform = d3Zoom?.constrain()(nextTransform, extent, translateExtent);\n d3Zoom.transform(d3Selection, constrainedTransform);\n const transformChanged = transform[0] !== constrainedTransform.x ||\n transform[1] !== constrainedTransform.y ||\n transform[2] !== constrainedTransform.k;\n return transformChanged;\n },\n cancelConnection: () => set({\n connectionNodeId: initialState.connectionNodeId,\n connectionHandleId: initialState.connectionHandleId,\n connectionHandleType: initialState.connectionHandleType,\n connectionStatus: initialState.connectionStatus,\n connectionStartHandle: initialState.connectionStartHandle,\n connectionEndHandle: initialState.connectionEndHandle,\n }),\n reset: () => set({ ...initialState }),\n}), Object.is);\n\nconst ReactFlowProvider = ({ children }) => {\n const storeRef = useRef(null);\n if (!storeRef.current) {\n storeRef.current = createRFStore();\n }\n return React.createElement(Provider$1, { value: storeRef.current }, children);\n};\nReactFlowProvider.displayName = 'ReactFlowProvider';\n\nconst Wrapper = ({ children }) => {\n const isWrapped = useContext(StoreContext);\n if (isWrapped) {\n // we need to wrap it with a fragment because it's not allowed for children to be a ReactNode\n // https://github.com/DefinitelyTyped/DefinitelyTyped/issues/18051\n return React.createElement(React.Fragment, null, children);\n }\n return React.createElement(ReactFlowProvider, null, children);\n};\nWrapper.displayName = 'ReactFlowWrapper';\n\nconst defaultNodeTypes = {\n input: InputNode$1,\n default: DefaultNode$1,\n output: OutputNode$1,\n group: GroupNode,\n};\nconst defaultEdgeTypes = {\n default: BezierEdge,\n straight: StraightEdge,\n step: StepEdge,\n smoothstep: SmoothStepEdge,\n simplebezier: SimpleBezierEdge,\n};\nconst initNodeOrigin = [0, 0];\nconst initSnapGrid = [15, 15];\nconst initDefaultViewport = { x: 0, y: 0, zoom: 1 };\nconst wrapperStyle = {\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n position: 'relative',\n zIndex: 0,\n};\nconst ReactFlow = forwardRef(({ nodes, edges, defaultNodes, defaultEdges, className, nodeTypes = defaultNodeTypes, edgeTypes = defaultEdgeTypes, onNodeClick, onEdgeClick, onInit, onMove, onMoveStart, onMoveEnd, onConnect, onConnectStart, onConnectEnd, onClickConnectStart, onClickConnectEnd, onNodeMouseEnter, onNodeMouseMove, onNodeMouseLeave, onNodeContextMenu, onNodeDoubleClick, onNodeDragStart, onNodeDrag, onNodeDragStop, onNodesDelete, onEdgesDelete, onSelectionChange, onSelectionDragStart, onSelectionDrag, onSelectionDragStop, onSelectionContextMenu, onSelectionStart, onSelectionEnd, connectionMode = ConnectionMode.Strict, connectionLineType = ConnectionLineType.Bezier, connectionLineStyle, connectionLineComponent, connectionLineContainerStyle, deleteKeyCode = 'Backspace', selectionKeyCode = 'Shift', selectionOnDrag = false, selectionMode = SelectionMode.Full, panActivationKeyCode = 'Space', multiSelectionKeyCode = isMacOs() ? 'Meta' : 'Control', zoomActivationKeyCode = isMacOs() ? 'Meta' : 'Control', snapToGrid = false, snapGrid = initSnapGrid, onlyRenderVisibleElements = false, selectNodesOnDrag = true, nodesDraggable, nodesConnectable, nodesFocusable, nodeOrigin = initNodeOrigin, edgesFocusable, edgesUpdatable, elementsSelectable, defaultViewport = initDefaultViewport, minZoom = 0.5, maxZoom = 2, translateExtent = infiniteExtent, preventScrolling = true, nodeExtent, defaultMarkerColor = '#b1b1b7', zoomOnScroll = true, zoomOnPinch = true, panOnScroll = false, panOnScrollSpeed = 0.5, panOnScrollMode = PanOnScrollMode.Free, zoomOnDoubleClick = true, panOnDrag = true, onPaneClick, onPaneMouseEnter, onPaneMouseMove, onPaneMouseLeave, onPaneScroll, onPaneContextMenu, children, onEdgeUpdate, onEdgeContextMenu, onEdgeDoubleClick, onEdgeMouseEnter, onEdgeMouseMove, onEdgeMouseLeave, onEdgeUpdateStart, onEdgeUpdateEnd, edgeUpdaterRadius = 10, onNodesChange, onEdgesChange, noDragClassName = 'nodrag', noWheelClassName = 'nowheel', noPanClassName = 'nopan', fitView = false, fitViewOptions, connectOnClick = true, attributionPosition, proOptions, defaultEdgeOptions, elevateNodesOnSelect = true, elevateEdgesOnSelect = false, disableKeyboardA11y = false, autoPanOnConnect = true, autoPanOnNodeDrag = true, connectionRadius = 20, isValidConnection, onError, style, id, nodeDragThreshold, ...rest }, ref) => {\n const rfId = id || '1';\n return (React.createElement(\"div\", { ...rest, style: { ...style, ...wrapperStyle }, ref: ref, className: cc(['react-flow', className]), \"data-testid\": \"rf__wrapper\", id: id },\n React.createElement(Wrapper, null,\n React.createElement(GraphView$1, { onInit: onInit, onMove: onMove, onMoveStart: onMoveStart, onMoveEnd: onMoveEnd, onNodeClick: onNodeClick, onEdgeClick: onEdgeClick, onNodeMouseEnter: onNodeMouseEnter, onNodeMouseMove: onNodeMouseMove, onNodeMouseLeave: onNodeMouseLeave, onNodeContextMenu: onNodeContextMenu, onNodeDoubleClick: onNodeDoubleClick, nodeTypes: nodeTypes, edgeTypes: edgeTypes, connectionLineType: connectionLineType, connectionLineStyle: connectionLineStyle, connectionLineComponent: connectionLineComponent, connectionLineContainerStyle: connectionLineContainerStyle, selectionKeyCode: selectionKeyCode, selectionOnDrag: selectionOnDrag, selectionMode: selectionMode, deleteKeyCode: deleteKeyCode, multiSelectionKeyCode: multiSelectionKeyCode, panActivationKeyCode: panActivationKeyCode, zoomActivationKeyCode: zoomActivationKeyCode, onlyRenderVisibleElements: onlyRenderVisibleElements, selectNodesOnDrag: selectNodesOnDrag, defaultViewport: defaultViewport, translateExtent: translateExtent, minZoom: minZoom, maxZoom: maxZoom, preventScrolling: preventScrolling, zoomOnScroll: zoomOnScroll, zoomOnPinch: zoomOnPinch, zoomOnDoubleClick: zoomOnDoubleClick, panOnScroll: panOnScroll, panOnScrollSpeed: panOnScrollSpeed, panOnScrollMode: panOnScrollMode, panOnDrag: panOnDrag, onPaneClick: onPaneClick, onPaneMouseEnter: onPaneMouseEnter, onPaneMouseMove: onPaneMouseMove, onPaneMouseLeave: onPaneMouseLeave, onPaneScroll: onPaneScroll, onPaneContextMenu: onPaneContextMenu, onSelectionContextMenu: onSelectionContextMenu, onSelectionStart: onSelectionStart, onSelectionEnd: onSelectionEnd, onEdgeUpdate: onEdgeUpdate, onEdgeContextMenu: onEdgeContextMenu, onEdgeDoubleClick: onEdgeDoubleClick, onEdgeMouseEnter: onEdgeMouseEnter, onEdgeMouseMove: onEdgeMouseMove, onEdgeMouseLeave: onEdgeMouseLeave, onEdgeUpdateStart: onEdgeUpdateStart, onEdgeUpdateEnd: onEdgeUpdateEnd, edgeUpdaterRadius: edgeUpdaterRadius, defaultMarkerColor: defaultMarkerColor, noDragClassName: noDragClassName, noWheelClassName: noWheelClassName, noPanClassName: noPanClassName, elevateEdgesOnSelect: elevateEdgesOnSelect, rfId: rfId, disableKeyboardA11y: disableKeyboardA11y, nodeOrigin: nodeOrigin, nodeExtent: nodeExtent }),\n React.createElement(StoreUpdater, { nodes: nodes, edges: edges, defaultNodes: defaultNodes, defaultEdges: defaultEdges, onConnect: onConnect, onConnectStart: onConnectStart, onConnectEnd: onConnectEnd, onClickConnectStart: onClickConnectStart, onClickConnectEnd: onClickConnectEnd, nodesDraggable: nodesDraggable, nodesConnectable: nodesConnectable, nodesFocusable: nodesFocusable, edgesFocusable: edgesFocusable, edgesUpdatable: edgesUpdatable, elementsSelectable: elementsSelectable, elevateNodesOnSelect: elevateNodesOnSelect, minZoom: minZoom, maxZoom: maxZoom, nodeExtent: nodeExtent, onNodesChange: onNodesChange, onEdgesChange: onEdgesChange, snapToGrid: snapToGrid, snapGrid: snapGrid, connectionMode: connectionMode, translateExtent: translateExtent, connectOnClick: connectOnClick, defaultEdgeOptions: defaultEdgeOptions, fitView: fitView, fitViewOptions: fitViewOptions, onNodesDelete: onNodesDelete, onEdgesDelete: onEdgesDelete, onNodeDragStart: onNodeDragStart, onNodeDrag: onNodeDrag, onNodeDragStop: onNodeDragStop, onSelectionDrag: onSelectionDrag, onSelectionDragStart: onSelectionDragStart, onSelectionDragStop: onSelectionDragStop, noPanClassName: noPanClassName, nodeOrigin: nodeOrigin, rfId: rfId, autoPanOnConnect: autoPanOnConnect, autoPanOnNodeDrag: autoPanOnNodeDrag, onError: onError, connectionRadius: connectionRadius, isValidConnection: isValidConnection, nodeDragThreshold: nodeDragThreshold }),\n React.createElement(Wrapper$1, { onSelectionChange: onSelectionChange }),\n children,\n React.createElement(Attribution, { proOptions: proOptions, position: attributionPosition }),\n React.createElement(A11yDescriptions, { rfId: rfId, disableKeyboardA11y: disableKeyboardA11y }))));\n});\nReactFlow.displayName = 'ReactFlow';\n\nconst selector$1 = (s) => s.domNode?.querySelector('.react-flow__edgelabel-renderer');\nfunction EdgeLabelRenderer({ children }) {\n const edgeLabelRenderer = useStore(selector$1);\n if (!edgeLabelRenderer) {\n return null;\n }\n return createPortal(children, edgeLabelRenderer);\n}\n\nfunction useUpdateNodeInternals() {\n const store = useStoreApi();\n return useCallback((id) => {\n const { domNode, updateNodeDimensions } = store.getState();\n const updateIds = Array.isArray(id) ? id : [id];\n const updates = updateIds.reduce((res, updateId) => {\n const nodeElement = domNode?.querySelector(`.react-flow__node[data-id=\"${updateId}\"]`);\n if (nodeElement) {\n res.push({ id: updateId, nodeElement, forceUpdate: true });\n }\n return res;\n }, []);\n requestAnimationFrame(() => updateNodeDimensions(updates));\n }, []);\n}\n\nconst nodesSelector = (state) => state.getNodes();\nfunction useNodes() {\n const nodes = useStore(nodesSelector, shallow);\n return nodes;\n}\n\nconst edgesSelector = (state) => state.edges;\nfunction useEdges() {\n const edges = useStore(edgesSelector, shallow);\n return edges;\n}\n\nconst viewportSelector = (state) => ({\n x: state.transform[0],\n y: state.transform[1],\n zoom: state.transform[2],\n});\nfunction useViewport() {\n const viewport = useStore(viewportSelector, shallow);\n return viewport;\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nfunction createUseItemsState(applyChanges) {\n return (initialItems) => {\n const [items, setItems] = useState(initialItems);\n const onItemsChange = useCallback((changes) => setItems((items) => applyChanges(changes, items)), []);\n return [items, setItems, onItemsChange];\n };\n}\nconst useNodesState = createUseItemsState(applyNodeChanges);\nconst useEdgesState = createUseItemsState(applyEdgeChanges);\n\nfunction useOnViewportChange({ onStart, onChange, onEnd }) {\n const store = useStoreApi();\n useEffect(() => {\n store.setState({ onViewportChangeStart: onStart });\n }, [onStart]);\n useEffect(() => {\n store.setState({ onViewportChange: onChange });\n }, [onChange]);\n useEffect(() => {\n store.setState({ onViewportChangeEnd: onEnd });\n }, [onEnd]);\n}\n\nfunction useOnSelectionChange({ onChange }) {\n const store = useStoreApi();\n useEffect(() => {\n const nextSelectionChangeHandlers = [...store.getState().onSelectionChange, onChange];\n store.setState({ onSelectionChange: nextSelectionChangeHandlers });\n return () => {\n const nextHandlers = store.getState().onSelectionChange.filter((fn) => fn !== onChange);\n store.setState({ onSelectionChange: nextHandlers });\n };\n }, [onChange]);\n}\n\nconst selector = (options) => (s) => {\n if (s.nodeInternals.size === 0) {\n return false;\n }\n return s\n .getNodes()\n .filter((n) => (options.includeHiddenNodes ? true : !n.hidden))\n .every((n) => n[internalsSymbol]?.handleBounds !== undefined);\n};\nconst defaultOptions = {\n includeHiddenNodes: false,\n};\nfunction useNodesInitialized(options = defaultOptions) {\n const initialized = useStore(selector(options));\n return initialized;\n}\n\nexport { BaseEdge, BezierEdge, ConnectionLineType, ConnectionMode, EdgeLabelRenderer, EdgeText$1 as EdgeText, Handle$1 as Handle, MarkerType, PanOnScrollMode, Panel, Position, ReactFlow, ReactFlowProvider, SelectionMode, SimpleBezierEdge, SmoothStepEdge, StepEdge, StraightEdge, addEdge, applyEdgeChanges, applyNodeChanges, boxToRect, clamp, getBezierPath, getBoundsOfRects, getConnectedEdges, getIncomers, getMarkerEnd, getNodePositionWithOrigin, getNodesBounds, getOutgoers, getRectOfNodes, getSimpleBezierPath, getSmoothStepPath, getStraightPath, getTransformForBounds, getViewportForBounds, handleParentExpand, internalsSymbol, isEdge, isNode, rectToBox, updateEdge, useEdges, useEdgesState, useGetPointerPosition, useKeyPress, useNodeId, useNodes, useNodesInitialized, useNodesState, useOnSelectionChange, useOnViewportChange, useReactFlow, useStore, useStoreApi, useUpdateNodeInternals, useViewport };\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { UnexpectedError } from \"@synnaxlabs/client\";\nimport { xy } from \"@synnaxlabs/x\";\nimport type * as rf from \"reactflow\";\n\nimport { type Color } from \"@/color\";\nimport { type connector } from \"@/vis/diagram/edge/connector\";\n\n/** The current viewport state of the diagram */\nexport interface Viewport {\n /*\n * The top-left pixel offset of the diagram pan position.\n * Note that this offset is unscaled by zoom.\n * */\n position: xy.XY;\n /**\n * A decimal of the current diagram zoom. Larger values represent magnification.\n */\n zoom: number;\n}\n\n/** Pluto specific info passed to the 'data' attribute on rf.Edge */\nexport interface RFEdgeData {\n /** The color of the edge. */\n color: Color.Crude;\n /** A list of segments representing the structure of the edge connector. */\n segments: connector.Segment[];\n}\n\n/** The properties for an edge within a diagram. */\nexport interface Edge extends RFEdgeData {\n /** A unique key for identifying the edge within the diagram. */\n key: string;\n /** The key of the source node for the edge. */\n source: string;\n /** The key of the target node for the edge. */\n target: string;\n /** Whether the edge is currently selected. */\n selected: boolean;\n /**\n * The id of handle on the source node that the edge is connected to. Note that this\n * id is unique only within the source node.\n */\n sourceHandle?: string | null;\n /**\n * The id of the handle on the target node that the edge is connected to. Note that this id\n * is unique only within the target node.\n */\n targetHandle?: string | null;\n}\n\n/** The properties for a node within a diagram. */\nexport interface Node {\n /** A unique key for identifying the node within the diagram. */\n key: string;\n /** The XY coordinate of the top left corner of the node. Unscaled by the viewport. */\n position: xy.XY;\n /** Whether the node is currently selected. */\n selected?: boolean;\n /** An optional z-index for the node. */\n zIndex?: number;\n}\n\n/**\n * Translates nodes from their pluto representation to their react-flow representation.\n */\nexport const translateNodesForward = (nodes: Node[]): rf.Node[] =>\n nodes.map((node) => ({\n ...node,\n id: node.key,\n type: \"custom\",\n data: {},\n }));\n\n/** Translates edges from their pluto representation to their react-flow representation. */\nexport const translateEdgesForward = (edges: Edge[]): Array<rf.Edge<RFEdgeData>> =>\n edges.map(({ segments, color, ...edge }) => ({\n ...edge,\n id: edge.key,\n data: { segments, color },\n }));\n\n/** Translates nodes from their react-flow representation to their pluto representation. */\nexport const translateNodesBackward = (nodes: rf.Node[]): Node[] =>\n nodes.map((node) => ({\n key: node.id,\n selected: node.selected,\n ...node,\n }));\n\n/** Translates edges from their react-flow representation to their pluto representation */\nexport const translateEdgesBackward = (\n edges: Array<rf.Edge<RFEdgeData>>,\n defaultData?: RFEdgeData,\n): Edge[] =>\n edges.map((edge) => {\n if (edge.data == null) edge.data = { segments: [], selected: false };\n return {\n key: edge.id,\n segments: edge.data.segments,\n selected: edge.selected,\n color: edge.data?.color,\n ...edge,\n };\n });\n\n/** Translates the diagram viewport from its pluto representation to its react-flow representation */\nexport const translateViewportForward = (viewport: Viewport): rf.Viewport => ({\n ...viewport.position,\n zoom: viewport.zoom,\n});\n\n/** Translates the diagram viewport from its react-flow representation to its pluto representation */\nexport const translateViewportBackward = (viewport: rf.Viewport): Viewport => ({\n position: xy.construct(viewport),\n zoom: viewport.zoom,\n});\n\n/**\n * Executes the provided callback against the react-flow representation of the given\n * nodes, then converts\n */\nexport const nodeConverter = (\n nodes: Node[],\n f: (nodes: rf.Node[]) => rf.Node[],\n): Node[] => translateNodesBackward(f(translateNodesForward(nodes)));\n\nexport const edgeConverter = (\n edges: Edge[],\n f: (edges: rf.Edge[]) => rf.Edge[],\n): Edge[] => translateEdgesBackward(f(translateEdgesForward(edges)));\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { useRef } from \"react\";\n\nimport { scale, xy, box } from \"@synnaxlabs/x\";\nimport { useReactFlow } from \"reactflow\";\nimport { z } from \"zod\";\n\nimport { aether } from \"@/aether/aether\";\nimport { status } from \"@/status/aether\";\nimport { translateViewportBackward, type Viewport } from \"@/vis/diagram/types\";\nimport { render } from \"@/vis/render\";\n\nexport const diagramStateZ = z.object({\n position: xy.xy,\n zoom: z.number(),\n region: box.box,\n clearOverscan: xy.crudeZ.optional().default(10),\n});\n\ninterface ElementProps {\n viewportScale?: scale.XY;\n}\n\nexport interface Element extends aether.Component {\n render: (props: ElementProps) => Promise<void>;\n}\n\ninterface InternalState {\n renderCtx: render.Context;\n addStatus: status.Aggregate;\n}\n\nconst CANVASES: render.CanvasVariant[] = [\"upper2d\", \"lower2d\"];\n\nexport const useInitialViewport = (): Viewport => {\n const flow = useReactFlow();\n return useRef<Viewport>(translateViewportBackward(flow.getViewport())).current;\n};\n\nexport class Diagram extends aether.Composite<\n typeof diagramStateZ,\n InternalState,\n Element\n> {\n static readonly TYPE = \"Diagram\";\n static readonly stateZ = diagramStateZ;\n readonly eraser: render.Eraser = new render.Eraser();\n schema = Diagram.stateZ;\n\n afterUpdate(): void {\n this.internal.renderCtx = render.Context.use(this.ctx);\n this.internal.addStatus = status.useAggregate(this.ctx);\n render.Controller.control(this.ctx, () => this.requestRender());\n this.requestRender();\n }\n\n afterDelete(): void {\n this.requestRender();\n }\n\n async render(): Promise<render.Cleanup | undefined> {\n if (this.deleted) return undefined;\n const { renderCtx, addStatus } = this.internal;\n const { zoom, position } = this.state;\n const region = box.construct(this.state.region);\n const clearScissor = renderCtx.scissor(region, xy.ZERO, CANVASES);\n const viewportScale = scale.XY.magnify(xy.construct(zoom))\n .translate(box.topLeft(region))\n .translate(position);\n\n try {\n await Promise.all(\n this.children.map(async (child) => await child.render({ viewportScale })),\n );\n } catch (e) {\n addStatus({ variant: \"error\", message: (e as Error).message });\n } finally {\n clearScissor();\n }\n\n return () =>\n this.eraser.erase(\n this.internal.renderCtx,\n this.state.region,\n this.prevState.region,\n this.state.clearOverscan,\n CANVASES,\n );\n }\n\n private requestRender(): void {\n const { renderCtx } = this.internal;\n void renderCtx.loop.set({\n key: this.key,\n render: async () => await this.render(),\n priority: \"high\",\n canvases: CANVASES,\n });\n }\n}\n\nexport const REGISTRY = {\n [Diagram.TYPE]: Diagram,\n};\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type Instrumentation } from \"@synnaxlabs/alamos\";\nimport {\n type Synnax,\n control,\n type channel,\n UnexpectedError,\n} from \"@synnaxlabs/client\";\nimport { observe, type Destructor, unique } from \"@synnaxlabs/x\";\nimport { z } from \"zod\";\n\nimport { aether } from \"@/aether/aether\";\nimport { alamos } from \"@/alamos/aether\";\nimport { color } from \"@/color/core\";\nimport { synnax } from \"@/synnax/aether\";\nimport { theming } from \"@/theming/aether\";\n\nexport const stateProviderStateZ = z.object({});\n\ninterface InternalState {\n palette: color.Color[];\n instrumentation: Instrumentation;\n defaultColor: color.Color;\n client: Synnax | null;\n}\n\nconst CONTEXT_KEY = \"control-state-provider\";\n\n/**\n * An extension of the Synnax client's control state that allows us to assign a unique\n * color to each control subject for user identification.\n */\nexport const sugaredStateZ = control.stateZ.extend({\n subjectColor: color.Color.z,\n});\n\n/**\n * An extension of the Synnax client's control state that allows us to assign a unique\n * color to each control subject for user identification.\n */\nexport interface SugaredState extends control.State {\n subjectColor: color.Color;\n}\n\n/**\n * StateProvider tracks the control state for the channels in a Synnax cluster, listening\n * for updates and providing a way to get the current state for a channel.\n */\nexport class StateProvider extends aether.Composite<\n typeof stateProviderStateZ,\n InternalState\n> {\n static readonly TYPE = \"StateProvider\";\n schema = stateProviderStateZ;\n\n /** Tracks the colors we assign to a particular control subject. */\n private readonly colors = new Map<string, color.Color>();\n\n /** Tracks the current control state for each channel and allows us to access it */\n private tracker?: control.StateTracker;\n /** Stop listening for changes to the tracker */\n private disconnectTrackerChange?: Destructor;\n\n /** An observer that lets external subscribers know when the control state changes */\n private readonly obs: observe.Observer<control.Transfer[]> = new observe.Observer();\n\n /**\n * Grabs the state provider from the current aether context.\n *\n * @param ctx - The component's current aether context.\n * @throws {Error} if the state provider is not in the context.\n */\n static use(ctx: aether.Context): StateProvider {\n return ctx.get(CONTEXT_KEY);\n }\n\n afterUpdate(): void {\n this.internal.instrumentation = alamos.useInstrumentation(\n this.ctx,\n \"control-state\",\n );\n const theme = theming.use(this.ctx);\n this.internal.palette = theme.colors.visualization.palettes.default;\n this.internal.defaultColor = theme.colors.gray.l6;\n const nextClient = synnax.use(this.ctx);\n if (nextClient === this.internal.client) return;\n this.internal.client = nextClient;\n this.ctx.set(CONTEXT_KEY, this);\n if (this.internal.client != null) {\n this.internal.instrumentation.L.debug(\"starting state tracker\");\n void this.startUpdating(this.internal.client);\n }\n }\n\n afterDelete(): void {\n this.disconnectTrackerChange?.();\n this.tracker\n ?.close()\n .catch((e) => this.internal.instrumentation.L.error(\"error\", { error: e }));\n }\n\n onChange(cb: (transfers: control.Transfer[]) => void): Destructor {\n return this.obs.onChange(cb);\n }\n\n get(key: channel.Key): SugaredState | undefined;\n\n get(keys: channel.Key[]): SugaredState[];\n\n get(key: channel.Key | channel.Key[]): SugaredState | SugaredState[] | undefined {\n if (Array.isArray(key))\n return unique(key)\n .map((k) => this.getOne(k))\n .filter((s) => s != null) as SugaredState[];\n return this.getOne(key);\n }\n\n private getOne(key: channel.Key): SugaredState | undefined {\n if (this.tracker == null) return undefined;\n const s = this.tracker.states.get(key);\n if (s == null) return undefined;\n return {\n ...s,\n subjectColor: this.colors.get(s.subject.key) ?? this.internal.defaultColor,\n };\n }\n\n private async startUpdating(client: Synnax): Promise<void> {\n const { instrumentation: i } = this.internal;\n try {\n this.tracker = await control.StateTracker.open(client.telem);\n } catch {\n i.L.error(\"failed to open state tracker\");\n return;\n }\n this.disconnectTrackerChange = this.tracker.onChange((t) => {\n i.L.debug(\"transfer\", { transfers: t.map((t) => control.transferString(t)) });\n if (this.tracker == null)\n throw new UnexpectedError(\"tracker is null inside it's own onChange callback!\");\n this.updateColors(this.tracker);\n this.obs.notify(t);\n });\n }\n\n private updateColors(t: control.StateTracker): void {\n const sub = t.subjects();\n const subKeys = sub.map((s) => s.key);\n const colors = Array.from(this.colors.values());\n\n // Purge colors that are no longer in use\n this.colors.forEach((_, key) => !subKeys.includes(key) && this.colors.delete(key));\n\n // Add colors for new subjects\n const { palette } = this.internal;\n sub.forEach((s) => {\n if (this.colors.has(s.key)) return;\n const color = palette.find((c) => !colors.includes(c)) ?? palette[0];\n this.colors.set(s.key, color);\n colors.push(color);\n });\n }\n}\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type Instrumentation } from \"@synnaxlabs/alamos\";\nimport {\n channel,\n Series,\n type Synnax,\n TimeStamp,\n framer,\n Authority,\n UnexpectedError,\n control,\n} from \"@synnaxlabs/client\";\nimport { type Destructor, compare } from \"@synnaxlabs/x\";\nimport { z } from \"zod\";\n\nimport { aether } from \"@/aether/aether\";\nimport { type theming } from \"@/aetherIndex\";\nimport { alamos } from \"@/alamos/aether\";\nimport { status } from \"@/status/aether\";\nimport { synnax } from \"@/synnax/aether\";\nimport { telem } from \"@/telem/aether\";\nimport { AbstractSink } from \"@/telem/aether/telem\";\nimport { StateProvider } from \"@/telem/control/aether/state\";\n\nexport const STATUSES = [\"acquired\", \"released\", \"overridden\", \"failed\"] as const;\nexport const statusZ = z.enum(STATUSES);\nexport type Status = z.infer<typeof statusZ>;\n\nexport const controllerStateZ = z.object({\n name: z.string(),\n authority: z.number().default(0),\n acquireTrigger: z.number(),\n status: statusZ.optional(),\n needsControlOf: channel.keyZ.array().optional().default([]),\n});\n\ninterface InternalState {\n client: Synnax | null;\n instrumentation: Instrumentation;\n stateProv: StateProvider;\n addStatus: status.Aggregate;\n theme: theming.Theme;\n prevTrigger: number;\n}\n\ninterface AetherControllerTelem extends telem.Telem {\n needsControlOf: (client: Synnax) => Promise<channel.Keys>;\n}\n\n/**\n * @summary Acquires control over a set of channels by opening a writer to a Synnax\n * cluster, and then acts as a factory for telemetry that can be used to send commands\n * to that writer.\n */\nexport class Controller\n extends aether.Composite<typeof controllerStateZ, InternalState>\n implements telem.Factory\n{\n static readonly TYPE = \"Controller\";\n schema = controllerStateZ;\n\n private readonly registry = new Map<AetherControllerTelem, null>();\n private writer?: framer.Writer;\n\n afterUpdate(): void {\n this.internal.instrumentation = alamos.useInstrumentation(this.ctx);\n if (\n this.internal.prevTrigger == null ||\n Math.abs(this.state.acquireTrigger - this.internal.prevTrigger) > 1\n )\n this.internal.prevTrigger = this.state.acquireTrigger;\n const nextClient = synnax.use(this.ctx);\n const nextStateProv = StateProvider.use(this.ctx);\n\n this.internal.client = nextClient;\n this.internal.stateProv = nextStateProv;\n\n telem.registerFactory(this.ctx, this);\n\n this.internal.addStatus = status.useAggregate(this.ctx);\n\n // Acquire or release control if necessary.\n if (this.state.acquireTrigger > this.internal.prevTrigger) {\n void this.acquire();\n this.internal.prevTrigger = this.state.acquireTrigger;\n } else if (this.state.acquireTrigger < this.internal.prevTrigger) {\n void this.release();\n this.internal.prevTrigger = this.state.acquireTrigger;\n }\n }\n\n afterDelete(): void {\n void this.release();\n }\n\n private async updateNeedsControlOf(): Promise<void> {\n if (this.internal.client == null) {\n throw new UnexpectedError(\"No cluster connected but channelKeys were requested\");\n }\n\n const keys = new Set<channel.Key>([]);\n for (const telem of this.registry.keys()) {\n const telemKeys = await telem.needsControlOf(this.internal.client);\n telemKeys.forEach((k) => k !== 0 && keys.add(k));\n }\n const nextKeys = Array.from(keys);\n if (\n compare.unorderedPrimitiveArrays(this.state.needsControlOf, nextKeys) ===\n compare.EQUAL\n )\n return;\n\n this.setState((p) => ({ ...p, needsControlOf: nextKeys }));\n }\n\n private async acquire(): Promise<void> {\n const { client, addStatus } = this.internal;\n if (client == null)\n return addStatus({\n message: `Cannot acquire control on ${this.state.name} because no cluster has been connected`,\n variant: \"warning\",\n });\n\n try {\n await this.updateNeedsControlOf();\n const needsControlOf = this.state.needsControlOf;\n if (needsControlOf.length === 0)\n return addStatus({\n message: `Cannot acquire control on ${this.state.name} - no channels to control!`,\n variant: \"warning\",\n });\n\n this.writer = await client.telem.newWriter({\n start: TimeStamp.now(),\n channels: needsControlOf,\n controlSubject: { key: this.key, name: this.state.name },\n authorities: this.state.authority,\n });\n this.setState((p) => ({ ...p, status: \"acquired\" }));\n addStatus({\n message: `Acquired control on ${this.state.name}`,\n variant: \"success\",\n });\n } catch (e) {\n this.setState((p) => ({ ...p, status: \"failed\" }));\n addStatus({\n message: `${this.state.name} failed to acquire control: ${\n (e as Error).message\n }`,\n variant: \"error\",\n });\n }\n }\n\n private async release(): Promise<void> {\n await this.writer?.close();\n if (this.deleted) return;\n this.setState((p) => ({ ...p, status: \"released\" }));\n if (this.writer != null)\n this.internal.addStatus({\n message: `Released control on ${this.state.name}.`,\n variant: \"success\",\n });\n this.writer = undefined;\n }\n\n async set(frame: framer.CrudeFrame): Promise<void> {\n if (this.writer == null) await this.acquire();\n await this.writer?.write(frame);\n }\n\n async setAuthority(channels: channel.Keys, value: Authority): Promise<void> {\n if (this.writer == null) await this.acquire();\n await this.writer?.setAuthority(\n Object.fromEntries(channels.map((k) => [k, value])),\n );\n }\n\n async releaseAuthority(keys: channel.Keys): Promise<void> {\n if (this.writer == null) await this.acquire();\n await this.writer?.setAuthority(\n Object.fromEntries(keys.map((k) => [k, this.state.authority])),\n );\n }\n\n deleteTelem(t: AetherControllerTelem): void {\n this.registry.delete(t);\n void this.updateNeedsControlOf();\n }\n\n /** @implements telem.Factory to create telemetry that is bound to this controller. */\n create<T>(spec: telem.Spec): T | null {\n const f = (): T | null => {\n switch (spec.type) {\n case SetChannelValue.TYPE: {\n const sink = new SetChannelValue(this, spec.props);\n this.registry.set(sink, null);\n return sink as T;\n }\n case AuthoritySource.TYPE: {\n const source = new AuthoritySource(this, this.internal.stateProv, spec.props);\n this.registry.set(source, null);\n return source as T;\n }\n case AcquireChannelControl.TYPE: {\n const sink = new AcquireChannelControl(this, spec.props);\n return sink as T;\n }\n default:\n return null;\n }\n };\n const t = f();\n if (t != null) void this.updateNeedsControlOf();\n return t;\n }\n}\n\nexport const setChannelValuePropsZ = z.object({\n channel: z.number(),\n});\n\nexport type SetChannelValueProps = z.infer<typeof setChannelValuePropsZ>;\n\nexport class SetChannelValue\n extends AbstractSink<typeof setChannelValuePropsZ>\n implements telem.NumberSink, AetherControllerTelem\n{\n static readonly TYPE = \"controlled-numeric-telem-sink\";\n\n private readonly controller: Controller;\n schema = setChannelValuePropsZ;\n\n constructor(controller: Controller, props: unknown) {\n super(props);\n this.controller = controller;\n }\n\n invalidate(): void {}\n\n cleanup(): void {\n this.controller.deleteTelem(this);\n }\n\n async needsControlOf(client: Synnax): Promise<channel.Keys> {\n if (this.props.channel === 0) return [];\n const chan = await client.channels.retrieve(this.props.channel);\n const keys = [chan.key];\n if (chan.index !== 0) keys.push(chan.index);\n return keys;\n }\n\n async set(value: number): Promise<void> {\n const { client } = this.controller.internal;\n if (client == null) return;\n const ch = await client.channels.retrieve(this.props.channel);\n const index = await client.channels.retrieve(ch.index);\n const frame = new framer.Frame(\n [ch.key, index.key],\n [\n // @ts-expect-error - issues with BigInt vs number.\n new Series(new ch.dataType.Array([value])),\n // @ts-expect-error - issues with BigInt vs number.\n new Series(new index.dataType.Array([BigInt(TimeStamp.now())])),\n ],\n );\n await this.controller.set(frame);\n }\n}\n\nexport const setChannelValue = (props: SetChannelValueProps): telem.NumberSinkSPec => ({\n type: SetChannelValue.TYPE,\n props,\n variant: \"sink\",\n valueType: \"number\",\n});\n\nexport const acquireChannelControlPropsZ = z.object({\n authority: z.number().default(Authority.ABSOLUTE.valueOf()),\n channel: z.number(),\n});\n\nexport type AcquireChannelControlProps = z.infer<typeof acquireChannelControlPropsZ>;\n\nexport class AcquireChannelControl\n extends AbstractSink<typeof acquireChannelControlPropsZ>\n implements telem.BooleanSink, AetherControllerTelem\n{\n static readonly TYPE = \"acquire-channel-control\";\n private readonly controller: Controller;\n schema = acquireChannelControlPropsZ;\n\n constructor(controller: Controller, props: unknown) {\n super(props);\n this.controller = controller;\n }\n\n cleanup(): void {\n this.controller.deleteTelem(this);\n }\n\n async needsControlOf(client: Synnax): Promise<channel.Keys> {\n const chan = await client.channels.retrieve(this.props.channel);\n const keys = [chan.key];\n if (chan.index !== 0) keys.push(chan.index);\n return keys;\n }\n\n async set(acquire: boolean): Promise<void> {\n const { controller } = this;\n const { client } = controller.internal;\n if (client == null) return;\n const ch = await client.channels.retrieve(this.props.channel);\n const keys = [ch.key];\n if (ch.index !== 0) keys.push(ch.index);\n if (!acquire) await this.controller.releaseAuthority(keys);\n else await this.controller.setAuthority(keys, this.props.authority);\n }\n}\n\nexport const acquireChannelControl = (\n props: AcquireChannelControlProps,\n): telem.BooleanSinkSpec => ({\n type: AcquireChannelControl.TYPE,\n props,\n variant: \"sink\",\n valueType: \"boolean\",\n});\n\nexport const authoritySourceProps = z.object({\n channel: z.number(),\n});\n\nexport type AuthoritySourceProps = z.infer<typeof authoritySourceProps>;\n\nexport class AuthoritySource\n extends telem.AbstractSource<typeof authoritySourceProps>\n implements telem.StatusSource, AetherControllerTelem\n{\n static readonly TYPE = \"controlled-status-source\";\n private readonly prov: StateProvider;\n private valid = false;\n private stopListening?: Destructor;\n private readonly controller: Controller;\n schema = authoritySourceProps;\n\n constructor(controller: Controller, prov: StateProvider, props: unknown) {\n super(props);\n this.prov = prov;\n this.controller = controller;\n }\n\n async needsControlOf(): Promise<channel.Keys> {\n return [];\n }\n\n private maybeRevalidate(): void {\n if (this.valid) return;\n const { channel: ch } = this.props;\n this.stopListening?.();\n const filter = control.filterTransfersByChannelKey(ch);\n this.stopListening = this.prov.onChange((t) => {\n if (filter(t).length === 0) return;\n this.notify?.();\n });\n this.valid = true;\n }\n\n async value(): Promise<status.Spec> {\n this.maybeRevalidate();\n const state = this.prov.get(this.props.channel);\n const time = TimeStamp.now();\n\n if (state == null)\n return {\n key: this.controller.key,\n variant: \"disabled\",\n message: \"Uncontrolled\",\n time,\n };\n\n return {\n key: state.subject.key,\n variant: state.subject.key === this.controller.key ? \"success\" : \"error\",\n message: `Controlled by ${state.subject.name}`,\n time,\n data: { color: state.subjectColor, authority: state.authority },\n };\n }\n\n cleanup(): void {\n this.controller.deleteTelem(this);\n this.stopListening?.();\n }\n}\n\nexport const authoritySource = (\n props: AuthoritySourceProps,\n): telem.StatusSourceSpec => ({\n type: AuthoritySource.TYPE,\n props,\n variant: \"source\",\n valueType: \"status\",\n});\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { z } from \"zod\";\n\nimport { aether } from \"@/aether/aether\";\nimport { color } from \"@/color/core\";\nimport { status } from \"@/status/aether\";\nimport { telem } from \"@/telem/aether\";\n\nexport const indicatorStateZ = z.object({\n statusSource: telem.statusSourceSpecZ.optional().default(telem.noopStatusSourceSpec),\n colorSource: telem.colorSourceSpecZ.optional().default(telem.noopColorSourceSpec),\n status: status.specZ,\n color: color.Color.z.optional(),\n});\n\ninterface InternalState {\n statusSource: telem.StatusSource;\n colorSource: telem.ColorSource;\n}\n\nexport class Indicator extends aether.Leaf<typeof indicatorStateZ, InternalState> {\n static readonly TYPE = \"Indicator\";\n schema = indicatorStateZ;\n\n afterUpdate(): void {\n const { internal: i } = this;\n i.statusSource = telem.useSource(this.ctx, this.state.statusSource, i.statusSource);\n i.colorSource = telem.useSource(this.ctx, this.state.colorSource, i.colorSource);\n void this.updateState();\n i.statusSource.onChange(() => {\n void this.updateState();\n });\n i.colorSource.onChange(() => {\n void this.updateState();\n });\n }\n\n afterDelete(): void {\n this.internal.statusSource.cleanup?.();\n this.internal.colorSource.cleanup?.();\n }\n\n async render(): Promise<void> {}\n\n async updateState(): Promise<void> {\n const color = await this.internal.colorSource.value();\n const status = await this.internal.statusSource.value();\n if (color.equals(this.state.color) && status.message === this.state.status.message)\n return;\n this.setState((p) => ({ ...p, color, status }));\n }\n}\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type Destructor } from \"@synnaxlabs/x\";\nimport { z } from \"zod\";\n\nimport { aether } from \"@/aether/aether\";\nimport { status } from \"@/status/aether\";\nimport { telem } from \"@/telem/aether\";\n\nexport const chipStateZ = z.object({\n triggered: z.boolean(),\n status: status.specZ,\n sink: telem.booleanSinkSpecZ.optional().default(telem.noopBooleanSinkSpec),\n source: telem.statusSourceSpecZ.optional().default(telem.noopStatusSourceSpec),\n});\n\ninterface InternalState {\n source: telem.StatusSource;\n sink: telem.BooleanSink;\n stopListening: Destructor;\n}\n\nexport class Chip extends aether.Leaf<typeof chipStateZ, InternalState> {\n static readonly TYPE = \"Chip\";\n\n schema = chipStateZ;\n\n afterUpdate(): void {\n const { sink: sinkProps, source: sourceProps } = this.state;\n this.internal.source = telem.useSource(this.ctx, sourceProps, this.internal.source);\n this.internal.sink = telem.useSink(this.ctx, sinkProps, this.internal.sink);\n\n if (this.state.triggered && !this.prevState.triggered)\n this.internal.sink\n .set(this.state.status.variant !== \"success\")\n .catch(console.error);\n\n void (async () => {\n await this.updateEnabledState();\n this.internal.stopListening?.();\n this.internal.stopListening = this.internal.source.onChange(() => {\n void this.updateEnabledState();\n });\n })();\n }\n\n private async updateEnabledState(): Promise<void> {\n const nextStatus = await this.internal.source.value();\n if (!nextStatus.time.equals(this.state.status.time))\n this.setState((p) => ({ ...p, status: nextStatus, triggered: false }));\n }\n\n afterDelete(): void {\n this.internal.source.cleanup?.();\n this.internal.sink.cleanup?.();\n }\n\n render(): void {}\n}\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { control, channel } from \"@synnaxlabs/client\";\nimport { type Destructor } from \"@synnaxlabs/x\";\nimport { z } from \"zod\";\n\nimport { aether } from \"@/aether/aether\";\nimport { StateProvider, sugaredStateZ } from \"@/telem/control/aether/state\";\n\nexport const legendStateZ = z.object({\n needsControlOf: channel.keyZ.array(),\n states: sugaredStateZ.array(),\n});\n\ninterface InternalState {\n stateProv: StateProvider;\n disconnectStateProv?: Destructor;\n}\n\nexport class Legend extends aether.Leaf<typeof legendStateZ, InternalState> {\n static readonly TYPE = \"Legend\";\n schema = legendStateZ;\n\n afterUpdate(): void {\n const { internal: i } = this;\n i.stateProv = StateProvider.use(this.ctx);\n\n const keys = this.state.needsControlOf;\n i.disconnectStateProv?.();\n const filter = control.filterTransfersByChannelKey(...keys);\n const states = i.stateProv.get(keys);\n this.setState((p) => ({ ...p, states }));\n i.disconnectStateProv = i.stateProv.onChange((t) => {\n if (filter(t).length === 0) return;\n const states = i.stateProv.get(keys);\n this.setState((p) => ({ ...p, states }));\n });\n }\n\n afterDelete(): void {\n const { internal: i } = this;\n i.disconnectStateProv?.();\n }\n\n async render(): Promise<void> {}\n}\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type aether } from \"@/aether/aether\";\nimport { Chip } from \"@/telem/control/aether/chip\";\nimport { Controller } from \"@/telem/control/aether/controller\";\nimport { Indicator } from \"@/telem/control/aether/indicator\";\nimport { Legend } from \"@/telem/control/aether/legend\";\nimport { StateProvider } from \"@/telem/control/aether/state\";\n\nexport const REGISTRY: aether.ComponentRegistry = {\n [Controller.TYPE]: Controller,\n [StateProvider.TYPE]: StateProvider,\n [Indicator.TYPE]: Indicator,\n [Chip.TYPE]: Chip,\n [Legend.TYPE]: Legend,\n};\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { z } from \"zod\";\n\nimport { aether } from \"@/aether/aether\";\nimport { telem } from \"@/telem/aether\";\n\nexport const buttonStateZ = z.object({\n trigger: z.number(),\n sink: telem.booleanSinkSpecZ.optional().default(telem.noopBooleanSinkSpec),\n});\n\ninterface InternalState {\n sink: telem.BooleanSink;\n}\n\nexport class Button extends aether.Leaf<typeof buttonStateZ, InternalState> {\n static readonly TYPE = \"Button\";\n\n schema = buttonStateZ;\n\n afterUpdate(): void {\n const { internal: i } = this;\n i.sink = telem.useSink(this.ctx, this.state.sink, i.sink);\n\n if (this.state.trigger > this.prevState.trigger)\n this.internal.sink.set(true).catch(console.error);\n }\n\n render(): void {}\n\n afterDelete(): void {\n const { internal: i } = this;\n i.sink.cleanup?.();\n }\n}\n\nexport const REGISTRY: aether.ComponentRegistry = {\n [Button.TYPE]: Button,\n};\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { type Destructor } from \"@synnaxlabs/x\";\nimport { z } from \"zod\";\n\nimport { aether } from \"@/aether/aether\";\nimport { telem } from \"@/telem/aether\";\n\nexport const toggleStateZ = z.object({\n triggered: z.boolean(),\n enabled: z.boolean(),\n sink: telem.booleanSinkSpecZ.optional().default(telem.noopBooleanSinkSpec),\n source: telem.booleanSourceSpecZ.optional().default(telem.noopBooleanSourceSpec),\n});\n\ninterface InternalState {\n source: telem.BooleanSource;\n sink: telem.BooleanSink;\n stopListening: Destructor;\n}\n\nexport class Toggle extends aether.Leaf<typeof toggleStateZ, InternalState> {\n static readonly TYPE = \"Toggle\";\n\n schema = toggleStateZ;\n\n afterUpdate(): void {\n const { sink: sinkProps, source: sourceProps } = this.state;\n this.internal.source = telem.useSource(this.ctx, sourceProps, this.internal.source);\n this.internal.sink = telem.useSink(this.ctx, sinkProps, this.internal.sink);\n\n if (this.state.triggered && !this.prevState.triggered)\n this.internal.sink.set(!this.state.enabled).catch(console.error);\n\n void (async () => {\n await this.updateEnabledState();\n this.internal.stopListening?.();\n this.internal.stopListening = this.internal.source.onChange(() => {\n void this.updateEnabledState();\n });\n })();\n }\n\n private async updateEnabledState(): Promise<void> {\n const nextEnabled = await this.internal.source.value();\n if (nextEnabled !== this.state.enabled)\n this.setState((p) => ({ ...p, enabled: nextEnabled, triggered: false }));\n }\n\n afterDelete(): void {\n this.internal.source.cleanup?.();\n this.internal.sink.cleanup?.();\n }\n\n render(): void {}\n}\n\nexport const REGISTRY: aether.ComponentRegistry = {\n [Toggle.TYPE]: Toggle,\n};\n","// Copyright 2023 Synnax Labs, Inc.\n//\n// Use of this software is governed by the Business Source License included in the file\n// licenses/BSL.txt.\n//\n// As of the Change Date specified in that file, in accordance with the Business Source\n// License, use of this software will be governed by the Apache License, Version 2.0,\n// included in the file licenses/APL.txt.\n\nimport { box, scale, xy } from \"@synnaxlabs/x\";\nimport { z } from \"zod\";\n\nimport { aether } from \"@/aether/aether\";\nimport { color } from \"@/color/core\";\nimport { telem } from \"@/telem/aether\";\nimport { dimensions } from \"@/text/dimensions\";\nimport { theming } from \"@/theming/aether\";\nimport { fontString } from \"@/theming/core/fontString\";\nimport { type Element } from \"@/vis/diagram/aether/Diagram\";\nimport { render } from \"@/vis/render\";\n\nconst valueState = z.object({\n box: box.box,\n telem: telem.stringSourceSpecZ.optional().default(telem.noopStringSourceSpec),\n font: z.string().optional().default(\"\"),\n color: color.Color.z.optional().default(color.ZERO),\n precision: z.number().optional().default(2),\n width: z.number().optional().default(100),\n});\n\nexport interface ValueProps {\n scale?: scale.XY;\n}\n\ninterface InternalState {\n render: render.Context;\n telem: telem.StringSource;\n requestRender: render.RequestF | null;\n textColor: color.Color;\n}\n\nexport class Value\n extends aether.Leaf<typeof valueState, InternalState>\n implements Element\n{\n static readonly TYPE = \"value\";\n static readonly z = valueState;\n schema = Value.z;\n\n afterUpdate(): void {\n const { internal: i } = this;\n i.render = render.Context.use(this.ctx);\n const theme = theming.use(this.ctx);\n if (this.state.font.length === 0) this.state.font = fontString(theme, \"p\");\n if (this.state.color.isZero) this.internal.textColor = theme.colors.gray.l8;\n else i.textColor = this.state.color;\n i.telem = telem.useSource(this.ctx, this.state.telem, i.telem);\n this.internal.telem.onChange(() => this.requestRender());\n this.internal.requestRender = render.Controller.useOptionalRequest(this.ctx);\n this.requestRender();\n }\n\n afterDelete(): void {\n const { requestRender, telem, render: renderCtx } = this.internal;\n telem.cleanup?.();\n if (requestRender == null)\n renderCtx.erase(box.construct(this.state.box), xy.ZERO, \"lower2d\");\n else requestRender(render.REASON_LAYOUT);\n }\n\n private requestRender(): void {\n const { requestRender } = this.internal;\n if (requestRender != null) requestRender(render.REASON_LAYOUT);\n else void this.render({});\n }\n\n async render({ viewportScale = scale.XY.IDENTITY }): Promise<void> {\n const { render: renderCtx, telem } = this.internal;\n const b = box.construct(this.state.box);\n if (box.isZero(b)) return;\n const canvas = renderCtx.lower2d.applyScale(viewportScale);\n const value = await telem.value();\n canvas.font = this.state.font;\n const dims = dimensions(value, this.state.font, canvas);\n if (this.internal.requestRender == null)\n renderCtx.erase(box.construct(this.prevState.box));\n\n if (this.state.width < dims.width)\n this.setState((p) => ({ ...p, width: dims.width }));\n\n const labelPosition = xy.couple(\n xy.translate(\n box.topLeft(b),\n {\n x: box.width(b) / 2,\n y: box.height(b) / 2,\n },\n {\n y: dims.height / 2,\n x: -dims.width / 2,\n },\n ),\n );\n\n canvas.fillStyle = this.internal.textColor.hex;\n canvas.fillText(value, ...labelPosition);\n }\n}\n\nexport const REGISTRY: aether.ComponentRegistry = {\n [Value.TYPE]: Value,\n};\n","import { box, xy } from \"@synnaxlabs/x\";\nimport { type Box } from \"@synnaxlabs/x/dist/spatial/box\";\nimport { z } from \"zod\";\n\nimport { aether } from \"@/aether/aether\";\nimport { color } from \"@/aetherIndex\";\nimport { telem } from \"@/telem/aether\";\nimport { theming } from \"@/theming/aether\";\nimport { Draw2D } from \"@/vis/draw2d\";\nimport { render } from \"@/vis/render\";\n\nexport const tableStateZ = z.object({\n region: box.box,\n widths: z.array(z.number()),\n});\n\ninterface TableChildRenderProps {\n pos: xy.XY;\n widths: number[];\n}\n\ninterface TableChild extends aether.Component {\n height: () => Promise<number>;\n render: (props: TableChildRenderProps) => Promise<void>;\n}\n\ninterface InternalState {\n renderCtx: render.Context;\n}\n\nexport class Table extends aether.Composite<\n typeof tableStateZ,\n InternalState,\n TableChild\n> {\n static readonly TYPE = \"Table\";\n schema = tableStateZ;\n private readonly erase: render.Eraser = new render.Eraser();\n\n afterUpdate(): void {\n this.internal.renderCtx = render.Context.use(this.ctx);\n this.internal.renderCtx.loop.set({\n key: this.key,\n render: async () => await this.render(),\n canvases: [\"upper2d\"],\n priority: \"high\",\n });\n }\n\n async render(): Promise<render.Cleanup> {\n let accumulatedHeight = box.top(this.state.region);\n for (const c of this.children) {\n await c.render({\n pos: {\n x: box.left(this.state.region),\n y: accumulatedHeight,\n },\n widths: this.state.widths,\n });\n accumulatedHeight += await c.height();\n }\n return async ({ canvases }) => {\n this.erase.erase(\n this.internal.renderCtx,\n this.state.region,\n this.prevState?.region,\n xy.construct(10),\n canvases,\n );\n };\n }\n}\n\nexport const trStateZ = z.object({\n height: z.number(),\n});\n\ninterface TDRenderProps {\n box: Box;\n}\n\nexport interface TD extends aether.Component {\n render: (props: TDRenderProps) => Promise<void>;\n}\n\nexport class TR extends aether.Composite<typeof trStateZ, InternalState, TD> {\n static readonly TYPE = \"TR\";\n schema = trStateZ;\n\n async render({ pos, widths }: TableChildRenderProps): Promise<void> {\n const height = this.state.height;\n let accumulatedWidth = pos.x;\n const i = 0;\n for (const c of this.children) {\n await c.render({\n box: box.construct(accumulatedWidth, pos.y, widths[i], height),\n });\n accumulatedWidth += widths[i];\n }\n }\n\n async height(): Promise<number> {\n return this.state.height;\n }\n}\n\nexport const stringTDStateZ = z.object({\n stringSource: telem.stringSourceSpecZ.optional().default(telem.noopStringSourceSpec),\n level: z.string().optional().default(\"small\"),\n color: color.Color.z.optional().default(color.ZERO),\n});\n\ninterface InternalState {\n stringSource: telem.StringSource;\n draw: Draw2D;\n}\n\nexport class StringTD\n extends aether.Leaf<typeof stringTDStateZ, InternalState>\n implements TD\n{\n static readonly TYPE = \"StringTD\";\n schema = stringTDStateZ;\n\n afterUpdate(): void {\n const { internal: i } = this;\n i.stringSource = telem.useSource(this.ctx, this.state.stringSource, i.stringSource);\n i.draw = new Draw2D(render.Context.use(this.ctx).upper2d, theming.use(this.ctx));\n }\n\n async render({ box: b }: TDRenderProps): Promise<void> {\n const value = await this.internal.stringSource.value();\n this.internal.draw.drawTextInCenter({\n text: value,\n level: \"small\",\n box: b,\n });\n }\n}\n\nexport const REGISTRY: aether.ComponentRegistry = {\n [Table.TYPE]: Table,\n [TR.TYPE]: TR,\n [StringTD.TYPE]: StringTD,\n};\n"],"names":["Instrumentation","LOG_LEVELS","Logger","NOOP","NoopSpan","Tracer","_Span","logLevelKeyFiler","logThresholdFilter","z","observe","ValidationError","value","id","CONTEXT_KEY","deep","_b","_a","TimeStamp","color.ZERO","REGISTRY","factory","addSamples","now","TimeSpan","TimeRange","bounds","DataType","nativeTypedArray","Series","Rate","lower","b","status.variantZ","providerStateZ","alamos","aether.Composite","Provider","stateZ","synnaxPropsZ","Synnax","set","start","Proxy","QueryError","nanoid","cache","frame","cache.Cache","compare","client.Proxy","telem.factory","telem","UnexpectedError","synnax.use","alamos.useInstrumentation","client.Core","telem.setProvider","scale","xy","cleanup","box","clear.Program","canvas","dimensions","CSS","telem.seriesSourceSpecZ","color.Color","render.GLProgram","VERT_SHADER","FRAG_SHADER","color","render.Context","aether.Leaf","telem.useSource","render.Controller","render.REASON_DATA","render.REASON_LAYOUT","_d","_c","y","runtime","Canvas","spatial","location","direction","ascending","zero","number","ticks","format","linear","constant","rgb","colorRgb","i","string","date","identity","zoom","interpolate","interpolateValue","clamp","exponent","locale","formatPrefix","defaultLocale","formatLocale","interval","step","formats","pad","second","formatYear","tickFormat","timeWeek","timeSecond","scaleTime","scaleLinear","prettyParse","textDimensions","axis.axisStateZ","theming.use","axis.Canvas","fontString","throttle","p","autoBounds","font","render.REASON_TOOL","line.Line","rule.Rule","one","two","render.Eraser","status.useAggregate","tooltip.Tooltip","measure.Measure","canvases","Eraser","React","require$$0","useDebugValue","error","shim","shimModule","require$$1","useSyncExternalStoreWithSelector","selector","a","c","d","e","withSelectorModule","ReactExports","noop","parseTypenames","get","copy","document","select","Selection","datum","selection","attrRemove","attrRemoveNS","attrConstant","attrConstantNS","attrFunction","attrFunctionNS","styleRemove","styleConstant","styleFunction","textConstant","textFunction","create","window","sourceEvent","nopropagation","root","noevent","dispatch","defaultFilter","defaultTouchable","filter","drag","nodrag","container","event","touch","timeout","time","t0","t1","schedule","empty","interpolateTransform","children","inherit","style","remove","easeCubicInOut","wheelDelta","extent","dragEnable","createContext","useContext","useMemo","useRef","useState","useEffect","memo","ConnectionMode","PanOnScrollMode","SelectionMode","ConnectionLineType","MarkerType","Position","xDir","yDir","distance","handle","forwardRef","shallow","fitView","zoomIdentity","change","useCallback","getNodes","setNodes","setEdges","_e","edges","Symbol","containerStyle","component","control","unique","t","channel","telem.registerFactory","framer","Authority","telem.AbstractSource","telem.statusSourceSpecZ","telem.noopStatusSourceSpec","telem.colorSourceSpecZ","telem.noopColorSourceSpec","status.specZ","status","telem.booleanSinkSpecZ","telem.noopBooleanSinkSpec","telem.useSink","states","telem.booleanSourceSpecZ","telem.noopBooleanSourceSpec","telem.stringSourceSpecZ","telem.noopStringSourceSpec"],"mappings":"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","x_google_ignoreList":[11,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201]}