@synnaxlabs/pluto 0.12.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 (612) hide show
  1. package/LICENSE +4 -0
  2. package/README.md +34 -0
  3. package/dist/Center-ZAcURh-3.cjs +148 -0
  4. package/dist/Center-ZAcURh-3.cjs.map +1 -0
  5. package/dist/Center-gEKkAkdh.js +149 -0
  6. package/dist/Center-gEKkAkdh.js.map +1 -0
  7. package/dist/Header-5YX6FUn6.cjs +35 -0
  8. package/dist/Header-5YX6FUn6.cjs.map +1 -0
  9. package/dist/Header-7x6367IV.js +36 -0
  10. package/dist/Header-7x6367IV.js.map +1 -0
  11. package/dist/Item-EDdYN2NK.js +171 -0
  12. package/dist/Item-EDdYN2NK.js.map +1 -0
  13. package/dist/Item-HWzX7RK2.cjs +170 -0
  14. package/dist/Item-HWzX7RK2.cjs.map +1 -0
  15. package/dist/Item-owLU4Xop.js +97 -0
  16. package/dist/Item-owLU4Xop.js.map +1 -0
  17. package/dist/Item-rkSKzZoh.cjs +96 -0
  18. package/dist/Item-rkSKzZoh.cjs.map +1 -0
  19. package/dist/Keyboard-mE03PKwA.js +14 -0
  20. package/dist/Keyboard-mE03PKwA.js.map +1 -0
  21. package/dist/Keyboard-w372197S.cjs +13 -0
  22. package/dist/Keyboard-w372197S.cjs.map +1 -0
  23. package/dist/Link-laNlv47N.js +13 -0
  24. package/dist/Link-laNlv47N.js.map +1 -0
  25. package/dist/Link-xlTZan29.cjs +12 -0
  26. package/dist/Link-xlTZan29.cjs.map +1 -0
  27. package/dist/SelectLevel-bGb0dRXh.cjs +152 -0
  28. package/dist/SelectLevel-bGb0dRXh.cjs.map +1 -0
  29. package/dist/SelectLevel-cewIWtOv.js +153 -0
  30. package/dist/SelectLevel-cewIWtOv.js.map +1 -0
  31. package/dist/Selector-R3lL41_i.js +267 -0
  32. package/dist/Selector-R3lL41_i.js.map +1 -0
  33. package/dist/Selector-hQLSIYum.cjs +266 -0
  34. package/dist/Selector-hQLSIYum.cjs.map +1 -0
  35. package/dist/TimeRangeChip-XXXLMCrf.cjs +9316 -0
  36. package/dist/TimeRangeChip-XXXLMCrf.cjs.map +1 -0
  37. package/dist/TimeRangeChip-eDCX5pUC.js +9301 -0
  38. package/dist/TimeRangeChip-eDCX5pUC.js.map +1 -0
  39. package/dist/Toggle-eOKYw1OT.cjs +13664 -0
  40. package/dist/Toggle-eOKYw1OT.cjs.map +1 -0
  41. package/dist/Toggle-kLunfJtR.js +13665 -0
  42. package/dist/Toggle-kLunfJtR.js.map +1 -0
  43. package/dist/Video-Vpwp5ao1.js +12 -0
  44. package/dist/Video-Vpwp5ao1.js.map +1 -0
  45. package/dist/Video-a7BUKvzF.cjs +11 -0
  46. package/dist/Video-a7BUKvzF.cjs.map +1 -0
  47. package/dist/Video-k52RqIHf.cjs +2 -0
  48. package/dist/Video-k52RqIHf.cjs.map +1 -0
  49. package/dist/Video-w40geAFS.js +2 -0
  50. package/dist/Video-w40geAFS.js.map +1 -0
  51. package/dist/accordion/Accordion.d.ts +38 -0
  52. package/dist/accordion/Accordion.spec.d.ts +1 -0
  53. package/dist/accordion/Accordion.stories.d.ts +5 -0
  54. package/dist/accordion/index.d.ts +1 -0
  55. package/dist/aether/aether/aether.d.ts +247 -0
  56. package/dist/aether/aether/index.d.ts +2 -0
  57. package/dist/aether/aether/worker.spec.d.ts +8 -0
  58. package/dist/aether/index.d.ts +1 -0
  59. package/dist/aether/main.d.ts +96 -0
  60. package/dist/aether/main.spec.d.ts +8 -0
  61. package/dist/aether/message.d.ts +17 -0
  62. package/dist/aether.cjs +90 -0
  63. package/dist/aether.cjs.map +1 -0
  64. package/dist/aether.js +93 -0
  65. package/dist/aether.js.map +1 -0
  66. package/dist/aetherIndex.d.ts +14 -0
  67. package/dist/alamos/Provider.d.ts +12 -0
  68. package/dist/alamos/aether/alamos.d.ts +39 -0
  69. package/dist/alamos/aether/index.d.ts +1 -0
  70. package/dist/alamos/index.d.ts +1 -0
  71. package/dist/align/Center.d.ts +8 -0
  72. package/dist/align/Pack.d.ts +23 -0
  73. package/dist/align/Pack.stories.d.ts +8 -0
  74. package/dist/align/Space.d.ts +54 -0
  75. package/dist/align/Space.spec.d.ts +1 -0
  76. package/dist/align/Space.stories.d.ts +5 -0
  77. package/dist/align/external.d.ts +3 -0
  78. package/dist/align/index.d.ts +1 -0
  79. package/dist/align.cjs +10 -0
  80. package/dist/align.cjs.map +1 -0
  81. package/dist/align.js +10 -0
  82. package/dist/align.js.map +1 -0
  83. package/dist/button/Button.d.ts +46 -0
  84. package/dist/button/Button.spec.d.ts +1 -0
  85. package/dist/button/Button.stories.d.ts +9 -0
  86. package/dist/button/Icon.d.ts +19 -0
  87. package/dist/button/Link.d.ts +16 -0
  88. package/dist/button/Toggle.d.ts +34 -0
  89. package/dist/button/color.d.ts +3 -0
  90. package/dist/button/external.d.ts +4 -0
  91. package/dist/button/index.d.ts +1 -0
  92. package/dist/button.cjs +15 -0
  93. package/dist/button.cjs.map +1 -0
  94. package/dist/button.js +15 -0
  95. package/dist/button.js.map +1 -0
  96. package/dist/channel/AliasProvider.d.ts +24 -0
  97. package/dist/channel/ChannelSelect.stories.d.ts +7 -0
  98. package/dist/channel/LinePlot.d.ts +72 -0
  99. package/dist/channel/LinePlot.stories.d.ts +6 -0
  100. package/dist/channel/Select.d.ts +11 -0
  101. package/dist/channel/external.d.ts +3 -0
  102. package/dist/channel/index.d.ts +1 -0
  103. package/dist/channel/types.d.ts +1 -0
  104. package/dist/color/Picker/Picker.d.ts +6 -0
  105. package/dist/color/Picker/Picker.stories.d.ts +6 -0
  106. package/dist/color/Picker/index.d.ts +1 -0
  107. package/dist/color/Swatch/Swatch.d.ts +8 -0
  108. package/dist/color/Swatch/index.d.ts +1 -0
  109. package/dist/color/core/color.d.ts +128 -0
  110. package/dist/color/core/color.spec.d.ts +1 -0
  111. package/dist/color/core/index.d.ts +2 -0
  112. package/dist/color/external.d.ts +4 -0
  113. package/dist/color/index.d.ts +1 -0
  114. package/dist/component-joFaJiQW.cjs +24719 -0
  115. package/dist/component-joFaJiQW.cjs.map +1 -0
  116. package/dist/component-k78Jq9I7.js +24720 -0
  117. package/dist/component-k78Jq9I7.js.map +1 -0
  118. package/dist/css/bem.d.ts +14 -0
  119. package/dist/css/bem.spec.d.ts +1 -0
  120. package/dist/css/color.d.ts +10 -0
  121. package/dist/css/css.d.ts +27 -0
  122. package/dist/css/grid.d.ts +14 -0
  123. package/dist/css/index.d.ts +4 -0
  124. package/dist/css/units.d.ts +1 -0
  125. package/dist/css/vars.d.ts +1 -0
  126. package/dist/css-NTD4Xm8x.js +9206 -0
  127. package/dist/css-NTD4Xm8x.js.map +1 -0
  128. package/dist/css-V3VUT_Js.cjs +9204 -0
  129. package/dist/css-V3VUT_Js.cjs.map +1 -0
  130. package/dist/cursor/cursor.d.ts +3 -0
  131. package/dist/cursor/index.d.ts +1 -0
  132. package/dist/dimensions-Sej0Zly9.cjs +26 -0
  133. package/dist/dimensions-Sej0Zly9.cjs.map +1 -0
  134. package/dist/dimensions-guJ5PHmb.js +27 -0
  135. package/dist/dimensions-guJ5PHmb.js.map +1 -0
  136. package/dist/divider/Divider.d.ts +14 -0
  137. package/dist/divider/index.d.ts +2 -0
  138. package/dist/dropdown/Dropdown.d.ts +49 -0
  139. package/dist/dropdown/Dropdown.spec.d.ts +1 -0
  140. package/dist/dropdown/Dropdown.stories.d.ts +5 -0
  141. package/dist/dropdown/index.d.ts +2 -0
  142. package/dist/dropdown.cjs +13 -0
  143. package/dist/dropdown.cjs.map +1 -0
  144. package/dist/dropdown.js +13 -0
  145. package/dist/dropdown.js.map +1 -0
  146. package/dist/external-2Aicsb3l.js +88 -0
  147. package/dist/external-2Aicsb3l.js.map +1 -0
  148. package/dist/external-9Ncn2J9B.cjs +93 -0
  149. package/dist/external-9Ncn2J9B.cjs.map +1 -0
  150. package/dist/external-9RCzxzgZ.js +30 -0
  151. package/dist/external-9RCzxzgZ.js.map +1 -0
  152. package/dist/external-9pS8-DvV.js +15 -0
  153. package/dist/external-9pS8-DvV.js.map +1 -0
  154. package/dist/external-KxlyA74C.js +20 -0
  155. package/dist/external-KxlyA74C.js.map +1 -0
  156. package/dist/external-OSLzuRs1.cjs +14 -0
  157. package/dist/external-OSLzuRs1.cjs.map +1 -0
  158. package/dist/external-PS3nzqUn.cjs +23 -0
  159. package/dist/external-PS3nzqUn.cjs.map +1 -0
  160. package/dist/external-QRmqSjV0.js +18 -0
  161. package/dist/external-QRmqSjV0.js.map +1 -0
  162. package/dist/external-QuVTCnGl.js +71 -0
  163. package/dist/external-QuVTCnGl.js.map +1 -0
  164. package/dist/external-U5HRPaDI.cjs +17 -0
  165. package/dist/external-U5HRPaDI.cjs.map +1 -0
  166. package/dist/external-_CtRDtih.js +17 -0
  167. package/dist/external-_CtRDtih.js.map +1 -0
  168. package/dist/external-eQU48hM4.cjs +87 -0
  169. package/dist/external-eQU48hM4.cjs.map +1 -0
  170. package/dist/external-kbDFnfuk.js +24 -0
  171. package/dist/external-kbDFnfuk.js.map +1 -0
  172. package/dist/external-oX1JmOFf.js +17 -0
  173. package/dist/external-oX1JmOFf.js.map +1 -0
  174. package/dist/external-oZe6tF4A.cjs +14 -0
  175. package/dist/external-oZe6tF4A.cjs.map +1 -0
  176. package/dist/external-tVcmKSsT.cjs +19 -0
  177. package/dist/external-tVcmKSsT.cjs.map +1 -0
  178. package/dist/external-up1sE3F6.js +94 -0
  179. package/dist/external-up1sE3F6.js.map +1 -0
  180. package/dist/external-uvx0b-Jw.cjs +16 -0
  181. package/dist/external-uvx0b-Jw.cjs.map +1 -0
  182. package/dist/external-vXBQOmKv.js +15 -0
  183. package/dist/external-vXBQOmKv.js.map +1 -0
  184. package/dist/external-yiqRIIvW.cjs +16 -0
  185. package/dist/external-yiqRIIvW.cjs.map +1 -0
  186. package/dist/external-zBiIxeDG.cjs +70 -0
  187. package/dist/external-zBiIxeDG.cjs.map +1 -0
  188. package/dist/external-zw9fckWT.cjs +29 -0
  189. package/dist/external-zw9fckWT.cjs.map +1 -0
  190. package/dist/font-t7KoGNFX.js +17 -0
  191. package/dist/font-t7KoGNFX.js.map +1 -0
  192. package/dist/font-wlgaMRYN.cjs +16 -0
  193. package/dist/font-wlgaMRYN.cjs.map +1 -0
  194. package/dist/fontString-RKvYIr5H.js +13 -0
  195. package/dist/fontString-RKvYIr5H.js.map +1 -0
  196. package/dist/fontString-i24UxKCQ.cjs +12 -0
  197. package/dist/fontString-i24UxKCQ.cjs.map +1 -0
  198. package/dist/generic/Generic.d.ts +13 -0
  199. package/dist/generic/index.d.ts +1 -0
  200. package/dist/haul/Haul.d.ts +60 -0
  201. package/dist/haul/index.d.ts +1 -0
  202. package/dist/header/Actions.d.ts +15 -0
  203. package/dist/header/ButtonTitle.d.ts +13 -0
  204. package/dist/header/Header.d.ts +28 -0
  205. package/dist/header/Header.spec.d.ts +1 -0
  206. package/dist/header/Header.stories.d.ts +6 -0
  207. package/dist/header/Title.d.ts +13 -0
  208. package/dist/header/external.d.ts +4 -0
  209. package/dist/header/index.d.ts +1 -0
  210. package/dist/header.cjs +15 -0
  211. package/dist/header.cjs.map +1 -0
  212. package/dist/header.js +15 -0
  213. package/dist/header.js.map +1 -0
  214. package/dist/hooks/effect.d.ts +14 -0
  215. package/dist/hooks/index.d.ts +8 -0
  216. package/dist/hooks/ref.d.ts +31 -0
  217. package/dist/hooks/useClickOutside.d.ts +9 -0
  218. package/dist/hooks/useCursorDrag/index.d.ts +2 -0
  219. package/dist/hooks/useCursorDrag/types.d.ts +5 -0
  220. package/dist/hooks/useCursorDrag/useCursorDrag.d.ts +10 -0
  221. package/dist/hooks/useCursorDrag/useVirtualCursorDrag.d.ts +1 -0
  222. package/dist/hooks/useCursorDrag/useVirtualCursorDragWebKit.d.ts +2 -0
  223. package/dist/hooks/useCursorDrag/useVirtualCursorDragWebView.d.ts +2 -0
  224. package/dist/hooks/useDebouncedCallback.d.ts +2 -0
  225. package/dist/hooks/useFilter.d.ts +21 -0
  226. package/dist/hooks/useResize.d.ts +24 -0
  227. package/dist/hooks/useSelectMultiple.d.ts +51 -0
  228. package/dist/hooks/useTransforms.d.ts +15 -0
  229. package/dist/hooks/useUniqueKey.d.ts +6 -0
  230. package/dist/index.cjs +1175 -0
  231. package/dist/index.cjs.map +1 -0
  232. package/dist/index.d.ts +51 -0
  233. package/dist/index.js +1182 -0
  234. package/dist/index.js.map +1 -0
  235. package/dist/input/Date.d.ts +28 -0
  236. package/dist/input/DragButton.d.ts +14 -0
  237. package/dist/input/HelpText.d.ts +19 -0
  238. package/dist/input/Input.spec.d.ts +1 -0
  239. package/dist/input/Input.stories.d.ts +9 -0
  240. package/dist/input/Item.d.ts +23 -0
  241. package/dist/input/Label.d.ts +13 -0
  242. package/dist/input/Number.d.ts +30 -0
  243. package/dist/input/Switch.d.ts +15 -0
  244. package/dist/input/Text.d.ts +18 -0
  245. package/dist/input/Time.d.ts +30 -0
  246. package/dist/input/Time.spec.d.ts +1 -0
  247. package/dist/input/external.d.ts +10 -0
  248. package/dist/input/index.d.ts +1 -0
  249. package/dist/input/types.d.ts +19 -0
  250. package/dist/input.cjs +15 -0
  251. package/dist/input.cjs.map +1 -0
  252. package/dist/input.js +15 -0
  253. package/dist/input.js.map +1 -0
  254. package/dist/jsx-runtime-N1ikfypN.cjs +931 -0
  255. package/dist/jsx-runtime-N1ikfypN.cjs.map +1 -0
  256. package/dist/jsx-runtime-rX5tAIG2.js +932 -0
  257. package/dist/jsx-runtime-rX5tAIG2.js.map +1 -0
  258. package/dist/list/Column.d.ts +24 -0
  259. package/dist/list/Context.d.ts +45 -0
  260. package/dist/list/Core.d.ts +40 -0
  261. package/dist/list/Filter.d.ts +22 -0
  262. package/dist/list/KeyHover.d.ts +4 -0
  263. package/dist/list/List.d.ts +19 -0
  264. package/dist/list/List.spec.d.ts +1 -0
  265. package/dist/list/List.stories.d.ts +7 -0
  266. package/dist/list/Search.d.ts +12 -0
  267. package/dist/list/Selector.d.ts +11 -0
  268. package/dist/list/external.d.ts +9 -0
  269. package/dist/list/index.d.ts +1 -0
  270. package/dist/list/types.d.ts +38 -0
  271. package/dist/list.cjs +27 -0
  272. package/dist/list.cjs.map +1 -0
  273. package/dist/list.js +27 -0
  274. package/dist/list.js.map +1 -0
  275. package/dist/memo/index.d.ts +2 -0
  276. package/dist/memo/proxyMemo.d.ts +2 -0
  277. package/dist/memo/useMemoCompare.d.ts +5 -0
  278. package/dist/menu/ContextMenu.d.ts +78 -0
  279. package/dist/menu/Item.d.ts +35 -0
  280. package/dist/menu/Menu.d.ts +26 -0
  281. package/dist/menu/external.d.ts +3 -0
  282. package/dist/menu/index.d.ts +1 -0
  283. package/dist/menu.cjs +16 -0
  284. package/dist/menu.cjs.map +1 -0
  285. package/dist/menu.js +16 -0
  286. package/dist/menu.js.map +1 -0
  287. package/dist/mock/MockGLBufferController.d.ts +20 -0
  288. package/dist/mock/setuptests.d.ts +1 -0
  289. package/dist/mosaic/Mosaic.d.ts +35 -0
  290. package/dist/mosaic/Mosaic.spec.d.ts +1 -0
  291. package/dist/mosaic/Mosaic.stories.d.ts +5 -0
  292. package/dist/mosaic/external.d.ts +4 -0
  293. package/dist/mosaic/index.d.ts +1 -0
  294. package/dist/mosaic/tree.d.ts +70 -0
  295. package/dist/mosaic/types.d.ts +50 -0
  296. package/dist/mosaic/use.d.ts +24 -0
  297. package/dist/nav/Bar.d.ts +25 -0
  298. package/dist/nav/Drawer.d.ts +24 -0
  299. package/dist/nav/Nav.spec.d.ts +1 -0
  300. package/dist/nav/Nav.stories.d.ts +6 -0
  301. package/dist/nav/external.d.ts +2 -0
  302. package/dist/nav/index.d.ts +1 -0
  303. package/dist/os/Controls/Controls.d.ts +7 -0
  304. package/dist/os/Controls/Controls.stories.d.ts +6 -0
  305. package/dist/os/Controls/Mac.d.ts +8 -0
  306. package/dist/os/Controls/Windows.d.ts +3 -0
  307. package/dist/os/Controls/index.d.ts +3 -0
  308. package/dist/os/Controls/types.d.ts +12 -0
  309. package/dist/os/external.d.ts +2 -0
  310. package/dist/os/index.d.ts +1 -0
  311. package/dist/os/use.d.ts +2 -0
  312. package/dist/pluto/Pluto.d.ts +18 -0
  313. package/dist/pluto/aether/ pluto.d.ts +1 -0
  314. package/dist/pluto/aether/index.d.ts +1 -0
  315. package/dist/pluto/defaultWorker.d.ts +1 -0
  316. package/dist/pluto/index.d.ts +1 -0
  317. package/dist/ranger/SelectLabel.d.ts +6 -0
  318. package/dist/ranger/TimeRangeChip.d.ts +6 -0
  319. package/dist/ranger/TimeRangeChip.stories.d.ts +6 -0
  320. package/dist/ranger/external.d.ts +2 -0
  321. package/dist/ranger/index.d.ts +1 -0
  322. package/dist/resize/Core.d.ts +10 -0
  323. package/dist/resize/Multiple.d.ts +63 -0
  324. package/dist/resize/Single.d.ts +23 -0
  325. package/dist/resize/Single.spec.d.ts +1 -0
  326. package/dist/resize/Single.stories.d.ts +6 -0
  327. package/dist/resize/external.d.ts +3 -0
  328. package/dist/resize/index.d.ts +1 -0
  329. package/dist/select/Button.d.ts +18 -0
  330. package/dist/select/ClearButton.d.ts +3 -0
  331. package/dist/select/Direction.d.ts +11 -0
  332. package/dist/select/List.d.ts +7 -0
  333. package/dist/select/Multiple.d.ts +45 -0
  334. package/dist/select/Select.spec.d.ts +1 -0
  335. package/dist/select/Select.stories.d.ts +14 -0
  336. package/dist/select/Single.d.ts +37 -0
  337. package/dist/select/external.d.ts +4 -0
  338. package/dist/select/index.d.ts +1 -0
  339. package/dist/state/index.d.ts +1 -0
  340. package/dist/state/state.d.ts +27 -0
  341. package/dist/status/Aggregator.d.ts +27 -0
  342. package/dist/status/Circle.d.ts +6 -0
  343. package/dist/status/Text.d.ts +21 -0
  344. package/dist/status/aether/aggregator.d.ts +86 -0
  345. package/dist/status/aether/external.d.ts +2 -0
  346. package/dist/status/aether/index.d.ts +1 -0
  347. package/dist/status/aether/types.d.ts +26 -0
  348. package/dist/status/colors.d.ts +2 -0
  349. package/dist/status/external.d.ts +4 -0
  350. package/dist/status/index.d.ts +1 -0
  351. package/dist/style.css +3119 -0
  352. package/dist/synnax/Provider.d.ts +10 -0
  353. package/dist/synnax/aether/index.d.ts +1 -0
  354. package/dist/synnax/aether/provider.d.ts +225 -0
  355. package/dist/synnax/index.d.ts +1 -0
  356. package/dist/table-8MFXzE4C.js +13664 -0
  357. package/dist/table-8MFXzE4C.js.map +1 -0
  358. package/dist/table-VNkSG_Cj.cjs +13661 -0
  359. package/dist/table-VNkSG_Cj.cjs.map +1 -0
  360. package/dist/tabs/Selector.d.ts +23 -0
  361. package/dist/tabs/Tabs.d.ts +40 -0
  362. package/dist/tabs/Tabs.spec.d.ts +1 -0
  363. package/dist/tabs/Tabs.stories.d.ts +5 -0
  364. package/dist/tabs/external.d.ts +2 -0
  365. package/dist/tabs/index.d.ts +1 -0
  366. package/dist/tabs.cjs +15 -0
  367. package/dist/tabs.cjs.map +1 -0
  368. package/dist/tabs.js +15 -0
  369. package/dist/tabs.js.map +1 -0
  370. package/dist/tag/Tag.d.ts +12 -0
  371. package/dist/tag/Tag.spec.d.ts +1 -0
  372. package/dist/tag/Tag.stories.d.ts +5 -0
  373. package/dist/tag/index.d.ts +1 -0
  374. package/dist/telem/Pipeline.d.ts +2 -0
  375. package/dist/telem/Provider.d.ts +6 -0
  376. package/dist/telem/aether/context.d.ts +16 -0
  377. package/dist/telem/aether/convertSeries.d.ts +9 -0
  378. package/dist/telem/aether/external.d.ts +9 -0
  379. package/dist/telem/aether/factory.d.ts +14 -0
  380. package/dist/telem/aether/index.d.ts +1 -0
  381. package/dist/telem/aether/noop.d.ts +12 -0
  382. package/dist/telem/aether/pipeline.d.ts +263 -0
  383. package/dist/telem/aether/provider.d.ts +24 -0
  384. package/dist/telem/aether/remote.d.ts +154 -0
  385. package/dist/telem/aether/remote.spec.d.ts +1 -0
  386. package/dist/telem/aether/static.d.ts +98 -0
  387. package/dist/telem/aether/telem.d.ts +376 -0
  388. package/dist/telem/aether/telem.spec.d.ts +1 -0
  389. package/dist/telem/aether/transformers.d.ts +197 -0
  390. package/dist/telem/client/cache/cache.d.ts +14 -0
  391. package/dist/telem/client/cache/dynamic.d.ts +32 -0
  392. package/dist/telem/client/cache/dynamic.spec.d.ts +1 -0
  393. package/dist/telem/client/cache/external.d.ts +1 -0
  394. package/dist/telem/client/cache/index.d.ts +2 -0
  395. package/dist/telem/client/cache/static.d.ts +31 -0
  396. package/dist/telem/client/cache/static.spec.d.ts +1 -0
  397. package/dist/telem/client/client.d.ts +104 -0
  398. package/dist/telem/client/index.d.ts +1 -0
  399. package/dist/telem/control/Chip.d.ts +8 -0
  400. package/dist/telem/control/Controller.d.ts +15 -0
  401. package/dist/telem/control/Indicator.d.ts +8 -0
  402. package/dist/telem/control/Legend.d.ts +7 -0
  403. package/dist/telem/control/StateProvider.d.ts +8 -0
  404. package/dist/telem/control/aether/chip.d.ts +229 -0
  405. package/dist/telem/control/aether/controller.d.ts +166 -0
  406. package/dist/telem/control/aether/external.d.ts +6 -0
  407. package/dist/telem/control/aether/index.d.ts +1 -0
  408. package/dist/telem/control/aether/indicator.d.ts +248 -0
  409. package/dist/telem/control/aether/legend.d.ts +216 -0
  410. package/dist/telem/control/aether/registry.d.ts +2 -0
  411. package/dist/telem/control/aether/state.d.ts +113 -0
  412. package/dist/telem/control/external.d.ts +6 -0
  413. package/dist/telem/control/index.d.ts +1 -0
  414. package/dist/telem/index.d.ts +1 -0
  415. package/dist/testutil/dom.d.ts +2 -0
  416. package/dist/text/DateTime.d.ts +19 -0
  417. package/dist/text/Editable.d.ts +15 -0
  418. package/dist/text/Keyboard.d.ts +5 -0
  419. package/dist/text/Link.d.ts +17 -0
  420. package/dist/text/SelectLevel.d.ts +11 -0
  421. package/dist/text/Text.d.ts +12 -0
  422. package/dist/text/Text.spec.d.ts +1 -0
  423. package/dist/text/Text.stories.d.ts +8 -0
  424. package/dist/text/WithIcon.d.ts +13 -0
  425. package/dist/text/dimensions.d.ts +2 -0
  426. package/dist/text/external.d.ts +10 -0
  427. package/dist/text/index.d.ts +1 -0
  428. package/dist/text/symbols.d.ts +5 -0
  429. package/dist/text/types.d.ts +24 -0
  430. package/dist/text.cjs +17 -0
  431. package/dist/text.cjs.map +1 -0
  432. package/dist/text.js +17 -0
  433. package/dist/text.js.map +1 -0
  434. package/dist/theming/aether/external.d.ts +3 -0
  435. package/dist/theming/aether/index.d.ts +2 -0
  436. package/dist/theming/aether/provider.d.ts +9808 -0
  437. package/dist/theming/context.d.ts +22 -0
  438. package/dist/theming/core/fontString.d.ts +4 -0
  439. package/dist/theming/core/theme.d.ts +3830 -0
  440. package/dist/theming/css.d.ts +2 -0
  441. package/dist/theming/external.d.ts +5 -0
  442. package/dist/theming/font.d.ts +8 -0
  443. package/dist/theming/index.d.ts +1 -0
  444. package/dist/theming/theming.spec.d.ts +1 -0
  445. package/dist/theming.cjs +16 -0
  446. package/dist/theming.cjs.map +1 -0
  447. package/dist/theming.js +16 -0
  448. package/dist/theming.js.map +1 -0
  449. package/dist/tooltip/Config.d.ts +29 -0
  450. package/dist/tooltip/Dialog.d.ts +36 -0
  451. package/dist/tooltip/Tooltip.stories.d.ts +5 -0
  452. package/dist/tooltip/external.d.ts +3 -0
  453. package/dist/tooltip/index.d.ts +1 -0
  454. package/dist/tooltip/wrap.d.ts +29 -0
  455. package/dist/tree/Tree.d.ts +73 -0
  456. package/dist/tree/Tree.stories.d.ts +5 -0
  457. package/dist/tree/index.d.ts +1 -0
  458. package/dist/tree.cjs +26 -0
  459. package/dist/tree.cjs.map +1 -0
  460. package/dist/tree.js +26 -0
  461. package/dist/tree.js.map +1 -0
  462. package/dist/triggers/Provider.d.ts +13 -0
  463. package/dist/triggers/Status.d.ts +5 -0
  464. package/dist/triggers/Text.d.ts +7 -0
  465. package/dist/triggers/Triggers.spec.d.ts +1 -0
  466. package/dist/triggers/Triggers.stories.d.ts +6 -0
  467. package/dist/triggers/external.d.ts +6 -0
  468. package/dist/triggers/hooks.d.ts +25 -0
  469. package/dist/triggers/index.d.ts +1 -0
  470. package/dist/triggers/triggers.d.ts +130 -0
  471. package/dist/triggers/useDrag.d.ts +17 -0
  472. package/dist/triggers.cjs +16 -0
  473. package/dist/triggers.cjs.map +1 -0
  474. package/dist/triggers.js +16 -0
  475. package/dist/triggers.js.map +1 -0
  476. package/dist/useDrag-KRQ7DTg1.cjs +48 -0
  477. package/dist/useDrag-KRQ7DTg1.cjs.map +1 -0
  478. package/dist/useDrag-rQt5hv4R.js +49 -0
  479. package/dist/useDrag-rQt5hv4R.js.map +1 -0
  480. package/dist/util/case.d.ts +1 -0
  481. package/dist/util/children.d.ts +3 -0
  482. package/dist/util/component.d.ts +5 -0
  483. package/dist/util/event.d.ts +6 -0
  484. package/dist/util/renderProp.d.ts +7 -0
  485. package/dist/util/zod.d.ts +2 -0
  486. package/dist/video/Video.d.ts +5 -0
  487. package/dist/video/Video.stories.d.ts +5 -0
  488. package/dist/video/index.d.ts +1 -0
  489. package/dist/video.cjs +10 -0
  490. package/dist/video.cjs.map +1 -0
  491. package/dist/video.js +10 -0
  492. package/dist/video.js.map +1 -0
  493. package/dist/viewport/Mask.d.ts +7 -0
  494. package/dist/viewport/SelectMode.d.ts +8 -0
  495. package/dist/viewport/Viewport.stories.d.ts +6 -0
  496. package/dist/viewport/external.d.ts +3 -0
  497. package/dist/viewport/index.d.ts +1 -0
  498. package/dist/viewport/use.d.ts +35 -0
  499. package/dist/vis/axis/axis.d.ts +97 -0
  500. package/dist/vis/axis/canvas.d.ts +18 -0
  501. package/dist/vis/axis/external.d.ts +3 -0
  502. package/dist/vis/axis/index.d.ts +1 -0
  503. package/dist/vis/axis/ticks.d.ts +33 -0
  504. package/dist/vis/button/aether/button.d.ts +94 -0
  505. package/dist/vis/button/aether/index.d.ts +1 -0
  506. package/dist/vis/button/index.d.ts +1 -0
  507. package/dist/vis/button/use.d.ts +9 -0
  508. package/dist/vis/canvas/Canvas.d.ts +11 -0
  509. package/dist/vis/canvas/aether/canvas.d.ts +230 -0
  510. package/dist/vis/canvas/aether/index.d.ts +1 -0
  511. package/dist/vis/canvas/index.d.ts +1 -0
  512. package/dist/vis/diagram/Diagram.d.ts +52 -0
  513. package/dist/vis/diagram/Diagram.stories.d.ts +5 -0
  514. package/dist/vis/diagram/aether/Diagram.d.ts +587 -0
  515. package/dist/vis/diagram/aether/index.d.ts +1 -0
  516. package/dist/vis/diagram/align.d.ts +3 -0
  517. package/dist/vis/diagram/align.spec.d.ts +1 -0
  518. package/dist/vis/diagram/edge/Edge.d.ts +14 -0
  519. package/dist/vis/diagram/edge/connector/connector.d.ts +59 -0
  520. package/dist/vis/diagram/edge/connector/connector.spec.d.ts +1 -0
  521. package/dist/vis/diagram/edge/connector/index.d.ts +1 -0
  522. package/dist/vis/diagram/edge/index.d.ts +1 -0
  523. package/dist/vis/diagram/external.d.ts +4 -0
  524. package/dist/vis/diagram/index.d.ts +1 -0
  525. package/dist/vis/diagram/types.d.ts +71 -0
  526. package/dist/vis/diagram/util.d.ts +21 -0
  527. package/dist/vis/draw2d/canvas.d.ts +106 -0
  528. package/dist/vis/draw2d/index.d.ts +60 -0
  529. package/dist/vis/eraser/aether/eraser.d.ts +194 -0
  530. package/dist/vis/eraser/aether/index.d.ts +1 -0
  531. package/dist/vis/eraser/index.d.ts +1 -0
  532. package/dist/vis/eraser/use.d.ts +11 -0
  533. package/dist/vis/legend/Container.d.ts +11 -0
  534. package/dist/vis/legend/Simple.d.ts +16 -0
  535. package/dist/vis/legend/external.d.ts +2 -0
  536. package/dist/vis/legend/index.d.ts +1 -0
  537. package/dist/vis/line/Line.d.ts +8 -0
  538. package/dist/vis/line/aether/index.d.ts +1 -0
  539. package/dist/vis/line/aether/line.d.ts +184 -0
  540. package/dist/vis/line/index.d.ts +1 -0
  541. package/dist/vis/lineplot/Axis.d.ts +17 -0
  542. package/dist/vis/lineplot/Legend.d.ts +7 -0
  543. package/dist/vis/lineplot/Line.d.ts +7 -0
  544. package/dist/vis/lineplot/LinePlot.d.ts +32 -0
  545. package/dist/vis/lineplot/LinePlot.stories.d.ts +5 -0
  546. package/dist/vis/lineplot/Title.d.ts +4 -0
  547. package/dist/vis/lineplot/Viewport.d.ts +6 -0
  548. package/dist/vis/lineplot/aether/LinePlot.d.ts +622 -0
  549. package/dist/vis/lineplot/aether/XAxis.d.ts +211 -0
  550. package/dist/vis/lineplot/aether/YAxis.d.ts +218 -0
  551. package/dist/vis/lineplot/aether/axis.d.ts +144 -0
  552. package/dist/vis/lineplot/aether/external.d.ts +3 -0
  553. package/dist/vis/lineplot/aether/grid.d.ts +22 -0
  554. package/dist/vis/lineplot/aether/index.d.ts +2 -0
  555. package/dist/vis/lineplot/external.d.ts +6 -0
  556. package/dist/vis/lineplot/index.d.ts +1 -0
  557. package/dist/vis/lineplot/tooltip/Tooltip.d.ts +8 -0
  558. package/dist/vis/lineplot/tooltip/aether/index.d.ts +1 -0
  559. package/dist/vis/lineplot/tooltip/aether/tooltip.d.ts +185 -0
  560. package/dist/vis/lineplot/tooltip/index.d.ts +1 -0
  561. package/dist/vis/measure/Measure.d.ts +6 -0
  562. package/dist/vis/measure/aether/index.d.ts +1 -0
  563. package/dist/vis/measure/aether/measure.d.ts +307 -0
  564. package/dist/vis/measure/index.d.ts +1 -0
  565. package/dist/vis/pid/Forms.d.ts +32 -0
  566. package/dist/vis/pid/Labeled.d.ts +15 -0
  567. package/dist/vis/pid/SelectOrientation.d.ts +15 -0
  568. package/dist/vis/pid/SelectOrientation.stories.d.ts +5 -0
  569. package/dist/vis/pid/Symbols.d.ts +205 -0
  570. package/dist/vis/pid/index.d.ts +1 -0
  571. package/dist/vis/pid/primitives/Primitives.d.ts +98 -0
  572. package/dist/vis/pid/primitives/Primitives.stories.d.ts +5 -0
  573. package/dist/vis/pid/primitives/index.d.ts +1 -0
  574. package/dist/vis/pid/registry.d.ts +17 -0
  575. package/dist/vis/render/GLProgram.d.ts +44 -0
  576. package/dist/vis/render/clear/index.d.ts +1 -0
  577. package/dist/vis/render/clear/program.d.ts +14 -0
  578. package/dist/vis/render/context.d.ts +61 -0
  579. package/dist/vis/render/controller.d.ts +14 -0
  580. package/dist/vis/render/eraser.d.ts +19 -0
  581. package/dist/vis/render/external.d.ts +5 -0
  582. package/dist/vis/render/index.d.ts +1 -0
  583. package/dist/vis/render/loop.d.ts +73 -0
  584. package/dist/vis/rule/Rule.d.ts +12 -0
  585. package/dist/vis/rule/aether/aether.d.ts +121 -0
  586. package/dist/vis/rule/aether/index.d.ts +1 -0
  587. package/dist/vis/rule/index.d.ts +1 -0
  588. package/dist/vis/table/Table.d.ts +25 -0
  589. package/dist/vis/table/Table.stories.d.ts +5 -0
  590. package/dist/vis/table/aether/index.d.ts +1 -0
  591. package/dist/vis/table/aether/table.d.ts +353 -0
  592. package/dist/vis/table/cell/Label.d.ts +7 -0
  593. package/dist/vis/table/cell/element.d.ts +18 -0
  594. package/dist/vis/table/cell/external.d.ts +3 -0
  595. package/dist/vis/table/cell/index.d.ts +1 -0
  596. package/dist/vis/table/cell/registry.d.ts +2 -0
  597. package/dist/vis/table/cell/value.d.ts +9 -0
  598. package/dist/vis/table/external.d.ts +2 -0
  599. package/dist/vis/table/index.d.ts +1 -0
  600. package/dist/vis/table/use.d.ts +101 -0
  601. package/dist/vis/toggle/aether/index.d.ts +1 -0
  602. package/dist/vis/toggle/aether/toggle.d.ts +170 -0
  603. package/dist/vis/toggle/index.d.ts +1 -0
  604. package/dist/vis/toggle/use.d.ts +9 -0
  605. package/dist/vis/value/aether/index.d.ts +1 -0
  606. package/dist/vis/value/aether/value.d.ts +462 -0
  607. package/dist/vis/value/external.d.ts +1 -0
  608. package/dist/vis/value/index.d.ts +1 -0
  609. package/dist/vis/value/use.d.ts +151 -0
  610. package/dist/worker/Context.d.ts +15 -0
  611. package/dist/worker/index.d.ts +1 -0
  612. package/package.json +181 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TimeRangeChip-eDCX5pUC.js","sources":["../src/color/Picker/Picker.tsx","../../node_modules/.pnpm/fuse.js@7.0.0/node_modules/fuse.js/dist/fuse.mjs","../../node_modules/.pnpm/proxy-compare@2.3.0/node_modules/proxy-compare/dist/index.modern.js","../../node_modules/.pnpm/proxy-memoize@1.2.0/node_modules/proxy-memoize/dist/index.modern.js","../src/memo/proxyMemo.ts","../src/hooks/useFilter.ts","../src/hooks/useTransforms.ts","../src/hooks/useDebouncedCallback.ts","../src/hooks/useCursorDrag/useCursorDrag.tsx","../src/color/Swatch/Swatch.tsx","../src/util/event.ts","../src/resize/Core.tsx","../src/resize/Multiple.tsx","../src/resize/Single.tsx","../src/channel/types.ts","../src/vis/legend/Container.tsx","../src/vis/legend/Simple.tsx","../src/vis/canvas/Canvas.tsx","../src/vis/lineplot/LinePlot.tsx","../src/vis/line/Line.tsx","../src/vis/lineplot/Line.tsx","../src/viewport/Mask.tsx","../src/viewport/use.ts","../src/list/Context.tsx","../src/list/Column.tsx","../../node_modules/.pnpm/@tanstack+react-virtual@3.0.0-beta.54_react@18.2.0/node_modules/@tanstack/react-virtual/build/lib/_virtual/_rollupPluginBabelHelpers.mjs","../../node_modules/.pnpm/@tanstack+virtual-core@3.0.0-beta.54/node_modules/@tanstack/virtual-core/build/lib/_virtual/_rollupPluginBabelHelpers.mjs","../../node_modules/.pnpm/@tanstack+virtual-core@3.0.0-beta.54/node_modules/@tanstack/virtual-core/build/lib/utils.mjs","../../node_modules/.pnpm/@tanstack+virtual-core@3.0.0-beta.54/node_modules/@tanstack/virtual-core/build/lib/index.mjs","../../node_modules/.pnpm/@tanstack+react-virtual@3.0.0-beta.54_react@18.2.0/node_modules/@tanstack/react-virtual/build/lib/index.mjs","../src/list/Core.tsx","../src/list/KeyHover.tsx","../src/list/Search.tsx","../src/list/Filter.tsx","../src/list/List.tsx","../src/list/Selector.tsx","../src/select/ClearButton.tsx","../src/select/List.tsx","../src/tag/Tag.tsx","../src/select/Multiple.tsx","../src/select/Single.tsx","../src/vis/lineplot/Viewport.tsx","../src/vis/lineplot/Axis.tsx","../src/vis/lineplot/tooltip/Tooltip.tsx","../src/vis/measure/Measure.tsx","../src/vis/rule/Rule.tsx","../src/synnax/Provider.tsx","../src/channel/AliasProvider.tsx","../src/channel/Select.tsx","../src/mosaic/Mosaic.tsx","../src/vis/eraser/use.tsx","../src/nav/Drawer.tsx","../src/nav/Bar.tsx","../src/tree/Tree.tsx","../../node_modules/.pnpm/@reactflow+background@11.3.6_@types+react@18.2.43_react-dom@18.2.0_react@18.2.0/node_modules/@reactflow/background/dist/esm/index.mjs","../src/vis/diagram/edge/connector/connector.ts","../src/vis/diagram/util.ts","../src/vis/diagram/edge/Edge.tsx","../src/vis/diagram/Diagram.tsx","../src/vis/table/Table.tsx","../src/vis/table/cell/Label.tsx","../src/vis/table/cell/registry.ts","../src/vis/value/use.ts","../src/vis/pid/SelectOrientation.tsx","../src/vis/pid/Forms.tsx","../src/telem/control/Controller.tsx","../src/telem/control/StateProvider.tsx","../src/telem/control/Indicator.tsx","../src/telem/control/Chip.tsx","../src/telem/control/Legend.tsx","../src/vis/button/use.ts","../src/vis/pid/Labeled.tsx","../src/vis/pid/primitives/Primitives.tsx","../src/vis/toggle/use.ts","../src/vis/pid/Symbols.tsx","../src/vis/pid/registry.ts","../src/alamos/Provider.tsx","../src/telem/Provider.tsx"],"sourcesContent":["// 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 useCallback,\n type ComponentPropsWithoutRef,\n type ReactElement,\n useId,\n} from \"react\";\n\nimport { SketchPicker, type ColorResult } from \"react-color\";\n\nimport { color } from \"@/color/core\";\nimport { CSS } from \"@/css\";\nimport { type Input } from \"@/input\";\n\nimport \"@/color/Picker/Picker.css\";\n\nexport interface PickerProps\n extends Input.Control<color.Crude, color.Color>,\n Omit<ComponentPropsWithoutRef<\"div\">, \"onChange\"> {}\n\nexport const Picker = ({ value, onChange, ...props }: PickerProps): ReactElement => {\n const handleChange = (res: ColorResult): void => {\n if (res.hex === \"transparent\") onChange(color.ZERO);\n onChange(new color.Color(res.hex, res.rgb.a));\n };\n\n return (\n <SketchPicker\n className={CSS.B(\"color-picker\")}\n color={new color.Color(value).hex}\n onChange={handleChange}\n presetColors={[]}\n {...props}\n />\n );\n};\n","/**\n * Fuse.js v7.0.0 - Lightweight fuzzy-search (http://fusejs.io)\n *\n * Copyright (c) 2023 Kiro Risk (http://kiro.me)\n * All Rights Reserved. Apache Software License 2.0\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n */\n\nfunction isArray(value) {\n return !Array.isArray\n ? getTag(value) === '[object Array]'\n : Array.isArray(value)\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/baseToString.js\nconst INFINITY = 1 / 0;\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value\n }\n let result = value + '';\n return result == '0' && 1 / value == -INFINITY ? '-0' : result\n}\n\nfunction toString(value) {\n return value == null ? '' : baseToString(value)\n}\n\nfunction isString(value) {\n return typeof value === 'string'\n}\n\nfunction isNumber(value) {\n return typeof value === 'number'\n}\n\n// Adapted from: https://github.com/lodash/lodash/blob/master/isBoolean.js\nfunction isBoolean(value) {\n return (\n value === true ||\n value === false ||\n (isObjectLike(value) && getTag(value) == '[object Boolean]')\n )\n}\n\nfunction isObject(value) {\n return typeof value === 'object'\n}\n\n// Checks if `value` is object-like.\nfunction isObjectLike(value) {\n return isObject(value) && value !== null\n}\n\nfunction isDefined(value) {\n return value !== undefined && value !== null\n}\n\nfunction isBlank(value) {\n return !value.trim().length\n}\n\n// Gets the `toStringTag` of `value`.\n// Adapted from: https://github.com/lodash/lodash/blob/master/.internal/getTag.js\nfunction getTag(value) {\n return value == null\n ? value === undefined\n ? '[object Undefined]'\n : '[object Null]'\n : Object.prototype.toString.call(value)\n}\n\nconst EXTENDED_SEARCH_UNAVAILABLE = 'Extended search is not available';\n\nconst INCORRECT_INDEX_TYPE = \"Incorrect 'index' type\";\n\nconst LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY = (key) =>\n `Invalid value for key ${key}`;\n\nconst PATTERN_LENGTH_TOO_LARGE = (max) =>\n `Pattern length exceeds max of ${max}.`;\n\nconst MISSING_KEY_PROPERTY = (name) => `Missing ${name} property in key`;\n\nconst INVALID_KEY_WEIGHT_VALUE = (key) =>\n `Property 'weight' in key '${key}' must be a positive integer`;\n\nconst hasOwn = Object.prototype.hasOwnProperty;\n\nclass KeyStore {\n constructor(keys) {\n this._keys = [];\n this._keyMap = {};\n\n let totalWeight = 0;\n\n keys.forEach((key) => {\n let obj = createKey(key);\n\n this._keys.push(obj);\n this._keyMap[obj.id] = obj;\n\n totalWeight += obj.weight;\n });\n\n // Normalize weights so that their sum is equal to 1\n this._keys.forEach((key) => {\n key.weight /= totalWeight;\n });\n }\n get(keyId) {\n return this._keyMap[keyId]\n }\n keys() {\n return this._keys\n }\n toJSON() {\n return JSON.stringify(this._keys)\n }\n}\n\nfunction createKey(key) {\n let path = null;\n let id = null;\n let src = null;\n let weight = 1;\n let getFn = null;\n\n if (isString(key) || isArray(key)) {\n src = key;\n path = createKeyPath(key);\n id = createKeyId(key);\n } else {\n if (!hasOwn.call(key, 'name')) {\n throw new Error(MISSING_KEY_PROPERTY('name'))\n }\n\n const name = key.name;\n src = name;\n\n if (hasOwn.call(key, 'weight')) {\n weight = key.weight;\n\n if (weight <= 0) {\n throw new Error(INVALID_KEY_WEIGHT_VALUE(name))\n }\n }\n\n path = createKeyPath(name);\n id = createKeyId(name);\n getFn = key.getFn;\n }\n\n return { path, id, weight, src, getFn }\n}\n\nfunction createKeyPath(key) {\n return isArray(key) ? key : key.split('.')\n}\n\nfunction createKeyId(key) {\n return isArray(key) ? key.join('.') : key\n}\n\nfunction get(obj, path) {\n let list = [];\n let arr = false;\n\n const deepGet = (obj, path, index) => {\n if (!isDefined(obj)) {\n return\n }\n if (!path[index]) {\n // If there's no path left, we've arrived at the object we care about.\n list.push(obj);\n } else {\n let key = path[index];\n\n const value = obj[key];\n\n if (!isDefined(value)) {\n return\n }\n\n // If we're at the last value in the path, and if it's a string/number/bool,\n // add it to the list\n if (\n index === path.length - 1 &&\n (isString(value) || isNumber(value) || isBoolean(value))\n ) {\n list.push(toString(value));\n } else if (isArray(value)) {\n arr = true;\n // Search each item in the array.\n for (let i = 0, len = value.length; i < len; i += 1) {\n deepGet(value[i], path, index + 1);\n }\n } else if (path.length) {\n // An object. Recurse further.\n deepGet(value, path, index + 1);\n }\n }\n };\n\n // Backwards compatibility (since path used to be a string)\n deepGet(obj, isString(path) ? path.split('.') : path, 0);\n\n return arr ? list : list[0]\n}\n\nconst MatchOptions = {\n // Whether the matches should be included in the result set. When `true`, each record in the result\n // set will include the indices of the matched characters.\n // These can consequently be used for highlighting purposes.\n includeMatches: false,\n // When `true`, the matching function will continue to the end of a search pattern even if\n // a perfect match has already been located in the string.\n findAllMatches: false,\n // Minimum number of characters that must be matched before a result is considered a match\n minMatchCharLength: 1\n};\n\nconst BasicOptions = {\n // When `true`, the algorithm continues searching to the end of the input even if a perfect\n // match is found before the end of the same input.\n isCaseSensitive: false,\n // When true, the matching function will continue to the end of a search pattern even if\n includeScore: false,\n // List of properties that will be searched. This also supports nested properties.\n keys: [],\n // Whether to sort the result list, by score\n shouldSort: true,\n // Default sort function: sort by ascending score, ascending index\n sortFn: (a, b) =>\n a.score === b.score ? (a.idx < b.idx ? -1 : 1) : a.score < b.score ? -1 : 1\n};\n\nconst FuzzyOptions = {\n // Approximately where in the text is the pattern expected to be found?\n location: 0,\n // At what point does the match algorithm give up. A threshold of '0.0' requires a perfect match\n // (of both letters and location), a threshold of '1.0' would match anything.\n threshold: 0.6,\n // Determines how close the match must be to the fuzzy location (specified above).\n // An exact letter match which is 'distance' characters away from the fuzzy location\n // would score as a complete mismatch. A distance of '0' requires the match be at\n // the exact location specified, a threshold of '1000' would require a perfect match\n // to be within 800 characters of the fuzzy location to be found using a 0.8 threshold.\n distance: 100\n};\n\nconst AdvancedOptions = {\n // When `true`, it enables the use of unix-like search commands\n useExtendedSearch: false,\n // The get function to use when fetching an object's properties.\n // The default will search nested paths *ie foo.bar.baz*\n getFn: get,\n // When `true`, search will ignore `location` and `distance`, so it won't matter\n // where in the string the pattern appears.\n // More info: https://fusejs.io/concepts/scoring-theory.html#fuzziness-score\n ignoreLocation: false,\n // When `true`, the calculation for the relevance score (used for sorting) will\n // ignore the field-length norm.\n // More info: https://fusejs.io/concepts/scoring-theory.html#field-length-norm\n ignoreFieldNorm: false,\n // The weight to determine how much field length norm effects scoring.\n fieldNormWeight: 1\n};\n\nvar Config = {\n ...BasicOptions,\n ...MatchOptions,\n ...FuzzyOptions,\n ...AdvancedOptions\n};\n\nconst SPACE = /[^ ]+/g;\n\n// Field-length norm: the shorter the field, the higher the weight.\n// Set to 3 decimals to reduce index size.\nfunction norm(weight = 1, mantissa = 3) {\n const cache = new Map();\n const m = Math.pow(10, mantissa);\n\n return {\n get(value) {\n const numTokens = value.match(SPACE).length;\n\n if (cache.has(numTokens)) {\n return cache.get(numTokens)\n }\n\n // Default function is 1/sqrt(x), weight makes that variable\n const norm = 1 / Math.pow(numTokens, 0.5 * weight);\n\n // In place of `toFixed(mantissa)`, for faster computation\n const n = parseFloat(Math.round(norm * m) / m);\n\n cache.set(numTokens, n);\n\n return n\n },\n clear() {\n cache.clear();\n }\n }\n}\n\nclass FuseIndex {\n constructor({\n getFn = Config.getFn,\n fieldNormWeight = Config.fieldNormWeight\n } = {}) {\n this.norm = norm(fieldNormWeight, 3);\n this.getFn = getFn;\n this.isCreated = false;\n\n this.setIndexRecords();\n }\n setSources(docs = []) {\n this.docs = docs;\n }\n setIndexRecords(records = []) {\n this.records = records;\n }\n setKeys(keys = []) {\n this.keys = keys;\n this._keysMap = {};\n keys.forEach((key, idx) => {\n this._keysMap[key.id] = idx;\n });\n }\n create() {\n if (this.isCreated || !this.docs.length) {\n return\n }\n\n this.isCreated = true;\n\n // List is Array<String>\n if (isString(this.docs[0])) {\n this.docs.forEach((doc, docIndex) => {\n this._addString(doc, docIndex);\n });\n } else {\n // List is Array<Object>\n this.docs.forEach((doc, docIndex) => {\n this._addObject(doc, docIndex);\n });\n }\n\n this.norm.clear();\n }\n // Adds a doc to the end of the index\n add(doc) {\n const idx = this.size();\n\n if (isString(doc)) {\n this._addString(doc, idx);\n } else {\n this._addObject(doc, idx);\n }\n }\n // Removes the doc at the specified index of the index\n removeAt(idx) {\n this.records.splice(idx, 1);\n\n // Change ref index of every subsquent doc\n for (let i = idx, len = this.size(); i < len; i += 1) {\n this.records[i].i -= 1;\n }\n }\n getValueForItemAtKeyId(item, keyId) {\n return item[this._keysMap[keyId]]\n }\n size() {\n return this.records.length\n }\n _addString(doc, docIndex) {\n if (!isDefined(doc) || isBlank(doc)) {\n return\n }\n\n let record = {\n v: doc,\n i: docIndex,\n n: this.norm.get(doc)\n };\n\n this.records.push(record);\n }\n _addObject(doc, docIndex) {\n let record = { i: docIndex, $: {} };\n\n // Iterate over every key (i.e, path), and fetch the value at that key\n this.keys.forEach((key, keyIndex) => {\n let value = key.getFn ? key.getFn(doc) : this.getFn(doc, key.path);\n\n if (!isDefined(value)) {\n return\n }\n\n if (isArray(value)) {\n let subRecords = [];\n const stack = [{ nestedArrIndex: -1, value }];\n\n while (stack.length) {\n const { nestedArrIndex, value } = stack.pop();\n\n if (!isDefined(value)) {\n continue\n }\n\n if (isString(value) && !isBlank(value)) {\n let subRecord = {\n v: value,\n i: nestedArrIndex,\n n: this.norm.get(value)\n };\n\n subRecords.push(subRecord);\n } else if (isArray(value)) {\n value.forEach((item, k) => {\n stack.push({\n nestedArrIndex: k,\n value: item\n });\n });\n } else ;\n }\n record.$[keyIndex] = subRecords;\n } else if (isString(value) && !isBlank(value)) {\n let subRecord = {\n v: value,\n n: this.norm.get(value)\n };\n\n record.$[keyIndex] = subRecord;\n }\n });\n\n this.records.push(record);\n }\n toJSON() {\n return {\n keys: this.keys,\n records: this.records\n }\n }\n}\n\nfunction createIndex(\n keys,\n docs,\n { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n myIndex.setKeys(keys.map(createKey));\n myIndex.setSources(docs);\n myIndex.create();\n return myIndex\n}\n\nfunction parseIndex(\n data,\n { getFn = Config.getFn, fieldNormWeight = Config.fieldNormWeight } = {}\n) {\n const { keys, records } = data;\n const myIndex = new FuseIndex({ getFn, fieldNormWeight });\n myIndex.setKeys(keys);\n myIndex.setIndexRecords(records);\n return myIndex\n}\n\nfunction computeScore$1(\n pattern,\n {\n errors = 0,\n currentLocation = 0,\n expectedLocation = 0,\n distance = Config.distance,\n ignoreLocation = Config.ignoreLocation\n } = {}\n) {\n const accuracy = errors / pattern.length;\n\n if (ignoreLocation) {\n return accuracy\n }\n\n const proximity = Math.abs(expectedLocation - currentLocation);\n\n if (!distance) {\n // Dodge divide by zero error.\n return proximity ? 1.0 : accuracy\n }\n\n return accuracy + proximity / distance\n}\n\nfunction convertMaskToIndices(\n matchmask = [],\n minMatchCharLength = Config.minMatchCharLength\n) {\n let indices = [];\n let start = -1;\n let end = -1;\n let i = 0;\n\n for (let len = matchmask.length; i < len; i += 1) {\n let match = matchmask[i];\n if (match && start === -1) {\n start = i;\n } else if (!match && start !== -1) {\n end = i - 1;\n if (end - start + 1 >= minMatchCharLength) {\n indices.push([start, end]);\n }\n start = -1;\n }\n }\n\n // (i-1 - start) + 1 => i - start\n if (matchmask[i - 1] && i - start >= minMatchCharLength) {\n indices.push([start, i - 1]);\n }\n\n return indices\n}\n\n// Machine word size\nconst MAX_BITS = 32;\n\nfunction search(\n text,\n pattern,\n patternAlphabet,\n {\n location = Config.location,\n distance = Config.distance,\n threshold = Config.threshold,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n includeMatches = Config.includeMatches,\n ignoreLocation = Config.ignoreLocation\n } = {}\n) {\n if (pattern.length > MAX_BITS) {\n throw new Error(PATTERN_LENGTH_TOO_LARGE(MAX_BITS))\n }\n\n const patternLen = pattern.length;\n // Set starting location at beginning text and initialize the alphabet.\n const textLen = text.length;\n // Handle the case when location > text.length\n const expectedLocation = Math.max(0, Math.min(location, textLen));\n // Highest score beyond which we give up.\n let currentThreshold = threshold;\n // Is there a nearby exact match? (speedup)\n let bestLocation = expectedLocation;\n\n // Performance: only computer matches when the minMatchCharLength > 1\n // OR if `includeMatches` is true.\n const computeMatches = minMatchCharLength > 1 || includeMatches;\n // A mask of the matches, used for building the indices\n const matchMask = computeMatches ? Array(textLen) : [];\n\n let index;\n\n // Get all exact matches, here for speed up\n while ((index = text.indexOf(pattern, bestLocation)) > -1) {\n let score = computeScore$1(pattern, {\n currentLocation: index,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n currentThreshold = Math.min(score, currentThreshold);\n bestLocation = index + patternLen;\n\n if (computeMatches) {\n let i = 0;\n while (i < patternLen) {\n matchMask[index + i] = 1;\n i += 1;\n }\n }\n }\n\n // Reset the best location\n bestLocation = -1;\n\n let lastBitArr = [];\n let finalScore = 1;\n let binMax = patternLen + textLen;\n\n const mask = 1 << (patternLen - 1);\n\n for (let i = 0; i < patternLen; i += 1) {\n // Scan for the best match; each iteration allows for one more error.\n // Run a binary search to determine how far from the match location we can stray\n // at this error level.\n let binMin = 0;\n let binMid = binMax;\n\n while (binMin < binMid) {\n const score = computeScore$1(pattern, {\n errors: i,\n currentLocation: expectedLocation + binMid,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n if (score <= currentThreshold) {\n binMin = binMid;\n } else {\n binMax = binMid;\n }\n\n binMid = Math.floor((binMax - binMin) / 2 + binMin);\n }\n\n // Use the result from this iteration as the maximum for the next.\n binMax = binMid;\n\n let start = Math.max(1, expectedLocation - binMid + 1);\n let finish = findAllMatches\n ? textLen\n : Math.min(expectedLocation + binMid, textLen) + patternLen;\n\n // Initialize the bit array\n let bitArr = Array(finish + 2);\n\n bitArr[finish + 1] = (1 << i) - 1;\n\n for (let j = finish; j >= start; j -= 1) {\n let currentLocation = j - 1;\n let charMatch = patternAlphabet[text.charAt(currentLocation)];\n\n if (computeMatches) {\n // Speed up: quick bool to int conversion (i.e, `charMatch ? 1 : 0`)\n matchMask[currentLocation] = +!!charMatch;\n }\n\n // First pass: exact match\n bitArr[j] = ((bitArr[j + 1] << 1) | 1) & charMatch;\n\n // Subsequent passes: fuzzy match\n if (i) {\n bitArr[j] |=\n ((lastBitArr[j + 1] | lastBitArr[j]) << 1) | 1 | lastBitArr[j + 1];\n }\n\n if (bitArr[j] & mask) {\n finalScore = computeScore$1(pattern, {\n errors: i,\n currentLocation,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n // This match will almost certainly be better than any existing match.\n // But check anyway.\n if (finalScore <= currentThreshold) {\n // Indeed it is\n currentThreshold = finalScore;\n bestLocation = currentLocation;\n\n // Already passed `loc`, downhill from here on in.\n if (bestLocation <= expectedLocation) {\n break\n }\n\n // When passing `bestLocation`, don't exceed our current distance from `expectedLocation`.\n start = Math.max(1, 2 * expectedLocation - bestLocation);\n }\n }\n }\n\n // No hope for a (better) match at greater error levels.\n const score = computeScore$1(pattern, {\n errors: i + 1,\n currentLocation: expectedLocation,\n expectedLocation,\n distance,\n ignoreLocation\n });\n\n if (score > currentThreshold) {\n break\n }\n\n lastBitArr = bitArr;\n }\n\n const result = {\n isMatch: bestLocation >= 0,\n // Count exact matches (those with a score of 0) to be \"almost\" exact\n score: Math.max(0.001, finalScore)\n };\n\n if (computeMatches) {\n const indices = convertMaskToIndices(matchMask, minMatchCharLength);\n if (!indices.length) {\n result.isMatch = false;\n } else if (includeMatches) {\n result.indices = indices;\n }\n }\n\n return result\n}\n\nfunction createPatternAlphabet(pattern) {\n let mask = {};\n\n for (let i = 0, len = pattern.length; i < len; i += 1) {\n const char = pattern.charAt(i);\n mask[char] = (mask[char] || 0) | (1 << (len - i - 1));\n }\n\n return mask\n}\n\nclass BitapSearch {\n constructor(\n pattern,\n {\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance,\n includeMatches = Config.includeMatches,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n isCaseSensitive = Config.isCaseSensitive,\n ignoreLocation = Config.ignoreLocation\n } = {}\n ) {\n this.options = {\n location,\n threshold,\n distance,\n includeMatches,\n findAllMatches,\n minMatchCharLength,\n isCaseSensitive,\n ignoreLocation\n };\n\n this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n\n this.chunks = [];\n\n if (!this.pattern.length) {\n return\n }\n\n const addChunk = (pattern, startIndex) => {\n this.chunks.push({\n pattern,\n alphabet: createPatternAlphabet(pattern),\n startIndex\n });\n };\n\n const len = this.pattern.length;\n\n if (len > MAX_BITS) {\n let i = 0;\n const remainder = len % MAX_BITS;\n const end = len - remainder;\n\n while (i < end) {\n addChunk(this.pattern.substr(i, MAX_BITS), i);\n i += MAX_BITS;\n }\n\n if (remainder) {\n const startIndex = len - MAX_BITS;\n addChunk(this.pattern.substr(startIndex), startIndex);\n }\n } else {\n addChunk(this.pattern, 0);\n }\n }\n\n searchIn(text) {\n const { isCaseSensitive, includeMatches } = this.options;\n\n if (!isCaseSensitive) {\n text = text.toLowerCase();\n }\n\n // Exact match\n if (this.pattern === text) {\n let result = {\n isMatch: true,\n score: 0\n };\n\n if (includeMatches) {\n result.indices = [[0, text.length - 1]];\n }\n\n return result\n }\n\n // Otherwise, use Bitap algorithm\n const {\n location,\n distance,\n threshold,\n findAllMatches,\n minMatchCharLength,\n ignoreLocation\n } = this.options;\n\n let allIndices = [];\n let totalScore = 0;\n let hasMatches = false;\n\n this.chunks.forEach(({ pattern, alphabet, startIndex }) => {\n const { isMatch, score, indices } = search(text, pattern, alphabet, {\n location: location + startIndex,\n distance,\n threshold,\n findAllMatches,\n minMatchCharLength,\n includeMatches,\n ignoreLocation\n });\n\n if (isMatch) {\n hasMatches = true;\n }\n\n totalScore += score;\n\n if (isMatch && indices) {\n allIndices = [...allIndices, ...indices];\n }\n });\n\n let result = {\n isMatch: hasMatches,\n score: hasMatches ? totalScore / this.chunks.length : 1\n };\n\n if (hasMatches && includeMatches) {\n result.indices = allIndices;\n }\n\n return result\n }\n}\n\nclass BaseMatch {\n constructor(pattern) {\n this.pattern = pattern;\n }\n static isMultiMatch(pattern) {\n return getMatch(pattern, this.multiRegex)\n }\n static isSingleMatch(pattern) {\n return getMatch(pattern, this.singleRegex)\n }\n search(/*text*/) {}\n}\n\nfunction getMatch(pattern, exp) {\n const matches = pattern.match(exp);\n return matches ? matches[1] : null\n}\n\n// Token: 'file\n\nclass ExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'exact'\n }\n static get multiRegex() {\n return /^=\"(.*)\"$/\n }\n static get singleRegex() {\n return /^=(.*)$/\n }\n search(text) {\n const isMatch = text === this.pattern;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, this.pattern.length - 1]\n }\n }\n}\n\n// Token: !fire\n\nclass InverseExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-exact'\n }\n static get multiRegex() {\n return /^!\"(.*)\"$/\n }\n static get singleRegex() {\n return /^!(.*)$/\n }\n search(text) {\n const index = text.indexOf(this.pattern);\n const isMatch = index === -1;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\n// Token: ^file\n\nclass PrefixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'prefix-exact'\n }\n static get multiRegex() {\n return /^\\^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^\\^(.*)$/\n }\n search(text) {\n const isMatch = text.startsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, this.pattern.length - 1]\n }\n }\n}\n\n// Token: !^fire\n\nclass InversePrefixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-prefix-exact'\n }\n static get multiRegex() {\n return /^!\\^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^!\\^(.*)$/\n }\n search(text) {\n const isMatch = !text.startsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\n// Token: .file$\n\nclass SuffixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'suffix-exact'\n }\n static get multiRegex() {\n return /^\"(.*)\"\\$$/\n }\n static get singleRegex() {\n return /^(.*)\\$$/\n }\n search(text) {\n const isMatch = text.endsWith(this.pattern);\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [text.length - this.pattern.length, text.length - 1]\n }\n }\n}\n\n// Token: !.file$\n\nclass InverseSuffixExactMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'inverse-suffix-exact'\n }\n static get multiRegex() {\n return /^!\"(.*)\"\\$$/\n }\n static get singleRegex() {\n return /^!(.*)\\$$/\n }\n search(text) {\n const isMatch = !text.endsWith(this.pattern);\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices: [0, text.length - 1]\n }\n }\n}\n\nclass FuzzyMatch extends BaseMatch {\n constructor(\n pattern,\n {\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance,\n includeMatches = Config.includeMatches,\n findAllMatches = Config.findAllMatches,\n minMatchCharLength = Config.minMatchCharLength,\n isCaseSensitive = Config.isCaseSensitive,\n ignoreLocation = Config.ignoreLocation\n } = {}\n ) {\n super(pattern);\n this._bitapSearch = new BitapSearch(pattern, {\n location,\n threshold,\n distance,\n includeMatches,\n findAllMatches,\n minMatchCharLength,\n isCaseSensitive,\n ignoreLocation\n });\n }\n static get type() {\n return 'fuzzy'\n }\n static get multiRegex() {\n return /^\"(.*)\"$/\n }\n static get singleRegex() {\n return /^(.*)$/\n }\n search(text) {\n return this._bitapSearch.searchIn(text)\n }\n}\n\n// Token: 'file\n\nclass IncludeMatch extends BaseMatch {\n constructor(pattern) {\n super(pattern);\n }\n static get type() {\n return 'include'\n }\n static get multiRegex() {\n return /^'\"(.*)\"$/\n }\n static get singleRegex() {\n return /^'(.*)$/\n }\n search(text) {\n let location = 0;\n let index;\n\n const indices = [];\n const patternLen = this.pattern.length;\n\n // Get all exact matches\n while ((index = text.indexOf(this.pattern, location)) > -1) {\n location = index + patternLen;\n indices.push([index, location - 1]);\n }\n\n const isMatch = !!indices.length;\n\n return {\n isMatch,\n score: isMatch ? 0 : 1,\n indices\n }\n }\n}\n\n// ❗Order is important. DO NOT CHANGE.\nconst searchers = [\n ExactMatch,\n IncludeMatch,\n PrefixExactMatch,\n InversePrefixExactMatch,\n InverseSuffixExactMatch,\n SuffixExactMatch,\n InverseExactMatch,\n FuzzyMatch\n];\n\nconst searchersLen = searchers.length;\n\n// Regex to split by spaces, but keep anything in quotes together\nconst SPACE_RE = / +(?=(?:[^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)/;\nconst OR_TOKEN = '|';\n\n// Return a 2D array representation of the query, for simpler parsing.\n// Example:\n// \"^core go$ | rb$ | py$ xy$\" => [[\"^core\", \"go$\"], [\"rb$\"], [\"py$\", \"xy$\"]]\nfunction parseQuery(pattern, options = {}) {\n return pattern.split(OR_TOKEN).map((item) => {\n let query = item\n .trim()\n .split(SPACE_RE)\n .filter((item) => item && !!item.trim());\n\n let results = [];\n for (let i = 0, len = query.length; i < len; i += 1) {\n const queryItem = query[i];\n\n // 1. Handle multiple query match (i.e, once that are quoted, like `\"hello world\"`)\n let found = false;\n let idx = -1;\n while (!found && ++idx < searchersLen) {\n const searcher = searchers[idx];\n let token = searcher.isMultiMatch(queryItem);\n if (token) {\n results.push(new searcher(token, options));\n found = true;\n }\n }\n\n if (found) {\n continue\n }\n\n // 2. Handle single query matches (i.e, once that are *not* quoted)\n idx = -1;\n while (++idx < searchersLen) {\n const searcher = searchers[idx];\n let token = searcher.isSingleMatch(queryItem);\n if (token) {\n results.push(new searcher(token, options));\n break\n }\n }\n }\n\n return results\n })\n}\n\n// These extended matchers can return an array of matches, as opposed\n// to a singl match\nconst MultiMatchSet = new Set([FuzzyMatch.type, IncludeMatch.type]);\n\n/**\n * Command-like searching\n * ======================\n *\n * Given multiple search terms delimited by spaces.e.g. `^jscript .python$ ruby !java`,\n * search in a given text.\n *\n * Search syntax:\n *\n * | Token | Match type | Description |\n * | ----------- | -------------------------- | -------------------------------------- |\n * | `jscript` | fuzzy-match | Items that fuzzy match `jscript` |\n * | `=scheme` | exact-match | Items that are `scheme` |\n * | `'python` | include-match | Items that include `python` |\n * | `!ruby` | inverse-exact-match | Items that do not include `ruby` |\n * | `^java` | prefix-exact-match | Items that start with `java` |\n * | `!^earlang` | inverse-prefix-exact-match | Items that do not start with `earlang` |\n * | `.js$` | suffix-exact-match | Items that end with `.js` |\n * | `!.go$` | inverse-suffix-exact-match | Items that do not end with `.go` |\n *\n * A single pipe character acts as an OR operator. For example, the following\n * query matches entries that start with `core` and end with either`go`, `rb`,\n * or`py`.\n *\n * ```\n * ^core go$ | rb$ | py$\n * ```\n */\nclass ExtendedSearch {\n constructor(\n pattern,\n {\n isCaseSensitive = Config.isCaseSensitive,\n includeMatches = Config.includeMatches,\n minMatchCharLength = Config.minMatchCharLength,\n ignoreLocation = Config.ignoreLocation,\n findAllMatches = Config.findAllMatches,\n location = Config.location,\n threshold = Config.threshold,\n distance = Config.distance\n } = {}\n ) {\n this.query = null;\n this.options = {\n isCaseSensitive,\n includeMatches,\n minMatchCharLength,\n findAllMatches,\n ignoreLocation,\n location,\n threshold,\n distance\n };\n\n this.pattern = isCaseSensitive ? pattern : pattern.toLowerCase();\n this.query = parseQuery(this.pattern, this.options);\n }\n\n static condition(_, options) {\n return options.useExtendedSearch\n }\n\n searchIn(text) {\n const query = this.query;\n\n if (!query) {\n return {\n isMatch: false,\n score: 1\n }\n }\n\n const { includeMatches, isCaseSensitive } = this.options;\n\n text = isCaseSensitive ? text : text.toLowerCase();\n\n let numMatches = 0;\n let allIndices = [];\n let totalScore = 0;\n\n // ORs\n for (let i = 0, qLen = query.length; i < qLen; i += 1) {\n const searchers = query[i];\n\n // Reset indices\n allIndices.length = 0;\n numMatches = 0;\n\n // ANDs\n for (let j = 0, pLen = searchers.length; j < pLen; j += 1) {\n const searcher = searchers[j];\n const { isMatch, indices, score } = searcher.search(text);\n\n if (isMatch) {\n numMatches += 1;\n totalScore += score;\n if (includeMatches) {\n const type = searcher.constructor.type;\n if (MultiMatchSet.has(type)) {\n allIndices = [...allIndices, ...indices];\n } else {\n allIndices.push(indices);\n }\n }\n } else {\n totalScore = 0;\n numMatches = 0;\n allIndices.length = 0;\n break\n }\n }\n\n // OR condition, so if TRUE, return\n if (numMatches) {\n let result = {\n isMatch: true,\n score: totalScore / numMatches\n };\n\n if (includeMatches) {\n result.indices = allIndices;\n }\n\n return result\n }\n }\n\n // Nothing was matched\n return {\n isMatch: false,\n score: 1\n }\n }\n}\n\nconst registeredSearchers = [];\n\nfunction register(...args) {\n registeredSearchers.push(...args);\n}\n\nfunction createSearcher(pattern, options) {\n for (let i = 0, len = registeredSearchers.length; i < len; i += 1) {\n let searcherClass = registeredSearchers[i];\n if (searcherClass.condition(pattern, options)) {\n return new searcherClass(pattern, options)\n }\n }\n\n return new BitapSearch(pattern, options)\n}\n\nconst LogicalOperator = {\n AND: '$and',\n OR: '$or'\n};\n\nconst KeyType = {\n PATH: '$path',\n PATTERN: '$val'\n};\n\nconst isExpression = (query) =>\n !!(query[LogicalOperator.AND] || query[LogicalOperator.OR]);\n\nconst isPath = (query) => !!query[KeyType.PATH];\n\nconst isLeaf = (query) =>\n !isArray(query) && isObject(query) && !isExpression(query);\n\nconst convertToExplicit = (query) => ({\n [LogicalOperator.AND]: Object.keys(query).map((key) => ({\n [key]: query[key]\n }))\n});\n\n// When `auto` is `true`, the parse function will infer and initialize and add\n// the appropriate `Searcher` instance\nfunction parse(query, options, { auto = true } = {}) {\n const next = (query) => {\n let keys = Object.keys(query);\n\n const isQueryPath = isPath(query);\n\n if (!isQueryPath && keys.length > 1 && !isExpression(query)) {\n return next(convertToExplicit(query))\n }\n\n if (isLeaf(query)) {\n const key = isQueryPath ? query[KeyType.PATH] : keys[0];\n\n const pattern = isQueryPath ? query[KeyType.PATTERN] : query[key];\n\n if (!isString(pattern)) {\n throw new Error(LOGICAL_SEARCH_INVALID_QUERY_FOR_KEY(key))\n }\n\n const obj = {\n keyId: createKeyId(key),\n pattern\n };\n\n if (auto) {\n obj.searcher = createSearcher(pattern, options);\n }\n\n return obj\n }\n\n let node = {\n children: [],\n operator: keys[0]\n };\n\n keys.forEach((key) => {\n const value = query[key];\n\n if (isArray(value)) {\n value.forEach((item) => {\n node.children.push(next(item));\n });\n }\n });\n\n return node\n };\n\n if (!isExpression(query)) {\n query = convertToExplicit(query);\n }\n\n return next(query)\n}\n\n// Practical scoring function\nfunction computeScore(\n results,\n { ignoreFieldNorm = Config.ignoreFieldNorm }\n) {\n results.forEach((result) => {\n let totalScore = 1;\n\n result.matches.forEach(({ key, norm, score }) => {\n const weight = key ? key.weight : null;\n\n totalScore *= Math.pow(\n score === 0 && weight ? Number.EPSILON : score,\n (weight || 1) * (ignoreFieldNorm ? 1 : norm)\n );\n });\n\n result.score = totalScore;\n });\n}\n\nfunction transformMatches(result, data) {\n const matches = result.matches;\n data.matches = [];\n\n if (!isDefined(matches)) {\n return\n }\n\n matches.forEach((match) => {\n if (!isDefined(match.indices) || !match.indices.length) {\n return\n }\n\n const { indices, value } = match;\n\n let obj = {\n indices,\n value\n };\n\n if (match.key) {\n obj.key = match.key.src;\n }\n\n if (match.idx > -1) {\n obj.refIndex = match.idx;\n }\n\n data.matches.push(obj);\n });\n}\n\nfunction transformScore(result, data) {\n data.score = result.score;\n}\n\nfunction format(\n results,\n docs,\n {\n includeMatches = Config.includeMatches,\n includeScore = Config.includeScore\n } = {}\n) {\n const transformers = [];\n\n if (includeMatches) transformers.push(transformMatches);\n if (includeScore) transformers.push(transformScore);\n\n return results.map((result) => {\n const { idx } = result;\n\n const data = {\n item: docs[idx],\n refIndex: idx\n };\n\n if (transformers.length) {\n transformers.forEach((transformer) => {\n transformer(result, data);\n });\n }\n\n return data\n })\n}\n\nclass Fuse {\n constructor(docs, options = {}, index) {\n this.options = { ...Config, ...options };\n\n if (\n this.options.useExtendedSearch &&\n !true\n ) {\n throw new Error(EXTENDED_SEARCH_UNAVAILABLE)\n }\n\n this._keyStore = new KeyStore(this.options.keys);\n\n this.setCollection(docs, index);\n }\n\n setCollection(docs, index) {\n this._docs = docs;\n\n if (index && !(index instanceof FuseIndex)) {\n throw new Error(INCORRECT_INDEX_TYPE)\n }\n\n this._myIndex =\n index ||\n createIndex(this.options.keys, this._docs, {\n getFn: this.options.getFn,\n fieldNormWeight: this.options.fieldNormWeight\n });\n }\n\n add(doc) {\n if (!isDefined(doc)) {\n return\n }\n\n this._docs.push(doc);\n this._myIndex.add(doc);\n }\n\n remove(predicate = (/* doc, idx */) => false) {\n const results = [];\n\n for (let i = 0, len = this._docs.length; i < len; i += 1) {\n const doc = this._docs[i];\n if (predicate(doc, i)) {\n this.removeAt(i);\n i -= 1;\n len -= 1;\n\n results.push(doc);\n }\n }\n\n return results\n }\n\n removeAt(idx) {\n this._docs.splice(idx, 1);\n this._myIndex.removeAt(idx);\n }\n\n getIndex() {\n return this._myIndex\n }\n\n search(query, { limit = -1 } = {}) {\n const {\n includeMatches,\n includeScore,\n shouldSort,\n sortFn,\n ignoreFieldNorm\n } = this.options;\n\n let results = isString(query)\n ? isString(this._docs[0])\n ? this._searchStringList(query)\n : this._searchObjectList(query)\n : this._searchLogical(query);\n\n computeScore(results, { ignoreFieldNorm });\n\n if (shouldSort) {\n results.sort(sortFn);\n }\n\n if (isNumber(limit) && limit > -1) {\n results = results.slice(0, limit);\n }\n\n return format(results, this._docs, {\n includeMatches,\n includeScore\n })\n }\n\n _searchStringList(query) {\n const searcher = createSearcher(query, this.options);\n const { records } = this._myIndex;\n const results = [];\n\n // Iterate over every string in the index\n records.forEach(({ v: text, i: idx, n: norm }) => {\n if (!isDefined(text)) {\n return\n }\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n results.push({\n item: text,\n idx,\n matches: [{ score, value: text, norm, indices }]\n });\n }\n });\n\n return results\n }\n\n _searchLogical(query) {\n\n const expression = parse(query, this.options);\n\n const evaluate = (node, item, idx) => {\n if (!node.children) {\n const { keyId, searcher } = node;\n\n const matches = this._findMatches({\n key: this._keyStore.get(keyId),\n value: this._myIndex.getValueForItemAtKeyId(item, keyId),\n searcher\n });\n\n if (matches && matches.length) {\n return [\n {\n idx,\n item,\n matches\n }\n ]\n }\n\n return []\n }\n\n const res = [];\n for (let i = 0, len = node.children.length; i < len; i += 1) {\n const child = node.children[i];\n const result = evaluate(child, item, idx);\n if (result.length) {\n res.push(...result);\n } else if (node.operator === LogicalOperator.AND) {\n return []\n }\n }\n return res\n };\n\n const records = this._myIndex.records;\n const resultMap = {};\n const results = [];\n\n records.forEach(({ $: item, i: idx }) => {\n if (isDefined(item)) {\n let expResults = evaluate(expression, item, idx);\n\n if (expResults.length) {\n // Dedupe when adding\n if (!resultMap[idx]) {\n resultMap[idx] = { idx, item, matches: [] };\n results.push(resultMap[idx]);\n }\n expResults.forEach(({ matches }) => {\n resultMap[idx].matches.push(...matches);\n });\n }\n }\n });\n\n return results\n }\n\n _searchObjectList(query) {\n const searcher = createSearcher(query, this.options);\n const { keys, records } = this._myIndex;\n const results = [];\n\n // List is Array<Object>\n records.forEach(({ $: item, i: idx }) => {\n if (!isDefined(item)) {\n return\n }\n\n let matches = [];\n\n // Iterate over every key (i.e, path), and fetch the value at that key\n keys.forEach((key, keyIndex) => {\n matches.push(\n ...this._findMatches({\n key,\n value: item[keyIndex],\n searcher\n })\n );\n });\n\n if (matches.length) {\n results.push({\n idx,\n item,\n matches\n });\n }\n });\n\n return results\n }\n _findMatches({ key, value, searcher }) {\n if (!isDefined(value)) {\n return []\n }\n\n let matches = [];\n\n if (isArray(value)) {\n value.forEach(({ v: text, i: idx, n: norm }) => {\n if (!isDefined(text)) {\n return\n }\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n matches.push({\n score,\n key,\n value: text,\n idx,\n norm,\n indices\n });\n }\n });\n } else {\n const { v: text, n: norm } = value;\n\n const { isMatch, score, indices } = searcher.searchIn(text);\n\n if (isMatch) {\n matches.push({ score, key, value: text, norm, indices });\n }\n }\n\n return matches\n }\n}\n\nFuse.version = '7.0.0';\nFuse.createIndex = createIndex;\nFuse.parseIndex = parseIndex;\nFuse.config = Config;\n\n{\n Fuse.parseQuery = parse;\n}\n\n{\n register(ExtendedSearch);\n}\n\nexport { Fuse as default };\n","const e=Symbol(),t=Symbol(),r=Symbol();let n=(e,t)=>new Proxy(e,t);const o=Object.getPrototypeOf,s=new WeakMap,c=e=>e&&(s.has(e)?s.get(e):o(e)===Object.prototype||o(e)===Array.prototype),l=e=>\"object\"==typeof e&&null!==e,a=new WeakMap,f=e=>e[r]||e,i=(s,l,p)=>{if(!c(s))return s;const y=f(s),u=(e=>Object.isFrozen(e)||Object.values(Object.getOwnPropertyDescriptors(e)).some(e=>!e.writable))(y);let g=p&&p.get(y);return g&&g[1].f===u||(g=((n,o)=>{const s={f:o};let c=!1;const l=(t,r)=>{if(!c){let o=s.a.get(n);o||(o=new Set,s.a.set(n,o)),r&&o.has(e)||o.add(t)}},a={get:(e,t)=>t===r?n:(l(t),i(e[t],s.a,s.c)),has:(e,r)=>r===t?(c=!0,s.a.delete(n),!0):(l(r),r in e),getOwnPropertyDescriptor:(e,t)=>(l(t,!0),Object.getOwnPropertyDescriptor(e,t)),ownKeys:t=>(l(e),Reflect.ownKeys(t))};return o&&(a.set=a.deleteProperty=()=>!1),[a,s]})(y,u),g[1].p=n(u?(e=>{let t=a.get(e);if(!t){if(Array.isArray(e))t=Array.from(e);else{const r=Object.getOwnPropertyDescriptors(e);Object.values(r).forEach(e=>{e.configurable=!0}),t=Object.create(o(e),r)}a.set(e,t)}return t})(y):y,g[0]),p&&p.set(y,g)),g[1].a=l,g[1].c=p,g[1].p},p=(e,t)=>{const r=Reflect.ownKeys(e),n=Reflect.ownKeys(t);return r.length!==n.length||r.some((e,t)=>e!==n[t])},y=(t,r,n,o)=>{if(Object.is(t,r))return!1;if(!l(t)||!l(r))return!0;const s=n.get(f(t));if(!s)return!0;if(o){const e=o.get(t);if(e&&e.n===r)return e.g;o.set(t,{n:r,g:!1})}let c=null;for(const l of s){const s=l===e?p(t,r):y(t[l],r[l],n,o);if(!0!==s&&!1!==s||(c=s),c)break}return null===c&&(c=!0),o&&o.set(t,{n:r,g:c}),c},u=e=>!!c(e)&&t in e,g=e=>c(e)&&e[r]||null,b=(e,t=!0)=>{s.set(e,t)},O=(e,t)=>{const r=[],n=new WeakSet,o=(e,s)=>{if(n.has(e))return;l(e)&&n.add(e);const c=l(e)&&t.get(f(e));c?c.forEach(t=>{o(e[t],s?[...s,t]:[t])}):s&&r.push(s)};return o(e),r},w=e=>{n=e};export{O as affectedToPathList,i as createProxy,g as getUntracked,y as isChanged,b as markToTrack,w as replaceNewProxy,u as trackMemo};\n//# sourceMappingURL=index.modern.mjs.map\n","import{getUntracked as e,isChanged as t,createProxy as r,trackMemo as o}from\"proxy-compare\";export{getUntracked as getUntrackedObject,replaceNewProxy}from\"proxy-compare\";const n=e=>\"object\"==typeof e&&null!==e,a=(t,r)=>{if(!n(t))return t;const c=e(t);return null!==c?(o(t),c):(r.has(t)||(r.add(t),Object.entries(t).forEach(([e,o])=>{const n=a(o,r);Object.is(n,o)||(t[e]=n)})),t)},c=(t,r,o)=>{if(!n(t)||!n(r))return;const a=o.get(e(r)||r);a&&a.forEach(e=>{c(t[e],r[e],o)})},s=(o,n)=>{var s;let p=0;const f=null!=(s=null==n?void 0:n.size)?s:1,l=[],u=new WeakMap,i=new WeakMap;return n=>{const s=e(n)||n,k=u.get(s);if(k)return c(n,k.o,k.a),k.r;for(let e=0;e<f;e+=1){const r=l[(p+e)%f];if(!r)break;if(!t(r.o,n,r.a,new WeakMap))return u.set(s,r),c(n,r.o,r.a),r.r}const d=new WeakMap,w=r(n,d,i),b=a(o(w),new Set);c(n,n,d);const m={o:n,r:b,a:d};return p=(p-1+f)%f,l[p]=m,u.set(s,m),b}};export{s as default};\n//# sourceMappingURL=index.modern.mjs.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 { runtime } from \"@synnaxlabs/x\";\nimport memoize from \"proxy-memoize\";\n\nexport const proxyMemo: typeof memoize = (fn, opts) => {\n if (runtime.RUNTIME === \"browser\") return memoize(fn, opts);\n return fn;\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 UnknownRecord,\n type ArrayTransform,\n type KeyedRecord,\n type Key,\n type TermSearcher,\n} from \"@synnaxlabs/x\";\nimport Fuse from \"fuse.js\";\n\nimport { proxyMemo } from \"@/memo\";\n\n/** Props for the {@link createFilterTransform} function. */\nexport interface CreateFilterTransformProps<\n K extends Key,\n E extends KeyedRecord<K, E>,\n> {\n term: string;\n searcher?: TermSearcher<string, K, E> | ((data: E[]) => TermSearcher<string, K, E>);\n}\n\nconst defaultOpts: Fuse.IFuseOptions<UnknownRecord<UnknownRecord>> = {\n threshold: 0.3,\n};\n\nexport const fuseFilter =\n (opts?: Fuse.IFuseOptions<UnknownRecord>) =>\n <K extends Key, E extends KeyedRecord<K, E>>(\n data: E[],\n ): TermSearcher<string, K, E> => {\n const fuse = new Fuse(data, {\n keys: Object.keys(data[0]),\n ...defaultOpts,\n ...opts,\n });\n return {\n page: (page: number, perPage: number) =>\n data.slice(page * perPage, (page + 1) * perPage),\n search: (term: string) => fuse.search(term).map(({ item }) => item),\n retrieve: (keys: K[]) => data.filter((item) => keys.includes(item.key)),\n };\n };\n\nconst defaultFilter = fuseFilter();\n\n/**\n * @returns a transform that can be used to filter an array of objects in memory\n * based on a search query.\n *\n * Can be used in conjunction with `useTransform` to add search functionality\n * alongside other transforms.\n *\n * Uses fuse.js under the hood.\n *\n * @param query - The query to search for.\n * @param opts - The options to pass to the Fuse.js search. See the Fuse.js\n * documentation for more information on these options.\n */\nexport const createFilterTransform = <K extends Key, E extends KeyedRecord<K, E>>({\n term,\n searcher = defaultFilter<K, E>,\n}: CreateFilterTransformProps<K, E>): ArrayTransform<E> =>\n proxyMemo((data) => {\n if (typeof searcher === \"function\") {\n if (term.length === 0 || data?.length === 0) return data;\n return searcher(data).search(term);\n }\n return searcher.search(term);\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 { useCallback, useState } from \"react\";\n\nimport { type UnknownRecord, type ArrayTransform } from \"@synnaxlabs/x\";\n\nexport interface ArrayTransformEntry<E extends UnknownRecord = UnknownRecord> {\n transform: ArrayTransform<E>;\n key: string;\n priority: number;\n}\n\nexport interface UseTransformsProps<E extends UnknownRecord = UnknownRecord> {\n transforms?: Array<ArrayTransformEntry<E>>;\n}\n\nexport interface UseTransformsReturn<E extends UnknownRecord = UnknownRecord> {\n transform: ArrayTransform<E>;\n setTransform: (key: string, t: ArrayTransform<E>, priority?: number) => void;\n deleteTransform: (key: string) => void;\n}\n\nexport const useTransforms = <E extends UnknownRecord>({\n transforms: initialTransforms = [],\n}: UseTransformsProps<E>): UseTransformsReturn<E> => {\n const [transforms, setTransforms] =\n useState<Array<ArrayTransformEntry<E>>>(initialTransforms);\n\n const setTransform = useCallback(\n (key: string, t: ArrayTransform<E>, priority = 0): void =>\n setTransforms((prev) => {\n const next = prev.filter((t) => t.key !== key);\n next.push({ key, transform: t, priority });\n next.sort((a, b) => b.priority - a.priority);\n return next;\n }),\n [setTransforms],\n );\n\n const deleteTransform = useCallback(\n (key: string): void => setTransforms((prev) => prev.filter((t) => t.key !== key)),\n [setTransform],\n );\n\n const transform = useCallback(\n (data: E[]) => transforms.reduce((data, t) => t.transform(data), data),\n [transforms],\n );\n\n return { transform, setTransform, deleteTransform };\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 DependencyList, useCallback } from \"react\";\n\nimport { debounce } from \"@synnaxlabs/x\";\n\nexport const useDebouncedCallback = <F extends (...args: any[]) => void>(\n func: F,\n waitFor: number,\n deps: DependencyList,\n): F => useCallback(debounce(func, waitFor), [waitFor, ...deps]);\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 DragEvent, useCallback } from \"react\";\n\nimport { xy, box } from \"@synnaxlabs/x\";\n\nimport { Triggers } from \"@/triggers\";\n\nexport interface UseCursorDragProps {\n onStart?: (loc: xy.XY, mouseKey: Triggers.Key, e: DragEvent) => void;\n onMove?: (box: box.Box, mouseKey: Triggers.Key, e: MouseEvent) => void;\n onEnd?: (box: box.Box, mouseKey: Triggers.Key, e: MouseEvent) => void;\n}\n\nexport type UseCursorDragStart = (e: DragEvent) => void;\n\nexport const useCursorDrag = ({\n onMove,\n onStart,\n onEnd,\n}: UseCursorDragProps): UseCursorDragStart =>\n useCallback(\n (e) => {\n e.preventDefault();\n const startLoc = xy.construct(e);\n const mouseKey = Triggers.mouseKey(e.button);\n onStart?.(startLoc, mouseKey, e);\n const handleMove = (e: MouseEvent): void => {\n if (e.buttons === 0) return handleUp(e);\n const next = xy.construct(e);\n onMove?.(box.construct(startLoc, next), mouseKey, e);\n };\n window.addEventListener(\"mousemove\", handleMove);\n const handleUp = (e: xy.Crude): void => {\n window.removeEventListener(\"mousemove\", handleMove);\n const next = xy.construct(e);\n onEnd?.(box.construct(startLoc, next), mouseKey, e as MouseEvent);\n };\n window.addEventListener(\"mouseup\", handleUp, { once: true });\n },\n [onMove, onStart, onEnd],\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 ReactElement, useCallback } from \"react\";\n\nimport { Button } from \"@/button\";\nimport { color } from \"@/color/core\";\nimport { type Crude, type Color } from \"@/color/core/color\";\nimport { Picker } from \"@/color/Picker\";\nimport { CSS } from \"@/css\";\nimport { Dropdown } from \"@/dropdown\";\nimport { type UseProps } from \"@/dropdown/Dropdown\";\nimport { Haul } from \"@/haul\";\nimport { type Input } from \"@/input\";\nimport { Text } from \"@/text\";\nimport { Theming } from \"@/theming\";\n\nimport \"@/color/Swatch/Swatch.css\";\n\nexport interface SwatchProps\n extends Input.Control<Crude, Color>,\n Omit<Button.ButtonProps, \"onChange\" | \"value\">,\n UseProps {}\n\nconst HAUL_TYPE = \"color\";\n\nexport const Swatch = ({\n value,\n onChange,\n className,\n size = \"medium\",\n onVisibleChange,\n initialVisible,\n ...props\n}: SwatchProps): ReactElement => {\n const { visible, open, ref } = Dropdown.use({ onVisibleChange, initialVisible });\n\n const bg = Theming.use().colors.gray.l0;\n\n const d = new color.Color(value);\n\n const dragging = Haul.useDraggingState();\n\n const canDrop: Haul.CanDrop = useCallback(\n ({ items }) => {\n const [k] = Haul.filterByType(HAUL_TYPE, items);\n return k != null && k.key !== d.hex;\n },\n [d.hex],\n );\n\n const { startDrag, ...haulProps } = Haul.useDragAndDrop({\n type: \"Color.Swatch\",\n onDrop: ({ items }) => {\n const dropped = Haul.filterByType(HAUL_TYPE, items);\n if (items.length > 0) onChange?.(new color.Color(dropped[0].key as string));\n return dropped;\n },\n canDrop,\n });\n\n const swatch = (\n <Button.Button\n className={CSS(\n CSS.B(\"color-swatch\"),\n CSS.size(size),\n d.contrast(bg) > 1.5 && d.a > 0.5 && CSS.M(\"no-border\"),\n CSS.dropRegion(canDrop(dragging)),\n className,\n )}\n draggable\n onDragStart={() => startDrag([{ type: HAUL_TYPE, key: d.hex }])}\n style={{ backgroundColor: color.cssString(value) }}\n variant=\"text\"\n onClick={open}\n size={size}\n tooltip={\n onChange != null ? (\n <Text.Text level=\"small\">Click to change color</Text.Text>\n ) : undefined\n }\n {...haulProps}\n {...props}\n />\n );\n\n if (onChange == null) return swatch;\n\n return (\n <Dropdown.Dialog\n visible={visible}\n ref={ref}\n className={CSS.BE(\"color-swatch\", \"dropdown\")}\n keepMounted={false}\n >\n {swatch}\n <Picker value={value} onChange={onChange} />\n </Dropdown.Dialog>\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\nexport const preventDefault = (e: { preventDefault: () => void }): void =>\n e.preventDefault();\n\nexport const stopPropagation = (e: { stopPropagation: () => void }): void =>\n e.stopPropagation();\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 forwardRef,\n type DetailedHTMLProps,\n type HTMLAttributes,\n type ReactElement,\n} from \"react\";\n\nimport { direction, location } from \"@synnaxlabs/x\";\n\nimport { CSS } from \"@/css\";\nimport { preventDefault } from \"@/util/event\";\n\nimport \"@/resize/Core.css\";\n\nexport interface CoreProps\n extends DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement> {\n location: location.Crude;\n size: number;\n onDragStart: (e: React.DragEvent<HTMLDivElement>) => void;\n sizeUnits?: \"px\" | \"%\";\n showHandle?: boolean;\n}\n\nexport const Core = forwardRef(\n (\n {\n location: cloc,\n style,\n size,\n className,\n children,\n onDragStart,\n sizeUnits = \"px\",\n showHandle = true,\n ...props\n }: CoreProps,\n ref,\n ): ReactElement => {\n const loc_ = location.construct(cloc);\n const dir = location.direction(loc_);\n const dim = direction.dimension(dir);\n return (\n <div\n className={CSS(CSS.B(\"resize\"), CSS.loc(loc_), CSS.dir(dir), className)}\n style={{ [dim]: `${size}${sizeUnits}`, ...style }}\n ref={ref}\n {...props}\n >\n {children}\n {showHandle && (\n <div\n draggable\n className={CSS(\n CSS.BE(\"resize\", \"handle\"),\n CSS.bordered(location.swap(loc_)),\n )}\n onDragStart={onDragStart}\n onDrag={preventDefault}\n onDragEnd={preventDefault}\n />\n )}\n </div>\n );\n },\n);\n\nCore.displayName = \"Resize.Core\";\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 Children,\n type ForwardedRef,\n forwardRef,\n useCallback,\n useState,\n useEffect,\n useRef,\n type RefObject,\n} from \"react\";\n\nimport { box, direction, type xy } from \"@synnaxlabs/x\";\n\nimport { Align } from \"@/align\";\nimport { CSS } from \"@/css\";\nimport { Core } from \"@/resize/Core\";\n\nimport \"@/resize/Multiple.css\";\n\n/** Props for the {@link Resize.Multiple} component. */\nexport interface MultipleProps extends Align.SpaceProps {\n sizeDistribution: number[];\n onDragHandle: (e: ResizeStartEvent, i: number) => void;\n}\n\nexport type ResizeStartEvent = xy.Client & { preventDefault: () => void };\n\n/** Props for the {@link Resize.useMultiple} hook. */\nexport interface UseMultipleProps {\n count: number;\n onResize?: (sizes: number[]) => void;\n direction?: direction.Crude;\n initialSizes?: number[];\n minSize?: number;\n}\n\n/** Return value of the {@link Resize.useMultiple} hook. */\nexport interface UseMultipleReturn {\n setSize: (i: number, size?: number) => void;\n props: Pick<MultipleProps, \"sizeDistribution\" | \"onDragHandle\" | \"direction\"> & {\n ref: RefObject<HTMLDivElement>;\n };\n}\n\ninterface MultipleState {\n sizeDistribution: number[];\n root: number | null;\n}\n\n/**\n * A hook that implements the control logic for {@link Resize.Multiple}. This hook\n * should be used in conjunction with {@link Resize.Multiple}.\n *\n * @param props - The a component props.\n * @param props.count - The number of panels to render. This should be the same as the\n * number of children passed to {@link Resize.Multiple}.\n * @param props.onResize - A callback executed when the panels are resized.\n * @param props.initialSizes - The initial sizes of the panels. This should be an array of\n * numbers, where each number is the initial size of the corresponding panel either in pixels\n * or as a decimal percentage. If this array is not provided (or is shorter than the expected length),\n * the (remaining) panels will be evenly distributed across the container.\n * @param props.direction - The direction in which the panels should be draggable. This should\n * be Default: \"x\"\n * @param props.minSize - The smallest size the panels can be resized to. Defaults to 100.\n *\n * @returns The props that should be passed to {@link Resize.Multiple} along with a few\n * utility functions. setSize can be used to manually set the size of a particular panel.\n */\nexport const useMultiple = ({\n onResize,\n count,\n initialSizes = [],\n minSize = 100,\n direction = \"x\",\n}: UseMultipleProps): UseMultipleReturn => {\n const ref = useRef<HTMLDivElement>(null);\n const [state, setState] = useState<MultipleState>({\n sizeDistribution: calculateInitialSizeDistribution(initialSizes, count),\n root: null,\n });\n\n const _handleResize = useCallback(\n (dragging: number, clientPos?: number, targetSize?: number) => {\n if (ref.current == null) return;\n const parentSize = box.dim(box.construct(ref.current), direction);\n setState((prev) =>\n handleResize(prev, parentSize, dragging, minSize, clientPos, targetSize),\n );\n },\n [minSize, setState, direction],\n );\n\n useEffect(\n () => onResize?.(state.sizeDistribution),\n [state.sizeDistribution, onResize],\n );\n\n const handleDragHandle = useCallback(\n (e: ResizeStartEvent, dragging: number): void => {\n e.preventDefault();\n const dim = direction === \"x\" ? \"clientX\" : \"clientY\";\n const handleMouseMove = (e: MouseEvent): void => _handleResize(dragging, e[dim]);\n const handleMouseUp = (): void => {\n setState((prev) => ({ ...prev, root: null }));\n document.removeEventListener(\"mousemove\", handleMouseMove);\n };\n setState((prev) => ({ ...prev, root: e[dim] }));\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp, { once: true });\n },\n [setState, direction, handleResize],\n );\n\n const setSize = useCallback(\n (i: number, size?: number) => _handleResize(i, undefined, size),\n [handleResize],\n );\n\n return {\n setSize,\n props: {\n direction,\n sizeDistribution: state.sizeDistribution,\n onDragHandle: handleDragHandle,\n ref,\n },\n };\n};\n\n/**\n * A set of panels that can be resized within their container. Resize.Multiple must be\n * used in conjunction with {@link Resize.useMultiple}.\n *\n * @param props - The component props. All unused props will be passed to the div\n * containing the div containing the panels. Generally these props should not be provided\n * directly, and you should instead spread the props returned from {@link Resize.useMultiple}.\n * The only exceptions to this are stylistic props (e.g. className, style, etc.) as well\n * as the `children` prop.\n */\nexport const Multiple = forwardRef(\n (\n {\n direction: direction_ = \"x\",\n children: _children,\n sizeDistribution,\n onDragHandle: onDrag,\n className,\n ...props\n }: MultipleProps,\n ref: ForwardedRef<HTMLDivElement>,\n ) => {\n const dir = direction.construct(direction_);\n const children = Children.toArray(_children);\n\n return (\n <Align.Space\n {...props}\n ref={ref}\n direction={dir}\n className={CSS(CSS.B(\"resize-multiple\"), className)}\n empty\n grow\n >\n {children.map((child, i) => (\n <Core\n onDragStart={(e) => onDrag(e, i)}\n key={i}\n location={direction.location(dir)}\n size={sizeDistribution[i] * 100}\n sizeUnits=\"%\"\n showHandle={i !== children.length - 1}\n >\n {child}\n </Core>\n ))}\n </Align.Space>\n );\n },\n);\nMultiple.displayName = \"Resize.Multiple\";\n\nconst calculateInitialSizeDistribution = (\n initial: number[],\n count: number,\n): number[] => {\n const total = initial.reduce((a, b) => a + b, 0);\n const gap = count - initial.length;\n if (gap <= 0) return initial.slice(0, count).map((v) => v / total);\n if (initial.every((v) => v <= 1)) {\n const remaining = 1 - total;\n return [...initial, ...Array(gap).fill(remaining / gap)];\n }\n return initial.map(() => 1 / count);\n};\n\nconst handleResize = (\n prev: MultipleState,\n parentSize: number,\n dragging: number,\n minSize: number,\n clientPos?: number,\n targetSize?: number,\n): MultipleState => {\n const diffPercentage = calculateDiffPercentage(\n prev,\n parentSize,\n dragging,\n clientPos,\n targetSize,\n );\n const [sizeDistribution, changed] = resizeWithSibling(\n prev.sizeDistribution,\n dragging,\n diffPercentage,\n minSize / parentSize,\n );\n const root = changed ? clientPos ?? null : prev.root;\n return { ...prev, sizeDistribution, root };\n};\n\nexport const calculateDiffPercentage = (\n prev: MultipleState,\n parentSize: number,\n dragging: number,\n clientPos?: number,\n targetSize?: number,\n): number => {\n let diff: number;\n // If the caller provided a target size, prefer that.\n if (targetSize != null) {\n // If the target size is a pixel value, convert it to a percentage.\n if (targetSize > 1) targetSize = targetSize / parentSize;\n diff = targetSize - prev.sizeDistribution[dragging];\n } else if (clientPos != null) {\n if (prev.root === null) throw new Error(\"resize root is null during handle drag\");\n diff = (clientPos - prev.root) / parentSize;\n } else throw new Error(\"must provide either a MouseEvent or a targetSize\");\n return diff;\n};\n\nconst resizeWithSibling = (\n prevDistribution: number[],\n item: number,\n diff: number,\n minSizePercent: number,\n): [number[], boolean] => {\n let next = item;\n\n // The while loops find a pane we can actually resize.\n while (next > 0 && prevDistribution[next] + diff <= minSizePercent) next--;\n const nextSize = prevDistribution[next] + diff;\n\n const nextSibling = findResizableSibling(\n next,\n prevDistribution,\n minSizePercent,\n diff,\n );\n const nextSiblingSize = prevDistribution[nextSibling] - diff;\n // This means we can't resize any panes so we return null to indicate that the next\n // set of sizes should remain the same.\n if (nextSize < minSizePercent || nextSiblingSize < minSizePercent)\n return [prevDistribution, false];\n\n return [\n prevDistribution.map((p, i) => {\n if (i === next) return nextSize;\n if (i === nextSibling) return nextSiblingSize;\n return p;\n }),\n true,\n ];\n};\n\nconst findResizableSibling = (\n item: number,\n sizes: number[],\n minSize: number,\n diff: number,\n): number => {\n const f = item === sizes.length - 1 ? findBackward : findForward;\n return f(item, sizes, minSize, diff);\n};\n\nconst findForward = (\n start: number,\n sizes: number[],\n minSize: number,\n diff: number,\n): number => {\n let i = start + 1;\n while (i < sizes.length - 1 && sizes[i] - diff <= minSize) i++;\n return i;\n};\n\nconst findBackward = (\n start: number,\n sizes: number[],\n minSize: number,\n diff: number,\n): number => {\n let i = start - 1;\n while (i > 0 && sizes[i] - diff <= minSize) i--;\n return i;\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 ReactElement, useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { box, clamp, location } from \"@synnaxlabs/x\";\nimport { clsx } from \"clsx\";\n\nimport { CSS } from \"@/css\";\nimport { useCursorDrag } from \"@/hooks/useCursorDrag\";\nimport { Core, type CoreProps } from \"@/resize/Core\";\n\n/** Props for the {@link Single} component. */\nexport interface SingleProps\n extends Omit<CoreProps, \"showHandle\" | \"size\" | \"onResize\" | \"onDragStart\" | \"ref\"> {\n initialSize?: number;\n minSize?: number;\n maxSize?: number;\n onResize?: (size: number, box: box.Box) => void;\n collapseThreshold?: number;\n onCollapse?: () => void;\n}\n\nconst COLLAPSED_SIZE = 2;\n\n/**\n * A panel that can be resized in one direction by dragging its handle.\n *\n * @param props - The component props. All unused props will be passed to the div\n * containing the content.\n * @param props.location - The the location of the panel. The drag handle will be on the opposite side.\n * @param props.minSize - The smallest size the panel can be resized to.\n * @param props.maxSize - The largest size the panel can be resized to.\n * @param props.onResize - A callback executed when the panel is resized.\n */\nexport const Single = ({\n onCollapse,\n onResize,\n location: location_ = \"left\",\n minSize = 100,\n maxSize = Infinity,\n initialSize = 200,\n collapseThreshold = Infinity,\n className,\n ...props\n}: SingleProps): ReactElement => {\n const [size, setSize] = useState(clamp(initialSize, minSize, maxSize));\n const marker = useRef<number | null>(null);\n const loc = location.construct(location_);\n\n const calcNextSize = useCallback(\n (b: box.Box) => {\n if (marker.current === null) return 0;\n const dim =\n box.dim(b, location.direction(loc), true) *\n (1 - 2 * Number([\"bottom\", \"right\"].includes(loc)));\n const rawNextSize = marker.current + dim;\n const nextSize = clamp(rawNextSize, minSize, maxSize);\n if ((nextSize - rawNextSize) / minSize > collapseThreshold) return COLLAPSED_SIZE;\n return nextSize;\n },\n [loc, minSize, maxSize, collapseThreshold],\n );\n\n const ref = useRef<HTMLDivElement>(null);\n\n const handleMove = useCallback(\n (dragRegion: box.Box) => {\n const nextSize = calcNextSize(dragRegion);\n setSize(nextSize);\n if (ref.current == null) return;\n onResize?.(nextSize, box.construct(ref.current));\n },\n [onResize, calcNextSize],\n );\n\n const handleStart = useCallback(\n () =>\n setSize((prev) => {\n marker.current = prev;\n return prev;\n }),\n [setSize],\n );\n\n const handleEnd = useCallback(\n (box: box.Box) => calcNextSize(box) === COLLAPSED_SIZE && onCollapse?.(),\n [onCollapse, calcNextSize],\n );\n\n useEffect(\n () =>\n setSize((prev) => {\n const nextSize = clamp(prev, minSize, maxSize);\n marker.current = nextSize;\n return nextSize;\n }),\n [minSize, maxSize],\n );\n\n const handleDragStart = useCursorDrag({\n onMove: handleMove,\n onStart: handleStart,\n onEnd: handleEnd,\n });\n\n return (\n <Core\n ref={ref}\n location={loc}\n size={size}\n onDragStart={handleDragStart}\n className={clsx(className, CSS.expanded(size !== COLLAPSED_SIZE))}\n {...props}\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\nexport const HAUL_TYPE = \"channel\";\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 CSSProperties,\n memo,\n type ReactElement,\n type RefObject,\n useCallback,\n useRef,\n useState,\n} from \"react\";\n\nimport { box, location, scale, xy } from \"@synnaxlabs/x\";\n\nimport { Align } from \"@/align\";\nimport { CSS } from \"@/css\";\nimport { useSyncedRef } from \"@/hooks\";\nimport { useCursorDrag } from \"@/hooks/useCursorDrag\";\nimport { type OptionalControl } from \"@/input/types\";\nimport { state } from \"@/state\";\nimport { preventDefault } from \"@/util/event\";\n\nimport \"@/vis/legend/Container.css\";\n\nexport interface ContainerProps\n extends Omit<Align.SpaceProps, \"onChange\">,\n Partial<OptionalControl<xy.XY>> {\n dragEnabled?: boolean;\n}\n\ntype CSSPosition = Partial<\n Pick<CSSProperties, \"left\" | \"right\" | \"top\" | \"bottom\" | \"display\">\n>;\n\nexport const intelligentPosition = (\n pos: xy.XY,\n ref: RefObject<HTMLDivElement>,\n): CSSPosition => {\n if (ref.current == null) return { display: \"none\" };\n const ret: CSSPosition = {};\n const parentBox = box.construct(ref.current.parentElement as HTMLDivElement);\n const b = box.construct(ref.current);\n if (pos.x > 0.8) {\n ret.right = `${(1 - pos.x) * box.width(parentBox) - box.width(b)}px`;\n } else if (pos.x < 0.2) {\n ret.left = `${pos.x * box.width(parentBox)}px`;\n } else {\n ret.left = `${pos.x * 100}%`;\n }\n if (pos.y > 0.8) {\n ret.bottom = `${(1 - pos.y) * box.height(parentBox) - box.height(b)}px`;\n } else if (pos.y < 0.2) {\n ret.top = `${pos.y * box.height(parentBox)}px`;\n } else {\n ret.top = `${pos.y * 100}%`;\n }\n return ret;\n};\n\nexport const Container = memo(\n ({\n className,\n value,\n onChange,\n style,\n draggable = true,\n ...props\n }: ContainerProps): ReactElement | null => {\n const [position, setPosition] = state.usePurePassthrough<xy.XY>({\n value,\n onChange,\n initial: xy.construct(0.1, 0.01),\n });\n\n const positionRef = useRef(position);\n const disabled = useSyncedRef(!draggable);\n const ref = useRef<HTMLDivElement | null>(null);\n const [intelligentPos, setIntelligentPos] = useState<CSSPosition>({});\n\n if (position !== null) style = { ...style, ...intelligentPos };\n\n const refCallback = useCallback((el: HTMLDivElement | null) => {\n ref.current = el;\n setIntelligentPos(intelligentPosition(xy.construct(position), ref));\n }, []);\n\n const calculatePosition = useCallback((b: box.Box): xy.XY => {\n if (ref.current?.parentElement == null) return positionRef.current;\n const bounds = box.construct(ref.current.parentElement);\n const d = box.reRoot(box.DECIMAL, location.TOP_LEFT);\n const s = scale.XY.scale(bounds).scale(d);\n const el = s.box(box.construct(ref.current));\n const clamp = scale.XY.clamp(\n box.construct(box.topLeft(d), {\n width: box.width(d) - box.width(el),\n height: box.height(d) - box.height(el),\n }),\n );\n return clamp.pos(\n xy.translate(xy.construct(positionRef.current), box.signedDims(s.box(b))),\n );\n }, []);\n\n const handleCursorDragStart = useCursorDrag({\n onMove: useCallback(\n (box: box.Box) => {\n if (disabled.current) return;\n const pos = calculatePosition(box);\n setIntelligentPos(intelligentPosition(xy.construct(pos), ref));\n },\n [setPosition],\n ),\n onEnd: useCallback((box: box.Box) => {\n if (disabled.current) return;\n positionRef.current = calculatePosition(box);\n }, []),\n });\n\n return (\n <Align.Space\n className={CSS(className, CSS.B(\"legend\"))}\n bordered\n rounded\n style={style}\n onDragStart={handleCursorDragStart}\n draggable={draggable}\n ref={refCallback}\n {...props}\n onDrag={preventDefault}\n onDragEnd={preventDefault}\n size=\"small\"\n />\n );\n },\n);\nContainer.displayName = \"Legend.Container\";\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 ReactElement, useState } from \"react\";\n\nimport { Align } from \"@/align\";\nimport { Color } from \"@/color\";\nimport { Text } from \"@/text\";\nimport { Container, type ContainerProps } from \"@/vis/legend/Container\";\n\ninterface SimpleEntry {\n key: string;\n label: string;\n color: Color.Crude;\n}\n\nexport interface SimpleProps extends Omit<ContainerProps, \"value\" | \"onChange\"> {\n data?: SimpleEntry[];\n onEntryChange?: (value: SimpleEntry) => void;\n position?: ContainerProps[\"value\"];\n onPositionChange?: ContainerProps[\"onChange\"];\n}\n\nexport const Simple = ({\n data = [],\n onEntryChange,\n position,\n onPositionChange,\n ...props\n}: SimpleProps): ReactElement | null => {\n const [pickerVisible, setPickerVisible] = useState<boolean>(false);\n\n if (data.length === 0) return null;\n\n return (\n <Container\n {...props}\n draggable={!pickerVisible}\n value={position}\n onChange={onPositionChange}\n >\n {data\n .sort((a, b) => a.label.localeCompare(b.label))\n .map(({ key, color, label }) => (\n <Align.Space\n key={key}\n style={{ cursor: \"pointer\" }}\n direction=\"x\"\n align=\"center\"\n >\n <Color.Swatch\n value={color}\n onChange={(c) => onEntryChange?.({ key, color: c, label })}\n onVisibleChange={setPickerVisible}\n size=\"small\"\n />\n <Text.MaybeEditable\n level=\"small\"\n value={label}\n onChange={(l) => onEntryChange?.({ key, color, label: l })}\n noWrap\n />\n </Align.Space>\n ))}\n </Container>\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 CanvasHTMLAttributes,\n type DetailedHTMLProps,\n type ReactElement,\n useCallback,\n useRef,\n} from \"react\";\n\nimport { box, runtime, scale, xy } from \"@synnaxlabs/x\";\n\nimport { Aether } from \"@/aether\";\nimport { CSS } from \"@/css\";\nimport { type UseResizeHandler, useResize } from \"@/hooks\";\nimport { canvas } from \"@/vis/canvas/aether\";\n\nimport \"@/vis/canvas/Canvas.css\";\n\ntype HTMLCanvasProps = DetailedHTMLProps<\n CanvasHTMLAttributes<HTMLCanvasElement>,\n HTMLCanvasElement\n>;\n\nexport interface CanvasProps extends Omit<HTMLCanvasProps, \"ref\"> {\n resizeDebounce?: number;\n}\n\nconst ZERO_PROPS = { region: box.ZERO, dpr: 1, os: runtime.getOS() as runtime.OS };\n\ninterface Canvases {\n gl: HTMLCanvasElement | null;\n lower2d: HTMLCanvasElement | null;\n upper2d: HTMLCanvasElement | null;\n bootstrapped: boolean;\n}\n\nconst ZERO_CANVASES: Canvases = {\n gl: null,\n lower2d: null,\n upper2d: null,\n bootstrapped: false,\n};\n\nexport const Canvas = Aether.wrap<CanvasProps>(\n canvas.Canvas.TYPE,\n ({\n children,\n resizeDebounce: debounce = 100,\n className,\n aetherKey,\n ...props\n }): ReactElement => {\n const [{ path }, { bootstrapped }, setState] = Aether.use({\n aetherKey,\n type: canvas.Canvas.TYPE,\n schema: canvas.canvasStateZ,\n initialState: ZERO_PROPS,\n });\n\n const canvases = useRef<Canvases>({ ...ZERO_CANVASES });\n\n const handleResize = useCallback(\n (region: box.Box) => {\n if (canvases.current.bootstrapped)\n setState((p) => ({\n bootstrapped: true,\n region,\n dpr: window.devicePixelRatio,\n os: runtime.getOS({ default: \"Windows\" }) as runtime.OS,\n }));\n },\n [setState],\n );\n\n const resizeRef = useResize(handleResize, { debounce });\n\n const refCallback = useCallback(\n (el: HTMLCanvasElement | null) => {\n resizeRef(el);\n if (el == null) return;\n\n // Store the canvas\n if (el.className.includes(\"gl\")) canvases.current.gl = el;\n else if (el.className.includes(\"upper2d\")) canvases.current.upper2d = el;\n else canvases.current.lower2d = el;\n const { gl, lower2d, upper2d, bootstrapped } = canvases.current;\n\n if (gl == null || lower2d == null || upper2d == null || bootstrapped) return;\n\n // Bootstrap the canvas\n canvases.current.bootstrapped = true;\n const glCanvas = gl.transferControlToOffscreen();\n const upper2dCanvas = upper2d.transferControlToOffscreen();\n const lower2dCanvas = lower2d.transferControlToOffscreen();\n setState(\n {\n glCanvas,\n upper2dCanvas,\n lower2dCanvas,\n bootstrap: true,\n bootstrapped: false,\n region: box.construct(gl),\n dpr: window.devicePixelRatio,\n os: runtime.getOS({ default: \"Windows\" }) as runtime.OS,\n },\n [glCanvas, upper2dCanvas, lower2dCanvas],\n );\n },\n [setState],\n );\n\n return (\n <>\n <canvas\n ref={refCallback}\n className={CSS(CSS.BM(\"canvas\", \"lower2d\"), className)}\n {...props}\n />\n <canvas\n ref={refCallback}\n className={CSS(CSS.BM(\"canvas\", \"gl\"), className)}\n {...props}\n />\n <canvas\n ref={refCallback}\n className={CSS(CSS.BM(\"canvas\", \"upper2d\"), className)}\n {...props}\n />\n <Aether.Composite path={path}>{bootstrapped && children}</Aether.Composite>\n </>\n );\n },\n);\n\nexport const useRegion = (f: UseResizeHandler): React.RefCallback<HTMLElement> =>\n useResize(\n useCallback(\n (b, el) => {\n const canvas = document.querySelector(\".pluto-canvas--lower2d\");\n if (canvas == null) return;\n const b2 = box.construct(canvas);\n b = scale.XY.translate(xy.scale(box.topLeft(b2), -1)).box(b);\n f(b, el);\n },\n [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 {\n type CSSProperties,\n type DetailedHTMLProps,\n type HTMLAttributes,\n type PropsWithChildren,\n type ReactElement,\n createContext,\n useCallback,\n useContext as reactUseContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport { location, type Destructor, deep, direction, box } from \"@synnaxlabs/x\";\nimport { type z } from \"zod\";\n\nimport { Aether } from \"@/aether\";\nimport { type Color } from \"@/color\";\nimport { CSS } from \"@/css\";\nimport { useMemoDeepEqualProps, useEffectCompare } from \"@/hooks\";\nimport { type Viewport } from \"@/viewport\";\nimport { Canvas } from \"@/vis/canvas\";\nimport { lineplot } from \"@/vis/lineplot/aether\";\nimport { type GridPositionSpec, filterGridPositions } from \"@/vis/lineplot/aether/grid\";\n\nimport \"@/vis/lineplot/LinePlot.css\";\n\ntype HTMLDivProps = DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>;\n\nexport interface LinePlotContextValue {\n setAxis: (meta: GridPositionSpec) => void;\n removeAxis: (key: string) => void;\n setLine: (meta: LineSpec) => void;\n removeLine: (key: string) => void;\n lines: LineSpec[];\n setViewport: (viewport: Viewport.UseEvent) => void;\n addViewportHandler: (handler: Viewport.UseHandler) => Destructor;\n}\n\nconst Context = createContext<LinePlotContextValue | null>(null);\n\nexport const useContext = (component: string): LinePlotContextValue => {\n const ctx = reactUseContext(Context);\n if (ctx == null)\n throw new Error(`Cannot to use ${component} as a non-child of LinePlot.`);\n return ctx;\n};\n\nexport const useViewport = (handle: Viewport.UseHandler): void => {\n const ctx = useContext(\"Viewport\");\n const { addViewportHandler } = ctx;\n useEffect(() => addViewportHandler(handle), [addViewportHandler, handle]);\n};\n\nexport const useGridPosition = (\n meta: GridPositionSpec,\n component: string,\n): CSSProperties => {\n const { setAxis, removeAxis } = useContext(component);\n const { key } = meta;\n useEffectCompare(\n () => {\n location.outer.parse(meta.loc);\n setAxis(meta);\n return () => removeAxis(meta.key);\n },\n ([a], [b]) => deep.equal(a, b),\n [meta],\n );\n const dir = direction.swap(location.direction(meta.loc));\n const gridArea =\n dir === \"x\"\n ? `axis-start-${key} / plot-start / axis-end-${key} / plot-end`\n : `plot-start / axis-start-${key} / plot-end / axis-end-${key}`;\n return { gridArea };\n};\n\nexport interface LineSpec {\n key: string;\n color: Color.Crude;\n label: string;\n}\n\ntype LineState = LineSpec[];\n\nexport interface LinePlotProps\n extends PropsWithChildren,\n Pick<z.input<typeof lineplot.linePlotStateZ>, \"clearOverscan\" | \"hold\">,\n HTMLDivProps {\n resizeDebounce?: number;\n}\n\nexport const LinePlot = Aether.wrap<LinePlotProps>(\n \"LinePlot\",\n ({\n aetherKey,\n style,\n resizeDebounce: debounce = 0,\n clearOverscan,\n children,\n hold,\n ...props\n }): ReactElement => {\n const [lines, setLines] = useState<LineState>([]);\n\n const aetherMemoProps = useMemoDeepEqualProps({ clearOverscan, hold });\n\n const [{ path }, { grid }, setState] = Aether.use({\n aetherKey,\n type: lineplot.LinePlot.TYPE,\n schema: lineplot.linePlotStateZ,\n initialState: {\n container: box.ZERO,\n viewport: box.DECIMAL,\n grid: [],\n ...aetherMemoProps,\n },\n });\n\n useEffect(\n () => setState((prev) => ({ ...prev, ...aetherMemoProps })),\n [aetherMemoProps],\n );\n\n const viewportHandlers = useRef<Map<Viewport.UseHandler, null>>(new Map());\n\n const addViewportHandler = useCallback(\n (handler: Viewport.UseHandler) => {\n viewportHandlers.current.set(handler, null);\n return () => viewportHandlers.current.delete(handler);\n },\n [viewportHandlers],\n );\n\n const setViewport: Viewport.UseHandler = useCallback(\n (args) => {\n const { mode, box, stage } = args;\n if (\n (mode === \"pan\" && stage !== \"start\") ||\n mode === \"zoom\" ||\n (mode === \"zoomReset\" && stage === \"start\")\n ) {\n setState((prev) => ({ ...prev, viewport: box }));\n }\n viewportHandlers.current.forEach((_, handler) => handler(args));\n },\n [setState],\n );\n\n // We use a single resize handler for both the container and plotting region because\n // the container is guaranteed to only resize if the plotting region does. This allows\n // us to save a window observer.\n const handleResize = useCallback(\n (container: box.Box) => setState((prev) => ({ ...prev, container })),\n [setState],\n );\n\n const ref = Canvas.useRegion(handleResize);\n\n const setAxis: LinePlotContextValue[\"setAxis\"] = useCallback(\n (meta: GridPositionSpec) =>\n setState((prev) => ({\n ...prev,\n grid: [...prev.grid.filter(({ key }) => key !== meta.key), meta],\n })),\n [setState],\n );\n\n const removeAxis = useCallback(\n (key: string) =>\n setState((prev) => ({\n ...prev,\n grid: prev.grid.filter(({ key: k }) => k !== key),\n })),\n [setState],\n );\n\n const setLine = useCallback(\n (meta: LineSpec) =>\n setLines((prev) => [...prev.filter(({ key }) => key !== meta.key), meta]),\n [setLines],\n );\n\n const removeLine = useCallback(\n (key: string) => setLines((prev) => prev.filter(({ key: k }) => k !== key)),\n [setLine],\n );\n\n const cssGrid = buildPlotGrid(grid);\n\n const contextValue = useMemo<LinePlotContextValue>(\n () => ({\n lines,\n setAxis,\n removeAxis,\n setLine,\n removeLine,\n setViewport,\n addViewportHandler,\n }),\n [\n lines,\n setAxis,\n removeAxis,\n setLine,\n removeLine,\n setViewport,\n addViewportHandler,\n ],\n );\n\n return (\n <div\n className={CSS.B(\"line-plot\")}\n style={{ ...style, ...cssGrid }}\n ref={ref}\n {...props}\n >\n <Context.Provider value={contextValue}>\n <Aether.Composite path={path}>{children}</Aether.Composite>\n </Context.Provider>\n </div>\n );\n },\n);\n\nconst buildPlotGrid = (grid: GridPositionSpec[]): CSSProperties => {\n const builder = CSS.newGridBuilder();\n filterGridPositions(\"top\", grid).forEach(({ key, size }) =>\n builder.addRow(`axis-start-${key}`, `axis-end-${key}`, size),\n );\n builder.addRow(\"plot-start\", \"plot-end\", \"minmax(0, 1fr)\");\n filterGridPositions(\"bottom\", grid).forEach(({ key, size }) =>\n builder.addRow(`axis-start-${key}`, `axis-end-${key}`, size),\n );\n filterGridPositions(\"left\", grid).forEach(({ key, size }) =>\n builder.addColumn(`axis-start-${key}`, `axis-end-${key}`, size),\n );\n builder.addColumn(\"plot-start\", \"plot-end\", \"minmax(0, 1fr)\");\n filterGridPositions(\"right\", grid).forEach(({ key, size }) =>\n builder.addColumn(`axis-start-${key}`, `axis-end-${key}`, size),\n );\n return builder.build();\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 ReactElement, useLayoutEffect } from \"react\";\n\nimport { type Optional } from \"@synnaxlabs/x\";\n\nimport { Aether } from \"@/aether\";\nimport { useMemoDeepEqualProps } from \"@/memo\";\nimport { line } from \"@/vis/line/aether\";\n\nexport interface LineProps extends Optional<Omit<line.State, \"key\">, \"strokeWidth\"> {}\n\nexport const Line = Aether.wrap<LineProps>(\n \"Line\",\n ({ aetherKey, ...props }): ReactElement | null => {\n const [, , setState] = Aether.use({\n aetherKey,\n type: line.Line.TYPE,\n schema: line.stateZ,\n initialState: props,\n });\n const memoProps = useMemoDeepEqualProps(props);\n useLayoutEffect(() => setState(memoProps), [memoProps]);\n return null;\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 ReactElement, useEffect } from \"react\";\n\nimport { Aether } from \"@/aether\";\nimport { Line as Core } from \"@/vis/line\";\nimport { useContext } from \"@/vis/lineplot/LinePlot\";\n\nexport interface LineProps extends Core.LineProps {}\n\nexport const Line = Aether.wrap<LineProps>(\n \"Line\",\n ({ aetherKey, color, label = \"\", ...props }): ReactElement => {\n const { setLine, removeLine } = useContext(\"Line\");\n useEffect(() => {\n setLine({\n key: aetherKey,\n color,\n label,\n });\n return () => removeLine(aetherKey);\n }, [label, color]);\n return <Core.Line aetherKey={aetherKey} color={color} label={label} {...props} />;\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 CSSProperties, type ReactElement, forwardRef } from \"react\";\n\nimport { box } from \"@synnaxlabs/x\";\n\nimport { CSS } from \"@/css\";\nimport { type UseReturn, type Mode } from \"@/viewport/use\";\n\nimport \"@/viewport/Mask.css\";\n\ntype DivProps = React.DetailedHTMLProps<\n React.HTMLAttributes<HTMLDivElement>,\n HTMLDivElement\n>;\n\nexport interface MaskProps\n extends Omit<UseReturn, \"ref\">,\n Omit<DivProps, \"onDragStart\" | \"onDragEnd\" | \"onDrag\" | \"ref\" | \"onDoubleClick\"> {}\n\nconst MODE_CURSORS: Record<Mode, CSSProperties[\"cursor\"]> = {\n select: \"pointer\",\n zoom: \"crosshair\",\n pan: \"grab\",\n zoomReset: \"crosshair\",\n click: \"pointer\",\n};\n\nexport const Mask = forwardRef<HTMLDivElement, MaskProps>(\n (\n { className, mode, maskBox, children, style, ...props },\n ref,\n ): ReactElement | null => (\n <div\n ref={ref}\n className={CSS(CSS.noSelect, CSS.BE(\"viewport-mask\", \"container\"), className)}\n style={{\n cursor: MODE_CURSORS[mode],\n ...style,\n }}\n {...props}\n >\n <div\n style={{\n ...box.css(maskBox),\n display: box.isZero(maskBox) ? \"none\" : \"block\",\n }}\n className={CSS.BE(\"viewport-mask\", \"selection\")}\n />\n {children}\n </div>\n ),\n);\nMask.displayName = \"ZoomPanMask\";\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 { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { box, xy, dimensions, location, scale } from \"@synnaxlabs/x\";\n\nimport { useMemoCompare } from \"@/hooks\";\nimport { useStateRef } from \"@/hooks/ref\";\nimport { Triggers } from \"@/triggers\";\n\nexport interface UseEvent {\n box: box.Box;\n cursor: xy.XY;\n mode: Mode;\n stage: Triggers.Stage;\n}\n\nexport type UseHandler = (e: UseEvent) => void;\n\nexport type UseTriggers = Triggers.ModeConfig<TriggerMode>;\n\nexport interface UseProps {\n triggers?: UseTriggers;\n onChange?: UseHandler;\n resetOnDoubleClick?: boolean;\n threshold?: dimensions.Dimensions;\n initial?: box.Box;\n}\n\nexport interface UseReturn {\n mode: Mode;\n maskBox: box.Box;\n ref: React.MutableRefObject<HTMLDivElement | null>;\n}\n\ntype StringLiteral<T> = T extends string ? (string extends T ? never : T) : never;\n\nconst TRIGGER_MODES = [\"zoom\", \"pan\", \"select\", \"zoomReset\"] as const;\nexport const MODES = [...TRIGGER_MODES, \"click\"] as const;\nexport type Mode = StringLiteral<(typeof MODES)[number]>;\ntype TriggerMode = StringLiteral<(typeof TRIGGER_MODES)[number]>;\nexport const MASK_MODES: Mode[] = [\"zoom\", \"select\"];\n\nexport const ZOOM_DEFAULT_TRIGGERS: UseTriggers = {\n defaultMode: \"zoom\",\n zoom: [[\"MouseLeft\"]],\n zoomReset: [[\"MouseLeft\", \"Control\"]],\n pan: [[\"MouseLeft\", \"Shift\"]],\n select: [[\"MouseLeft\", \"Alt\"]],\n};\n\nexport const PAN_DEFAULT_TRIGGERS: UseTriggers = {\n defaultMode: \"pan\",\n pan: [[\"MouseLeft\"]],\n zoom: [[\"MouseLeft\", \"Shift\"]],\n zoomReset: [[\"MouseLeft\", \"Control\"]],\n select: [[\"MouseLeft\", \"Alt\"]],\n};\n\nexport const SELECT_DEFAULT_TRIGGERS: UseTriggers = {\n defaultMode: \"select\",\n select: [[\"MouseLeft\"]],\n pan: [[\"MouseLeft\", \"Shift\"]],\n zoom: [[\"MouseLeft\", \"Alt\"]],\n zoomReset: [[\"MouseLeft\", \"Control\"]],\n};\n\nexport const DEFAULT_TRIGGERS: Record<Mode, UseTriggers> = {\n zoom: ZOOM_DEFAULT_TRIGGERS,\n pan: PAN_DEFAULT_TRIGGERS,\n select: SELECT_DEFAULT_TRIGGERS,\n zoomReset: ZOOM_DEFAULT_TRIGGERS,\n click: ZOOM_DEFAULT_TRIGGERS,\n};\n\nconst purgeMouseTriggers = (triggers: UseTriggers): UseTriggers => {\n const e = Object.entries(triggers) as Array<\n [TriggerMode | \"defaultMode\", Triggers.Trigger[]]\n >;\n return Object.fromEntries(\n e.map(([key, value]: [string, Triggers.Trigger[]]) => {\n if (key === \"defaultMode\") return [key, value];\n return [\n key,\n value\n .map((t) => t.filter((k) => k !== \"MouseLeft\"))\n .filter((t) => t.length > 0),\n ];\n }),\n ) as unknown as UseTriggers;\n};\n\nconst D = box.construct(0, 0, 1, 1, location.TOP_LEFT);\n\nconst DEFAULT_THRESHOLD = { width: 30, height: 30 };\n\nexport const use = ({\n onChange,\n triggers: initialTriggers,\n initial = D,\n threshold: threshold_ = DEFAULT_THRESHOLD,\n}: UseProps): UseReturn => {\n const defaultMode = initialTriggers?.defaultMode ?? \"zoom\";\n\n const [maskBox, setMaskBox] = useState<box.Box>(box.ZERO);\n const [maskMode, setMaskMode] = useState<Mode>(defaultMode);\n const [stateRef, setStateRef] = useStateRef<box.Box>(initial);\n const canvasRef = useRef<HTMLDivElement | null>(null);\n const threshold = dimensions.construct(threshold_);\n\n useEffect(() => setStateRef(initial), [initial]);\n useEffect(() => setMaskMode(defaultMode), [defaultMode]);\n\n const [triggerConfig, reducedTriggerConfig, purgedTriggers, reducedPurgedTriggers] =\n useMemoCompare(\n (): [UseTriggers, Triggers.Trigger[], UseTriggers, Triggers.Trigger[]] => {\n const config: UseTriggers = {\n ...DEFAULT_TRIGGERS[defaultMode],\n ...initialTriggers,\n };\n const reducedTriggers = Triggers.flattenConfig(config);\n const mouseTriggers = purgeMouseTriggers(config);\n return [\n config,\n reducedTriggers,\n mouseTriggers,\n Triggers.flattenConfig(mouseTriggers),\n ];\n },\n Triggers.compareModeConfigs,\n [initialTriggers],\n );\n\n const handleDrag = useCallback<Triggers.DragCallback>(\n ({ box: box_, triggers, stage, cursor }): void => {\n if (canvasRef.current == null) return;\n const mode = Triggers.determineMode<TriggerMode>(triggerConfig, triggers);\n const canvas = box.construct(canvasRef.current);\n if (mode == null) return;\n\n if (mode === \"zoomReset\") {\n setMaskBox(box.ZERO);\n onChange?.({ box: box.DECIMAL, mode, stage, cursor });\n return setStateRef(box.DECIMAL);\n }\n\n if (stage === \"end\") {\n // This prevents clicks from being registered as a drag\n if (box.width(box_) < 5 && box.height(box_) < 5) {\n if (mode === \"zoom\") setMaskBox(box.ZERO);\n onChange?.({ box: stateRef.current, mode: \"click\", stage, cursor });\n return;\n }\n return setStateRef((prev) => {\n if (mode === \"pan\") {\n const next = handlePan(box_, prev, canvas);\n if (next === null) return prev;\n onChange?.({ box: next, mode, stage, cursor });\n return next;\n }\n const next = handleZoomSelect(box_, prev, canvas);\n if (next === null) return prev;\n onChange?.({ box: next, mode, stage, cursor });\n\n if (mode === \"zoom\") {\n setMaskBox(box.ZERO);\n return next;\n }\n return prev;\n });\n }\n\n if (MASK_MODES.includes(mode)) {\n if (box.height(box_) < 5 && box.width(box_) < 5) return;\n return setMaskBox(\n scale.XY.scale(canvas)\n .clamp(canvas)\n .translate({ x: -box.left(canvas), y: -box.top(canvas) })\n .box(fullSize(threshold, box_, canvas)),\n );\n }\n\n setMaskBox((prev) => (!box.isZero(prev) ? box.ZERO : prev));\n const next = handlePan(box_, stateRef.current, canvas);\n onChange?.({\n box: next,\n mode,\n stage,\n cursor,\n });\n },\n [\n setMaskBox,\n setMaskMode,\n onChange,\n triggerConfig,\n threshold_.height,\n threshold_.width,\n setStateRef,\n canvasRef,\n ],\n );\n\n const handleZoomSelect = useCallback(\n (box: box.Box, prev: box.Box, canvas: box.Box): box.Box | null =>\n constructScale(prev, canvas).box(fullSize(threshold, box, canvas)),\n [threshold_],\n );\n\n Triggers.useDrag({\n bound: canvasRef,\n onDrag: handleDrag,\n triggers: reducedTriggerConfig,\n loose: true,\n });\n\n const handleKeyTrigger = useCallback(\n ({ triggers, stage }: Triggers.UseEvent) => {\n if (stage === \"end\") return setMaskMode(defaultMode);\n const mode = Triggers.determineMode<TriggerMode>(purgedTriggers, triggers);\n if (mode == null) return;\n setMaskMode(mode);\n },\n [purgedTriggers, defaultMode, onChange],\n );\n\n Triggers.use({\n triggers: reducedPurgedTriggers,\n callback: handleKeyTrigger,\n region: canvasRef,\n });\n\n return {\n maskBox,\n ref: canvasRef,\n mode: maskMode,\n };\n};\n\nconst constructScale = (prev: box.Box, canvas: box.Box): scale.XY =>\n scale.XY.scale(canvas).clamp(canvas).scale(prev);\n\nconst handlePan = (b: box.Box, prev: box.Box, canvas: box.Box): box.Box => {\n let dims = box.signedDims(constructScale(prev, canvas).box(b));\n dims = { signedWidth: -dims.signedWidth, signedHeight: -dims.signedHeight };\n return scale.XY.translate(xy.construct(dims)).box(prev);\n};\n\nconst fullSize = (\n threshold: dimensions.Dimensions,\n b: box.Box,\n parent: box.Box,\n): box.Box => {\n if (box.height(b) <= threshold.height)\n return box.construct(\n box.left(b),\n box.top(parent),\n box.width(b),\n box.height(parent),\n );\n if (box.width(b) <= threshold.width)\n return box.construct(\n box.left(parent),\n box.top(b),\n box.width(parent),\n box.height(b),\n );\n return b;\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 PropsWithChildren,\n useContext as reactUseContext,\n createContext,\n type ReactElement,\n} from \"react\";\n\nimport { type Key, type KeyedRenderableRecord } from \"@synnaxlabs/x\";\n\nimport { type UseTransformsReturn } from \"@/hooks/useTransforms\";\nimport { type ColumnSpec } from \"@/list/types\";\nimport { type state } from \"@/state\";\n\nexport interface ContextProps<\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n> extends Omit<UseTransformsReturn<E>, \"transform\"> {\n columnar: {\n columns: Array<ColumnSpec<K, E>>;\n setColumns: (\n cbk: (columns: Array<ColumnSpec<K, E>>) => Array<ColumnSpec<K, E>>,\n ) => void;\n };\n data: E[];\n sourceData: E[];\n setSourceData: state.Set<E[]>;\n select: {\n value: K[];\n onChange: (value: K[]) => void;\n onSelect?: (key: K) => void;\n clear?: () => void;\n setOnSelect: (cbk: (key: K) => void) => void;\n setClear: (cbk: () => void) => void;\n };\n hover: {\n value: number;\n onChange: state.Set<number>;\n };\n infinite: {\n hasMore: boolean;\n setHasMore: state.Set<boolean>;\n onFetchMore?: () => void;\n setOnFetchMore: (cbk: () => void) => void;\n };\n emptyContent?: ReactElement;\n setEmptyContent: (content: ReactElement) => void;\n}\n\nexport const Context = createContext<ContextProps>({\n columnar: {\n columns: [],\n setColumns: () => undefined,\n },\n sourceData: [],\n data: [],\n setTransform: () => undefined,\n deleteTransform: () => undefined,\n setSourceData: () => undefined,\n select: {\n value: [],\n onChange: () => undefined,\n onSelect: undefined,\n setOnSelect: () => undefined,\n clear: undefined,\n setClear: () => undefined,\n },\n infinite: {\n hasMore: false,\n setHasMore: () => undefined,\n onFetchMore: undefined,\n setOnFetchMore: () => undefined,\n },\n hover: {\n value: -1,\n onChange: () => undefined,\n },\n emptyContent: undefined,\n setEmptyContent: () => undefined,\n});\n\n/**\n * A hook to access the context information for a list. This hook should only be used\n * when you know what you are doing, and are looking to extend the functionality of a\n * list component.\n */\nexport const useContext = <\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n>(): ContextProps<K, E> => {\n return reactUseContext(Context) as unknown as ContextProps<K, E>;\n};\n\nexport interface ProviderProps<\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n> extends PropsWithChildren<unknown> {\n value: ContextProps<K, E>;\n}\n\nexport const Provider = <\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n>({\n value,\n children,\n}: ProviderProps<K, E>): ReactElement => {\n return (\n <Context.Provider value={value as unknown as ContextProps}>\n {children}\n </Context.Provider>\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 CSSProperties, type ReactElement, useEffect, useState } from \"react\";\n\nimport { Icon } from \"@synnaxlabs/media\";\nimport {\n compare,\n convertRenderV,\n type Key,\n type KeyedRenderableRecord,\n type RenderableRecord,\n type ArrayTransform,\n} from \"@synnaxlabs/x\";\n\nimport { Align } from \"@/align\";\nimport { CSS } from \"@/css\";\nimport { useContext } from \"@/list/Context\";\nimport { type ItemProps, type ColumnSpec as ListColumnT } from \"@/list/types\";\nimport { CONTEXT_SELECTED, CONTEXT_TARGET } from \"@/menu/ContextMenu\";\nimport { Text } from \"@/text\";\nimport { Theming } from \"@/theming\";\n\nimport \"@/list/Column.css\";\n\ntype SortState<E extends RenderableRecord> = [keyof E | null, boolean];\n\nexport interface ColumnHeaderProps<K extends Key, E extends KeyedRenderableRecord<K>> {\n columns: Array<ListColumnT<K, E>>;\n}\n\nconst SORT_TRANSFORM = \"sort\";\n\nconst Header = <K extends Key, E extends KeyedRenderableRecord<K, E>>({\n columns: initialColumns,\n}: ColumnHeaderProps<K, E>): ReactElement => {\n const {\n columnar: { columns, setColumns },\n sourceData,\n setTransform,\n deleteTransform,\n } = useContext<K, E>();\n\n const font = Theming.useTypography(\"p\").toString();\n const [sort, setSort] = useState<SortState<E>>([null, false]);\n\n const onSort = (k: keyof E): void => {\n const [prevSort, prevDir] = sort;\n if (prevSort === k) {\n if (!prevDir) {\n setSort([null, false]);\n deleteTransform(SORT_TRANSFORM);\n } else {\n setSort([k, !prevDir]);\n setTransform(SORT_TRANSFORM, sortTransform(k, !prevDir));\n }\n } else {\n setSort([k, true]);\n setTransform(SORT_TRANSFORM, sortTransform(k, true));\n }\n };\n\n useEffect(() => {\n setColumns((prev) =>\n columnWidths(prev.length === 0 ? initialColumns : prev, sourceData, font),\n );\n }, [font, sourceData, initialColumns]);\n\n return (\n <Align.Space\n direction=\"x\"\n size=\"medium\"\n className={CSS.BE(\"list-col-header\", \"container\")}\n >\n {columns\n .filter(({ visible = true }) => visible)\n .map(({ key, cWidth: width, name }) => {\n const [sortKey, dir] = sort;\n let endIcon;\n const entry = sourceData[0];\n if (key === sortKey) endIcon = dir ? <Icon.Caret.Up /> : <Icon.Caret.Down />;\n return (\n <Text.WithIcon\n className={CSS.BE(\"list-col-header\", \"item\")}\n key={key.toString()}\n justify=\"spaceBetween\"\n level=\"p\"\n endIcon={endIcon}\n style={{ width }}\n shrink={false}\n onClick={() => entry != null && key in entry && onSort(key as keyof E)}\n >\n {name}\n </Text.WithIcon>\n );\n })}\n </Align.Space>\n );\n};\n\nconst Item = <\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n>({\n entry,\n selected,\n columns,\n onSelect,\n index,\n hovered,\n ...props\n}: ItemProps<K, E>): ReactElement => {\n const handleSelect = (): void => onSelect?.(entry.key);\n return (\n <Align.Space\n id={entry.key.toString()}\n className={CSS(\n CONTEXT_TARGET,\n CSS.BE(\"list-col-item\", \"container\"),\n onSelect != null && CSS.BEM(\"list-col-item\", \"container\", \"selectable\"),\n hovered && CSS.BEM(\"list-col-item\", \"container\", \"hovered\"),\n selected && CSS.BEM(\"list-col-item\", \"container\", \"selected\"),\n selected && CONTEXT_SELECTED,\n )}\n direction=\"x\"\n onClick={handleSelect}\n onContextMenu={handleSelect}\n align=\"center\"\n {...props}\n size=\"medium\"\n >\n {columns\n .filter(({ visible = true }) => visible)\n .map((col) => (\n <ListColumnValue key={col.key.toString()} entry={entry} col={col} />\n ))}\n </Align.Space>\n );\n};\n\ninterface ListColumnValueProps<\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n> {\n entry: E;\n col: ListColumnT<K, E>;\n}\n\nconst ListColumnValue = <K extends Key, E extends KeyedRenderableRecord<K, E>>({\n entry,\n col: { width, ...col },\n}: ListColumnValueProps<K, E>): ReactElement | null => {\n const style: CSSProperties = {\n width: col.cWidth,\n userSelect: \"none\",\n padding: \"1rem\",\n flexShrink: 0,\n };\n if (col.render != null) return col.render({ key: col.key, entry, style });\n let rv: E[keyof E] | string;\n if (col.stringer != null) rv = col.stringer(entry);\n else rv = entry[col.key as keyof E];\n return (\n <Text.Text key={col.key.toString()} level=\"p\" style={style}>\n {convertRenderV(rv)}\n </Text.Text>\n );\n};\n\nconst columnWidths = <\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n>(\n columns: Array<ListColumnT<K, E>>,\n data: E[],\n font: string,\n): Array<ListColumnT<K, E>> => {\n const le = longestEntries(data, columns);\n return columns.map((col) => {\n if (col.width != null) col.cWidth = col.width;\n else {\n const { width: labelWidth } = Text.dimensions(col.name, font);\n const { width: entryWidth } = Text.dimensions(le[col.key as keyof E], font);\n col.cWidth = Math.max(labelWidth, entryWidth) * 1.1;\n }\n return col;\n });\n};\n\nconst longestEntries = <\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n>(\n data: E[],\n columns: Array<ListColumnT<K, E>>,\n): Record<keyof E, string> => {\n const longest = {} as const as Record<keyof E, string>;\n data.forEach((entry: E) =>\n columns.forEach(({ key, stringer }) => {\n const rv = entry[key as keyof E];\n if (rv == null) return;\n const value = stringer != null ? stringer(entry) : rv;\n if (!(key in longest) || value.length > longest[key as keyof E].length)\n longest[key as keyof E] = value;\n }),\n );\n return longest;\n};\n\nconst sortTransform =\n <\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n >(\n k: keyof E,\n dir: boolean,\n ): ArrayTransform<E> =>\n (data: E[]) => {\n if (data.length === 0) return data;\n return [...data].sort(compare.newFieldF(k, data[0], !dir));\n };\n\nexport const Column = {\n /**\n * The header for a column list.\n *\n * @param columns - The columns to render. See {@link ListColumnT}.\n */\n Header,\n /**\n * The item to use for a column list. This should be used as the child render prop\n * in a list render implmentation e.g. {@link List.Core.Virtual}.\n *\n * @param props - implements the {@link ItemProps} interface. All these props\n * should be provided by the list render implementation.\n */\n Item,\n /** The default height of a column list item. */\n itemHeight: 30,\n};\n","/**\n * react-virtual\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nexport { _extends as extends };\n//# sourceMappingURL=_rollupPluginBabelHelpers.mjs.map\n","/**\n * virtual-core\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\n\nexport { _extends as extends };\n//# sourceMappingURL=_rollupPluginBabelHelpers.mjs.map\n","/**\n * virtual-core\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nfunction memo(getDeps, fn, opts) {\n var _opts$initialDeps;\n var deps = (_opts$initialDeps = opts.initialDeps) != null ? _opts$initialDeps : [];\n var result;\n return function () {\n var depTime;\n if (opts.key && opts.debug != null && opts.debug()) depTime = Date.now();\n var newDeps = getDeps();\n var depsChanged = newDeps.length !== deps.length || newDeps.some(function (dep, index) {\n return deps[index] !== dep;\n });\n if (!depsChanged) {\n return result;\n }\n deps = newDeps;\n var resultTime;\n if (opts.key && opts.debug != null && opts.debug()) resultTime = Date.now();\n result = fn.apply(void 0, newDeps);\n if (opts.key && opts.debug != null && opts.debug()) {\n var depEndTime = Math.round((Date.now() - depTime) * 100) / 100;\n var resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;\n var resultFpsPercentage = resultEndTime / 16;\n var pad = function pad(str, num) {\n str = String(str);\n while (str.length < num) {\n str = ' ' + str;\n }\n return str;\n };\n console.info(\"%c\\u23F1 \" + pad(resultEndTime, 5) + \" /\" + pad(depEndTime, 5) + \" ms\", \"\\n font-size: .6rem;\\n font-weight: bold;\\n color: hsl(\" + Math.max(0, Math.min(120 - 120 * resultFpsPercentage, 120)) + \"deg 100% 31%);\", opts == null ? void 0 : opts.key);\n }\n opts == null ? void 0 : opts.onChange == null ? void 0 : opts.onChange(result);\n return result;\n };\n}\nfunction notUndefined(value, msg) {\n if (value === undefined) {\n throw new Error(\"Unexpected undefined\" + (msg ? \": \" + msg : ''));\n } else {\n return value;\n }\n}\nvar approxEqual = function approxEqual(a, b) {\n return Math.abs(a - b) < 1;\n};\n\nexport { approxEqual, memo, notUndefined };\n//# sourceMappingURL=utils.mjs.map\n","/**\n * virtual-core\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport { extends as _extends } from './_virtual/_rollupPluginBabelHelpers.mjs';\nimport { memo, notUndefined, approxEqual } from './utils.mjs';\nexport { approxEqual, memo, notUndefined } from './utils.mjs';\n\n//\n\n//\n\nvar defaultKeyExtractor = function defaultKeyExtractor(index) {\n return index;\n};\nvar defaultRangeExtractor = function defaultRangeExtractor(range) {\n var start = Math.max(range.startIndex - range.overscan, 0);\n var end = Math.min(range.endIndex + range.overscan, range.count - 1);\n var arr = [];\n for (var _i = start; _i <= end; _i++) {\n arr.push(_i);\n }\n return arr;\n};\nvar observeElementRect = function observeElementRect(instance, cb) {\n var element = instance.scrollElement;\n if (!element) {\n return;\n }\n var handler = function handler(rect) {\n var width = rect.width,\n height = rect.height;\n cb({\n width: Math.round(width),\n height: Math.round(height)\n });\n };\n handler(element.getBoundingClientRect());\n var observer = new ResizeObserver(function (entries) {\n var entry = entries[0];\n if (entry != null && entry.borderBoxSize) {\n var box = entry.borderBoxSize[0];\n if (box) {\n handler({\n width: box.inlineSize,\n height: box.blockSize\n });\n return;\n }\n }\n handler(element.getBoundingClientRect());\n });\n observer.observe(element, {\n box: 'border-box'\n });\n return function () {\n observer.unobserve(element);\n };\n};\nvar observeWindowRect = function observeWindowRect(instance, cb) {\n var element = instance.scrollElement;\n if (!element) {\n return;\n }\n var handler = function handler() {\n cb({\n width: element.innerWidth,\n height: element.innerHeight\n });\n };\n handler();\n element.addEventListener('resize', handler, {\n passive: true\n });\n return function () {\n element.removeEventListener('resize', handler);\n };\n};\nvar observeElementOffset = function observeElementOffset(instance, cb) {\n var element = instance.scrollElement;\n if (!element) {\n return;\n }\n var handler = function handler() {\n cb(element[instance.options.horizontal ? 'scrollLeft' : 'scrollTop']);\n };\n handler();\n element.addEventListener('scroll', handler, {\n passive: true\n });\n return function () {\n element.removeEventListener('scroll', handler);\n };\n};\nvar observeWindowOffset = function observeWindowOffset(instance, cb) {\n var element = instance.scrollElement;\n if (!element) {\n return;\n }\n var handler = function handler() {\n cb(element[instance.options.horizontal ? 'scrollX' : 'scrollY']);\n };\n handler();\n element.addEventListener('scroll', handler, {\n passive: true\n });\n return function () {\n element.removeEventListener('scroll', handler);\n };\n};\nvar measureElement = function measureElement(element, entry, instance) {\n if (entry != null && entry.borderBoxSize) {\n var box = entry.borderBoxSize[0];\n if (box) {\n var size = Math.round(box[instance.options.horizontal ? 'inlineSize' : 'blockSize']);\n return size;\n }\n }\n return Math.round(element.getBoundingClientRect()[instance.options.horizontal ? 'width' : 'height']);\n};\nvar windowScroll = function windowScroll(offset, _ref, instance) {\n var _instance$scrollEleme, _instance$scrollEleme2;\n var _ref$adjustments = _ref.adjustments,\n adjustments = _ref$adjustments === void 0 ? 0 : _ref$adjustments,\n behavior = _ref.behavior;\n var toOffset = offset + adjustments;\n (_instance$scrollEleme = instance.scrollElement) == null ? void 0 : _instance$scrollEleme.scrollTo == null ? void 0 : _instance$scrollEleme.scrollTo((_instance$scrollEleme2 = {}, _instance$scrollEleme2[instance.options.horizontal ? 'left' : 'top'] = toOffset, _instance$scrollEleme2.behavior = behavior, _instance$scrollEleme2));\n};\nvar elementScroll = function elementScroll(offset, _ref2, instance) {\n var _instance$scrollEleme3, _instance$scrollEleme4;\n var _ref2$adjustments = _ref2.adjustments,\n adjustments = _ref2$adjustments === void 0 ? 0 : _ref2$adjustments,\n behavior = _ref2.behavior;\n var toOffset = offset + adjustments;\n (_instance$scrollEleme3 = instance.scrollElement) == null ? void 0 : _instance$scrollEleme3.scrollTo == null ? void 0 : _instance$scrollEleme3.scrollTo((_instance$scrollEleme4 = {}, _instance$scrollEleme4[instance.options.horizontal ? 'left' : 'top'] = toOffset, _instance$scrollEleme4.behavior = behavior, _instance$scrollEleme4));\n};\nvar Virtualizer = function Virtualizer(_opts) {\n var _this = this;\n this.unsubs = [];\n this.scrollElement = null;\n this.isScrolling = false;\n this.isScrollingTimeoutId = null;\n this.scrollToIndexTimeoutId = null;\n this.measurementsCache = [];\n this.itemSizeCache = new Map();\n this.pendingMeasuredCacheIndexes = [];\n this.scrollDirection = null;\n this.scrollAdjustments = 0;\n this.measureElementCache = new Map();\n this.observer = function () {\n var _ro = null;\n var get = function get() {\n if (_ro) {\n return _ro;\n } else if (typeof ResizeObserver !== 'undefined') {\n return _ro = new ResizeObserver(function (entries) {\n entries.forEach(function (entry) {\n _this._measureElement(entry.target, entry);\n });\n });\n } else {\n return null;\n }\n };\n return {\n disconnect: function disconnect() {\n var _get;\n return (_get = get()) == null ? void 0 : _get.disconnect();\n },\n observe: function observe(target) {\n var _get2;\n return (_get2 = get()) == null ? void 0 : _get2.observe(target, {\n box: 'border-box'\n });\n },\n unobserve: function unobserve(target) {\n var _get3;\n return (_get3 = get()) == null ? void 0 : _get3.unobserve(target);\n }\n };\n }();\n this.range = {\n startIndex: 0,\n endIndex: 0\n };\n this.setOptions = function (opts) {\n Object.entries(opts).forEach(function (_ref3) {\n var key = _ref3[0],\n value = _ref3[1];\n if (typeof value === 'undefined') delete opts[key];\n });\n _this.options = _extends({\n debug: false,\n initialOffset: 0,\n overscan: 1,\n paddingStart: 0,\n paddingEnd: 0,\n scrollPaddingStart: 0,\n scrollPaddingEnd: 0,\n horizontal: false,\n getItemKey: defaultKeyExtractor,\n rangeExtractor: defaultRangeExtractor,\n onChange: function onChange() {},\n measureElement: measureElement,\n initialRect: {\n width: 0,\n height: 0\n },\n scrollMargin: 0,\n scrollingDelay: 150,\n indexAttribute: 'data-index',\n initialMeasurementsCache: [],\n lanes: 1\n }, opts);\n };\n this.notify = function () {\n _this.options.onChange == null ? void 0 : _this.options.onChange(_this);\n };\n this.cleanup = function () {\n _this.unsubs.filter(Boolean).forEach(function (d) {\n return d();\n });\n _this.unsubs = [];\n _this.scrollElement = null;\n };\n this._didMount = function () {\n _this.measureElementCache.forEach(_this.observer.observe);\n return function () {\n _this.observer.disconnect();\n _this.cleanup();\n };\n };\n this._willUpdate = function () {\n var scrollElement = _this.options.getScrollElement();\n if (_this.scrollElement !== scrollElement) {\n _this.cleanup();\n _this.scrollElement = scrollElement;\n _this._scrollToOffset(_this.scrollOffset, {\n adjustments: undefined,\n behavior: undefined\n });\n _this.unsubs.push(_this.options.observeElementRect(_this, function (rect) {\n var prev = _this.scrollRect;\n _this.scrollRect = rect;\n if (_this.options.horizontal ? rect.width !== prev.width : rect.height !== prev.height) {\n _this.maybeNotify();\n }\n }));\n _this.unsubs.push(_this.options.observeElementOffset(_this, function (offset) {\n _this.scrollAdjustments = 0;\n if (_this.scrollOffset === offset) {\n return;\n }\n if (_this.isScrollingTimeoutId !== null) {\n clearTimeout(_this.isScrollingTimeoutId);\n _this.isScrollingTimeoutId = null;\n }\n _this.isScrolling = true;\n _this.scrollDirection = _this.scrollOffset < offset ? 'forward' : 'backward';\n _this.scrollOffset = offset;\n _this.maybeNotify();\n _this.isScrollingTimeoutId = setTimeout(function () {\n _this.isScrollingTimeoutId = null;\n _this.isScrolling = false;\n _this.scrollDirection = null;\n _this.maybeNotify();\n }, _this.options.scrollingDelay);\n }));\n }\n };\n this.getSize = function () {\n return _this.scrollRect[_this.options.horizontal ? 'width' : 'height'];\n };\n this.memoOptions = memo(function () {\n return [_this.options.count, _this.options.paddingStart, _this.options.scrollMargin, _this.options.getItemKey];\n }, function (count, paddingStart, scrollMargin, getItemKey) {\n _this.pendingMeasuredCacheIndexes = [];\n return {\n count: count,\n paddingStart: paddingStart,\n scrollMargin: scrollMargin,\n getItemKey: getItemKey\n };\n }, {\n key: false\n });\n this.getFurthestMeasurement = function (measurements, index) {\n var furthestMeasurementsFound = new Map();\n var furthestMeasurements = new Map();\n for (var m = index - 1; m >= 0; m--) {\n var measurement = measurements[m];\n if (furthestMeasurementsFound.has(measurement.lane)) {\n continue;\n }\n var previousFurthestMeasurement = furthestMeasurements.get(measurement.lane);\n if (previousFurthestMeasurement == null || measurement.end > previousFurthestMeasurement.end) {\n furthestMeasurements.set(measurement.lane, measurement);\n } else if (measurement.end < previousFurthestMeasurement.end) {\n furthestMeasurementsFound.set(measurement.lane, true);\n }\n if (furthestMeasurementsFound.size === _this.options.lanes) {\n break;\n }\n }\n return furthestMeasurements.size === _this.options.lanes ? Array.from(furthestMeasurements.values()).sort(function (a, b) {\n return a.end - b.end;\n })[0] : undefined;\n };\n this.getMeasurements = memo(function () {\n return [_this.memoOptions(), _this.itemSizeCache];\n }, function (_ref4, itemSizeCache) {\n var count = _ref4.count,\n paddingStart = _ref4.paddingStart,\n scrollMargin = _ref4.scrollMargin,\n getItemKey = _ref4.getItemKey;\n var min = _this.pendingMeasuredCacheIndexes.length > 0 ? Math.min.apply(Math, _this.pendingMeasuredCacheIndexes) : 0;\n _this.pendingMeasuredCacheIndexes = [];\n var measurements = _this.measurementsCache.slice(0, min);\n for (var _i2 = min; _i2 < count; _i2++) {\n var key = getItemKey(_i2);\n var furthestMeasurement = _this.options.lanes === 1 ? measurements[_i2 - 1] : _this.getFurthestMeasurement(measurements, _i2);\n var start = furthestMeasurement ? furthestMeasurement.end : paddingStart + scrollMargin;\n var measuredSize = itemSizeCache.get(key);\n var size = typeof measuredSize === 'number' ? measuredSize : _this.options.estimateSize(_i2);\n var end = start + size;\n var lane = furthestMeasurement ? furthestMeasurement.lane : _i2 % _this.options.lanes;\n measurements[_i2] = {\n index: _i2,\n start: start,\n size: size,\n end: end,\n key: key,\n lane: lane\n };\n }\n _this.measurementsCache = measurements;\n return measurements;\n }, {\n key: process.env.NODE_ENV !== 'production' && 'getMeasurements',\n debug: function debug() {\n return _this.options.debug;\n }\n });\n this.calculateRange = memo(function () {\n return [_this.getMeasurements(), _this.getSize(), _this.scrollOffset];\n }, function (measurements, outerSize, scrollOffset) {\n return _this.range = calculateRange({\n measurements: measurements,\n outerSize: outerSize,\n scrollOffset: scrollOffset\n });\n }, {\n key: process.env.NODE_ENV !== 'production' && 'calculateRange',\n debug: function debug() {\n return _this.options.debug;\n }\n });\n this.maybeNotify = memo(function () {\n var range = _this.calculateRange();\n return [range.startIndex, range.endIndex, _this.isScrolling];\n }, function () {\n _this.notify();\n }, {\n key: process.env.NODE_ENV !== 'production' && 'maybeNotify',\n debug: function debug() {\n return _this.options.debug;\n },\n initialDeps: [this.range.startIndex, this.range.endIndex, this.isScrolling]\n });\n this.getIndexes = memo(function () {\n return [_this.options.rangeExtractor, _this.calculateRange(), _this.options.overscan, _this.options.count];\n }, function (rangeExtractor, range, overscan, count) {\n return rangeExtractor(_extends({}, range, {\n overscan: overscan,\n count: count\n }));\n }, {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: function debug() {\n return _this.options.debug;\n }\n });\n this.indexFromElement = function (node) {\n var attributeName = _this.options.indexAttribute;\n var indexStr = node.getAttribute(attributeName);\n if (!indexStr) {\n console.warn(\"Missing attribute name '\" + attributeName + \"={index}' on measured element.\");\n return -1;\n }\n return parseInt(indexStr, 10);\n };\n this._measureElement = function (node, entry) {\n var _this$itemSizeCache$g;\n var index = _this.indexFromElement(node);\n var item = _this.measurementsCache[index];\n if (!item) {\n return;\n }\n var prevNode = _this.measureElementCache.get(item.key);\n if (!node.isConnected) {\n _this.observer.unobserve(node);\n if (node === prevNode) {\n _this.measureElementCache[\"delete\"](item.key);\n }\n return;\n }\n if (prevNode !== node) {\n if (prevNode) {\n _this.observer.unobserve(prevNode);\n }\n _this.observer.observe(node);\n _this.measureElementCache.set(item.key, node);\n }\n var measuredItemSize = _this.options.measureElement(node, entry, _this);\n var itemSize = (_this$itemSizeCache$g = _this.itemSizeCache.get(item.key)) != null ? _this$itemSizeCache$g : item.size;\n var delta = measuredItemSize - itemSize;\n if (delta !== 0) {\n if (item.start < _this.scrollOffset) {\n if (process.env.NODE_ENV !== 'production' && _this.options.debug) {\n console.info('correction', delta);\n }\n _this._scrollToOffset(_this.scrollOffset, {\n adjustments: _this.scrollAdjustments += delta,\n behavior: undefined\n });\n }\n _this.pendingMeasuredCacheIndexes.push(index);\n _this.itemSizeCache = new Map(_this.itemSizeCache.set(item.key, measuredItemSize));\n _this.notify();\n }\n };\n this.measureElement = function (node) {\n if (!node) {\n return;\n }\n _this._measureElement(node, undefined);\n };\n this.getVirtualItems = memo(function () {\n return [_this.getIndexes(), _this.getMeasurements()];\n }, function (indexes, measurements) {\n var virtualItems = [];\n for (var k = 0, len = indexes.length; k < len; k++) {\n var _i3 = indexes[k];\n var measurement = measurements[_i3];\n virtualItems.push(measurement);\n }\n return virtualItems;\n }, {\n key: process.env.NODE_ENV !== 'production' && 'getIndexes',\n debug: function debug() {\n return _this.options.debug;\n }\n });\n this.getVirtualItemForOffset = function (offset) {\n var measurements = _this.getMeasurements();\n return notUndefined(measurements[findNearestBinarySearch(0, measurements.length - 1, function (index) {\n return notUndefined(measurements[index]).start;\n }, offset)]);\n };\n this.getOffsetForAlignment = function (toOffset, align) {\n var size = _this.getSize();\n if (align === 'auto') {\n if (toOffset <= _this.scrollOffset) {\n align = 'start';\n } else if (toOffset >= _this.scrollOffset + size) {\n align = 'end';\n } else {\n align = 'start';\n }\n }\n if (align === 'start') {\n toOffset = toOffset;\n } else if (align === 'end') {\n toOffset = toOffset - size;\n } else if (align === 'center') {\n toOffset = toOffset - size / 2;\n }\n var scrollSizeProp = _this.options.horizontal ? 'scrollWidth' : 'scrollHeight';\n var scrollSize = _this.scrollElement ? 'document' in _this.scrollElement ? _this.scrollElement.document.documentElement[scrollSizeProp] : _this.scrollElement[scrollSizeProp] : 0;\n var maxOffset = scrollSize - _this.getSize();\n return Math.max(Math.min(maxOffset, toOffset), 0);\n };\n this.getOffsetForIndex = function (index, align) {\n if (align === void 0) {\n align = 'auto';\n }\n index = Math.max(0, Math.min(index, _this.options.count - 1));\n var measurement = notUndefined(_this.getMeasurements()[index]);\n if (align === 'auto') {\n if (measurement.end >= _this.scrollOffset + _this.getSize() - _this.options.scrollPaddingEnd) {\n align = 'end';\n } else if (measurement.start <= _this.scrollOffset + _this.options.scrollPaddingStart) {\n align = 'start';\n } else {\n return [_this.scrollOffset, align];\n }\n }\n var toOffset = align === 'end' ? measurement.end + _this.options.scrollPaddingEnd : measurement.start - _this.options.scrollPaddingStart;\n return [_this.getOffsetForAlignment(toOffset, align), align];\n };\n this.isDynamicMode = function () {\n return _this.measureElementCache.size > 0;\n };\n this.cancelScrollToIndex = function () {\n if (_this.scrollToIndexTimeoutId !== null) {\n clearTimeout(_this.scrollToIndexTimeoutId);\n _this.scrollToIndexTimeoutId = null;\n }\n };\n this.scrollToOffset = function (toOffset, _temp) {\n var _ref5 = _temp === void 0 ? {} : _temp,\n _ref5$align = _ref5.align,\n align = _ref5$align === void 0 ? 'start' : _ref5$align,\n behavior = _ref5.behavior;\n _this.cancelScrollToIndex();\n if (behavior === 'smooth' && _this.isDynamicMode()) {\n console.warn('The `smooth` scroll behavior is not fully supported with dynamic size.');\n }\n _this._scrollToOffset(_this.getOffsetForAlignment(toOffset, align), {\n adjustments: undefined,\n behavior: behavior\n });\n };\n this.scrollToIndex = function (index, _temp2) {\n var _ref6 = _temp2 === void 0 ? {} : _temp2,\n _ref6$align = _ref6.align,\n initialAlign = _ref6$align === void 0 ? 'auto' : _ref6$align,\n behavior = _ref6.behavior;\n index = Math.max(0, Math.min(index, _this.options.count - 1));\n _this.cancelScrollToIndex();\n if (behavior === 'smooth' && _this.isDynamicMode()) {\n console.warn('The `smooth` scroll behavior is not fully supported with dynamic size.');\n }\n var _this$getOffsetForInd = _this.getOffsetForIndex(index, initialAlign),\n toOffset = _this$getOffsetForInd[0],\n align = _this$getOffsetForInd[1];\n _this._scrollToOffset(toOffset, {\n adjustments: undefined,\n behavior: behavior\n });\n if (behavior !== 'smooth' && _this.isDynamicMode()) {\n _this.scrollToIndexTimeoutId = setTimeout(function () {\n _this.scrollToIndexTimeoutId = null;\n var elementInDOM = _this.measureElementCache.has(_this.options.getItemKey(index));\n if (elementInDOM) {\n var _this$getOffsetForInd2 = _this.getOffsetForIndex(index, align),\n _toOffset = _this$getOffsetForInd2[0];\n if (!approxEqual(_toOffset, _this.scrollOffset)) {\n _this.scrollToIndex(index, {\n align: align,\n behavior: behavior\n });\n }\n } else {\n _this.scrollToIndex(index, {\n align: align,\n behavior: behavior\n });\n }\n });\n }\n };\n this.scrollBy = function (delta, _temp3) {\n var _ref7 = _temp3 === void 0 ? {} : _temp3,\n behavior = _ref7.behavior;\n _this.cancelScrollToIndex();\n if (behavior === 'smooth' && _this.isDynamicMode()) {\n console.warn('The `smooth` scroll behavior is not fully supported with dynamic size.');\n }\n _this._scrollToOffset(_this.scrollOffset + delta, {\n adjustments: undefined,\n behavior: behavior\n });\n };\n this.getTotalSize = function () {\n var _this$getMeasurements;\n return (((_this$getMeasurements = _this.getMeasurements()[_this.options.count - 1]) == null ? void 0 : _this$getMeasurements.end) || _this.options.paddingStart) - _this.options.scrollMargin + _this.options.paddingEnd;\n };\n this._scrollToOffset = function (offset, _ref8) {\n var adjustments = _ref8.adjustments,\n behavior = _ref8.behavior;\n _this.options.scrollToFn(offset, {\n behavior: behavior,\n adjustments: adjustments\n }, _this);\n };\n this.measure = function () {\n _this.itemSizeCache = new Map();\n _this.notify();\n };\n this.setOptions(_opts);\n this.scrollRect = this.options.initialRect;\n this.scrollOffset = this.options.initialOffset;\n this.measurementsCache = this.options.initialMeasurementsCache;\n this.measurementsCache.forEach(function (item) {\n _this.itemSizeCache.set(item.key, item.size);\n });\n this.maybeNotify();\n};\nvar findNearestBinarySearch = function findNearestBinarySearch(low, high, getCurrentValue, value) {\n while (low <= high) {\n var middle = (low + high) / 2 | 0;\n var currentValue = getCurrentValue(middle);\n if (currentValue < value) {\n low = middle + 1;\n } else if (currentValue > value) {\n high = middle - 1;\n } else {\n return middle;\n }\n }\n if (low > 0) {\n return low - 1;\n } else {\n return 0;\n }\n};\nfunction calculateRange(_ref9) {\n var measurements = _ref9.measurements,\n outerSize = _ref9.outerSize,\n scrollOffset = _ref9.scrollOffset;\n var count = measurements.length - 1;\n var getOffset = function getOffset(index) {\n return measurements[index].start;\n };\n var startIndex = findNearestBinarySearch(0, count, getOffset, scrollOffset);\n var endIndex = startIndex;\n while (endIndex < count && measurements[endIndex].end < scrollOffset + outerSize) {\n endIndex++;\n }\n return {\n startIndex: startIndex,\n endIndex: endIndex\n };\n}\n\nexport { Virtualizer, defaultKeyExtractor, defaultRangeExtractor, elementScroll, measureElement, observeElementOffset, observeElementRect, observeWindowOffset, observeWindowRect, windowScroll };\n//# sourceMappingURL=index.mjs.map\n","/**\n * react-virtual\n *\n * Copyright (c) TanStack\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE.md file in the root directory of this source tree.\n *\n * @license MIT\n */\nimport { extends as _extends } from './_virtual/_rollupPluginBabelHelpers.mjs';\nimport * as React from 'react';\nimport { observeElementRect, observeElementOffset, elementScroll, observeWindowRect, observeWindowOffset, windowScroll, Virtualizer } from '@tanstack/virtual-core';\nexport * from '@tanstack/virtual-core';\n\n//\n\nvar useIsomorphicLayoutEffect = typeof document !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nfunction useVirtualizerBase(options) {\n var rerender = React.useReducer(function () {\n return {};\n }, {})[1];\n var resolvedOptions = _extends({}, options, {\n onChange: function onChange(instance) {\n rerender();\n options.onChange == null ? void 0 : options.onChange(instance);\n }\n });\n var _React$useState = React.useState(function () {\n return new Virtualizer(resolvedOptions);\n }),\n instance = _React$useState[0];\n instance.setOptions(resolvedOptions);\n React.useEffect(function () {\n return instance._didMount();\n }, []);\n useIsomorphicLayoutEffect(function () {\n return instance._willUpdate();\n });\n return instance;\n}\nfunction useVirtualizer(options) {\n return useVirtualizerBase(_extends({\n observeElementRect: observeElementRect,\n observeElementOffset: observeElementOffset,\n scrollToFn: elementScroll\n }, options));\n}\nfunction useWindowVirtualizer(options) {\n return useVirtualizerBase(_extends({\n getScrollElement: function getScrollElement() {\n return typeof document !== 'undefined' ? window : null;\n },\n observeElementRect: observeWindowRect,\n observeElementOffset: observeWindowOffset,\n scrollToFn: windowScroll\n }, options));\n}\n\nexport { useVirtualizer, useWindowVirtualizer };\n//# sourceMappingURL=index.mjs.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 { type ComponentPropsWithoutRef, type ReactElement, useRef } from \"react\";\n\nimport { type Key, type KeyedRenderableRecord } from \"@synnaxlabs/x\";\nimport { useVirtualizer } from \"@tanstack/react-virtual\";\n\nimport { Align } from \"@/align\";\nimport { CSS } from \"@/css\";\nimport { useContext } from \"@/list/Context\";\nimport { type ItemProps } from \"@/list/types\";\nimport { type RenderProp } from \"@/util/renderProp\";\n\nimport \"@/list/Core.css\";\n\nexport interface VirtualCoreProps<\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n> extends Omit<ComponentPropsWithoutRef<\"div\">, \"children\"> {\n itemHeight: number;\n children: RenderProp<ItemProps<K, E>>;\n overscan?: number;\n}\n\nconst VirtualCore = <\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n>({\n itemHeight,\n children,\n overscan = 5,\n className,\n ...props\n}: VirtualCoreProps<K, E>): ReactElement => {\n if (itemHeight <= 0) throw new Error(\"itemHeight must be greater than 0\");\n const {\n data,\n emptyContent,\n columnar: { columns },\n hover,\n select,\n infinite: { hasMore, onFetchMore },\n } = useContext<K, E>();\n const parentRef = useRef<HTMLDivElement>(null);\n const virtualizer = useVirtualizer({\n count: data.length,\n getScrollElement: () => parentRef.current,\n estimateSize: () => itemHeight,\n overscan,\n });\n\n const items = virtualizer.getVirtualItems();\n\n if (items.at(-1)?.index === data.length - 1 && hasMore) {\n onFetchMore?.();\n }\n\n return (\n <div\n ref={parentRef}\n className={CSS(className, CSS.BE(\"list\", \"container\"))}\n {...props}\n >\n {data.length === 0 ? (\n emptyContent\n ) : (\n <div style={{ height: virtualizer.getTotalSize() }}>\n {items.map(({ index, start }) => {\n const entry = data[index];\n return children({\n key: entry.key,\n index,\n onSelect: select.onSelect,\n entry,\n columns,\n selected: select.value.includes(entry.key),\n hovered: index === hover.value,\n style: {\n transform: `translateY(${start}px)`,\n position: \"absolute\",\n },\n });\n })}\n </div>\n )}\n </div>\n );\n};\n\nexport const Core = <\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n>(\n props: Omit<Align.SpaceProps, \"children\"> & {\n children: RenderProp<ItemProps<K, E>>;\n },\n): ReactElement => {\n const { data, emptyContent, columnar, hover, select } = useContext<K, E>();\n\n return (\n <Align.Space className={CSS.BE(\"list\", \"container\")} {...props} empty>\n {data.length === 0 ? (\n emptyContent\n ) : (\n <>\n {data.map((entry, index) =>\n props.children({\n key: entry.key.toString(),\n index,\n onSelect: select.onSelect,\n entry,\n columns: columnar.columns,\n selected: select.value.includes(entry.key),\n hovered: index === hover.value,\n style: {},\n }),\n )}\n </>\n )}\n </Align.Space>\n );\n};\n\nexport type CoreBaseType = typeof Core;\n\n/**\n * Categorizes the core components for a list.\n *\n * @property Virtual - A virtualized renderer for a list.\n */\nexport interface CoreType extends CoreBaseType {\n /**\n * A virtualized list core.\n *\n * @param props - Props for the virtualized list core. All props not defined below\n * are passed to the underlying div element wrapping the list.\n * @param props.itemHeight - The height of each item in the list.\n * @param props.overscan - The number of extra items to render during virtualization.\n * This improves scroll performance, but also adds extra DOM elements, so make sure\n * to set this to a reasonable value.\n * @param props.children - A render props that renders each item in the list. It should\n * implement the {@link ItemProps} interface. The virtualizer will pass all props\n * satisfying this interface to the render props.\n */\n Virtual: typeof VirtualCore;\n}\n\nCore.Virtual = VirtualCore;\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 { useCallback, useRef } from \"react\";\n\nimport { type Key, type KeyedRenderableRecord } from \"@synnaxlabs/x\";\n\nimport { useContext } from \"@/list/Context\";\nimport { Triggers } from \"@/triggers\";\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface HoverProps<\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n> {}\n\nconst UP_TRIGGER: Triggers.Trigger = [\"ArrowUp\"];\nconst DOWN_TRIGGER: Triggers.Trigger = [\"ArrowDown\"];\nconst SELECT_TRIGGER: Triggers.Trigger = [\"Enter\"];\n\nexport const Hover = <\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n>(\n props: HoverProps<K, E>,\n): null => {\n const {\n data,\n select: { onSelect },\n hover: { value, onChange },\n } = useContext<K, E>();\n const posRef = useRef<number>(value);\n\n const handleTrigger = useCallback(\n ({ triggers, stage }: Triggers.UseEvent) => {\n if (stage !== \"start\") return;\n if (Triggers.match(triggers, [UP_TRIGGER]))\n onChange((pos) => {\n const v = pos === 0 ? data.length - 1 : pos - 1;\n posRef.current = v;\n return v;\n });\n else if (Triggers.match(triggers, [DOWN_TRIGGER]))\n onChange((pos) => {\n const v = pos === data.length - 1 ? 0 : pos + 1;\n posRef.current = v;\n return v;\n });\n else if (Triggers.match(triggers, [SELECT_TRIGGER]))\n onSelect?.(data[posRef.current].key);\n },\n [data, onSelect],\n );\n\n Triggers.use({\n triggers: [UP_TRIGGER, DOWN_TRIGGER, SELECT_TRIGGER],\n callback: handleTrigger,\n loose: true,\n });\n\n return null;\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 ReactElement, useCallback, useEffect, useRef } from \"react\";\n\nimport {\n type AsyncTermSearcher,\n type Key,\n type KeyedRenderableRecord,\n} from \"@synnaxlabs/x\";\n\nimport { useDebouncedCallback } from \"@/hooks/useDebouncedCallback\";\nimport { Input } from \"@/input\";\nimport { List } from \"@/list\";\nimport { state } from \"@/state\";\nimport { Status } from \"@/status\";\nimport { type RenderProp, componentRenderProp } from \"@/util/renderProp\";\n\nimport { useSyncedRef } from \"..\";\n\nexport interface SearchProps<\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n> extends Input.OptionalControl<string> {\n searcher?: AsyncTermSearcher<string, K, E>;\n debounce?: number;\n children?: RenderProp<Input.Control<string>>;\n pageSize?: number;\n}\n\nconst STYLE = {\n height: 150,\n};\n\nconst NO_RESULTS = (\n <Status.Text.Centered level=\"h4\" variant=\"disabled\" hideIcon style={STYLE}>\n No Results\n </Status.Text.Centered>\n);\n\nconst NO_TERM = (\n <Status.Text.Centered level=\"h4\" variant=\"disabled\" hideIcon style={STYLE}>\n Type to search...\n </Status.Text.Centered>\n);\n\nexport const Search = <\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n>({\n debounce = 250,\n children = componentRenderProp(Input.Text),\n searcher,\n value,\n onChange,\n pageSize = 10,\n}: SearchProps<K, E>): ReactElement | null => {\n const [internalValue, setInternvalValue] = state.usePurePassthrough({\n value,\n onChange,\n initial: \"\",\n });\n const valueRef = useSyncedRef(internalValue);\n const promiseOut = useRef<boolean>(false);\n const hasMore = useRef(true);\n const offset = useRef(0);\n const {\n setSourceData,\n setEmptyContent,\n infinite: { setOnFetchMore, setHasMore },\n } = List.useContext<K, E>();\n useEffect(() => setEmptyContent(NO_TERM), [setEmptyContent]);\n\n const handleFetchMore = useCallback(() => {\n if (valueRef.current.length > 0 || promiseOut.current || searcher == null) return;\n promiseOut.current = true;\n searcher\n .page(offset.current, pageSize)\n .then((r) => {\n promiseOut.current = false;\n if (r.length < pageSize) {\n hasMore.current = false;\n setHasMore(false);\n }\n offset.current += pageSize;\n setSourceData((d) => [...d, ...r]);\n })\n .catch((e) => {\n promiseOut.current = false;\n console.error(e);\n });\n }, [searcher, setSourceData, pageSize]);\n\n useEffect(() => {\n setOnFetchMore(handleFetchMore);\n }, [handleFetchMore]);\n\n useEffect(() => {\n handleFetchMore();\n }, []);\n\n const debounced = useDebouncedCallback(\n (term: string) => {\n if (searcher == null) return setEmptyContent(NO_RESULTS);\n searcher\n .search(term)\n .then((d) => {\n if (d.length === 0) setEmptyContent(NO_RESULTS);\n else setSourceData(d);\n })\n .catch((e) => {\n setEmptyContent(\n <Status.Text.Centered level=\"h4\" variant=\"error\">\n {e.message}\n </Status.Text.Centered>,\n );\n });\n },\n debounce,\n [searcher, setSourceData, setEmptyContent],\n );\n\n const handleChange = useCallback(\n (term: string) => {\n setInternvalValue(term);\n if (term.length === 0) setEmptyContent(NO_TERM);\n else debounced(term);\n },\n [setInternvalValue, debounced],\n );\n\n return children({ value: internalValue, onChange: handleChange });\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 ReactElement, useCallback } from \"react\";\n\nimport { type Key, type KeyedRenderableRecord } from \"@synnaxlabs/x\";\n\nimport { createFilterTransform } from \"@/hooks\";\nimport { useDebouncedCallback } from \"@/hooks/useDebouncedCallback\";\nimport { Input } from \"@/input\";\nimport { type OptionalControl } from \"@/input/types\";\nimport { useContext } from \"@/list/Context\";\nimport { state } from \"@/state\";\nimport { type RenderProp } from \"@/util/renderProp\";\n\nexport interface FilterProps<\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n> extends OptionalControl<string> {\n children?: RenderProp<Input.Control<string>>;\n debounce?: number;\n}\n\n/**\n * Implements in-browser filtration for a list.\n *\n * @param props - The props for the List.Search component.\n * @param props.children - A custom input render prop for the search functionality. This\n * must implement the InputControl<string> interface.\n * @param opts - Custom options for the search functionality. See the {@link fuse.IFuseOptions}\n * interface for more details.\n */\nexport const Filter = <\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n>({\n children = (props) => <Input.Text {...props} />,\n debounce = 250,\n onChange,\n value,\n}: FilterProps<K, E>): ReactElement | null => {\n const [internalValue, setInternalValue] = state.usePurePassthrough<string>({\n onChange,\n value,\n initial: \"\",\n });\n const { setTransform, deleteTransform } = useContext<K, E>();\n\n const debounced = useDebouncedCallback(setTransform, debounce, []);\n\n const handleChange = useCallback(\n (term: string) => {\n setInternalValue(term);\n if (term.length === 0) deleteTransform(\"filter\");\n else debounced(\"filter\", createFilterTransform({ term }));\n },\n [setInternalValue],\n );\n\n return children({ value: internalValue, onChange: handleChange });\n};\n\nexport interface Searcher<\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n> {\n search: (term: string) => E[];\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 PropsWithChildren,\n type ReactElement,\n useEffect,\n useMemo,\n useState,\n useCallback,\n} from \"react\";\n\nimport { type Key, type KeyedRenderableRecord } from \"@synnaxlabs/x\";\n\nimport { useTransforms } from \"@/hooks\";\nimport { useStateRef } from \"@/hooks/ref\";\nimport { Provider } from \"@/list/Context\";\nimport { type ColumnSpec } from \"@/list/types\";\n\nexport interface ListProps<\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n> extends PropsWithChildren<unknown> {\n data?: E[];\n emptyContent?: ReactElement;\n}\n\n/**\n * The main component for building a List. By itself, it does not render any HTML, and\n * should be used in conjunction with its subcomponents (List.'X') to build a list\n * component to fit your needs.\n *\n * @param props - The props for the List component.\n * @param props.data - The data to be displayed in the list. The values of the object in\n * each entry of the array must satisfy the {@link RenderableValue} interface i.e. they\n * must be a primitive type or implement a 'toString' method.\n * @param props.children - Sub-components of the List component to add additional functionality.\n *\n */\nexport const List = <\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n>({\n children,\n data: propsData,\n emptyContent,\n}: ListProps<K, E>): ReactElement => {\n const [columns, setColumns] = useState<Array<ColumnSpec<K, E>>>([]);\n const [selected, setSelected] = useState<K[]>([]);\n const [hover, setHover] = useState<number>(-1);\n const [onSelect, setOnSelect] = useState<((key: K) => void) | undefined>(undefined);\n const [clear, setClear] = useState<(() => void) | undefined>(undefined);\n const { transform, setTransform, deleteTransform } = useTransforms<E>({});\n const [data, setData] = useState<E[]>(() => propsData ?? []);\n useEffect(() => {\n if (propsData != null) setData(propsData);\n }, [propsData]);\n const transformedData = useMemo(() => transform(data), [data, transform]);\n const [emptyContent_, setEmptyContent] = useState<ReactElement | undefined>(\n emptyContent,\n );\n const [fetchMoreRef, setFetchMoreRef] = useStateRef<() => void>(() => {});\n const [hasMore, setHasMore] = useState<boolean>(true);\n\n const handleSetFetchMoreRef = useCallback(\n (ref: () => void): void => setFetchMoreRef(() => ref),\n [setFetchMoreRef],\n );\n\n const onFetchMore = useCallback((): void => fetchMoreRef.current?.(), [fetchMoreRef]);\n\n return (\n <Provider<K, E>\n value={{\n setEmptyContent,\n sourceData: data,\n data: transformedData,\n setSourceData: setData,\n deleteTransform,\n setTransform,\n hover: {\n value: hover,\n onChange: setHover,\n },\n emptyContent: emptyContent ?? emptyContent_,\n columnar: {\n columns,\n setColumns,\n },\n select: {\n value: selected,\n onChange: setSelected,\n setOnSelect,\n onSelect,\n clear,\n setClear,\n },\n infinite: {\n onFetchMore,\n setOnFetchMore: handleSetFetchMoreRef,\n hasMore,\n setHasMore,\n },\n }}\n >\n {children}\n </Provider>\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 { useEffect } from \"react\";\n\nimport { type Key, type KeyedRenderableRecord } from \"@synnaxlabs/x\";\n\nimport {\n useSelectMultiple,\n type UseSelectMultipleProps,\n} from \"@/hooks/useSelectMultiple\";\nimport { useContext } from \"@/list/Context\";\n\nexport interface SelectorProps<\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n> extends Omit<UseSelectMultipleProps<K, E>, \"data\"> {}\n\n/**\n * Implements selection behavior for a list.\n *\n * @param props - The props for the List.Selector component. These props are identical\n * to the props for {@link useSelectMultiple} hook.\n */\nexport const Selector = <\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n>({\n value,\n ...props\n}: SelectorProps<K, E>): null => {\n const {\n data,\n select: { setOnSelect, setClear, onChange },\n } = useContext<K, E>();\n\n const { onSelect, clear } = useSelectMultiple({\n data,\n value,\n ...props,\n });\n\n useEffect(() => {\n setOnSelect(() => onSelect);\n setClear(() => clear);\n }, [onSelect, clear]);\n\n useEffect(() => {\n onChange(value);\n }, [value]);\n\n return null;\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 ReactElement } from \"react\";\n\nimport { Icon } from \"@synnaxlabs/media\";\n\nimport { Button } from \"@/button\";\nimport { CSS } from \"@/css\";\n\nexport const ClearButton = (\n props: Omit<Button.IconProps, \"children\">,\n): ReactElement => (\n <Button.Icon className={CSS.BE(\"select\", \"clear\")} variant=\"outlined\" {...props}>\n <Icon.Close aria-label=\"clear\" />\n </Button.Icon>\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 ReactElement } from \"react\";\n\nimport { type Key, type KeyedRenderableRecord } from \"@synnaxlabs/x\";\n\nimport { type Dropdown } from \"@/dropdown\";\nimport { List as CoreList } from \"@/list\";\nimport { componentRenderProp } from \"@/util/renderProp\";\n\nexport interface SelectListProps<K extends Key, E extends KeyedRenderableRecord<K, E>>\n extends CoreList.SelectorProps<K, E>,\n CoreList.ColumnHeaderProps<K, E>,\n Pick<Dropdown.DialogProps, \"visible\"> {}\n\nexport const List = <K extends Key, E extends KeyedRenderableRecord<K, E>>({\n value,\n onChange,\n allowMultiple,\n visible,\n ...props\n}: SelectListProps<K, E>): ReactElement => (\n <>\n <CoreList.Selector\n value={value}\n onChange={onChange}\n allowMultiple={allowMultiple}\n />\n {visible && <CoreList.Hover />}\n <CoreList.Column.Header {...props} />\n <CoreList.Core.Virtual itemHeight={CoreList.Column.itemHeight}>\n {componentRenderProp(CoreList.Column.Item)}\n </CoreList.Core.Virtual>\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 ReactElement } from \"react\";\n\nimport { Icon } from \"@synnaxlabs/media\";\n\nimport { Button } from \"@/button\";\nimport { Color } from \"@/color\";\nimport { CSS } from \"@/css\";\nimport { Text } from \"@/text\";\nimport { type ComponentSize } from \"@/util/component\";\n\nimport \"@/tag/Tag.css\";\n\nexport interface TagProps extends Omit<Text.TextProps, \"level\" | \"size\" | \"wrap\"> {\n icon?: ReactElement;\n onClose?: () => void;\n color?: Color.Crude;\n size?: ComponentSize;\n variant?: \"filled\" | \"outlined\";\n}\n\nexport const Tag = ({\n children = \"\",\n size = \"medium\",\n variant = \"filled\",\n color,\n icon,\n onClose,\n onDragStart,\n ...props\n}: TagProps): ReactElement => {\n const cssColor = Color.cssString(color);\n if (icon == null && color != null) icon = <Icon.Circle fill={cssColor} />;\n const closeIcon =\n onClose == null ? undefined : (\n <Button.Icon\n aria-label=\"close\"\n size={size}\n className={CSS.BE(\"tag\", \"close\")}\n onClick={(e) => {\n e.stopPropagation();\n onClose();\n }}\n >\n <Icon.Close />\n </Button.Icon>\n );\n return (\n <Text.WithIcon\n startIcon={icon}\n endIcon={closeIcon}\n className={CSS(CSS.B(\"tag\"), onClose != null && CSS.BM(\"tag\", \"closeable\"))}\n level={Text.ComponentSizeLevels[size]}\n noWrap\n align=\"center\"\n onDragStart={onDragStart}\n {...props}\n >\n {children}\n </Text.WithIcon>\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 ReactElement,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport {\n convertRenderV,\n type Key,\n type KeyedRenderableRecord,\n type AsyncTermSearcher,\n compare,\n} from \"@synnaxlabs/x\";\n\nimport { Align } from \"@/align\";\nimport { type Color } from \"@/color\";\nimport { CSS } from \"@/css\";\nimport { Dropdown } from \"@/dropdown\";\nimport { useAsyncEffect } from \"@/hooks\";\nimport { type UseSelectMultipleProps } from \"@/hooks/useSelectMultiple\";\nimport { Input } from \"@/input\";\nimport { List as CoreList } from \"@/list\";\nimport { ClearButton } from \"@/select/ClearButton\";\nimport { List } from \"@/select/List\";\nimport { Tag } from \"@/tag\";\nimport { type RenderProp, componentRenderProp } from \"@/util/renderProp\";\n\nimport \"@/select/Multiple.css\";\n\nexport interface MultipleProps<\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n> extends Omit<Dropdown.DialogProps, \"visible\" | \"onChange\" | \"children\">,\n Input.Control<K[]>,\n Omit<CoreList.ListProps<K, E>, \"children\">,\n Pick<Input.TextProps, \"placeholder\"> {\n columns?: Array<CoreList.ColumnSpec<K, E>>;\n searcher?: AsyncTermSearcher<string, K, E>;\n tagKey?: keyof E | ((e: E) => string | number);\n renderTag?: RenderProp<SelectMultipleTagProps<K, E>>;\n onTagDragStart?: (e: React.DragEvent<HTMLDivElement>, key: K) => void;\n onTagDragEnd?: (e: React.DragEvent<HTMLDivElement>, key: K) => void;\n}\n\n/**\n * Allows a user to browse, search for, and select multiple values from a list of\n * options. It's important to note that Select maintains no internal selection state.\n * The caller must provide the selected value via the `value` prop and handle any\n * changes via the `onChange` prop.\n *\n * @param props - The props for the component. Any additional props will be passed to\n * the input group containing the selection input and the selected tags.\n * @param props.data - The data to be used to populate the select options.\n * @param props.columns - The columns to be used to render the select options in the\n * dropdown. See the {@link ListColumn} type for more details on how to configure\n * columns.\n * @param props.tagKey - The option field rendered for each tag when selected in the\n * input group. Defaults to \"key\".\n * @param props.location - Whether to render the dropdown above or below the select\n * component. Defaults to \"below\".\n * @param props.onChange - The callback to be invoked when the selected value changes.\n * @param props.value - The currently selected value.\n */\nexport const Multiple = <\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n>({\n onChange,\n value,\n location,\n className,\n data,\n columns = [],\n tagKey = \"key\",\n emptyContent,\n searcher,\n renderTag,\n placeholder,\n onTagDragStart,\n onTagDragEnd,\n style,\n ...props\n}: MultipleProps<K, E>): ReactElement => {\n const { ref, visible, open } = Dropdown.use();\n const [selected, setSelected] = useState<readonly E[]>([]);\n const searchMode = searcher != null;\n\n useAsyncEffect(async () => {\n const selectedKeys = selected.map((v) => v.key);\n if (value.length === 0) return setSelected([]);\n if (compare.primitiveArrays(selectedKeys, value) === compare.EQUAL) return;\n const e = searchMode\n ? await searcher.retrieve(value)\n : data?.filter((v) => value.includes(v.key)) ?? [];\n setSelected(e);\n }, [searcher, searchMode, value, data]);\n\n const handleChange: UseSelectMultipleProps<K, E>[\"onChange\"] = useCallback(\n (v, extra) => {\n setSelected(extra.entries);\n onChange(v);\n },\n [onChange],\n );\n\n const InputWrapper = useMemo(\n () => (searchMode ? CoreList.Search : CoreList.Filter),\n [searchMode],\n );\n\n return (\n <CoreList.List data={data} emptyContent={emptyContent}>\n <Dropdown.Dialog\n ref={ref}\n visible={visible}\n location={location}\n {...props}\n matchTriggerWidth\n >\n <InputWrapper searcher={searcher}>\n {({ onChange }) => (\n <MultipleInput<K, E>\n className={className}\n onChange={onChange}\n selected={selected}\n onFocus={open}\n tagKey={tagKey}\n visible={visible}\n renderTag={renderTag}\n placeholder={placeholder}\n onTagDragStart={onTagDragStart}\n onTagDragEnd={onTagDragEnd}\n style={style}\n />\n )}\n </InputWrapper>\n <List\n visible={visible}\n value={value}\n onChange={handleChange}\n columns={columns}\n allowMultiple\n />\n </Dropdown.Dialog>\n </CoreList.List>\n );\n};\n\ninterface SelectMultipleInputProps<K extends Key, E extends KeyedRenderableRecord<K, E>>\n extends Omit<Input.TextProps, \"value\"> {\n selected: readonly E[];\n tagKey: keyof E | ((e: E) => string | number);\n visible: boolean;\n renderTag?: RenderProp<SelectMultipleTagProps<K, E>>;\n onTagDragStart?: (e: React.DragEvent<HTMLDivElement>, key: K) => void;\n onTagDragEnd?: (e: React.DragEvent<HTMLDivElement>, key: K) => void;\n}\n\nconst MultipleInput = <K extends Key, E extends KeyedRenderableRecord<K, E>>({\n selected,\n onChange,\n onFocus,\n visible,\n tagKey,\n renderTag = componentRenderProp(SelectMultipleTag),\n placeholder = \"Search...\",\n onTagDragStart,\n onTagDragEnd,\n className,\n ...props\n}: SelectMultipleInputProps<K, E>): ReactElement => {\n const {\n select: { onSelect, clear },\n } = CoreList.useContext<K, E>();\n const [value, setValue] = useState(\"\");\n const ref = useRef<HTMLInputElement>(null);\n\n useLayoutEffect(() => {\n if (visible) ref.current?.focus();\n // Notice how we don't call onChange with an empty value here. This is so\n // we preserve the previous search result in the list even after we clear\n // the box when a value is selected.\n else setValue(\"\");\n }, [visible, selected]);\n\n const handleChange = (v: string): void => {\n setValue(v);\n onChange(v);\n };\n\n return (\n <Input.Text\n ref={ref}\n className={CSS(\n CSS.BE(\"select-multiple\", \"input\"),\n CSS.visible(visible),\n className,\n )}\n placeholder={placeholder}\n value={value}\n onChange={handleChange}\n onFocus={onFocus}\n {...props}\n >\n <Align.Space\n direction=\"x\"\n className={CSS.BE(\"select-multiple\", \"tags\")}\n align=\"center\"\n grow\n >\n {selected.map((e, i) => {\n return renderTag({\n key: e.key,\n tagKey,\n entry: e,\n onClose: () => onSelect?.(e.key),\n onDragStart: (ev) => onTagDragStart?.(ev, e.key),\n onDragEnd: (ev) => onTagDragEnd?.(ev, e.key),\n });\n })}\n </Align.Space>\n <ClearButton onClick={clear} />\n </Input.Text>\n );\n};\n\ninterface SelectMultipleTagProps<K extends Key, E extends KeyedRenderableRecord<K, E>> {\n key: K;\n tagKey: keyof E | ((e: E) => string | number);\n entry: E;\n color?: Color.Crude;\n onClose?: () => void;\n onDragStart: (e: React.DragEvent<HTMLDivElement>) => void;\n onDragEnd?: (e: React.DragEvent<HTMLDivElement>) => void;\n}\n\nconst SelectMultipleTag = <K extends Key, E extends KeyedRenderableRecord<K, E>>({\n tagKey,\n entry,\n ...props\n}: SelectMultipleTagProps<K, E>): ReactElement => {\n const v = typeof tagKey === \"function\" ? tagKey(entry) : entry[tagKey];\n return (\n <Tag.Tag size=\"small\" variant=\"outlined\" draggable {...props} key={v.toString()}>\n {convertRenderV(v)}\n </Tag.Tag>\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 FocusEventHandler,\n type ReactElement,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\nimport {\n type AsyncTermSearcher,\n type Key,\n type KeyedRenderableRecord,\n primitiveIsZero,\n} from \"@synnaxlabs/x\";\n\nimport { Align } from \"@/align\";\nimport { CSS } from \"@/css\";\nimport { Dropdown } from \"@/dropdown\";\nimport { useAsyncEffect } from \"@/hooks\";\nimport { type UseSelectMultipleProps } from \"@/hooks/useSelectMultiple\";\nimport { Input } from \"@/input\";\nimport { List as CoreList } from \"@/list\";\nimport { ClearButton } from \"@/select/ClearButton\";\nimport { List } from \"@/select/List\";\n\nimport \"@/select/Single.css\";\n\nexport interface SingleProps<\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n> extends Omit<Dropdown.DialogProps, \"onChange\" | \"visible\" | \"children\">,\n Input.Control<K>,\n Omit<CoreList.ListProps<K, E>, \"children\">,\n Pick<Input.TextProps, \"variant\"> {\n tagKey?: keyof E | ((e: E) => string | number);\n columns?: Array<CoreList.ColumnSpec<K, E>>;\n inputProps?: Omit<Input.TextProps, \"onChange\">;\n searcher?: AsyncTermSearcher<string, K, E>;\n allowClear?: boolean;\n}\n\n/**\n * Allows a user to browse, search for, and select a value from a list of options.\n * It's important to note that Select maintains no internal selection state. The caller\n * must provide the selected value via the `value` prop and handle any changes via the\n * `onChange` prop.\n *\n * @param props - The props for the component. Any additional props will be passed to the\n * underlying input element.\n * @param props.data - The data to be used to populate the select options.\n * @param props.columns - The columns to be used to render the select options in the\n * dropdown. See the {@link ListColumn} type for more details on available options.\n * @param props.tagKey - The option field rendered when selected. Defaults to \"key\".\n * @param props.location - Whether to render the dropdown above or below the select\n * component. Defaults to \"below\".\n * @param props.onChange - The callback to be invoked when the selected value changes.\n * @param props.value - The currently selected value.\n */\nexport const Single = <\n K extends Key = Key,\n E extends KeyedRenderableRecord<K, E> = KeyedRenderableRecord<K>,\n>({\n onChange,\n value,\n tagKey = \"key\",\n columns = [],\n data,\n emptyContent,\n inputProps,\n allowClear = true,\n searcher,\n className,\n variant,\n ...props\n}: SingleProps<K, E>): ReactElement => {\n const { ref, visible, open, close } = Dropdown.use();\n const initialValue = useRef<K>(value);\n const [selected, setSelected] = useState<E | null>(null);\n const searchMode = searcher != null;\n\n useAsyncEffect(async () => {\n if (searcher == null || selected?.key === value || primitiveIsZero(value)) return;\n const [e] = await searcher.retrieve([value]);\n setSelected(e ?? null);\n }, [searcher, value]);\n\n useEffect(() => {\n if (selected?.key === value) return;\n setSelected(data?.find((e) => e.key === value) ?? null);\n }, [value]);\n\n const handleChange: UseSelectMultipleProps<K, E>[\"onChange\"] = useCallback(\n ([v], e): void => {\n close();\n if (v == null) {\n if (!allowClear) return;\n setSelected(null);\n return onChange(initialValue.current);\n }\n setSelected(e.entries[0]);\n onChange(v);\n },\n [onChange, allowClear],\n );\n\n const InputWrapper = useMemo(\n () => (searchMode ? CoreList.Search : CoreList.Filter),\n [searchMode],\n );\n\n return (\n <CoreList.List data={data} emptyContent={emptyContent}>\n <Dropdown.Dialog\n ref={ref}\n visible={visible}\n className={CSS.B(\"select\")}\n matchTriggerWidth\n {...props}\n >\n <InputWrapper searcher={searcher}>\n {({ onChange }) => (\n <SingleInput\n variant={variant}\n onChange={onChange}\n onFocus={open}\n selected={selected}\n tagKey={tagKey}\n visible={visible}\n allowClear={allowClear}\n className={className}\n />\n )}\n </InputWrapper>\n <List<K, E>\n visible={visible}\n value={[value]}\n onChange={handleChange}\n allowMultiple={false}\n columns={columns}\n />\n </Dropdown.Dialog>\n </CoreList.List>\n );\n};\n\nexport interface SelectInputProps<K extends Key, E extends KeyedRenderableRecord<K, E>>\n extends Omit<Input.TextProps, \"value\"> {\n tagKey: keyof E | ((e: E) => string | number);\n selected: E | null;\n visible: boolean;\n debounceSearch?: number;\n allowClear?: boolean;\n}\n\nconst SingleInput = <K extends Key, E extends KeyedRenderableRecord<K, E>>({\n tagKey,\n selected,\n visible,\n onChange,\n onFocus,\n allowClear = true,\n debounceSearch = 250,\n className,\n ...props\n}: SelectInputProps<K, E>): ReactElement => {\n const {\n select: { clear },\n } = CoreList.useContext();\n // We maintain our own value state for two reasons:\n //\n // 1. So we can avoid executing a search when the user selects an item and hides the\n // dropdown.\n // 2. So that we can display the previous search results when the user focuses on the\n // while still being able to clear the input value for searching.\n //\n const [internalValue, setInternalValue] = useState(\"\");\n\n // Runs to set the value of the input to the item selected from the list.\n useEffect(() => {\n if (visible) return;\n if (primitiveIsZero(selected?.key)) return setInternalValue(\"\");\n if (selected == null) return;\n if (typeof tagKey === \"function\")\n return setInternalValue(tagKey(selected).toString());\n else return setInternalValue((selected?.[tagKey] as string | number).toString());\n }, [selected, visible, tagKey]);\n\n const handleChange = (v: string): void => {\n onChange(v);\n setInternalValue(v);\n };\n\n const handleFocus: FocusEventHandler<HTMLInputElement> = (e) => {\n setInternalValue(\"\");\n onFocus?.(e);\n };\n\n const handleClear = (): void => {\n setInternalValue(\"\");\n clear?.();\n };\n\n return (\n <Input.Text\n className={CSS(CSS.BE(\"select\", \"input\"), className)}\n value={internalValue}\n onChange={handleChange}\n onFocus={handleFocus}\n style={{ flexGrow: 1 }}\n {...props}\n >\n {allowClear && <ClearButton onClick={handleClear} />}\n </Input.Text>\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 PropsWithChildren,\n type ReactElement,\n useCallback,\n useLayoutEffect,\n} from \"react\";\n\nimport { box, xy } from \"@synnaxlabs/x\";\n\nimport { CSS } from \"@/css\";\nimport { Viewport as Core } from \"@/viewport\";\nimport { useContext } from \"@/vis/lineplot/LinePlot\";\n\nimport \"@/vis/lineplot/Viewport.css\";\n\nexport interface ViewportProps extends PropsWithChildren, Core.UseProps {}\n\nexport const selectViewportEl = (el: HTMLElement | null): Element | null =>\n el == null\n ? null\n : document.querySelectorAll(\".pluto-line-plot__viewport\")[0] ?? null;\n\nexport const Viewport = ({\n children,\n initial = box.DECIMAL,\n onChange,\n ...props\n}: ViewportProps): ReactElement => {\n const { setViewport } = useContext(\"Viewport\");\n\n useLayoutEffect(() => {\n setViewport({ box: initial, mode: \"zoom\", cursor: xy.ZERO, stage: \"start\" });\n }, [setViewport, initial]);\n\n const handleChange = useCallback(\n (e: Core.UseEvent): void => {\n setViewport(e);\n onChange?.(e);\n },\n [onChange, setViewport],\n );\n\n const maskProps = Core.use({\n onChange: handleChange,\n initial,\n ...props,\n });\n\n return (\n <Core.Mask className={CSS.BE(\"line-plot\", \"viewport\")} {...maskProps}>\n {children}\n </Core.Mask>\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 PropsWithChildren,\n type ReactElement,\n useEffect,\n type FC,\n useRef,\n} from \"react\";\n\nimport { direction, type bounds } from \"@synnaxlabs/x\";\nimport { type z } from \"zod\";\n\nimport { Aether } from \"@/aether\";\nimport { Align } from \"@/align\";\nimport { CSS } from \"@/css\";\nimport { useMemoDeepEqualProps as useMemoDeepEqual } from \"@/memo\";\nimport { Text } from \"@/text\";\nimport { Theming } from \"@/theming\";\nimport { lineplot } from \"@/vis/lineplot/aether\";\nimport {\n coreAxisStateZ,\n parseAutoBounds,\n withinSizeThreshold,\n} from \"@/vis/lineplot/aether/axis\";\nimport { useGridPosition } from \"@/vis/lineplot/LinePlot\";\n\nimport \"@/vis/lineplot/Axis.css\";\n\nexport interface AxisProps\n extends PropsWithChildren,\n Omit<z.input<typeof lineplot.xAxisStateZ>, \"position\" | \"size\">,\n Omit<Align.SpaceProps, \"color\"> {\n resizeDebounce?: number;\n label?: string;\n labelLevel?: Text.Level;\n labelDirection?: direction.Direction;\n onLabelChange?: (label: string) => void;\n onAutoBoundsChange?: (bounds: bounds.Bounds) => void;\n}\n\nexport const axisFactory = (dir: direction.Direction): FC<AxisProps> => {\n const defaultLocaton = dir === \"x\" ? \"bottom\" : \"left\";\n const aetherType = dir === \"x\" ? lineplot.XAxis.TYPE : lineplot.YAxis.TYPE;\n const cssClass = `${dir}-axis`;\n return Aether.wrap<AxisProps>(\n aetherType,\n ({\n aetherKey,\n children,\n resizeDebounce: debounce = 0,\n location = defaultLocaton,\n label = \"\",\n labelLevel = \"small\",\n labelDirection = dir,\n onLabelChange,\n color,\n labelSize: propsLabelSize,\n showGrid,\n type,\n bounds,\n className,\n tickSpacing,\n autoBounds,\n autoBoundUpdateInterval,\n onAutoBoundsChange,\n style,\n ...props\n }): ReactElement => {\n const showLabel = (label?.length ?? 0) > 0;\n\n const aetherProps = useMemoDeepEqual({\n location,\n showGrid,\n type,\n bounds,\n label,\n labelDirection,\n tickSpacing,\n autoBounds,\n autoBoundUpdateInterval,\n });\n\n const [{ path }, { size, labelSize, ...state }, setState] = Aether.use({\n aetherKey,\n type: aetherType,\n schema: coreAxisStateZ,\n initialState: aetherProps,\n });\n\n useEffect(\n () => setState((state) => ({ ...state, ...aetherProps })),\n [aetherProps],\n );\n useEffect(() => {\n const { lower, upper } = parseAutoBounds(state.autoBounds);\n if (state.bounds == null) return;\n if (\n (lower && bounds?.lower !== state.bounds.lower) ||\n (upper && bounds?.upper !== state.bounds.upper)\n )\n onAutoBoundsChange?.(state.bounds);\n }, [state.autoBounds, state.bounds]);\n\n const gridStyle = useGridPosition(\n {\n loc: location,\n key: aetherKey,\n size: size + labelSize,\n order: \"last\",\n },\n \"XAxis\",\n );\n\n const font = Theming.useTypography(labelLevel).toString();\n\n const prevLabelSize = useRef(0);\n\n useEffect(() => {\n if (dir === \"y\") {\n if (label == null) return;\n const dims = Text.dimensions(label, font);\n let labelSize =\n dims[direction.dimension(direction.construct(labelDirection))];\n if (labelSize > 0) labelSize += 6;\n setState((state) => ({\n ...state,\n labelSize,\n }));\n } else {\n const dims = Text.dimensions(label, font);\n const labelSize = dims.height + 12;\n const prevSize = prevLabelSize.current;\n if (!withinSizeThreshold(prevSize, labelSize)) {\n prevLabelSize.current = labelSize;\n setState((state) => ({\n ...state,\n labelSize,\n }));\n }\n }\n }, [label, labelDirection, font]);\n\n return (\n <>\n <Align.Space\n className={CSS(\n className,\n CSS.B(\"axis\"),\n CSS.B(cssClass),\n CSS.loc(location),\n )}\n style={{ ...style, ...gridStyle }}\n align=\"center\"\n justify={dir === \"x\" ? \"end\" : \"start\"}\n direction={direction.swap(dir)}\n {...props}\n >\n {showLabel && (\n <Text.MaybeEditable\n className={CSS(CSS.BE(\"axis\", \"label\"), CSS.dir(labelDirection))}\n value={label}\n onChange={onLabelChange}\n level={labelLevel}\n />\n )}\n </Align.Space>\n <Aether.Composite path={path}>{children}</Aether.Composite>\n </>\n );\n },\n );\n};\n\nexport const XAxis = axisFactory(\"x\");\nexport const YAxis = axisFactory(\"y\");\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 ReactElement, useCallback, useEffect, useRef } from \"react\";\n\nimport { xy } from \"@synnaxlabs/x\";\nimport { type z } from \"zod\";\n\nimport { Aether } from \"@/aether\";\nimport { tooltip } from \"@/vis/lineplot/tooltip/aether\";\n\nexport interface TooltipProps\n extends Omit<z.input<typeof tooltip.tooltipStateZ>, \"position\"> {}\n\nexport const Tooltip = Aether.wrap<TooltipProps>(\n \"Tooltip\",\n ({ aetherKey }): ReactElement | null => {\n const [, , setState] = Aether.use({\n aetherKey,\n type: tooltip.Tooltip.TYPE,\n schema: tooltip.tooltipStateZ,\n initialState: {\n position: null,\n },\n });\n\n const ref = useRef<HTMLSpanElement>(null);\n\n const handleMove = useCallback(\n (e: MouseEvent): void => setState({ position: xy.construct(e) }),\n [setState],\n );\n\n const handleLeave = useCallback(\n (): void => setState({ position: null }),\n [setState],\n );\n\n useEffect(() => {\n if (ref.current === null) return;\n // Select the parent node of the tooltip\n const parent = ref.current.parentElement;\n if (parent == null) return;\n // Bind a hover listener to the parent node\n parent.addEventListener(\"mousemove\", handleMove);\n parent.addEventListener(\"mouseleave\", handleLeave);\n return () => {\n parent.removeEventListener(\"mousemove\", handleMove);\n parent.removeEventListener(\"mouseleave\", handleLeave);\n };\n }, [handleMove]);\n\n return <span ref={ref} />;\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 { useCallback, useEffect, useRef } from \"react\";\n\nimport { xy } from \"@synnaxlabs/x\";\n\nimport { Aether } from \"@/aether\";\nimport { Triggers } from \"@/triggers\";\nimport { type Viewport } from \"@/viewport\";\nimport { LinePlot } from \"@/vis/lineplot\";\nimport { measure } from \"@/vis/measure/aether\";\n\ntype ClickMode = \"one\" | \"two\" | \"clear\" | \"empty\";\n\nconst MEASURE_TRIGGERS: Triggers.ModeConfig<ClickMode> = {\n defaultMode: \"empty\",\n one: [[\"1\"]],\n two: [[\"2\"]],\n clear: [[\"Shift\"]],\n empty: [[]],\n};\n\nconst REDUCED_MEASURE_TRIGGERS = Triggers.flattenConfig(MEASURE_TRIGGERS);\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface MeasureProps {}\n\nexport const Measure = Aether.wrap<MeasureProps>(\"Measure\", ({ aetherKey }) => {\n const [, , setState] = Aether.use({\n aetherKey,\n type: measure.Measure.TYPE,\n schema: measure.measureStateZ,\n initialState: {\n hover: null,\n one: null,\n two: null,\n },\n });\n\n const ref = useRef<HTMLSpanElement>(null);\n\n const triggers = Triggers.useHeldRef({\n triggers: REDUCED_MEASURE_TRIGGERS,\n loose: true,\n });\n\n const handleClick: Viewport.UseHandler = useCallback(\n ({ mode, cursor }): void => {\n if (mode === \"click\") {\n const measureMode = Triggers.determineMode<ClickMode>(\n MEASURE_TRIGGERS,\n triggers.current.triggers,\n true,\n );\n if ([\"one\", \"two\"].includes(measureMode))\n return setState((p) => ({ ...p, [measureMode]: cursor }));\n else if (measureMode === \"clear\")\n setState((p) => ({ ...p, one: null, two: null }));\n else\n setState((p) => ({\n ...p,\n one: p.one ?? cursor,\n two: p.one !== null ? cursor : p.two,\n }));\n }\n },\n [setState, triggers],\n );\n\n LinePlot.useViewport(handleClick);\n\n const handleMove = useCallback(\n (e: MouseEvent): void => setState((p) => ({ ...p, hover: xy.construct(e) })),\n [setState],\n );\n\n const handleLeave = useCallback((): void => {\n setState((p) => ({\n ...p,\n hover: null,\n }));\n }, [setState]);\n\n useEffect(() => {\n if (ref.current === null) return;\n // Select the parent node of the tooltip\n const parent = ref.current.parentElement;\n if (parent == null) return;\n // Bind a hover listener to the parent node\n parent.addEventListener(\"mousemove\", handleMove);\n parent.addEventListener(\"mouseleave\", handleLeave);\n return () => {\n parent.removeEventListener(\"mousemove\", handleMove);\n parent.removeEventListener(\"mouseleave\", handleLeave);\n };\n }, [handleClick]);\n\n return <span ref={ref} />;\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 ReactElement, useCallback, useEffect, useRef } from \"react\";\n\nimport { bounds, box } from \"@synnaxlabs/x\";\nimport { createPortal } from \"react-dom\";\nimport { type z } from \"zod\";\n\nimport { Aether } from \"@/aether\";\nimport { Align } from \"@/align\";\nimport { CSS } from \"@/css\";\nimport { useCursorDrag } from \"@/hooks/useCursorDrag\";\nimport { state } from \"@/state\";\nimport { Text } from \"@/text\";\nimport { selectViewportEl } from \"@/vis/lineplot/Viewport\";\nimport { rule } from \"@/vis/rule/aether\";\n\nimport \"@/vis/rule/Rule.css\";\n\nexport interface RuleProps\n extends Omit<z.input<typeof rule.ruleStateZ>, \"dragging\" | \"pixelPosition\"> {\n label?: string;\n onLabelChange?: (label: string) => void;\n units?: string;\n onPositionChange?: (position: number) => void;\n}\n\nexport const Rule = Aether.wrap<RuleProps>(\n \"Rule\",\n ({\n aetherKey,\n label,\n position: propsPosition,\n onLabelChange,\n onPositionChange,\n units = \"\",\n color,\n lineWidth,\n lineDash,\n }): ReactElement | null => {\n const [internalLabel, setInternalLabel] = state.usePurePassthrough({\n value: label,\n onChange: onLabelChange,\n initial: \"\",\n });\n\n const [, { position, pixelPosition }, setState] = Aether.use({\n aetherKey,\n type: rule.Rule.TYPE,\n schema: rule.ruleStateZ,\n initialState: {\n color,\n dragging: false,\n position: propsPosition,\n lineWidth,\n lineDash,\n },\n });\n\n useEffect(() => {\n if (position == null) return;\n if (propsPosition == null) return onPositionChange?.(position);\n const b = bounds.construct(position + 0.01, position - 0.01);\n if (propsPosition != null && !bounds.contains(b, propsPosition))\n onPositionChange?.(Math.trunc(position * 100) / 100);\n }, [position]);\n\n const pixelPosRef = useRef(pixelPosition);\n if (pixelPosition !== pixelPosRef.current) pixelPosRef.current = pixelPosition;\n\n const dragStartRef = useRef(pixelPosition);\n\n useEffect(() => {\n setState((p) => ({ ...p, position: propsPosition, color, lineWidth, lineDash }));\n }, [propsPosition, color, lineWidth, lineDash]);\n\n const handleDragStart = useCursorDrag({\n onStart: useCallback(() => {\n setState((p) => ({ ...p, dragging: true }));\n dragStartRef.current = pixelPosRef.current;\n }, []),\n onMove: (b: box.Box) => {\n setState((p) => ({\n ...p,\n pixelPosition: (dragStartRef.current ?? 0) + box.signedHeight(b),\n }));\n },\n onEnd: useCallback(() => {\n setState((p) => ({ ...p, dragging: false }));\n dragStartRef.current = pixelPosition;\n }, []),\n });\n\n const ref = useRef<HTMLDivElement>(null);\n\n if (position == null || pixelPosition == null) return null;\n\n const viewportEl = selectViewportEl(ref?.current);\n\n const content = (\n <div\n ref={ref}\n className={CSS.B(\"rule\")}\n style={{ top: `calc(${pixelPosition}px - 0.5rem)` }}\n >\n <div\n className={CSS.BE(\"rule\", \"drag-handle\")}\n onDragStart={handleDragStart}\n draggable\n />\n <Align.Space direction=\"x\" align=\"center\" style={{ marginLeft: \"2rem\" }}>\n <Text.Editable level=\"p\" value={internalLabel} onChange={setInternalLabel} />\n <Text.Text\n level=\"p\"\n style={{ padding: \"0.25rem 0\", width: \"fit-content\" }}\n >{`${position.toFixed(2)} ${units}`}</Text.Text>\n </Align.Space>\n </div>\n );\n\n if (viewportEl == null) return content;\n return createPortal(content, viewportEl);\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 PropsWithChildren,\n type ReactElement,\n createContext,\n useCallback,\n useContext,\n} from \"react\";\n\nimport {\n type connection,\n Synnax,\n type SynnaxProps,\n TimeSpan,\n} from \"@synnaxlabs/client\";\nimport { Case } from \"@synnaxlabs/x\";\n\nimport { Aether } from \"@/aether\";\nimport { useAsyncEffect, useCombinedStateAndRef } from \"@/hooks\";\nimport { Status } from \"@/status\";\nimport { synnax } from \"@/synnax/aether\";\n\nconst Context = createContext<synnax.ContextValue>(synnax.ZERO_CONTEXT_VALUE);\n\nexport const use = (): Synnax | null => useContext(Context).synnax;\n\nexport const useConnectionState = (): connection.State => useContext(Context).state;\n\nexport interface ProviderProps extends PropsWithChildren {\n connParams?: SynnaxProps;\n}\n\nconst CONNECTION_STATE_VARIANT: Record<connection.Status, Status.Variant> = {\n connected: \"success\",\n connecting: \"info\",\n disconnected: \"info\",\n failed: \"error\",\n};\n\nexport const Provider = Aether.wrap<ProviderProps>(\n synnax.Provider.TYPE,\n ({ aetherKey, connParams, children }): ReactElement => {\n const [state, setState, ref] = useCombinedStateAndRef<synnax.ContextValue>(\n synnax.ZERO_CONTEXT_VALUE,\n );\n\n const [{ path }, , setAetherState] = Aether.use({\n aetherKey,\n type: synnax.Provider.TYPE,\n schema: synnax.Provider.stateZ,\n initialState: { props: connParams ?? null, state: null },\n });\n\n const add = Status.useAggregator();\n\n const handleChange = useCallback(\n (state: connection.State) => {\n if (ref.current.state.status !== state.status) {\n add({\n variant: CONNECTION_STATE_VARIANT[state.status],\n message: state.message ?? Case.capitalize(state.status),\n });\n }\n setState((prev) => ({ ...prev, state }));\n },\n [add],\n );\n\n useAsyncEffect(async () => {\n if (state.synnax != null) state.synnax.close();\n if (connParams == null) return setState(synnax.ZERO_CONTEXT_VALUE);\n\n const c = new Synnax({\n ...connParams,\n connectivityPollFrequency: TimeSpan.seconds(5),\n });\n\n const connectivity = await c.connectivity.check();\n\n setState({\n synnax: c,\n state: connectivity,\n });\n add({\n variant: CONNECTION_STATE_VARIANT[connectivity.status],\n message: connectivity.message ?? connectivity.status.toUpperCase(),\n });\n\n c.connectivity.onChange(handleChange);\n\n setAetherState({ props: connParams, state: connectivity });\n\n return () => {\n c.close();\n setState(synnax.ZERO_CONTEXT_VALUE);\n setAetherState({ props: null, state: null });\n };\n }, [connParams, handleChange]);\n\n return (\n <Context.Provider value={state}>\n <Aether.Composite path={path}>{children}</Aether.Composite>\n </Context.Provider>\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 useState,\n type PropsWithChildren,\n type ReactElement,\n useCallback,\n createContext,\n useContext as reactUseContext,\n} from \"react\";\n\nimport { type channel, type ranger } from \"@synnaxlabs/client\";\nimport { Icon } from \"@synnaxlabs/media\";\n\nimport { Button } from \"@/button\";\nimport { useAsyncEffect } from \"@/hooks\";\nimport { Input } from \"@/input\";\nimport { Synnax } from \"@/synnax\";\nimport { Text } from \"@/text\";\n\ninterface AliasContextValue {\n aliases: Record<channel.Key, string>;\n getName: (key: channel.Key) => Promise<string | undefined>;\n setAlias: ((key: channel.Key, alias: string) => Promise<void>) | null;\n activeRange?: string | null;\n}\n\nconst AliasContext = createContext<AliasContextValue>({\n aliases: {},\n getName: async () => await Promise.resolve(undefined),\n setAlias: null,\n});\n\nexport const useContext = (): AliasContextValue => {\n return reactUseContext(AliasContext);\n};\n\nexport interface AliasProviderProps extends PropsWithChildren {\n activeRange?: string | null;\n}\n\nexport const useAlias = (key: channel.Key): string | null => {\n const { aliases } = reactUseContext(AliasContext);\n return aliases[key] ?? null;\n};\n\nexport const useAliases = (): Record<channel.Key, string> => {\n const { aliases } = reactUseContext(AliasContext);\n return aliases;\n};\n\nexport const useName = (key: channel.Key, def: string = \"\"): string => {\n const { getName } = reactUseContext(AliasContext);\n const [name, setName] = useState(def);\n useAsyncEffect(async () => {\n const n = await getName(key);\n if (n != null) setName(n);\n }, [key, getName]);\n return name;\n};\n\nexport const useActiveRange = (): string | undefined => {\n const { activeRange } = reactUseContext(AliasContext);\n return activeRange ?? undefined;\n};\n\nexport const AliasProvider = ({\n activeRange,\n children,\n}: AliasProviderProps): ReactElement => {\n const c = Synnax.use();\n const [aliases, setAliases] = useState<Record<channel.Key, string>>({});\n\n const handleAliasChange = useCallback(\n (changes: ranger.AliasChange[]) => {\n setAliases((aliases) => {\n const newAliases = { ...aliases };\n changes.forEach(({ variant, key, value }) => {\n const channelKey = Number(key.split(\"---\")[1]);\n // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n if (variant === \"delete\") delete newAliases[channelKey];\n else newAliases[value.channel] = value.alias;\n });\n return newAliases;\n });\n },\n [setAliases],\n );\n\n const setAlias = useCallback(\n async (key: channel.Key, alias: string) => {\n if (c == null || activeRange == null) return;\n const r = await c.ranges.retrieve(activeRange);\n await r.setAlias(key, alias);\n },\n [c, activeRange],\n );\n\n const getName = useCallback(\n async (key: channel.Key): Promise<string | undefined> => {\n if (c == null || key === 0) return undefined;\n const alias = aliases[key];\n if (alias != null) return alias;\n return (await c.channels.retrieve(key)).name;\n },\n [aliases, c],\n );\n\n useAsyncEffect(async () => {\n if (c == null || activeRange == null) {\n setAliases({});\n return;\n }\n const r = await c.ranges.retrieve(activeRange);\n const aliases = await r.listAliases();\n setAliases(aliases);\n const tracker = await r.openAliasTracker();\n const disconnect = tracker.onChange(handleAliasChange);\n return () => {\n disconnect();\n void tracker.close();\n };\n }, [c, activeRange]);\n\n return (\n <AliasContext.Provider\n value={{\n aliases,\n activeRange,\n setAlias: activeRange != null ? setAlias : null,\n getName,\n }}\n >\n {children}\n </AliasContext.Provider>\n );\n};\n\nexport interface AliasInputProps extends Input.TextProps {\n channelKey: channel.Key;\n shadow?: boolean;\n}\n\nexport const AliasInput = ({\n channelKey,\n value,\n shadow,\n className,\n ...props\n}: AliasInputProps): ReactElement => {\n const [loading, setLoading] = useState(false);\n const { setAlias } = useContext();\n const alias = useAlias(channelKey);\n const name = useName(channelKey);\n let icon = <Icon.Rename />;\n if (loading) icon = <Icon.Loading />;\n else if (alias === value) icon = <Icon.Check />;\n const canSetAlias =\n setAlias != null && !loading && alias !== value && channelKey !== 0;\n const handleSetAlias = (): void => {\n if (!canSetAlias) return;\n void (async () => {\n setLoading(true);\n await setAlias(channelKey, value);\n setLoading(false);\n })();\n };\n\n const handleSetValueToAlias = (): void => {\n if (alias == null) return;\n props.onChange?.(alias);\n };\n\n const SetAliasTooltip = (): ReactElement => {\n if (channelKey === 0)\n return (\n <Text.Text level=\"small\">\n Select a channel to enable alias syncing with this label\n </Text.Text>\n );\n if (setAlias == null)\n return (\n <Text.Text level=\"small\">\n Select a range to enable alias syncing with this label\n </Text.Text>\n );\n if (value.length === 0)\n return (\n <Text.Text level=\"small\">\n Enter a value to enable alias syncing with this label\n </Text.Text>\n );\n if (alias === value)\n return <Text.Text level=\"small\">Alias synced with this label</Text.Text>;\n return <Text.Text level=\"small\">Sync alias for {name} with this label</Text.Text>;\n };\n\n return (\n <Input.Text value={value} {...props}>\n {canSetAlias && (\n <Button.Icon\n onClick={handleSetValueToAlias}\n tooltip={<Text.Text level=\"small\">Set {name} as label</Text.Text>}\n tooltipLocation={{ y: \"top\" }}\n variant=\"outlined\"\n >\n <Icon.Sync />\n </Button.Icon>\n )}\n <Button.Icon\n onClick={handleSetAlias}\n disabled={!canSetAlias}\n tooltip={<SetAliasTooltip />}\n tooltipLocation={{ y: \"top\" }}\n variant=\"outlined\"\n >\n {icon}\n </Button.Icon>\n </Input.Text>\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 DragEvent, type ReactElement, useCallback, useId, useMemo } from \"react\";\n\nimport { type channel } from \"@synnaxlabs/client\";\nimport { unique } from \"@synnaxlabs/x\";\n\nimport { useActiveRange, useAliases } from \"@/channel/AliasProvider\";\nimport { HAUL_TYPE } from \"@/channel/types\";\nimport { CSS } from \"@/css\";\nimport { Haul } from \"@/haul\";\nimport { type DraggingState } from \"@/haul/Haul\";\nimport { type List } from \"@/list\";\nimport { Select } from \"@/select\";\nimport { Status } from \"@/status\";\nimport { Synnax } from \"@/synnax\";\n\nconst channelColumns: Array<List.ColumnSpec<channel.Key, channel.Payload>> = [\n {\n key: \"name\",\n name: \"Name\",\n },\n {\n key: \"rate\",\n name: \"Rate\",\n },\n {\n key: \"dataType\",\n name: \"Data Type\",\n },\n {\n key: \"index\",\n name: \"Index\",\n },\n {\n key: \"key\",\n name: \"Key\",\n },\n {\n key: \"isIndex\",\n name: \"Is Index\",\n },\n];\n\nconst canDrop = (\n { items: entities }: DraggingState,\n value: channel.Key[] | readonly channel.Key[],\n): boolean => {\n const f = Haul.filterByType(HAUL_TYPE, entities);\n return f.length > 0 && !f.every((h) => value.includes(h.key as channel.Key));\n};\n\nexport interface SelectMultipleProps\n extends Omit<\n Select.MultipleProps<channel.Key, channel.Payload>,\n \"columns\" | \"searcher\"\n > {\n columns?: string[];\n}\n\nconst DEFAULT_FILTER = [\"name\"];\n\nconst useColumns = (\n filter: string[],\n): Array<List.ColumnSpec<channel.Key, channel.Payload>> => {\n const aliases = useAliases();\n return useMemo(() => {\n if (filter.length === 0) return channelColumns;\n return channelColumns\n .filter((column) => filter.includes(column.key))\n .map((column) => {\n if (column.key === \"name\") {\n return {\n ...column,\n stringer: (entry: channel.Payload) => aliases[entry.key] ?? entry.name,\n };\n }\n return column;\n });\n }, [filter, aliases]);\n};\n\nexport const SelectMultiple = ({\n columns: filter = DEFAULT_FILTER,\n onChange,\n value,\n className,\n ...props\n}: SelectMultipleProps): ReactElement => {\n const client = Synnax.use();\n const aliases = useAliases();\n const columns = useColumns(filter);\n const activeRange = useActiveRange();\n const searcher = useMemo(\n () => client?.channels.newSearcherUnderRange(activeRange),\n [client, activeRange],\n );\n const emptyContent =\n client != null ? undefined : (\n <Status.Text.Centered variant=\"error\" level=\"h4\" style={{ height: 150 }}>\n No client available\n </Status.Text.Centered>\n );\n\n const {\n startDrag,\n onDragEnd: endDrag,\n ...dropProps\n } = Haul.useDragAndDrop({\n type: \"Channel.SelectMultiple\",\n canDrop: useCallback((hauled) => canDrop(hauled, value), [value]),\n onDrop: useCallback(\n ({ items }) => {\n const dropped = Haul.filterByType(HAUL_TYPE, items);\n if (dropped.length === 0) return [];\n onChange(unique([...value, ...(dropped.map((c) => c.key) as channel.Keys)]));\n return dropped;\n },\n [onChange, value],\n ),\n });\n const dragging = Haul.useDraggingState();\n\n const handleSuccessfulDrop = useCallback(\n ({ dropped }: Haul.OnSuccessfulDropProps) => {\n onChange(value.filter((key) => !dropped.some((h) => h.key === key)));\n },\n [onChange, value],\n );\n\n const onDragStart = useCallback(\n (_: DragEvent<HTMLDivElement>, key: channel.Key) =>\n startDrag([{ key, type: HAUL_TYPE }], handleSuccessfulDrop),\n [startDrag, handleSuccessfulDrop],\n );\n\n const tagKey = useCallback(\n (e: channel.Payload) => aliases[e.key] ?? e.name,\n [aliases],\n );\n\n return (\n <Select.Multiple\n className={CSS(className, CSS.dropRegion(canDrop(dragging, value)))}\n value={value}\n onTagDragStart={onDragStart}\n onTagDragEnd={endDrag}\n searcher={searcher}\n onChange={onChange}\n columns={columns}\n emptyContent={emptyContent}\n tagKey={tagKey}\n {...dropProps}\n {...props}\n />\n );\n};\n\nexport interface SelectSingleProps\n extends Omit<Select.SingleProps<channel.Key, channel.Payload>, \"columns\"> {\n columns?: string[];\n}\n\nexport const SelectSingle = ({\n columns: filter = DEFAULT_FILTER,\n onChange,\n value,\n className,\n ...props\n}: SelectSingleProps): ReactElement => {\n const client = Synnax.use();\n const aliases = useAliases();\n const columns = useColumns(filter);\n const activeRange = useActiveRange();\n const searcher = useMemo(\n () => client?.channels.newSearcherUnderRange(activeRange),\n [client, activeRange],\n );\n\n const emptyContent =\n client != null ? undefined : (\n <Status.Text.Centered variant=\"error\" level=\"h4\" style={{ height: 150 }}>\n No client available\n </Status.Text.Centered>\n );\n\n const id = useId();\n const sourceAndTarget: Haul.Item = useMemo(\n () => ({ key: id, type: \"Channel.SelectMultiple\" }),\n [id],\n );\n\n const {\n startDrag,\n onDragEnd: endDrag,\n ...dragProps\n } = Haul.useDragAndDrop({\n type: \"Channel.SelectSingle\",\n canDrop: useCallback((hauled) => canDrop(hauled, [value]), [value]),\n onDrop: useCallback(\n ({ items }) => {\n const ch = Haul.filterByType(HAUL_TYPE, items);\n if (ch.length === 0) return [];\n onChange(ch[0].key as channel.Key);\n return ch;\n },\n [sourceAndTarget, onChange],\n ),\n });\n\n const dragging = Haul.useDraggingState();\n const onDragStart = useCallback(\n () => startDrag([{ type: HAUL_TYPE, key: value }]),\n [startDrag, value],\n );\n\n const tagKey = useCallback(\n (e: channel.Payload) => aliases[e.key] ?? e.name,\n [aliases],\n );\n\n return (\n <Select.Single\n className={CSS(className, CSS.dropRegion(canDrop(dragging, [value])))}\n value={value}\n onDragStart={onDragStart}\n onDragEnd={endDrag}\n onChange={onChange}\n searcher={searcher}\n columns={columns}\n emptyContent={emptyContent}\n tagKey={tagKey}\n {...dragProps}\n {...props}\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 { useState, memo, useCallback, type ReactElement } from \"react\";\n\nimport { type box, type location } from \"@synnaxlabs/x\";\n\nimport { CSS } from \"@/css\";\nimport { Haul } from \"@/haul\";\nimport { type CanDrop } from \"@/haul/Haul\";\nimport { type Node } from \"@/mosaic/types\";\nimport { Resize } from \"@/resize\";\nimport { Tabs } from \"@/tabs\";\n\nimport \"@/mosaic/Mosaic.css\";\n\n/** Props for the {@link Mosaic} component */\nexport interface MosaicProps\n extends Omit<Tabs.TabsProps, \"onDrop\" | \"tabs\" | \"onResize\" | \"onCreate\"> {\n root: Node;\n onDrop: (key: number, tabKey: string, loc: location.Location) => void;\n onResize: (key: number, size: number) => void;\n onCreate?: (key: number, loc: location.Location, tabKeys?: string[]) => void;\n}\n\n/***\n * Mosaic renders a tree of tab panes, with the ability to drag and drop tabs to\n * different locations in the tree as well as resize the panes (think of your typical\n * code editor). This component should be used in conjuction with the Mosaic.use hook\n * to implement the mosaic logic and maintain the state.\n *\n * @param props - The props for the Mosaic component. All props not listed below are\n * passed to the Tabs component of each set of tabs in the mosaic.\n * @param props.root - The root of the mosaic tree. This prop is provided by the\n * Mosaic.use hook.\n * @param props.onDrop - The callback executed when a tab is dropped in a new location.\n * This prop is provided by the Mosaic.use hook.\n * @param props.onResize - The callback executed when a pane is resized. This prop is\n * provided by the Mosaic.use hook.\n */\nexport const Mosaic = memo((props: MosaicProps): ReactElement | null => {\n const { onResize, ...tabsProps } = props;\n const {\n root: { tabs, direction, first, last, key, size },\n emptyContent,\n ...childProps\n } = tabsProps;\n\n const handleResize = useCallback(\n ([size]: number[]) => onResize(key, size),\n [onResize],\n );\n\n const { props: resizeProps } = Resize.useMultiple({\n direction,\n onResize: handleResize,\n count: 2,\n initialSizes: size != null ? [size] : undefined,\n });\n\n let content: ReactElement | null;\n if (tabs !== undefined)\n content = <TabLeaf emptyContent={emptyContent} {...tabsProps} />;\n else if (first != null && last != null)\n content = (\n <Resize.Multiple\n align=\"stretch\"\n className={CSS.BE(\"mosaic\", \"resize\")}\n {...resizeProps}\n >\n <Mosaic key={first.key} {...childProps} root={first} onResize={onResize} />\n <Mosaic key={last.key} {...childProps} root={last} onResize={onResize} />\n </Resize.Multiple>\n );\n else {\n content = null;\n console.warn(\"Mosaic tree is malformed\");\n }\n\n return key === 1 ? <Haul.Provider>{content}</Haul.Provider> : content;\n});\nMosaic.displayName = \"Mosaic\";\n\ninterface TabLeafProps extends Omit<MosaicProps, \"onResize\"> {}\n\n/**\n * This type should be used when the user wants to drop a tab in the mosaic.\n * Dropping an item with this signature will call the {@link Mosaic} onDrop handler.\n */\nexport const HAUL_DROP_TYPE = \"pluto-mosaic-tab-drop\";\n/** This type should be used when the user wants to create a new tab in the mosaic. \nDropping an item with this signature will call the {@link Mosaic} onCreate handler. */\nexport const HAUL_CREATE_TYPE = \"pluto-mosaic-tab-create\";\n\n/** Checks whether the tab can actually be dropped in this location or not */\nconst validDrop = (tabs: Tabs.Tab[], dragging: Haul.Item[]): boolean => {\n const drop = Haul.filterByType(HAUL_DROP_TYPE, dragging).map((t) => t.key);\n const willHaveTabRemaining = tabs.filter((t) => !drop.includes(t.tabKey)).length > 0;\n const create = Haul.filterByType(HAUL_CREATE_TYPE, dragging);\n return (\n create.length > 0 ||\n (drop.length > 0 && (willHaveTabRemaining || tabs.length === 0))\n );\n};\n\nconst TabLeaf = memo(\n ({ root: node, onDrop, onCreate, ...props }: TabLeafProps): ReactElement => {\n const { key, tabs } = node as Omit<Node, \"tabs\"> & { tabs: Tabs.Tab[] };\n\n const [dragMask, setDragMask] = useState<location.Location | null>(null);\n\n const canDrop: CanDrop = useCallback(({ items }) => validDrop(tabs, items), [tabs]);\n\n const handleDrop = useCallback(\n ({ items, event }: Haul.OnDropProps): Haul.Item[] => {\n setDragMask(null);\n const dropped = Haul.filterByType(HAUL_DROP_TYPE, items);\n const loc =\n tabs.length === 0 ? \"center\" : insertLocation(getDragLocationPercents(event));\n if (dropped.length > 0) {\n const tabKey = dropped.map(({ key }) => key)[0];\n onDrop(key, tabKey as string, loc);\n }\n const created = Haul.filterByType(HAUL_CREATE_TYPE, items);\n if (created.length > 0) {\n const tabKey = created.map(({ key }) => key);\n onCreate?.(key, loc, tabKey as string[]);\n }\n return dropped;\n },\n [onDrop, tabs.length],\n );\n\n const handleDragOver = useCallback(\n ({ event }: Haul.OnDragOverProps): void => {\n const location: location.Location =\n tabs.length === 0 ? \"center\" : insertLocation(getDragLocationPercents(event));\n setDragMask(location);\n },\n [tabs.length],\n );\n\n const { startDrag, ...haulProps } = Haul.useDragAndDrop({\n type: \"Mosaic\",\n canDrop,\n onDrop: handleDrop,\n onDragOver: handleDragOver,\n });\n\n const handleDragLeave = useCallback((): void => setDragMask(null), []);\n\n const handleDragStart = useCallback(\n (_: unknown, { tabKey }: Tabs.Tab): void =>\n startDrag([{ key: tabKey, type: HAUL_DROP_TYPE }]),\n [startDrag],\n );\n\n const handleTabCreate = useCallback((): void => onCreate?.(key, \"center\"), [key]);\n\n return (\n <div className={CSS.BE(\"mosaic\", \"leaf\")}>\n <Tabs.Tabs\n tabs={tabs}\n onDragLeave={handleDragLeave}\n selected={node.selected}\n onDragStart={handleDragStart}\n onCreate={handleTabCreate}\n {...props}\n {...haulProps}\n />\n {dragMask != null && (\n <div className={CSS.BE(\"mosaic\", \"mask\")} style={maskStyle[dragMask]} />\n )}\n </div>\n );\n },\n);\n\nTabLeaf.displayName = \"MosaicTabLeaf\";\n\nconst maskStyle: Record<location.Location, box.CSS> = {\n top: { left: \"0%\", top: \"0%\", width: \"100%\", height: \"50%\" },\n bottom: { left: \"0%\", top: \"50%\", width: \"100%\", height: \"50%\" },\n left: { left: \"0%\", top: \"0%\", width: \"50%\", height: \"100%\" },\n right: { left: \"50%\", top: \"0%\", width: \"50%\", height: \"100%\" },\n center: { left: \"0%\", top: \"0%\", width: \"100%\", height: \"100%\" },\n};\n\nconst getDragLocationPercents = (\n e: React.DragEvent<Element>,\n): { px: number; py: number } => {\n const rect = e.currentTarget.getBoundingClientRect();\n const x = e.clientX - rect.left;\n const y = e.clientY - rect.top;\n // This means we're in the selector.\n // TODO: This size depends on the theme and the size of the tabs,\n // we need to handle this better in the future.\n if (y < 24) return { px: 0.5, py: 0.5 };\n return { px: x / rect.width, py: y / rect.height };\n};\n\nconst crossHairA = (px: number): number => px;\n\nconst crossHairB = (px: number): number => 1 - px;\n\nconst insertLocation = ({ px, py }: { px: number; py: number }): location.Location => {\n if (px > 0.33 && px < 0.66 && py > 0.33 && py < 0.66) return \"center\";\n const [aY, bY] = [crossHairA(px), crossHairB(px)];\n if (py > aY && py > bY) return \"bottom\";\n if (py < aY && py < bY) return \"top\";\n if (py > aY && py < bY) return \"left\";\n if (py < aY && py > bY) return \"right\";\n throw new Error(\"[bug] - invalid insert 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 PropsWithChildren, useCallback } from \"react\";\n\nimport { box } from \"@synnaxlabs/x\";\n\nimport { Aether } from \"@/aether\";\nimport { CSS } from \"@/css\";\nimport { useResize, useSyncedRef } from \"@/hooks\";\nimport { eraser } from \"@/vis/eraser/aether\";\n\nexport interface UseProps {\n aetherKey: string;\n}\n\nexport const use = ({ aetherKey }: UseProps): ((region: box.Box) => void) => {\n const [, { region }, setState] = Aether.use({\n aetherKey,\n type: eraser.Eraser.TYPE,\n schema: eraser.eraserStateZ,\n initialState: { region: box.ZERO },\n });\n const regionRef = useSyncedRef(region);\n return useCallback(\n (b: box.Box) => {\n if (box.equals(b, regionRef.current)) return;\n setState((p) => ({ ...p, region: b }));\n },\n [setState],\n );\n};\n\nexport interface EraserProps extends PropsWithChildren {}\n\nexport const Eraser = Aether.wrap<EraserProps>(\n eraser.Eraser.TYPE,\n ({ aetherKey, children }) => {\n const erase = use({ aetherKey });\n const ref = useResize(erase);\n return (\n <div ref={ref} className={CSS(CSS.inheritDims())}>\n {children}\n </div>\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 ReactElement, useCallback, useState } from \"react\";\n\nimport { type box, location } from \"@synnaxlabs/x\";\n\nimport { Aether } from \"@/aether\";\nimport { CSS } from \"@/css\";\nimport { type BarProps } from \"@/nav/Bar\";\nimport { Resize } from \"@/resize\";\nimport { Eraser } from \"@/vis/eraser\";\n\nimport \"@/nav/Drawer.css\";\n\nexport interface DrawerItem {\n key: string;\n content: ReactElement;\n minSize?: number;\n maxSize?: number;\n initialSize?: number;\n}\n\nexport interface UseDrawerProps {\n initialKey?: string;\n items: DrawerItem[];\n}\n\nexport interface UseDrawerReturn {\n activeItem?: DrawerItem;\n onSelect?: (key: string) => void;\n}\n\nexport interface DrawerProps\n extends Omit<BarProps, \"onSelect\" | \"onResize\">,\n UseDrawerReturn,\n Partial<Pick<Resize.SingleProps, \"onResize\" | \"collapseThreshold\">> {}\n\nexport const useDrawer = ({ items, initialKey }: UseDrawerProps): UseDrawerReturn => {\n const [activeKey, setActiveKey] = useState<string | undefined>(initialKey);\n const handleSelect = (key: string): void =>\n setActiveKey(key === activeKey ? undefined : key);\n const activeItem = items.find((item) => item.key === activeKey);\n return { onSelect: handleSelect, activeItem };\n};\n\nexport const Drawer = Aether.wrap<DrawerProps>(\n \"Nav.Drawer\",\n ({\n aetherKey,\n activeItem,\n children,\n onSelect,\n location: loc_ = \"left\",\n collapseThreshold = 0.65,\n className,\n onResize,\n ...props\n }): ReactElement | null => {\n if (activeItem == null) return null;\n const dir = location.direction(loc_);\n const { key, content, ...rest } = activeItem;\n const handleCollapse = useCallback(() => onSelect?.(key), [onSelect, key]);\n const erase = Eraser.use({ aetherKey });\n const handleResize = useCallback(\n (size: number, box: box.Box) => {\n onResize?.(size, box);\n erase(box);\n },\n [onResize, erase],\n );\n return (\n <Resize.Single\n className={CSS(CSS.BE(\"navdrawer\", \"content\"), CSS.dir(dir), className)}\n collapseThreshold={collapseThreshold}\n onCollapse={handleCollapse}\n location={loc_}\n onResize={handleResize}\n {...rest}\n {...props}\n >\n {content}\n </Resize.Single>\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 FunctionComponent, type ReactElement } from \"react\";\n\nimport { direction, location, type spatial } from \"@synnaxlabs/x\";\n\nimport { Align } from \"@/align\";\nimport { CSS } from \"@/css\";\n\nimport \"@/nav/Bar.css\";\n\nexport interface BarProps extends Omit<Align.SpaceProps, \"direction\" | \"size\" | \"ref\"> {\n location?: location.Crude;\n size?: string | number;\n}\n\nconst CoreBar = ({\n location: location_ = \"left\",\n size = \"9rem\",\n className,\n style,\n ...props\n}: BarProps): ReactElement => {\n const loc = location.construct(location_);\n const dir = location.direction(loc);\n const oppositeDir = direction.swap(dir);\n return (\n <Align.Space\n className={CSS(\n CSS.B(\"navbar\"),\n CSS.bordered(location.swap(loc)),\n CSS.dir(oppositeDir),\n CSS.loc(loc),\n className,\n )}\n direction={oppositeDir}\n style={{\n [direction.dimension(dir)]: size,\n ...style,\n }}\n align=\"center\"\n empty\n {...props}\n />\n );\n};\n\nexport interface BarContentProps extends Omit<Align.SpaceProps<\"div\">, \"ref\"> {\n bordered?: boolean;\n className?: string;\n}\n\nconst contentFactory =\n (pos: spatial.Alignment | \"\"): FunctionComponent<BarContentProps> =>\n // eslint-disable-next-line react/display-name\n ({ bordered = false, className, ...props }: BarContentProps): ReactElement => (\n <Align.Space\n className={CSS(\n CSS.BE(\"navbar\", \"content\"),\n CSS.align(pos),\n pos !== \"\" && bordered && CSS.bordered(pos),\n className,\n )}\n align=\"center\"\n {...props}\n />\n );\n\ntype CoreBarType = typeof CoreBar;\n\nconst Start = contentFactory(\"start\");\nStart.displayName = \"NavbarStart\";\nconst End = contentFactory(\"end\");\nEnd.displayName = \"NavbarEnd\";\nconst Center = contentFactory(\"center\");\nCenter.displayName = \"NavbarCenter\";\nconst Content = contentFactory(\"\");\nContent.displayName = \"NavbarContent\";\n\nexport interface BarType extends CoreBarType {\n Start: typeof Start;\n Center: typeof Center;\n End: typeof End;\n Content: typeof Content;\n}\n\nexport const Bar = CoreBar as BarType;\n\nBar.Start = Start;\nBar.Center = Center;\nBar.End = End;\nBar.Content = Content;\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 ReactElement, useCallback, useMemo, useState, type FC } from \"react\";\n\nimport { Icon } from \"@synnaxlabs/media\";\nimport { type Optional } from \"@synnaxlabs/x\";\n\nimport { Button } from \"@/button\";\nimport { CSS } from \"@/css\";\nimport { Haul } from \"@/haul\";\nimport { useSyncedRef, useCombinedStateAndRef } from \"@/hooks\";\nimport { type UseSelectMultipleProps } from \"@/hooks/useSelectMultiple\";\nimport { List } from \"@/list\";\nimport { CONTEXT_SELECTED, CONTEXT_TARGET } from \"@/menu/ContextMenu\";\nimport { Text } from \"@/text\";\nimport { Triggers } from \"@/triggers\";\nimport { type RenderProp, componentRenderProp } from \"@/util/renderProp\";\n\nimport \"@/tree/Tree.css\";\n\nexport const HAUL_TYPE = \"tree-item\";\n\nexport interface Node {\n key: string;\n name: string;\n icon?: ReactElement;\n allowRename?: boolean;\n hasChildren?: boolean;\n children?: Node[];\n haulItems?: Haul.Item[];\n canDrop?: (items: Haul.Item[]) => boolean;\n href?: string;\n}\n\nexport interface NodeWithDepth extends Node {\n depth: number;\n}\n\nexport interface FlattenedNode extends Node {\n index: number;\n depth: number;\n expanded: boolean;\n}\n\nexport interface HandleExpandProps {\n current: string[];\n action: \"expand\" | \"contract\";\n clicked: string;\n}\n\nexport interface UseProps {\n onExpand?: (props: HandleExpandProps) => void;\n initialExpanded?: string[];\n nodes: Node[];\n sort?: boolean;\n}\n\nexport interface UseReturn {\n selected: string[];\n expanded: string[];\n onSelect: UseSelectMultipleProps<string, FlattenedNode>[\"onChange\"];\n nodes: FlattenedNode[];\n}\n\nexport const use = (props: UseProps): UseReturn => {\n const { onExpand, nodes, initialExpanded = [], sort = true } = props ?? {};\n const [expanded, setExpanded, ref] =\n useCombinedStateAndRef<string[]>(initialExpanded);\n const [selected, setSelected] = useState<string[]>([]);\n const flat = useMemo(\n () => flatten(nodes, expanded, undefined, sort),\n [nodes, expanded, sort],\n );\n const flatRef = useSyncedRef(flat);\n\n const shiftRef = Triggers.useHeldRef({ triggers: [[\"Shift\"]] });\n\n const handleSelect: UseSelectMultipleProps<string, FlattenedNode>[\"onChange\"] =\n useCallback(\n (keys: string[], { clicked }): void => {\n setSelected(keys);\n const n = flatRef.current.find((node) => node.key === clicked);\n if (n?.hasChildren === false) return;\n if (clicked == null || shiftRef.current.held) return;\n const currentlyExpanded = ref.current;\n const action = currentlyExpanded.some((key) => key === clicked)\n ? \"contract\"\n : \"expand\";\n let nextExpanded = currentlyExpanded;\n if (action === \"contract\")\n nextExpanded = currentlyExpanded.filter((key) => key !== clicked);\n else nextExpanded = [...currentlyExpanded, clicked];\n setExpanded(nextExpanded);\n onExpand?.({ current: nextExpanded, action, clicked });\n },\n [onExpand, flatRef, setExpanded, setSelected],\n );\n\n return {\n onSelect: handleSelect,\n selected,\n expanded,\n nodes: flat,\n };\n};\n\nexport interface ItemProps extends List.ItemProps<string, FlattenedNode> {\n onDrop?: (key: string, props: Haul.OnDropProps) => Haul.Item[];\n onSuccessfulDrop?: (key: string, props: Haul.OnSuccessfulDropProps) => void;\n onRename?: (key: string, name: string) => void;\n onDoubleClick?: (key: string, e: React.MouseEvent) => void;\n loading?: boolean;\n selectedItems: FlattenedNode[];\n useMargin?: boolean;\n}\n\nexport interface TreeProps\n extends Pick<\n ItemProps,\n \"onDrop\" | \"onRename\" | \"onSuccessfulDrop\" | \"onDoubleClick\" | \"useMargin\"\n >,\n Optional<\n Omit<\n List.VirtualCoreProps<string, FlattenedNode>,\n \"onDrop\" | \"onSelect\" | \"children\" | \"onDoubleClick\"\n >,\n \"itemHeight\"\n > {\n nodes: FlattenedNode[];\n selected?: string[];\n onSelect: UseSelectMultipleProps<string, FlattenedNode>[\"onChange\"];\n children?: RenderProp<ItemProps>;\n virtual?: boolean;\n}\n\nconst expandedCaret = <Icon.Caret.Down className={CSS.B(\"caret\")} />;\nconst collapsedCaret = <Icon.Caret.Right className={CSS.B(\"caret\")} />;\n\nexport type Item = FC<ItemProps>;\n\nexport const DefaultItem = ({\n entry,\n selected,\n onSelect,\n style,\n onDrop,\n onRename,\n onSuccessfulDrop,\n selectedItems,\n onDoubleClick,\n loading = false,\n useMargin = false,\n}: ItemProps): ReactElement => {\n const {\n key,\n hasChildren = false,\n allowRename = false,\n children,\n icon,\n name,\n depth,\n expanded,\n href,\n haulItems = [],\n } = entry;\n\n const actuallyHasChildren = hasChildren || (children != null && children.length > 0);\n\n const startIcons: ReactElement[] = [];\n if (actuallyHasChildren) startIcons.push(expanded ? expandedCaret : collapsedCaret);\n if (icon != null) startIcons.push(icon);\n const endIcons: ReactElement[] = [];\n if (loading) endIcons.push(<Icon.Loading className={CSS.B(\"loading-indicator\")} />);\n\n const [draggingOver, setDraggingOver] = useState(false);\n\n const { startDrag, ...dropProps } = Haul.useDragAndDrop({\n type: \"Tree.Item\",\n key,\n canDrop: useCallback(({ items: entities, source }) => {\n const keys = entities.map((item) => item.key);\n setDraggingOver(false);\n return source.type === \"Tree.Item\" && !keys.includes(key);\n }, []),\n onDrop: useCallback((props) => onDrop?.(key, props) ?? [], [key, onDrop]),\n onDragOver: useCallback(() => setDraggingOver(true), []),\n });\n\n const handleDragStart = (): void => {\n const selectedItemKeys = selectedItems.map(({ key }) => key);\n if (selectedItemKeys.includes(key)) {\n const selectedHaulItems = selectedItems\n .map(({ key, haulItems }) => [{ type: HAUL_TYPE, key }, ...(haulItems ?? [])])\n .flat();\n return startDrag(selectedHaulItems, (props) => onSuccessfulDrop?.(key, props));\n }\n startDrag(\n [{ type: HAUL_TYPE, key }, ...haulItems],\n (props) => onSuccessfulDrop?.(key, props),\n );\n };\n\n const offsetKey = useMargin ? \"marginLeft\" : \"paddingLeft\";\n\n const baseProps: Button.LinkProps | Button.ButtonProps = {\n id: key,\n variant: \"text\",\n draggable: true,\n className: CSS(\n CONTEXT_TARGET,\n draggingOver && CSS.M(\"dragging-over\"),\n selected && CONTEXT_SELECTED,\n CSS.selected(selected),\n actuallyHasChildren && CSS.M(\"has-children\"),\n ),\n onDragLeave: () => setDraggingOver(false),\n onDragStart: handleDragStart,\n onClick: () => onSelect?.(key),\n style: { ...style, [offsetKey]: `${depth * 1.5 + 1}rem` },\n startIcon: startIcons,\n iconSpacing: \"small\",\n noWrap: true,\n endIcon: endIcons,\n onDoubleClick: (e) => onDoubleClick?.(key, e),\n href,\n ...dropProps,\n };\n\n const Base = href != null ? Button.Link : Button.Button;\n\n return (\n <Base {...baseProps}>\n <Text.MaybeEditable\n id={`text-${key}`}\n level=\"p\"\n allowDoubleClick={false}\n value={name}\n onChange={\n onRename != null && allowRename ? (name) => onRename(key, name) : undefined\n }\n />\n </Base>\n );\n};\n\nconst defaultChild = componentRenderProp(DefaultItem);\nexport const Tree = ({\n nodes,\n selected = [],\n onSelect,\n onDrop,\n onRename,\n onSuccessfulDrop,\n onDoubleClick,\n className,\n children = defaultChild,\n itemHeight = 27,\n useMargin = false,\n virtual = true,\n ...props\n}: TreeProps): ReactElement => {\n const Core = virtual ? List.Core.Virtual : List.Core;\n return (\n <List.List<string, FlattenedNode> data={nodes}>\n <List.Selector\n value={selected}\n onChange={onSelect}\n allowMultiple\n replaceOnSingle\n />\n <Core<string, FlattenedNode>\n itemHeight={itemHeight}\n className={CSS(className, CSS.B(\"tree\"))}\n {...props}\n >\n {(props) =>\n children({\n ...props,\n useMargin,\n onDrop,\n onRename,\n onSuccessfulDrop,\n selectedItems: nodes.filter((item) => selected.includes(item.key)),\n onDoubleClick,\n })\n }\n </Core>\n </List.List>\n );\n};\n\nexport const startRenaming = (key: string): void => Text.edit(`text-${key}`);\n\nexport const shouldExpand = (node: Node, expanded: string[]): boolean =>\n expanded.includes(node.key);\n\nexport const flatten = (\n nodes: Node[],\n expanded: string[],\n depth: number = 0,\n sort: boolean,\n): FlattenedNode[] => {\n // Sort the first level of the tree independently of the rest\n if (depth === 0 && sort) nodes = nodes.sort((a, b) => a.name.localeCompare(b.name));\n const flattened: FlattenedNode[] = [];\n nodes.forEach((node, index) => {\n const expand = shouldExpand(node, expanded);\n flattened.push({ ...node, depth, expanded: expand, index });\n if (expand && node.children != null) {\n if (sort)\n node.children = node.children.sort((a, b) => a.name.localeCompare(b.name));\n flattened.push(...flatten(node.children, expanded, depth + 1, sort));\n }\n });\n return flattened;\n};\n\nexport const moveNode = (\n tree: Node[],\n destination: string,\n ...keys: string[]\n): Node[] => {\n keys.forEach((key) => {\n const node = findNode(tree, key);\n if (node == null) return;\n removeNode(tree, key);\n setNode(tree, destination, node);\n });\n return tree;\n};\n\nexport const removeNode = (tree: Node[], ...keys: string[]): Node[] => {\n const treeKeys = tree.map((node) => node.key);\n keys.forEach((key) => {\n const index = treeKeys.indexOf(key);\n if (index !== -1) tree.splice(index, 1);\n else {\n const parent = findNodeParent(tree, key);\n if (parent != null)\n parent.children = parent.children?.filter((child) => child.key !== key);\n }\n });\n return tree;\n};\n\nexport const setNode = (\n tree: Node[],\n destination: string,\n ...additions: Node[]\n): Node[] => {\n const node = findNode(tree, destination);\n if (node == null) throw new Error(`Could not find node with key ${destination}`);\n if (node.children == null) node.children = [];\n const addedKeys = additions.map((node) => node.key);\n node.children = [\n ...additions,\n ...node.children.filter((child) => !addedKeys.includes(child.key)),\n ];\n return tree;\n};\n\nexport const updateNode = (\n tree: Node[],\n key: string,\n updater: (node: Node) => Node,\n throwOnMissing: boolean = true,\n): Node[] => {\n const node = findNode(tree, key);\n if (node == null) {\n if (throwOnMissing) throw new Error(`Could not find node with key ${key}`);\n return tree;\n }\n const parent = findNodeParent(tree, key);\n if (parent != null) {\n // splice the updated node into the parent's children\n const index = parent.children?.findIndex((child) => child.key === key);\n if (index != null && index !== -1) parent.children?.splice(index, 1, updater(node));\n } else {\n // we're in the root, so just update the node\n tree.splice(\n tree.findIndex((node) => node.key === key),\n 1,\n updater(node),\n );\n }\n return tree;\n};\n\nexport const findNode = (\n tree: Node[],\n key: string,\n depth: number = 0,\n): NodeWithDepth | null => {\n for (const node of tree) {\n if (node.key === key) {\n const n = node as NodeWithDepth;\n n.depth = depth;\n return n;\n }\n if (node.children != null) {\n const found = findNode(node.children, key, depth + 1);\n if (found != null) return found;\n }\n }\n return null;\n};\n\nexport const findNodes = (tree: Node[], keys: string[]): NodeWithDepth[] => {\n const nodes: NodeWithDepth[] = [];\n for (const key of keys) {\n const node = findNode(tree, key);\n if (node != null) nodes.push(node);\n }\n return nodes;\n};\n\nexport const findNodeParent = (tree: Node[], key: string): Node | null => {\n for (const node of tree) {\n if (node.children != null) {\n if (node.children.some((child) => child.key === key)) return node;\n const found = findNodeParent(node.children, key);\n if (found != null) return found;\n }\n }\n return null;\n};\n","import React, { memo, useRef } from 'react';\nimport cc from 'classcat';\nimport { useStore } from '@reactflow/core';\nimport { shallow } from 'zustand/shallow';\n\nvar BackgroundVariant;\n(function (BackgroundVariant) {\n BackgroundVariant[\"Lines\"] = \"lines\";\n BackgroundVariant[\"Dots\"] = \"dots\";\n BackgroundVariant[\"Cross\"] = \"cross\";\n})(BackgroundVariant || (BackgroundVariant = {}));\n\nfunction LinePattern({ color, dimensions, lineWidth }) {\n return (React.createElement(\"path\", { stroke: color, strokeWidth: lineWidth, d: `M${dimensions[0] / 2} 0 V${dimensions[1]} M0 ${dimensions[1] / 2} H${dimensions[0]}` }));\n}\nfunction DotPattern({ color, radius }) {\n return React.createElement(\"circle\", { cx: radius, cy: radius, r: radius, fill: color });\n}\n\nconst defaultColor = {\n [BackgroundVariant.Dots]: '#91919a',\n [BackgroundVariant.Lines]: '#eee',\n [BackgroundVariant.Cross]: '#e2e2e2',\n};\nconst defaultSize = {\n [BackgroundVariant.Dots]: 1,\n [BackgroundVariant.Lines]: 1,\n [BackgroundVariant.Cross]: 6,\n};\nconst selector = (s) => ({ transform: s.transform, patternId: `pattern-${s.rfId}` });\nfunction Background({ id, variant = BackgroundVariant.Dots, \n// only used for dots and cross\ngap = 20, \n// only used for lines and cross\nsize, lineWidth = 1, offset = 2, color, style, className, }) {\n const ref = useRef(null);\n const { transform, patternId } = useStore(selector, shallow);\n const patternColor = color || defaultColor[variant];\n const patternSize = size || defaultSize[variant];\n const isDots = variant === BackgroundVariant.Dots;\n const isCross = variant === BackgroundVariant.Cross;\n const gapXY = Array.isArray(gap) ? gap : [gap, gap];\n const scaledGap = [gapXY[0] * transform[2] || 1, gapXY[1] * transform[2] || 1];\n const scaledSize = patternSize * transform[2];\n const patternDimensions = isCross ? [scaledSize, scaledSize] : scaledGap;\n const patternOffset = isDots\n ? [scaledSize / offset, scaledSize / offset]\n : [patternDimensions[0] / offset, patternDimensions[1] / offset];\n return (React.createElement(\"svg\", { className: cc(['react-flow__background', className]), style: {\n ...style,\n position: 'absolute',\n width: '100%',\n height: '100%',\n top: 0,\n left: 0,\n }, ref: ref, \"data-testid\": \"rf__background\" },\n React.createElement(\"pattern\", { id: patternId + id, x: transform[0] % scaledGap[0], y: transform[1] % scaledGap[1], width: scaledGap[0], height: scaledGap[1], patternUnits: \"userSpaceOnUse\", patternTransform: `translate(-${patternOffset[0]},-${patternOffset[1]})` }, isDots ? (React.createElement(DotPattern, { color: patternColor, radius: scaledSize / offset })) : (React.createElement(LinePattern, { dimensions: patternDimensions, color: patternColor, lineWidth: lineWidth }))),\n React.createElement(\"rect\", { x: \"0\", y: \"0\", width: \"100%\", height: \"100%\", fill: `url(#${patternId + id})` })));\n}\nBackground.displayName = 'Background';\nvar Background$1 = memo(Background);\n\nexport { Background$1 as Background, BackgroundVariant };\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 { xy, location, box, direction } from \"@synnaxlabs/x\";\n\nexport interface CheckIntegrityProps {\n sourcePos: xy.XY;\n targetPos: xy.XY;\n next: Segment[];\n prev: Segment[];\n}\n\nexport const checkIntegrity = ({\n sourcePos,\n targetPos,\n next,\n prev,\n}: CheckIntegrityProps): boolean => {\n const theoTarget = travelSegments(sourcePos, ...next);\n if (xy.distance(theoTarget, targetPos) < 1) return true;\n console.warn(\"Connector is out of sync with target\");\n console.log(\"Theoretical target\", theoTarget);\n console.log(\"Actual target\", targetPos);\n console.log(\"Segments\", next);\n console.log(\"Prev segments\", prev);\n return false;\n};\n\nexport interface ChangeOrientationProps {\n orientation: location.Outer;\n segments: Segment[];\n}\n\nexport const changeSourceOrientation = (props: ChangeOrientationProps): Segment[] =>\n compressSegments(internalChangeOrientation(props, false));\n\nexport const changeTargetOrientation = (props: ChangeOrientationProps): Segment[] =>\n compressSegments(internalChangeOrientation(props, true));\n\nconst internalChangeOrientation = (\n { orientation, segments }: ChangeOrientationProps,\n reverse: boolean,\n): Segment[] => {\n const stumpIdx = reverse ? segments.length - 1 : 0;\n let next = [...segments];\n const stump = next[stumpIdx];\n const currOrientation = segmentOrientation(stump);\n if (currOrientation === orientation) return next;\n const dir = direction.construct(orientation);\n const newStumpLength = setOrientationOnLength(orientation, STUMP_LENGTH);\n next = moveNodeInDirection(dir, xy.set(xy.ZERO, dir, -newStumpLength), next, reverse);\n\n const newStump = { direction: dir, length: newStumpLength };\n if (reverse) next.push(newStump);\n else next.unshift(newStump);\n return next;\n};\nexport interface PrepareNodeProps {\n sourceStumpTip: xy.XY;\n sourceOrientation: location.Outer;\n sourceBox: box.Box;\n targetStumpTip: xy.XY;\n targetOrientation: location.Outer;\n targetBox: box.Box;\n}\n\nexport const prepareNode = ({\n sourceStumpTip: sourcePos,\n sourceOrientation,\n sourceBox,\n targetStumpTip: targetPos,\n targetOrientation,\n targetBox,\n}: PrepareNodeProps): Segment | undefined => {\n // This is the case where the final connection line will not overlap with the node,\n // so we don't need to create an extra segment.\n if (!needToGoAround({ sourcePos, sourceOrientation, targetPos })) return;\n\n const sourceDirection = direction.construct(sourceOrientation);\n const swappedSourceDirection = direction.swap(sourceDirection);\n\n // This is the direction we need to travel in\n let orientationToTravelIn = orientationFromLength(\n swappedSourceDirection,\n targetPos[swappedSourceDirection] - sourcePos[swappedSourceDirection],\n );\n\n // We need to grab the edge of the node in this direction\n const nodeEdge = box.loc(sourceBox, orientationToTravelIn);\n\n // If they are pointing in opposite directions, we need to check if we need to\n // go completely around the node if there isn't enough space for a connector\n // between the two nodes.\n if (location.swap(sourceOrientation) === targetOrientation) {\n // In this case we do need to go around the node.\n const targetNodeEdge = box.loc(targetBox, location.swap(orientationToTravelIn));\n if (Math.abs(nodeEdge - targetNodeEdge) < STUMP_LENGTH)\n orientationToTravelIn = location.swap(orientationToTravelIn) as location.Outer;\n }\n // We need to travel from the source to the edge of the node plus MIN_LENGTH\n return {\n direction: swappedSourceDirection,\n length:\n nodeEdge -\n sourcePos[swappedSourceDirection] +\n setOrientationOnLength(orientationToTravelIn, STUMP_LENGTH),\n };\n};\n\nexport interface Segment {\n direction: direction.Direction;\n length: number;\n}\n\nexport const travelSegments = (source: xy.XY, ...segments: Segment[]): xy.XY => {\n let current = source;\n for (const segment of segments) {\n current = xy.translate(current, segment.direction, segment.length);\n }\n return current;\n};\n\nexport const segmentsToPoints = (\n source: xy.XY,\n segments: Segment[],\n zoom: number,\n applyTransform: boolean,\n): xy.XY[] => {\n try {\n let current = source;\n const points: xy.XY[] = [\n source,\n ...segments.map((s) => {\n current = xy.translate(current, s.direction, s.length);\n return current;\n }),\n ];\n if (!applyTransform) return points;\n\n const firstSeg = segments[0];\n const firstSegOrientation = orientationFromLength(\n firstSeg.direction,\n firstSeg.length,\n );\n const firstMag = orientationMagnitude(firstSegOrientation);\n points[0] = xy.translate(points[0], {\n [firstSeg.direction]: -1 * firstMag * 4 * zoom,\n [direction.swap(firstSeg.direction)]: 0,\n } as const as xy.XY);\n const lastSeg = segments[segments.length - 1];\n const lastSegOrientation = orientationFromLength(lastSeg.direction, lastSeg.length);\n const lastMag = orientationMagnitude(lastSegOrientation);\n points[points.length - 1] = xy.translate(points[points.length - 1], {\n [lastSeg.direction]: lastMag * 4 * zoom,\n [direction.swap(lastSeg.direction)]: 0,\n } as const as xy.XY);\n\n return points;\n } catch (e) {\n return [];\n }\n};\n\nexport interface BuildNew {\n sourceBox: box.Box;\n targetBox: box.Box;\n sourcePos: xy.XY;\n targetPos: xy.XY;\n sourceOrientation: location.Outer;\n targetOrientation: location.Outer;\n}\n\nexport const STUMP_LENGTH = 10;\n\nconst orientationMagnitude = (or: location.Outer): number =>\n or === \"top\" || or === \"left\" ? -1 : 1;\n\nconst setOrientationOnLength = (or: location.Outer, length: number): number =>\n or === \"top\" || or === \"left\" ? -length : length;\n\nconst orientationFromLength = (\n direction: direction.Direction,\n length: number,\n): location.Outer => {\n if (direction === \"x\") return length > 0 ? \"right\" : \"left\";\n return length > 0 ? \"bottom\" : \"top\";\n};\n\nconst segmentOrientation = (segment: Segment): location.Outer =>\n orientationFromLength(segment.direction, segment.length);\n\nexport interface NeedToGoAroundSourceProps {\n sourcePos: xy.XY;\n targetPos: xy.XY;\n sourceOrientation: location.Outer;\n}\n\nexport const needToGoAround = ({\n sourcePos,\n targetPos,\n sourceOrientation,\n}: NeedToGoAroundSourceProps): boolean => {\n const sourceDirection = direction.construct(sourceOrientation);\n const delta = targetPos[sourceDirection] - sourcePos[sourceDirection];\n return setOrientationOnLength(sourceOrientation, delta) < 0;\n};\n\nexport const stump = (orientation: location.Outer): Segment => ({\n direction: direction.construct(orientation),\n length: setOrientationOnLength(orientation, STUMP_LENGTH),\n});\n\nconst STUMPS = {\n top: stump(\"top\"),\n bottom: stump(\"bottom\"),\n left: stump(\"left\"),\n right: stump(\"right\"),\n};\n\nconst COMPRESSION_THRESHOLD = 4;\nconst DIRECT_REMOVAL_THRESHOLD = 0.25;\n\nexport const compressSegments = (segments: Segment[]): Segment[] => {\n return removeSameOrientationSegments(\n removeShortSegments(removeSameOrientationSegments(segments)),\n );\n};\n\nconst removeShortSegments = (segments: Segment[]): Segment[] => {\n const next: Segment[] = [...segments];\n const ok = segments.findIndex((seg, i) => {\n // If it's below the compression threshold and the user is making it smaller,\n // then we compress.\n const mag = Math.abs(seg.length);\n if (mag < COMPRESSION_THRESHOLD) {\n if (mag < DIRECT_REMOVAL_THRESHOLD) return true;\n if (i === 0 || i === segments.length - 1) return false;\n if (segments.length <= 3) return false;\n if (i + 2 < segments.length) {\n const toAdjust = next[i + 2];\n if (toAdjust.direction !== seg.direction) return false;\n next[i + 2] = { ...toAdjust, length: toAdjust.length + seg.length };\n } else {\n const toAdjust = next[i - 2];\n if (toAdjust.direction !== seg.direction) return false;\n next[i - 2] = { ...toAdjust, length: toAdjust.length + seg.length };\n }\n return true;\n }\n return false;\n });\n if (ok !== -1) {\n // splice out the short segment\n next.splice(ok, 1);\n return next;\n }\n return next;\n};\n\nconst removeSameOrientationSegments = (segments: Segment[]): Segment[] => {\n const next: Segment[] = [...segments];\n const idx = segments.findIndex((seg, i) => {\n const prevSeg = next[i - 1];\n if (i === 0 || seg.direction !== prevSeg.direction) return false;\n\n if (i === 1) {\n const stumpIdx = i - 1;\n const segIdx = i;\n const stumpOrientation = segmentOrientation(prevSeg);\n const segOrientation = segmentOrientation(seg);\n if (stumpOrientation === segOrientation) {\n next[i - 1] = {\n direction: next[i - 1].direction,\n length: next[i - 1].length + next[i].length,\n };\n next.splice(i, 1);\n return true;\n }\n if (Math.abs(prevSeg.length) === STUMP_LENGTH) return false;\n\n const stumpLength = setOrientationOnLength(stumpOrientation, STUMP_LENGTH);\n const delta = next[stumpIdx].length - stumpLength;\n const nextLength = next[segIdx].length + delta;\n if (Math.abs(nextLength) < STUMP_LENGTH) return false;\n next[stumpIdx] = { ...next[stumpIdx], length: stumpLength };\n next[segIdx] = { ...next[segIdx], length: nextLength };\n return true;\n }\n\n if (i === segments.length - 1) {\n const stumpIdx = i;\n const segIdx = i - 1;\n const stumpOrientation = segmentOrientation(seg);\n const segOrientation = segmentOrientation(prevSeg);\n if (stumpOrientation === segOrientation) {\n next[i - 1] = {\n direction: next[i - 1].direction,\n length: next[i - 1].length + next[i].length,\n };\n next.splice(i, 1);\n return true;\n }\n\n if (Math.abs(seg.length) === STUMP_LENGTH) return false;\n\n const stumpLength = setOrientationOnLength(stumpOrientation, STUMP_LENGTH);\n const delta = next[stumpIdx].length - stumpLength;\n const nextLength = next[segIdx].length + delta;\n if (Math.abs(nextLength) < STUMP_LENGTH) return false;\n next[stumpIdx] = { ...next[stumpIdx], length: stumpLength };\n next[segIdx] = { ...next[segIdx], length: nextLength };\n return true;\n }\n\n // splice out the short segment\n next[i - 1] = {\n direction: next[i - 1].direction,\n length: next[i - 1].length + next[i].length,\n };\n next.splice(i, 1);\n return true;\n });\n if (idx !== -1) return removeSameOrientationSegments(next);\n return next;\n};\n\nexport const buildNew = (props: BuildNew): Segment[] =>\n compressSegments(internalNewConnector(props));\n\nconst internalNewConnector = ({\n sourceBox,\n targetBox,\n sourcePos,\n targetPos,\n targetOrientation,\n sourceOrientation,\n}: BuildNew): Segment[] => {\n let sourceStumpOrientation = sourceOrientation;\n let targetStumpOrientation = targetOrientation;\n\n let sourceStump = { ...STUMPS[sourceOrientation] };\n let sourceStumpTip = travelSegments(sourcePos, sourceStump);\n\n const targetStump = { ...STUMPS[targetOrientation] };\n let targetStumpTip = travelSegments(targetPos, targetStump);\n\n const segments = [sourceStump];\n const extraSourceSeg = prepareNode({\n sourceStumpTip,\n sourceOrientation,\n sourceBox,\n targetStumpTip,\n targetOrientation,\n targetBox,\n });\n if (extraSourceSeg != null) {\n segments.push(extraSourceSeg);\n sourceStumpTip = travelSegments(sourceStumpTip, extraSourceSeg);\n sourceStumpOrientation = segmentOrientation(extraSourceSeg);\n sourceStump = extraSourceSeg;\n }\n\n const extraTargetSeg = prepareNode({\n sourceStumpTip: targetStumpTip,\n sourceOrientation: targetStumpOrientation,\n sourceBox: targetBox,\n targetStumpTip: sourceStumpTip,\n targetOrientation: sourceStumpOrientation,\n targetBox: sourceBox,\n });\n\n if (extraTargetSeg != null) {\n targetStumpTip = travelSegments(targetStumpTip, extraTargetSeg);\n targetStumpOrientation = orientationFromLength(\n extraTargetSeg.direction,\n extraTargetSeg.length,\n );\n }\n\n const addTargetSegments = (): void => {\n // We need to swap the orientations of the target stumps so that\n // they create the correct path when traversing the segments.\n if (extraTargetSeg != null) {\n extraTargetSeg.length *= -1;\n segments.push(extraTargetSeg);\n }\n targetStump.length *= -1;\n segments.push(targetStump);\n };\n\n // Here is where we draw the final connection line.\n // In this case we split the delta in half and draw three lines.\n if (location.swap(sourceStumpOrientation) === targetOrientation) {\n const dir = direction.construct(sourceStumpOrientation);\n // push three segments on\n // first segment is in same direction as source stump orientation and half way to the\n // target stump tip\n const dist = (targetStumpTip[dir] - sourceStumpTip[dir]) / 2;\n segments.push({ direction: dir, length: dist });\n const swappedDir = direction.swap(dir);\n // second segment is in the swapped direction of the source stump orientation and\n // the distance between the source stump tip and the target stump tip\n segments.push({\n direction: swappedDir,\n length: targetStumpTip[swappedDir] - sourceStumpTip[swappedDir],\n });\n // third segment is in the same direction as the source stump orientation and the\n // remaining distance to the target stump tip\n segments.push({ direction: dir, length: dist });\n addTargetSegments();\n return segments;\n }\n\n // In this case we draw two lines.\n // Check the delta in the direction of the source stump\n const delta =\n targetStumpTip[sourceStump.direction] - sourceStumpTip[sourceStump.direction];\n let swapped = direction.swap(sourceStump.direction);\n const swappedDelta = sourceStumpTip[swapped] - targetStumpTip[swapped];\n // Check if the delta is in the same direction as the source stump\n let firstSeg: Segment;\n if (\n orientationFromLength(sourceStump.direction, delta) === sourceStumpOrientation &&\n orientationFromLength(swapped, swappedDelta) === targetStumpOrientation\n ) {\n // This means we're good to go in this direction\n firstSeg = {\n direction: sourceStump.direction,\n length: delta,\n };\n } else {\n // This means we need to go orthogonally\n firstSeg = {\n direction: swapped,\n length: targetStumpTip[swapped] - sourceStumpTip[swapped],\n };\n swapped = direction.swap(swapped);\n }\n\n segments.push(firstSeg);\n // All we need to do next is draw a line\n const secondSeg = {\n direction: swapped,\n length: targetStumpTip[swapped] - sourceStumpTip[swapped],\n };\n segments.push(secondSeg);\n addTargetSegments();\n return segments;\n};\n\nexport interface MoveConnectorProps {\n segments: Segment[];\n index: number;\n magnitude: number;\n}\n\nexport const dragSegment = (props: MoveConnectorProps): Segment[] =>\n compressSegments(internalDragSegment(props));\n\nconst internalDragSegment = ({\n segments,\n index,\n magnitude,\n}: MoveConnectorProps): Segment[] => {\n const next = [...segments];\n const seg = next[index];\n const dir = direction.swap(seg.direction);\n const orientation = segmentOrientation(seg);\n\n // If we're dragging on a stump, we need to add two new segments.\n if (index === 0) {\n next.unshift({ direction: dir, length: magnitude });\n const stumpLength = setOrientationOnLength(orientation, STUMP_LENGTH);\n next.unshift({ direction: seg.direction, length: stumpLength });\n // Move the index up by two since we added two segments\n index += 2;\n // Since we added a new stump in the same direction as the old one, we need to\n // subtract the stump length from the segment.\n next[index] = { ...next[index], length: next[index].length - stumpLength };\n }\n // If it's not the stump just move it directly.\n else\n next[index - 1] = {\n direction: next[index - 1].direction,\n length: next[index - 1].length + magnitude,\n };\n\n // If we're dragging on the target stump, we need to add two new segments.\n if (index === next.length - 1) {\n next.push({ direction: dir, length: -magnitude });\n const stumpLength = setOrientationOnLength(orientation, STUMP_LENGTH);\n next.push({ direction: seg.direction, length: stumpLength });\n next[index] = { ...next[index], length: next[index].length - stumpLength };\n } else {\n next[index + 1] = {\n direction: next[index + 1].direction,\n length: next[index + 1].length - magnitude,\n };\n }\n\n return next;\n};\n\nconst findIndexBackwards = (\n segments: Segment[],\n cb: (seg: Segment, i: number) => boolean,\n): number => {\n for (let i = segments.length - 1; i >= 0; i--) {\n if (cb(segments[i], i)) return i;\n }\n return -1;\n};\n\nconst findNonTargetIdx = (\n segments: Segment[],\n cb: (seg: Segment, i: number) => boolean,\n reverse = false,\n ...exclude: number[]\n): number => {\n const internalCB = (seg: Segment, i: number): boolean =>\n !exclude.includes(i) && cb(seg, i);\n return reverse\n ? findIndexBackwards(segments, internalCB)\n : segments.findIndex(internalCB);\n};\n\nexport interface MoveNodeProps {\n delta: xy.XY;\n segments: Segment[];\n}\n\nexport const moveSourceNode = ({ delta, segments }: MoveNodeProps): Segment[] =>\n compressSegments(moveNodeInternal(delta, segments, false));\n\nexport const moveTargetNode = ({ delta, segments }: MoveNodeProps): Segment[] =>\n compressSegments(moveNodeInternal(delta, segments, true));\n\nconst moveNodeInternal = (\n delta: xy.XY,\n segments: Segment[],\n reverse: boolean,\n): Segment[] => {\n let next = [...segments];\n if (delta.x !== 0) next = moveNodeInDirection(\"x\", delta, next, reverse);\n if (delta.y !== 0) next = moveNodeInDirection(\"y\", delta, next, reverse);\n return next;\n};\n\nconst canAdjustStump = (\n dir: direction.Direction,\n seg: Segment,\n delta: xy.XY,\n): boolean => {\n if (seg.direction !== dir) return false;\n const next = { ...seg, length: seg.length - delta[dir] };\n const firstSegOrientation = segmentOrientation(seg);\n const nextFirstSegOrientation = segmentOrientation(next);\n const isAboveMinLength = Math.abs(next.length) > STUMP_LENGTH;\n const isSameOrientation = firstSegOrientation === nextFirstSegOrientation;\n return isAboveMinLength && isSameOrientation;\n};\n\nconst moveNodeInDirection = (\n dir: direction.Direction,\n delta: xy.XY,\n segments: Segment[],\n reverse: boolean,\n): Segment[] => {\n const swappedDirection = direction.swap(dir);\n // We'd always like to adjust the stump closest to the node if possible, but only\n // if compressing it won't make it too small OR cause it to reverse its orientation.\n const stumpIdx = reverse ? segments.length - 1 : 0;\n const stump = segments[stumpIdx];\n if (canAdjustStump(dir, stump, delta)) {\n segments[stumpIdx] = { ...stump, length: stump.length - delta[dir] };\n return segments;\n }\n\n const oppositeStumpIdx = reverse ? 0 : segments.length - 1;\n const isX = (seg: Segment): boolean => seg.direction === dir;\n const idxToAdjust = findNonTargetIdx(segments, isX, reverse, stumpIdx);\n if (idxToAdjust === oppositeStumpIdx) {\n const oppositeStump = segments[oppositeStumpIdx];\n if (canAdjustStump(dir, oppositeStump, delta)) {\n segments[oppositeStumpIdx] = {\n ...oppositeStump,\n length: oppositeStump.length - delta[dir],\n };\n return segments;\n } else {\n if (stump.direction === dir)\n segments[stumpIdx] = { ...stump, length: stump.length - delta[dir] };\n else\n segments[oppositeStumpIdx] = {\n ...oppositeStump,\n length: oppositeStump.length - delta[dir],\n };\n return segments;\n }\n }\n // This means that there is only one segment in the 'swappedDirection' direction in the whole\n // connector, so we split it in half and add a new segment.\n if (idxToAdjust === -1)\n if (segments.length === 1) {\n if (segments[0].direction === dir)\n return [{ direction: dir, length: segments[0].length - delta[dir] }];\n return [\n { direction: swappedDirection, length: segments[0].length / 2 },\n { direction: dir, length: -delta[dir] },\n { direction: swappedDirection, length: segments[0].length / 2 },\n ];\n } else {\n if (stump.direction === dir) {\n // just adjust the stump\n segments[stumpIdx] = { ...stump, length: stump.length - delta[dir] };\n return segments;\n } else {\n return [\n { direction: swappedDirection, length: segments[0].length },\n { direction: dir, length: -delta[dir] },\n ...segments.slice(1),\n ];\n }\n }\n\n const prev = segments[idxToAdjust];\n segments[idxToAdjust] = { ...prev, length: prev.length - delta[dir] };\n return segments;\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 { xy, box, location } from \"@synnaxlabs/x\";\nimport { type ReactFlowInstance } from \"reactflow\";\n\nexport const selectNode = (key: string): HTMLDivElement => {\n const el = document.querySelector(`[data-id=\"${key}\"]`);\n if (el == null) throw new Error(`[pid] - cannot find node with key: ${key}`);\n return el as HTMLDivElement;\n};\n\nexport const selectNodeBox = (flow: ReactFlowInstance, key: string): box.Box => {\n const n = selectNode(key);\n const flowN = flow.getNodes().find((n) => n.id === key);\n if (flowN == null) throw new Error(`[pid] - cannot find node with key: ${key}`);\n return box.construct(flowN.position, box.dims(box.construct(n)));\n};\n\nexport const selectNodeLayout = (key: string, flow: ReactFlowInstance): NodeLayout => {\n return NodeLayout.fromFlow(key, flow);\n};\n\nexport class HandleLayout {\n node_: NodeLayout | null = null;\n position: xy.XY;\n orientation: location.Outer;\n\n constructor(position: xy.XY, orientation: location.Outer) {\n this.position = position;\n this.orientation = orientation;\n }\n\n set node(node: NodeLayout) {\n this.node_ = node;\n }\n\n get node(): NodeLayout {\n if (this.node_ == null) throw new Error(`[pid] - handle has no node`);\n return this.node_;\n }\n\n get absolutePosition(): xy.XY {\n return xy.translate(box.topLeft(this.node.box), this.position);\n }\n}\n\nexport class NodeLayout {\n key: string;\n box: box.Box;\n\n handles: HandleLayout[];\n\n constructor(key: string, box: box.Box, handles: HandleLayout[]) {\n this.key = key;\n this.box = box;\n this.handles = handles;\n handles.forEach((h) => (h.node = this));\n }\n\n static fromFlow(key: string, flow: ReactFlowInstance): NodeLayout {\n const nodeBox = selectNodeBox(flow, key);\n // grab all child elements with the class 'react-flow__handle'\n const nodeEl = selectNode(key);\n const handleEls = nodeEl.getElementsByClassName(\"react-flow__handle\");\n const nodeElBox = box.construct(nodeEl);\n const handles = Array.from(handleEls).map((el) => {\n const pos = box.center(box.construct(el));\n const dist = xy.translation(box.topLeft(nodeElBox), pos);\n const match = el.className.match(/react-flow__handle-(\\w+)/);\n if (match == null) throw new Error(`[pid] - cannot find handle orientation`);\n const orientation = location.construct(match[0]) as location.Outer;\n return new HandleLayout(dist, orientation);\n });\n return new NodeLayout(key, nodeBox, handles);\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 DragEvent,\n Fragment,\n type ReactElement,\n useCallback,\n useRef,\n} from \"react\";\n\nimport { box, direction, xy } from \"@synnaxlabs/x\";\nimport {\n BaseEdge,\n type EdgeProps as RFEdgeProps,\n useReactFlow,\n type ConnectionLineComponentProps,\n} from \"reactflow\";\n\nimport { Color } from \"@/color\";\nimport { CSS } from \"@/css\";\nimport { useCombinedStateAndRef, useDebouncedCallback } from \"@/hooks\";\nimport { useCursorDrag } from \"@/hooks/useCursorDrag\";\nimport { type Key } from \"@/triggers/triggers\";\nimport { connector } from \"@/vis/diagram/edge/connector\";\n\nimport { selectNodeBox } from \"../util\";\n\nimport { calculateLineDirection } from \"@/vis/diagram/edge/edgeUtils\";\n\nimport \"@/vis/diagram/edge/Edge.css\";\n\ninterface CurrentlyDragging {\n segments: connector.Segment[];\n index: number;\n}\n\nexport interface EdgeProps extends RFEdgeProps {\n segments: connector.Segment[];\n onSegmentsChange: (segments: connector.Segment[]) => void;\n color?: Color.Crude;\n}\n\nexport const CustomConnectionLine = ({\n fromX,\n fromY,\n toX,\n toY,\n fromPosition,\n toPosition,\n fromNode,\n connectionLineStyle,\n connectionStatus,\n}: ConnectionLineComponentProps): ReactElement => {\n // select an element with 'react-flow__handle-connecting' class\n const connectedHandle = document.querySelector(\".react-flow__handle-connecting\");\n const toNodeHandle = connectedHandle?.className.match(/react-flow__handle-(\\w+)/);\n if (toNodeHandle != null) toPosition = toNodeHandle[1];\n\n const conn = connector.buildNew({\n sourcePos: xy.construct(fromX, fromY),\n targetPos: xy.construct(toX, toY),\n sourceOrientation: fromPosition,\n targetOrientation: toPosition,\n sourceBox: selectNodeBox(useReactFlow(), fromNode?.id ?? \"\"),\n targetBox: selectNodeBox(useReactFlow(), fromNode?.id ?? \"\"),\n });\n const flow = useReactFlow();\n const points = connector.segmentsToPoints(\n xy.construct(fromX, fromY),\n conn,\n flow.getZoom(),\n false,\n );\n\n return (\n <BaseEdge\n path={calcPath(points)}\n style={{\n ...connectionLineStyle,\n stroke: Color.cssString(\n connectionStatus === \"invalid\"\n ? \"var(--pluto-error-z)\"\n : \"var(--pluto-gray-l9)\",\n ),\n strokeWidth: 2,\n fill: \"none\",\n }}\n />\n );\n};\n\nexport const Edge = ({\n id,\n source,\n target,\n sourcePosition: sourceOrientation,\n targetHandleId,\n targetPosition: targetOrientation,\n style,\n segments: propsSegments = [],\n onSegmentsChange,\n color = \"var(--pluto-gray-l9)\",\n selected = false,\n ...props\n}: EdgeProps): ReactElement => {\n const sourcePos = xy.construct(props.sourceX, props.sourceY);\n const sourcePosRef = useRef(sourcePos);\n const sourcePosEq = xy.equals(sourcePos, sourcePosRef.current);\n\n const targetPos = xy.construct(props.targetX, props.targetY);\n const targetPosRef = useRef(targetPos);\n const targetPosEq = xy.equals(targetPos, targetPosRef.current);\n\n const flow = useReactFlow();\n const [segments, setSegments, segRef] = useCombinedStateAndRef<Segment[]>(() =>\n propsSegments.length > 0\n ? propsSegments\n : connector.buildNew({\n sourcePos,\n targetPos,\n sourceOrientation,\n targetOrientation,\n sourceBox: selectNodeBox(flow, source),\n targetBox: selectNodeBox(flow, target),\n }),\n );\n\n const targetOrientationRef = useRef(targetOrientation);\n const sourceOrientationRef = useRef(sourceOrientation);\n\n const debouncedOnSegmentsChange = useDebouncedCallback(onSegmentsChange, 100, [\n onSegmentsChange,\n ]);\n\n if (!sourcePosEq || !targetPosEq) {\n let next: connector.Segment[] = segments;\n const sourceDelta = xy.translation(sourcePosRef.current, sourcePos);\n const targetDelta = xy.translation(targetPos, targetPosRef.current);\n if (xy.equals(sourceDelta, xy.scale(targetDelta, -1), 0.001)) {\n sourcePosRef.current = sourcePos;\n targetPosRef.current = targetPos;\n } else {\n if (!sourcePosEq) {\n next = connector.moveSourceNode({ delta: sourceDelta, segments: next });\n if (sourceOrientationRef.current !== sourceOrientation) {\n sourceOrientationRef.current = sourceOrientation;\n next = connector.buildNew({\n sourcePos,\n targetPos,\n sourceOrientation,\n targetOrientation,\n sourceBox: selectNodeBox(flow, source),\n targetBox: selectNodeBox(flow, target),\n });\n }\n if (!connector.checkIntegrity({ sourcePos, targetPos, next, prev: segments })) {\n next = connector.buildNew({\n sourcePos,\n targetPos,\n sourceOrientation,\n targetOrientation,\n sourceBox: selectNodeBox(flow, source),\n targetBox: selectNodeBox(flow, target),\n });\n }\n sourcePosRef.current = sourcePos;\n } else if (!targetPosEq) {\n next = connector.moveTargetNode({ delta: targetDelta, segments: next });\n if (targetOrientationRef.current !== targetOrientation) {\n targetOrientationRef.current = targetOrientation;\n next = connector.buildNew({\n sourcePos,\n targetPos,\n sourceOrientation,\n targetOrientation,\n sourceBox: selectNodeBox(flow, source),\n targetBox: selectNodeBox(flow, target),\n });\n }\n if (!connector.checkIntegrity({ sourcePos, targetPos, next, prev: segments })) {\n next = connector.buildNew({\n sourcePos,\n targetPos,\n sourceOrientation,\n targetOrientation,\n sourceBox: selectNodeBox(flow, source),\n targetBox: selectNodeBox(flow, target),\n });\n }\n targetPosRef.current = targetPos;\n }\n debouncedOnSegmentsChange(next);\n setSegments(next);\n }\n }\n\n const dragRef = useRef<CurrentlyDragging | null>(null);\n\n const dragStart = useCursorDrag({\n onStart: useCallback((_: xy.XY, __: Key, e: DragEvent) => {\n dragRef.current = {\n index: Number(e.currentTarget.id.split(\"-\")[1]),\n segments: [...segRef.current],\n };\n }, []),\n onMove: useCallback((b: box.Box) => {\n if (dragRef.current == null) return;\n const next = connector.dragSegment({\n segments: dragRef.current.segments,\n index: dragRef.current.index,\n magnitude:\n box.dim(\n b,\n direction.swap(dragRef.current.segments[dragRef.current.index].direction),\n true,\n ) / flow.getZoom(),\n });\n setSegments(next);\n }, []),\n onEnd: useCallback(() => onSegmentsChange(segRef.current), [onSegmentsChange]),\n });\n\n const points = connector.segmentsToPoints(sourcePos, segments, flow.getZoom(), true);\n\n return (\n <>\n <BaseEdge\n path={calcPath(points)}\n style={{ ...style, stroke: Color.cssString(color) }}\n interactionWidth={6}\n {...props}\n />\n {selected &&\n calcMidPoints(points).map((p, i) => {\n const dir = segments[i].direction;\n const swapped = direction.swap(dir);\n const dims = {\n [direction.dimension(dir)]: \"18px\",\n [direction.dimension(swapped)]: \"4px\",\n };\n const pos = {\n [dir]: p[dir] - 9,\n [swapped]: p[swapped] - 2,\n };\n return (\n <Fragment key={i}>\n <rect\n className={CSS.BE(\"diagram-edge-handle\", \"background\")}\n fill=\"var(--pluto-gray-l0)\"\n stroke=\"var(--pluto-primary-z)\"\n {...dims}\n {...pos}\n rx=\"2px\"\n ry=\"2px\"\n />\n <foreignObject x={p.x - 9} y={p.y - 9} width=\"18px\" height=\"18px\">\n <div\n id={`handle-${i}`}\n className={CSS(\n CSS.BE(\"diagram-edge-handle\", \"dragger\"),\n CSS.dir(dir),\n )}\n draggable\n onDragStart={dragStart}\n />\n </foreignObject>\n </Fragment>\n );\n })}\n </>\n );\n};\n\nexport const calcPath = (coords: xy.XY[]): string => {\n let path = \"\";\n const close = false;\n const radius = 6;\n const length = coords.length + (close ? 1 : -1);\n for (let i = 0; i < length; i++) {\n const a = coords[i % coords.length];\n const b = coords[(i + 1) % coords.length];\n const t = Math.min(radius / Math.hypot(b.x - a.x, b.y - a.y), 0.5);\n\n if (i > 0)\n path += `Q${a.x},${a.y} ${a.x * (1 - t) + b.x * t},${a.y * (1 - t) + b.y * t}`;\n\n if (!close && i === 0) path += `M${a.x},${a.y}`;\n else if (i === 0) path += `M${a.x * (1 - t) + b.x * t},${a.y * (1 - t) + b.y * t}`;\n\n if (!close && i === length - 1) path += `L${b.x},${b.y}`;\n else if (i < length - 1)\n path += `L${a.x * t + b.x * (1 - t)},${a.y * t + b.y * (1 - t)}`;\n }\n if (close) path += \"Z\";\n return path;\n};\n\nexport const calcMidPoints = (points: xy.XY[]): xy.XY[] => {\n return points.slice(1).map((p, i) => {\n const prev = points[i];\n return xy.construct((p.x + prev.x) / 2, (p.y + prev.y) / 2);\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 ReactElement,\n createContext,\n useCallback,\n useMemo,\n useRef,\n useState,\n useContext as reactUseContext,\n type ComponentPropsWithoutRef,\n useEffect,\n memo,\n} from \"react\";\n\nimport { Icon } from \"@synnaxlabs/media\";\nimport { box, location, xy } from \"@synnaxlabs/x\";\nimport ReactFlow, {\n ReactFlowProvider,\n type Viewport as RFViewport,\n useOnViewportChange as useRFOnViewportChange,\n applyEdgeChanges as rfApplyEdgeChanges,\n applyNodeChanges as rfApplyNodeChanges,\n addEdge as rfAddEdge,\n Background as RFBackground,\n type Edge as RFEdge,\n type NodeProps as RFNodeProps,\n type NodeChange as RFNodeChange,\n type EdgeChange as RFEdgeChange,\n type Connection as RFConnection,\n type ReactFlowProps,\n useReactFlow,\n ConnectionMode,\n updateEdge,\n type EdgeProps as RFEdgeProps,\n} from \"reactflow\";\n\nimport { Aether } from \"@/aether\";\nimport { Align } from \"@/align\";\nimport { Button } from \"@/button\";\nimport { CSS } from \"@/css\";\nimport { useCombinedRefs, useMemoCompare } from \"@/hooks\";\nimport { Text } from \"@/text\";\nimport { Triggers } from \"@/triggers\";\nimport { type RenderProp } from \"@/util/renderProp\";\nimport { Viewport as CoreViewport } from \"@/viewport\";\nimport { Canvas } from \"@/vis/canvas\";\nimport { diagram } from \"@/vis/diagram/aether\";\nimport { Edge as EdgeComponent } from \"@/vis/diagram/edge\";\nimport { type connector } from \"@/vis/diagram/edge/connector\";\nimport { CustomConnectionLine } from \"@/vis/diagram/edge/Edge\";\nimport {\n type Edge,\n type Node,\n type Viewport,\n edgeConverter,\n nodeConverter,\n translateEdgesForward,\n translateNodesForward,\n translateViewportBackward,\n translateViewportForward,\n} from \"@/vis/diagram/types\";\n\nimport \"@/vis/diagram/Diagram.css\";\nimport \"reactflow/dist/style.css\";\n\nexport interface SymbolProps {\n symbolKey: string;\n position: xy.XY;\n selected: boolean;\n}\n\nexport interface UseProps {\n allowEdit?: boolean;\n initialEdges: Edge[];\n initialNodes: Node[];\n initialViewport?: Viewport;\n}\n\nexport const use = ({\n initialNodes,\n initialEdges,\n allowEdit = true,\n initialViewport = { position: xy.ZERO, zoom: 1 },\n}: UseProps): UseReturn => {\n const [editable, onEditableChange] = useState(allowEdit);\n const [nodes, onNodesChange] = useState<Node[]>(initialNodes);\n const [edges, onEdgesChange] = useState<Edge[]>(initialEdges);\n const [viewport, onViewportChange] = useState<Viewport>(initialViewport);\n\n return {\n viewport,\n onViewportChange,\n edges,\n nodes,\n onNodesChange,\n onEdgesChange,\n editable,\n onEditableChange,\n };\n};\n\nconst isValidConnection = (connection: RFConnection): boolean =>\n connection.source !== connection.target;\n\nexport interface UseReturn {\n edges: Edge[];\n nodes: Node[];\n onNodesChange: (nodes: Node[]) => void;\n onEdgesChange: (edges: Edge[]) => void;\n editable: boolean;\n onEditableChange: (v: boolean) => void;\n onViewportChange: (vp: Viewport) => void;\n viewport: Viewport;\n}\n\nconst EDITABLE_PROPS: ReactFlowProps = {\n nodesDraggable: true,\n nodesConnectable: true,\n elementsSelectable: true,\n zoomOnDoubleClick: false,\n};\n\nconst NOT_EDITABLE_PROPS: ReactFlowProps = {\n connectionRadius: 0,\n nodesDraggable: false,\n nodesConnectable: false,\n elementsSelectable: false,\n panOnDrag: false,\n panOnScroll: false,\n zoomOnScroll: false,\n zoomOnDoubleClick: false,\n zoomOnPinch: false,\n edgesFocusable: false,\n edgesUpdatable: false,\n nodesFocusable: false,\n edgeUpdaterRadius: 0,\n};\n\nexport interface DiagramProps\n extends UseReturn,\n Omit<ComponentPropsWithoutRef<\"div\">, \"onError\"> {\n triggers?: CoreViewport.UseTriggers;\n}\n\ninterface ContextValue {\n editable: boolean;\n onEditableChange: (v: boolean) => void;\n registerNodeRenderer: (renderer: RenderProp<SymbolProps>) => void;\n}\n\nconst Context = createContext<ContextValue>({\n editable: true,\n onEditableChange: () => {},\n registerNodeRenderer: () => {},\n});\n\nexport const useContext = (): ContextValue => reactUseContext(Context);\n\nexport interface NodeRendererProps {\n children: RenderProp<SymbolProps>;\n}\n\nexport const NodeRenderer = memo(\n ({ children }: NodeRendererProps): ReactElement | null => {\n const { registerNodeRenderer } = useContext();\n useEffect(() => registerNodeRenderer(children), [registerNodeRenderer, children]);\n return null;\n },\n);\nNodeRenderer.displayName = \"NodeRenderer\";\n\nconst Core = Aether.wrap<DiagramProps>(\n diagram.Diagram.TYPE,\n // eslint-disable-next-line react/display-name\n ({\n aetherKey,\n children,\n onNodesChange,\n onEdgesChange,\n nodes,\n edges,\n onEditableChange,\n editable,\n viewport,\n triggers: pTriggers,\n onViewportChange,\n ...props\n }): ReactElement => {\n const [{ path }, , setState] = Aether.use({\n aetherKey,\n type: diagram.Diagram.TYPE,\n schema: diagram.diagramStateZ,\n initialState: {\n position: viewport.position,\n region: box.ZERO,\n zoom: viewport.zoom,\n },\n });\n\n const triggers = useMemoCompare(\n () => pTriggers ?? CoreViewport.DEFAULT_TRIGGERS.zoom,\n Triggers.compareModeConfigs,\n [pTriggers],\n );\n\n const { fitView } = useReactFlow();\n const resizeRef = Canvas.useRegion(\n useCallback(\n (b) => {\n setState((prev) => ({ ...prev, region: b }));\n },\n [setState],\n ),\n );\n\n // For some reason, react flow repeatedly calls onViewportChange with the same\n // parameters, so we do a need equality check to prevent unnecessary re-renders.\n const viewportRef = useRef<RFViewport | null>(null);\n const handleViewport = useCallback(\n (vp: RFViewport): void => {\n const prev = viewportRef.current;\n if (prev != null && prev.x === vp.x && prev.y === vp.y && prev.zoom === vp.zoom)\n return;\n viewportRef.current = vp;\n setState((prev) => ({ ...prev, position: vp, zoom: vp.zoom }));\n onViewportChange(translateViewportBackward(vp));\n },\n [setState, onViewportChange],\n );\n\n useRFOnViewportChange({\n onStart: handleViewport,\n onChange: handleViewport,\n onEnd: handleViewport,\n });\n\n const [renderer, setRenderer] = useState<RenderProp<SymbolProps>>(() => () => null);\n\n const registerNodeRenderer = useCallback(\n (renderer: RenderProp<SymbolProps>) => setRenderer(() => renderer),\n [],\n );\n\n const nodeTypes = useMemo(\n () => ({\n custom: ({ id, xPos, yPos, selected }: RFNodeProps) => {\n return renderer({\n symbolKey: id,\n position: { x: xPos, y: yPos },\n selected,\n });\n },\n }),\n [renderer],\n );\n\n const edgesRef = useRef(edges);\n const edges_ = useMemo(() => {\n edgesRef.current = edges;\n return translateEdgesForward(edges);\n }, [edges]);\n const nodesRef = useRef(nodes);\n const nodes_ = useMemo(() => {\n nodesRef.current = nodes;\n return translateNodesForward(nodes);\n }, [nodes]);\n\n const handleNodesChange = useCallback(\n (changes: RFNodeChange[]) =>\n onNodesChange(\n nodeConverter(nodesRef.current, (n) => rfApplyNodeChanges(changes, n)),\n ),\n [onNodesChange],\n );\n\n const handleEdgesChange = useCallback(\n (changes: RFEdgeChange[]) =>\n onEdgesChange(\n edgeConverter(edgesRef.current, (e) => rfApplyEdgeChanges(changes, e)),\n ),\n [onEdgesChange],\n );\n\n const handleEdgeUpdate = useCallback(\n (oldEdge: RFEdge, newConnection: RFConnection) =>\n onEdgesChange(\n edgeConverter(edgesRef.current, (e) => updateEdge(oldEdge, newConnection, e)),\n ),\n [],\n );\n\n const handleConnect = useCallback(\n (conn: RFConnection) => {\n onEdgesChange(edgeConverter(edgesRef.current, (e) => rfAddEdge(conn, e)));\n },\n [onEdgesChange],\n );\n\n const handleEdgeSegmentsChange = useCallback(\n (id: string, segments: connector.Segment[]) => {\n const next = [...edgesRef.current];\n const index = next.findIndex((e) => e.key === id);\n if (index === -1) return;\n next[index] = { ...next[index], segments };\n edgesRef.current = next;\n onEdgesChange(next);\n },\n [onEdgesChange],\n );\n\n const editableProps = editable ? EDITABLE_PROPS : NOT_EDITABLE_PROPS;\n\n const EDGE_TYPES = useMemo(\n () => ({\n default: (props: RFEdgeProps) => (\n <EdgeComponent\n key={props.id}\n {...props}\n segments={props.data.segments}\n color={props.data.color}\n onSegmentsChange={useCallback(\n (segment) => handleEdgeSegmentsChange(props.id, segment),\n [props.id],\n )}\n />\n ),\n }),\n [handleEdgeSegmentsChange],\n );\n\n const triggerRef = useRef<HTMLElement>(null);\n Triggers.use({\n triggers: triggers.zoomReset,\n callback: useCallback(\n ({ stage, cursor }: Triggers.UseEvent) => {\n const reg = triggerRef.current;\n if (reg == null || stage !== \"start\" || !box.contains(reg, cursor)) return;\n fitView();\n },\n [fitView],\n ),\n });\n\n const selectTriggers = Triggers.purgeMouse(triggers.select)[0] ?? null;\n const panTriggers = Triggers.purgeMouse(triggers.pan)[0] ?? null;\n const zoomTriggers = Triggers.purgeMouse(triggers.zoom)[0] ?? null;\n const triggerProps: Partial<ReactFlowProps> = {\n selectionOnDrag: selectTriggers == null,\n panOnDrag: panTriggers == null,\n selectionKeyCode: selectTriggers,\n panActivationKeyCode: panTriggers,\n zoomActivationKeyCode: zoomTriggers,\n };\n\n const combinedRefs = useCombinedRefs(triggerRef, resizeRef);\n\n return (\n <Context.Provider value={{ editable, onEditableChange, registerNodeRenderer }}>\n <Aether.Composite path={path}>\n <ReactFlow\n {...triggerProps}\n className={CSS(CSS.B(\"diagram\"), CSS.editable(editable))}\n nodes={nodes_}\n edges={edges_}\n nodeTypes={nodeTypes}\n edgeTypes={EDGE_TYPES}\n ref={combinedRefs}\n fitView\n onNodesChange={handleNodesChange}\n onEdgesChange={handleEdgesChange}\n onConnect={handleConnect}\n onEdgeUpdate={handleEdgeUpdate}\n defaultViewport={translateViewportForward(viewport)}\n connectionLineComponent={CustomConnectionLine}\n elevateEdgesOnSelect\n minZoom={0.5}\n maxZoom={1.1}\n isValidConnection={isValidConnection}\n connectionMode={ConnectionMode.Loose}\n snapGrid={[3, 3]}\n proOptions={{\n hideAttribution: true,\n }}\n {...props}\n style={{\n [CSS.var(\"diagram-zoom\")]: viewport.zoom,\n ...props.style,\n }}\n {...editableProps}\n >\n {children}\n </ReactFlow>\n </Aether.Composite>\n </Context.Provider>\n );\n },\n);\n\nexport const Background = (): ReactElement | null => {\n const { editable } = useContext();\n return editable ? <RFBackground /> : null;\n};\n\nexport interface ControlsProps extends Align.PackProps {}\n\nexport const Controls = ({ children, ...props }: ControlsProps): ReactElement => (\n <Align.Pack direction=\"y\" className={CSS.BE(\"diagram\", \"controls\")} {...props}>\n {children}\n </Align.Pack>\n);\n\nexport type ToggleEditControlProps = Omit<\n Button.ToggleIconProps,\n \"value\" | \"onChange\" | \"children\"\n>;\n\nexport const ToggleEditControl = ({\n onClick,\n ...props\n}: ToggleEditControlProps): ReactElement => {\n const { editable, onEditableChange } = useContext();\n return (\n <Button.ToggleIcon\n onChange={() => onEditableChange(!editable)}\n value={editable}\n uncheckedVariant=\"outlined\"\n checkedVariant=\"filled\"\n tooltipLocation={location.RIGHT_CENTER}\n tooltip={\n editable ? (\n <Text.Text level=\"small\">Disable edit mode</Text.Text>\n ) : (\n <Text.Text level=\"small\">Enable edit mode</Text.Text>\n )\n }\n {...props}\n >\n {editable ? <Icon.EditOff /> : <Icon.Edit />}\n </Button.ToggleIcon>\n );\n};\n\nexport type FitViewControlProps = Omit<Button.IconProps, \"children\">;\n\nexport const FitViewControl = ({\n onClick,\n ...props\n}: FitViewControlProps): ReactElement => {\n const { fitView } = useReactFlow();\n return (\n <Button.Icon\n onClick={(e) => {\n fitView();\n onClick?.(e);\n }}\n tooltip={<Text.Text level=\"small\">Fit view to contents</Text.Text>}\n tooltipLocation={location.RIGHT_CENTER}\n variant=\"outlined\"\n {...props}\n >\n <Icon.Expand />\n </Button.Icon>\n );\n};\n\nexport const Diagram = (props: DiagramProps): ReactElement => (\n <ReactFlowProvider>\n <Core {...props} />\n </ReactFlowProvider>\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 { useCallback, type ComponentPropsWithoutRef, type ReactElement } from \"react\";\n\nimport { box, type direction } from \"@synnaxlabs/x\";\nimport { type z } from \"zod\";\n\nimport { Aether } from \"@/aether\";\nimport { CSS } from \"@/css\";\nimport { type UseResizeHandler, useResize } from \"@/hooks\";\nimport { type telem } from \"@/telem/aether\";\nimport { table } from \"@/vis/table/aether\";\n\nimport \"@/vis/table/Table.css\";\n\nexport interface TableProps extends ComponentPropsWithoutRef<\"table\"> {\n numColumns: number;\n}\n\nexport const Table = Aether.wrap<TableProps>(\n table.Table.TYPE,\n ({ aetherKey, numColumns, children, className, ...props }): ReactElement => {\n const [{ path }, , setState] = Aether.use({\n aetherKey,\n type: table.Table.TYPE,\n schema: table.tableStateZ,\n initialState: {\n region: box.ZERO,\n widths: Array(numColumns).fill(0),\n },\n });\n\n const handleTableResize = useCallback<UseResizeHandler>(\n (b) => setState((p) => ({ ...p, region: b })),\n [setState],\n );\n\n const handleColumnResize = useCallback(\n (index: number, width: number) =>\n setState((p) => ({\n ...p,\n widths: p.widths.map((w, i) => (i === index ? width : w)),\n })),\n [setState],\n );\n\n const tableResizeRef = useResize(handleTableResize);\n return (\n <table ref={tableResizeRef} className={CSS(CSS.B(\"table\"), className)} {...props}>\n <tbody>\n <Aether.Composite path={path}>{children}</Aether.Composite>\n <tr className={CSS.BE(\"table\", \"virtual-row\")}>\n {Array(numColumns)\n .fill(0)\n .map((_, i) => (\n <VirtualTD key={i} index={i} onResize={handleColumnResize} />\n ))}\n </tr>\n </tbody>\n </table>\n );\n },\n);\n\nexport interface VirtualTDProps {\n index: number;\n onResize: (index: number, width: number) => void;\n}\n\nconst VirtualTD = ({ onResize, index }: VirtualTDProps): ReactElement => {\n const handleResize = useCallback(\n (b: box.Box) => onResize(index, box.width(b)),\n [onResize, index],\n );\n const ref = useResize(handleResize);\n return <td ref={ref} className={CSS.BE(\"table\", \"virtual-cell\")} />;\n};\n\nexport interface TRProps extends ComponentPropsWithoutRef<\"tr\"> {}\n\nconst TR_RESIZE_TRIGGERS: direction.Direction[] = [\"y\"];\n\nexport const TR = Aether.wrap<TRProps>(\n table.TR.TYPE,\n ({ aetherKey, children }): ReactElement => {\n const [{ path }, , setState] = Aether.use({\n aetherKey,\n type: table.TR.TYPE,\n schema: table.trStateZ,\n initialState: {\n height: 0,\n },\n });\n\n const handleResize: UseResizeHandler = useCallback(\n (b) => setState((p) => ({ ...p, height: box.height(b) })),\n [setState],\n );\n\n const ref = useResize(handleResize, { triggers: TR_RESIZE_TRIGGERS });\n\n return (\n <tr ref={ref}>\n <Aether.Composite path={path}>{children}</Aether.Composite>\n </tr>\n );\n },\n);\n\nexport interface StringTDProps\n extends z.input<typeof table.stringTDStateZ>,\n Omit<ComponentPropsWithoutRef<\"td\">, \"children\" | \"color\"> {\n telem: telem.StringSourceSpec;\n}\n\nexport const StringTD = Aether.wrap<StringTDProps>(\n table.StringTD.TYPE,\n ({ aetherKey, telem }): ReactElement => {\n Aether.use({\n aetherKey,\n type: table.StringTD.TYPE,\n schema: table.stringTDStateZ,\n initialState: {\n stringSource: telem,\n },\n });\n return <td style={{ height: 20 }}></td>;\n },\n);\n","import { type ReactElement } from \"react\";\n\nimport { CSS } from \"@/css\";\nimport { Text } from \"@/text\";\nimport { type Theming } from \"@/theming\";\nimport { type Spec, type CellProps, type FormProps } from \"@/vis/table/cell/element\";\n\nimport \"@/vis/table/cell/Label.css\";\n\nexport interface LabelProps extends Omit<Text.EditableProps, \"onChange\"> {}\n\nconst Cell = ({\n onChange,\n className,\n onSelect,\n ...props\n}: CellProps<LabelProps>): ReactElement => {\n return (\n <td className={CSS(CSS.BE(\"table\", \"label\"))} onDoubleClick={onSelect}>\n <Text.Editable\n {...props}\n onChange={(v) => {\n onChange({ ...props, value: v });\n }}\n />\n </td>\n );\n};\n\nconst Form = ({ value, onChange }: FormProps<LabelProps>): ReactElement => {\n return <h1>Hello</h1>;\n};\n\nexport const initialProps = (t: Theming.Theme): LabelProps => ({\n value: \"Label\",\n level: \"p\" as \"h1\",\n});\n\nexport const LabelSpec: Spec<LabelProps> = {\n type: \"label\",\n title: \"Label\",\n initialProps,\n Cell,\n Form,\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 Spec } from \"@/vis/table/cell/element\";\nimport { LabelSpec } from \"@/vis/table/cell/Label\";\n\nexport const REGISTRY: Record<string, Spec<any>> = {\n [LabelSpec.type]: LabelSpec,\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 ReactElement, useLayoutEffect } from \"react\";\n\nimport { type z } from \"zod\";\n\nimport { Aether } from \"@/aether\";\nimport { useMemoDeepEqualProps } from \"@/memo\";\nimport { Text } from \"@/text\";\nimport { Theming } from \"@/theming\";\nimport { Value } from \"@/vis/value/aether/value\";\n\nexport const corePropsZ = Value.z\n .omit({ font: true })\n .partial({ color: true })\n .extend({ level: Text.levelZ.optional() });\n\nexport interface UseProps extends z.input<typeof corePropsZ> {\n aetherKey: string;\n}\n\nexport const use = ({\n aetherKey,\n box,\n telem,\n color,\n precision,\n width,\n level = \"small\",\n}: UseProps): ReactElement | null => {\n const font = Theming.useTypography(level);\n const memoProps = useMemoDeepEqualProps({\n box,\n telem,\n color,\n precision,\n width,\n font: font.toString(),\n });\n\n const [, , setState] = Aether.use({\n aetherKey,\n type: Value.TYPE,\n schema: Value.z,\n initialState: memoProps,\n });\n useLayoutEffect(() => setState((prev) => ({ ...prev, ...memoProps })), [memoProps]);\n return null;\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 ReactElement } from \"react\";\n\nimport { type location } from \"@synnaxlabs/x\";\n\nimport { Align } from \"@/align\";\nimport { Button as CoreButton } from \"@/button\";\nimport { CSS } from \"@/css\";\nimport { type Input } from \"@/input\";\n\nimport \"@/vis/pid/OrientationControl.css\";\n\nexport interface OrientationValue {\n inner: location.Outer;\n outer: location.Outer;\n}\n\nexport interface SelectOrientationProps extends Input.Control<OrientationValue> {}\n\nexport const SelectOrientation = ({\n value,\n onChange,\n}: SelectOrientationProps): ReactElement => {\n const { inner, outer } = value;\n const handleChange = (next: Partial<OrientationValue>) => () =>\n onChange({ ...value, ...next });\n\n return (\n <Align.Space\n className={CSS.B(\"orientation-control\")}\n align=\"center\"\n justify=\"center\"\n size={0.5}\n >\n <Button selected={outer === \"top\"} onClick={handleChange({ outer: \"top\" })} />\n <Align.Space direction=\"x\" align=\"center\" justify=\"center\" size={0.5}>\n <Button selected={outer === \"left\"} onClick={handleChange({ outer: \"left\" })} />\n <Align.Space\n className={CSS.B(\"value\")}\n direction=\"y\"\n align=\"center\"\n justify=\"center\"\n empty\n >\n <Button\n className={CSS(CSS.dir(\"y\"))}\n selected={inner === \"top\"}\n onClick={handleChange({ inner: \"top\" })}\n />\n <Align.Space direction=\"x\" align=\"center\" justify=\"center\">\n <Button\n selected={inner === \"left\"}\n onClick={handleChange({ inner: \"left\" })}\n />\n <Button\n selected={inner === \"right\"}\n onClick={handleChange({ inner: \"right\" })}\n />\n </Align.Space>\n <Button\n className={CSS(CSS.dir(\"y\"))}\n selected={inner === \"bottom\"}\n onClick={handleChange({ inner: \"bottom\" })}\n />\n </Align.Space>\n <Button\n selected={outer === \"right\"}\n onClick={handleChange({ outer: \"right\" })}\n />\n </Align.Space>\n <Button\n selected={outer === \"bottom\"}\n onClick={handleChange({ outer: \"bottom\" })}\n />\n </Align.Space>\n );\n};\n\nexport interface ButtonProps extends Omit<CoreButton.IconProps, \"children\"> {\n selected: boolean;\n}\n\nexport const Button = ({\n selected,\n className,\n ...props\n}: ButtonProps): ReactElement => (\n <CoreButton.Icon\n variant=\"text\"\n className={CSS(className, CSS.selected(selected))}\n {...props}\n >\n <div className=\"symbol\"></div>\n </CoreButton.Icon>\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 { useCallback, type ReactElement, type FC } from \"react\";\n\nimport { type channel } from \"@synnaxlabs/client\";\nimport { type location, type dimensions, type xy, type bounds } from \"@synnaxlabs/x\";\n\nimport { Align } from \"@/align\";\nimport { Channel } from \"@/channel\";\nimport { Color } from \"@/color\";\nimport { CSS } from \"@/css\";\nimport { Input } from \"@/input\";\nimport { Tabs } from \"@/tabs\";\nimport { type TabRenderProp } from \"@/tabs/Tabs\";\nimport { telem } from \"@/telem/aether\";\nimport { control } from \"@/telem/control/aether\";\nimport { Text } from \"@/text\";\nimport { type Button as CoreButton } from \"@/vis/button\";\nimport { type LabelExtensionProps } from \"@/vis/pid/Labeled\";\nimport {\n type ThreeWayValveProps,\n type ReliefValveProps,\n type TankProps,\n type SolenoidValveProps,\n type ControlStateProps,\n type ValueProps,\n type ButtonProps,\n} from \"@/vis/pid/Symbols\";\nimport { type Toggle } from \"@/vis/toggle\";\n\nimport { SelectOrientation } from \"./SelectOrientation\";\n\nimport \"@/vis/pid/Forms.css\";\n\nimport { Core } from \"@/telem/client/client\";\n\nexport interface SymbolFormProps<P extends object> {\n value: P;\n onChange: (value: P) => void;\n}\n\nconst COMMON_TOGGLE_FORM_TABS: Tabs.Tab[] = [\n {\n tabKey: \"style\",\n name: \"Style\",\n },\n {\n tabKey: \"control\",\n name: \"Control\",\n },\n {\n tabKey: \"tooltip\",\n name: \"Tooltip\",\n },\n];\n\ninterface FormWrapperProps extends Align.SpaceProps {}\n\nconst FormWrapper: FC<FormWrapperProps> = ({\n className,\n direction,\n ...props\n}): ReactElement => (\n <Align.Space\n direction={direction}\n align=\"stretch\"\n className={CSS(CSS.B(\"symbol-form\"), className)}\n size={direction === \"x\" ? \"large\" : \"medium\"}\n {...props}\n />\n);\n\ninterface PropertyInputProps<K extends string, V> {\n value: { [key in K]?: V };\n onChange: (value: { [key in K]: V }) => void;\n}\n\ninterface MultiPropertyInputProps<R> {\n value: R;\n onChange: (value: R) => void;\n}\n\ntype PropertyInput<K extends string, V> = FC<PropertyInputProps<K, V>>;\ntype MultiPropertyInput<R> = FC<MultiPropertyInputProps<R>>;\n\nconst OrientationControl: MultiPropertyInput<{\n label?: LabelExtensionProps;\n orientation?: location.Outer;\n}> = ({ value, onChange }): ReactElement => (\n <Input.Item label=\"Orientation\">\n <SelectOrientation\n value={{\n inner: value.orientation ?? \"top\",\n outer: value.label?.orientation ?? \"top\",\n }}\n onChange={(v) =>\n onChange({\n orientation: v.inner,\n label: {\n ...value.label,\n orientation: v.outer,\n },\n })\n }\n />\n </Input.Item>\n);\n\nconst LabelControls: PropertyInput<\"label\", LabelExtensionProps> = ({\n value: { label },\n onChange,\n}): ReactElement => (\n <Align.Space direction=\"x\">\n <Input.Item label=\"Label\" grow>\n <Input.Text\n value={label?.label ?? \"\"}\n onChange={(v) => onChange({ label: { ...label, label: v } })}\n />\n </Input.Item>\n <Input.Item label=\"Label Size\">\n <Text.SelectLevel\n value={label?.level ?? \"p\"}\n onChange={(v) => onChange({ label: { ...label, level: v } })}\n />\n </Input.Item>\n </Align.Space>\n);\n\nconst ColorControl: PropertyInput<\"color\", Color.Crude> = ({\n value,\n onChange,\n}): ReactElement => (\n <Input.Item label=\"Color\" align=\"start\">\n <Color.Swatch\n value={value.color ?? Color.ZERO.setAlpha(1).rgba255}\n onChange={(v) => onChange({ color: v.rgba255 })}\n />\n </Input.Item>\n);\n\nexport interface CommonToggleFormProps\n extends SymbolFormProps<ThreeWayValveProps & { control: ControlStateProps }> {}\n\nexport const ToggleControlForm: MultiPropertyInput<\n Omit<Toggle.UseProps, \"aetherKey\"> & { control: ControlStateProps }\n> = ({ value, onChange }): ReactElement => {\n const sourceP = telem.sourcePipelinePropsZ.parse(value.source?.props);\n const sinkP = telem.sinkPipelinePropsZ.parse(value.sink?.props);\n const source = telem.streamChannelValuePropsZ.parse(\n sourceP.segments.valueStream.props,\n );\n const sink = control.setChannelValuePropsZ.parse(sinkP.segments.setter.props);\n\n const handleSourceChange = (v: channel.Key): void => {\n const t = telem.sourcePipeline(\"boolean\", {\n connections: [\n {\n from: \"valueStream\",\n to: \"threshold\",\n },\n ],\n segments: {\n valueStream: telem.streamChannelValue({ channel: v }),\n threshold: telem.withinBounds({ trueBound: { lower: 0.9, upper: 1.1 } }),\n },\n outlet: \"threshold\",\n });\n onChange({ ...value, source: t });\n };\n\n const handleSinkChange = (v: channel.Key): void => {\n const t = telem.sinkPipeline(\"boolean\", {\n connections: [\n {\n from: \"setpoint\",\n to: \"setter\",\n },\n ],\n segments: {\n setter: control.setChannelValue({ channel: v }),\n setpoint: telem.setpoint({\n truthy: 1,\n falsy: 0,\n }),\n },\n inlet: \"setpoint\",\n });\n\n const authSource = control.authoritySource({ channel: v });\n\n const controlChipSink = control.acquireChannelControl({\n channel: v,\n authority: 255,\n });\n\n onChange({\n ...value,\n sink: t,\n control: {\n ...value.control,\n showChip: true,\n chip: {\n sink: controlChipSink,\n source: authSource,\n },\n showIndicator: true,\n indicator: {\n statusSource: authSource,\n },\n },\n });\n };\n\n return (\n <FormWrapper direction=\"y\">\n <Input.Item label=\"Input Channel\">\n <Channel.SelectSingle value={source.channel} onChange={handleSourceChange} />\n </Input.Item>\n <Input.Item label=\"Output Channel\">\n <Channel.SelectSingle value={sink.channel} onChange={handleSinkChange} />\n </Input.Item>\n </FormWrapper>\n );\n};\n\nexport const CommonToggleForm = ({\n value,\n onChange,\n}: CommonToggleFormProps): ReactElement => {\n const content: TabRenderProp = useCallback(\n ({ tabKey }) => {\n switch (tabKey) {\n case \"control\":\n return <ToggleControlForm value={value} onChange={onChange} />;\n default: {\n return (\n <FormWrapper direction=\"x\" align=\"stretch\">\n <Align.Space direction=\"y\" grow>\n <LabelControls value={value} onChange={onChange} />\n <ColorControl value={value} onChange={onChange} />\n </Align.Space>\n <OrientationControl value={value} onChange={onChange} />\n </FormWrapper>\n );\n }\n }\n },\n [value, onChange],\n );\n\n const props = Tabs.useStatic({ tabs: COMMON_TOGGLE_FORM_TABS, content });\n return <Tabs.Tabs {...props} />;\n};\n\nexport const SolenoidValveForm = ({\n value,\n onChange,\n}: SymbolFormProps<SolenoidValveProps>): ReactElement => {\n const content: TabRenderProp = useCallback(\n ({ tabKey }) => {\n switch (tabKey) {\n case \"control\":\n return <ToggleControlForm value={value} onChange={onChange} />;\n default: {\n return (\n <FormWrapper direction=\"x\" align=\"stretch\">\n <Align.Space direction=\"y\" grow>\n <LabelControls value={value} onChange={onChange} />\n <Align.Space direction=\"x\">\n <ColorControl value={value} onChange={onChange} />\n <Input.Item label=\"Normally Open\">\n <Input.Switch\n value={value.normallyOpen ?? false}\n onChange={(v) => onChange({ ...value, normallyOpen: v })}\n />\n </Input.Item>\n </Align.Space>\n </Align.Space>\n <OrientationControl value={value} onChange={onChange} />\n </FormWrapper>\n );\n }\n }\n },\n [value, onChange],\n );\n\n const props = Tabs.useStatic({ tabs: COMMON_TOGGLE_FORM_TABS, content });\n return <Tabs.Tabs {...props} />;\n};\n\nexport const CommonNonToggleForm = ({\n value,\n onChange,\n}: SymbolFormProps<ReliefValveProps>): ReactElement => {\n return (\n <FormWrapper direction=\"x\">\n <Align.Space direction=\"y\" grow>\n <LabelControls value={value} onChange={onChange} />\n <ColorControl value={value} onChange={onChange} />\n </Align.Space>\n <OrientationControl value={value} onChange={onChange} />\n </FormWrapper>\n );\n};\n\nconst DIMENSIONS_DRAG_SCALE: xy.Crude = { y: 2, x: 0.25 };\nconst DIMENSIONS_BOUNDS: bounds.Bounds = { lower: 0, upper: 2000 };\n\nexport const TankForm = ({\n value,\n onChange,\n}: SymbolFormProps<TankProps>): ReactElement => {\n const handleDimensionsChange = (dims: Partial<dimensions.Dimensions>): void => {\n onChange({\n ...value,\n dimensions: { width: 100, height: 200, ...value.dimensions, ...dims },\n });\n };\n return (\n <FormWrapper direction=\"x\">\n <Align.Space direction=\"y\">\n <LabelControls value={value} onChange={onChange} />\n <Align.Space direction=\"x\">\n <ColorControl value={value} onChange={onChange} />\n <Input.Item label=\"Width\">\n <Input.Numeric\n value={value.dimensions?.width ?? 200}\n dragScale={DIMENSIONS_DRAG_SCALE}\n bounds={DIMENSIONS_BOUNDS}\n onChange={(v) => handleDimensionsChange({ width: v })}\n />\n </Input.Item>\n <Input.Item label=\"Height\">\n <Input.Numeric\n value={value.dimensions?.height ?? 200}\n dragScale={DIMENSIONS_DRAG_SCALE}\n bounds={DIMENSIONS_BOUNDS}\n onChange={(v) => handleDimensionsChange({ height: v })}\n />\n </Input.Item>\n </Align.Space>\n </Align.Space>\n <OrientationControl value={value} onChange={onChange} />\n </FormWrapper>\n );\n};\n\nexport interface ValueFormProps extends SymbolFormProps<ValueProps> {}\n\nconst VALUE_FORM_TABS: Tabs.Tab[] = [\n {\n tabKey: \"style\",\n name: \"Style\",\n },\n {\n tabKey: \"telemetry\",\n name: \"Telemetry\",\n },\n];\n\nconst ValueTelemetryForm: PropertyInput<\"telem\", telem.StringSourceSpec> = ({\n value,\n onChange,\n}): ReactElement => {\n const sourceP = telem.sourcePipelinePropsZ.parse(value.telem?.props);\n const source = telem.streamChannelValuePropsZ.parse(\n sourceP.segments.valueStream.props,\n );\n const handleSourceChange = (v: channel.Key): void => {\n const t = telem.sourcePipeline(\"string\", {\n connections: [\n {\n from: \"valueStream\",\n to: \"stringifier\",\n },\n ],\n segments: {\n valueStream: telem.streamChannelValue({ channel: v }),\n stringifier: telem.stringifyNumber({\n precision: 2,\n suffix: \" psi\",\n }),\n },\n outlet: \"stringifier\",\n });\n onChange({ ...value, telem: t });\n };\n\n return (\n <FormWrapper direction=\"y\">\n <Input.Item label=\"Input Channel\">\n <Channel.SelectSingle value={source.channel} onChange={handleSourceChange} />\n </Input.Item>\n </FormWrapper>\n );\n};\n\nexport const ValueForm = ({ value, onChange }: ValueFormProps): ReactElement => {\n const content: TabRenderProp = useCallback(\n ({ tabKey }) => {\n switch (tabKey) {\n case \"telemetry\":\n return <ValueTelemetryForm value={value} onChange={onChange} />;\n default: {\n return <CommonNonToggleForm value={value} onChange={onChange} />;\n }\n }\n },\n [value, onChange],\n );\n\n const props = Tabs.useStatic({ tabs: VALUE_FORM_TABS, content });\n return <Tabs.Tabs {...props} />;\n};\n\nexport const ButtonTelemetryForm: MultiPropertyInput<\n Omit<CoreButton.UseProps, \"aetherKey\"> & { control: ControlStateProps }\n> = ({ value, onChange }): ReactElement => {\n const sinkP = telem.sinkPipelinePropsZ.parse(value.sink?.props);\n const sink = control.setChannelValuePropsZ.parse(sinkP.segments.setter.props);\n\n const handleSinkChange = (v: channel.Key): void => {\n const t = telem.sinkPipeline(\"boolean\", {\n connections: [\n {\n from: \"setpoint\",\n to: \"setter\",\n },\n ],\n segments: {\n setter: control.setChannelValue({ channel: v }),\n setpoint: telem.setpoint({\n truthy: 1,\n falsy: 0,\n }),\n },\n inlet: \"setpoint\",\n });\n\n const authSource = control.authoritySource({ channel: v });\n\n const controlChipSink = control.acquireChannelControl({\n channel: v,\n authority: 255,\n });\n\n onChange({\n ...value,\n sink: t,\n control: {\n ...value.control,\n showChip: true,\n chip: {\n sink: controlChipSink,\n source: authSource,\n },\n showIndicator: true,\n indicator: {\n statusSource: authSource,\n },\n },\n });\n };\n\n return (\n <FormWrapper direction=\"y\">\n <Input.Item label=\"Output Channel\">\n <Channel.SelectSingle value={sink.channel} onChange={handleSinkChange} />\n </Input.Item>\n </FormWrapper>\n );\n};\n\nexport const ButtonForm = ({\n value,\n onChange,\n}: SymbolFormProps<ButtonProps>): ReactElement => {\n const content: TabRenderProp = useCallback(\n ({ tabKey }) => {\n switch (tabKey) {\n case \"control\":\n return <ButtonTelemetryForm value={value} onChange={onChange} />;\n default:\n return (\n <FormWrapper direction=\"x\" align=\"stretch\">\n <Align.Space direction=\"y\" grow>\n <LabelControls value={value} onChange={onChange} />\n </Align.Space>\n <OrientationControl value={value} onChange={onChange} />\n </FormWrapper>\n );\n }\n },\n [value, onChange],\n );\n\n const props = Tabs.useStatic({ tabs: COMMON_TOGGLE_FORM_TABS, content });\n\n return <Tabs.Tabs {...props} />;\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 createContext,\n type PropsWithChildren,\n useEffect,\n useContext as reactUseContext,\n} from \"react\";\n\nimport { type channel } from \"@synnaxlabs/client\";\nimport { type z } from \"zod\";\n\nimport { Aether } from \"@/aether\";\nimport { useMemoDeepEqualProps } from \"@/memo\";\nimport { control } from \"@/telem/control/aether\";\n\nexport interface ControllerProps\n extends Omit<z.input<typeof control.controllerStateZ>, \"needsControlOf\">,\n PropsWithChildren {\n onStatusChange?: (status: control.Status) => void;\n name: string;\n}\n\nexport interface ContextValue {\n needsControlOf: channel.Keys;\n}\n\nconst Context = createContext<ContextValue>({ needsControlOf: [] });\n\nexport const useContext = (): ContextValue => reactUseContext(Context);\n\nexport const Controller = Aether.wrap<ControllerProps>(\n control.Controller.TYPE,\n ({ aetherKey, children, onStatusChange, ...props }) => {\n const memoProps = useMemoDeepEqualProps(props);\n const [{ path }, { status, needsControlOf }, setState] = Aether.use({\n aetherKey,\n type: control.Controller.TYPE,\n schema: control.controllerStateZ,\n initialState: memoProps,\n });\n useEffect(() => {\n if (status != null) onStatusChange?.(status);\n }, [status, onStatusChange]);\n useEffect(() => {\n setState((state) => ({ ...state, ...memoProps }));\n }, [memoProps, setState]);\n\n return (\n <Context.Provider value={{ needsControlOf }}>\n <Aether.Composite path={path}>{children}</Aether.Composite>;\n </Context.Provider>\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 PropsWithChildren } from \"react\";\n\nimport { type z } from \"zod\";\n\nimport { Aether } from \"@/aether\";\nimport { control } from \"@/telem/control/aether\";\n\nexport interface StateProviderProps\n extends z.input<typeof control.stateProviderStateZ>,\n PropsWithChildren {}\n\nexport const StateProvider = Aether.wrap<StateProviderProps>(\n control.StateProvider.TYPE,\n ({ aetherKey, children }) => {\n const [{ path }] = Aether.use({\n aetherKey,\n type: control.StateProvider.TYPE,\n schema: control.stateProviderStateZ,\n initialState: {},\n });\n return <Aether.Composite path={path}>{children}</Aether.Composite>;\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 ReactElement, useEffect, type PropsWithChildren } from \"react\";\n\nimport { TimeStamp } from \"@synnaxlabs/x\";\nimport { type z } from \"zod\";\n\nimport { Aether } from \"@/aether\";\nimport { Color } from \"@/color\";\nimport { CSS } from \"@/css\";\nimport { useMemoDeepEqualProps } from \"@/hooks\";\nimport { control } from \"@/telem/control/aether\";\nimport { Text } from \"@/text\";\nimport { Tooltip } from \"@/tooltip\";\n\nimport \"@/telem/control/Indicator.css\";\n\nexport interface IndicatorProps\n extends Omit<z.input<typeof control.indicatorStateZ>, \"status\" | \"color\">,\n PropsWithChildren {}\n\nexport const Indicator = Aether.wrap<IndicatorProps>(\n control.Indicator.TYPE,\n ({ aetherKey, colorSource, statusSource }): ReactElement => {\n const memoProps = useMemoDeepEqualProps({ colorSource, statusSource });\n\n const [, { color, status }, setState] = Aether.use({\n aetherKey,\n type: control.Indicator.TYPE,\n initialState: {\n ...memoProps,\n status: {\n key: \"no_chip\",\n variant: \"warning\",\n message: \"No chip connected.\",\n time: TimeStamp.now(),\n },\n },\n schema: control.indicatorStateZ,\n });\n\n useEffect(() => {\n setState((p) => ({ ...p, ...memoProps }));\n }, [memoProps, setState]);\n\n let parsedColor: Color.Crude;\n if (status.data?.color != null) parsedColor = status.data.color;\n else if (color != null && !color.isZero) parsedColor = color;\n else parsedColor = \"var(--pluto-gray-l8)\";\n\n return (\n <Tooltip.Dialog location={{ x: \"center\", y: \"right\" }}>\n <Text.Text level=\"p\">{status.message}</Text.Text>\n <div\n className={CSS.B(\"indicator\")}\n style={{\n backgroundColor: Color.cssString(parsedColor),\n flexGrow: 1,\n }}\n />\n </Tooltip.Dialog>\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 CSSProperties, type ReactElement, useCallback, useEffect } from \"react\";\n\nimport { control as clientControl } from \"@synnaxlabs/client\";\nimport { Icon } from \"@synnaxlabs/media\";\nimport { TimeStamp } from \"@synnaxlabs/x\";\n\nimport { Aether } from \"@/aether\";\nimport { Button } from \"@/button\";\nimport { useMemoDeepEqualProps } from \"@/memo\";\nimport { type Status } from \"@/status\";\nimport { control } from \"@/telem/control/aether\";\nimport { Text } from \"@/text\";\n\nexport interface ChipProps\n extends Pick<typeof control.chipStateZ, \"source\" | \"sink\">,\n Omit<Button.IconProps, \"onClick\" | \"children\"> {}\n\ninterface ChipStyle {\n message: string;\n chipColor: string;\n buttonStyle?: CSSProperties;\n}\n\nconst tooltipMessage = (status: Status.Spec): ChipStyle => {\n switch (status.variant) {\n case \"disabled\":\n return {\n message: \"Uncontrolled. Click to take control.\",\n chipColor: \"var(--pluto-gray-l10)\",\n };\n case \"error\":\n return {\n message: \"Not controlled by you. Click to take absolute control.\",\n chipColor: \"var(--pluto-error-z)\",\n };\n case \"success\":\n if (status.data?.authority === clientControl.Authority.ABSOLUTE)\n return {\n message: \"You have absolute control. Click to release.\",\n chipColor: \"var(--pluto-secondary-z)\",\n buttonStyle: {\n background: \"var(--pluto-secondary-z-30)\",\n },\n };\n return {\n message: \"You're in control. Release P&ID to release control.\",\n chipColor: \"var(--pluto-primary-z)\",\n };\n default:\n return {\n message: \"Unexpected status.\",\n chipColor: \"var(--pluto-error-z)\",\n };\n }\n};\n\nexport const Chip = Aether.wrap<ChipProps>(\n \"Chip\",\n ({ aetherKey, source, sink, ...props }): ReactElement => {\n const memoProps = useMemoDeepEqualProps({ source, sink });\n const [, { status }, setState] = Aether.use({\n aetherKey,\n type: control.Chip.TYPE,\n schema: control.chipStateZ,\n initialState: {\n triggered: false,\n ...memoProps,\n status: {\n key: \"no_chip\",\n variant: \"disabled\",\n message: \"No chip connected.\",\n time: TimeStamp.now(),\n },\n },\n });\n\n useEffect(() => {\n setState((state) => ({ ...state, ...memoProps }));\n }, [memoProps, setState]);\n\n const handleToggle = useCallback(\n () =>\n setState((state) => ({\n ...state,\n triggered: !state.triggered,\n })),\n [setState],\n );\n\n const { message, chipColor, buttonStyle } = tooltipMessage(status);\n\n return (\n <Button.Icon\n variant=\"text\"\n onClick={handleToggle}\n tooltip={<Text.Text level=\"small\">{message}</Text.Text>}\n style={buttonStyle}\n {...props}\n >\n <Icon.Circle color={chipColor} />\n </Button.Icon>\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 ReactElement, useEffect } from \"react\";\n\nimport { UnexpectedError } from \"@synnaxlabs/client\";\nimport { unique } from \"@synnaxlabs/x\";\n\nimport { Aether } from \"@/aether\";\nimport { control } from \"@/telem/control/aether\";\nimport { useContext } from \"@/telem/control/Controller\";\nimport { Legend as Core } from \"@/vis/legend\";\n\nexport interface LegendProps extends Core.SimpleProps {}\n\nexport const Legend = Aether.wrap<LegendProps>(\n control.Legend.TYPE,\n ({ aetherKey, ...props }): ReactElement => {\n const { needsControlOf } = useContext();\n const [, { states }, setState] = Aether.use({\n aetherKey,\n type: control.Legend.TYPE,\n schema: control.legendStateZ,\n initialState: {\n states: [],\n needsControlOf,\n },\n });\n\n useEffect(() => {\n setState((state) => ({ ...state, needsControlOf }));\n }, [needsControlOf]);\n\n // Filter out the unique subjects\n const subjects = unique(states.map((s) => s.subject.key));\n const data = subjects.map((s) => {\n const d = states.find((s2) => s2.subject.key === s);\n if (d == null) {\n throw new UnexpectedError(\"Legend subject not found\");\n }\n return { key: d.subject.key, label: d.subject.name, color: d.subjectColor };\n });\n\n return <Core.Simple data={data} {...props} />;\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 { useCallback, useEffect } from \"react\";\n\nimport { type z } from \"zod\";\n\nimport { Aether } from \"@/aether\";\nimport { useMemoDeepEqualProps } from \"@/memo\";\nimport { button } from \"@/vis/button/aether\";\n\nexport interface UseProps extends Omit<z.input<typeof button.buttonStateZ>, \"trigger\"> {\n aetherKey: string;\n}\n\nexport interface UseReturn {\n click: () => void;\n}\n\nexport const use = ({ aetherKey, sink }: UseProps): UseReturn => {\n const memoProps = useMemoDeepEqualProps({ sink });\n const [, , setState] = Aether.use({\n aetherKey,\n type: button.Button.TYPE,\n schema: button.buttonStateZ,\n initialState: {\n trigger: 0,\n sink,\n },\n });\n\n useEffect(() => {\n setState((p) => ({ ...p, ...memoProps }));\n }, [memoProps]);\n\n const click = useCallback(() => {\n setState((p) => ({ ...p, trigger: p.trigger + 1 }));\n }, [setState]);\n\n return { click };\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 { useCallback, forwardRef } from \"react\";\n\nimport { type location } from \"@synnaxlabs/x\";\n\nimport { Align } from \"@/align\";\nimport { CSS } from \"@/css\";\nimport { Text } from \"@/text\";\n\nexport interface LabelExtensionProps {\n label?: string;\n level?: Text.Level;\n orientation?: location.Outer;\n}\n\nexport interface LabeledProps\n extends Omit<Align.SpaceProps, \"value\" | \"onChange\" | \"direction\">,\n LabelExtensionProps {\n onChange: ({ label }: { label: LabelExtensionProps }) => void;\n}\n\nexport const Labeled = forwardRef<HTMLDivElement, LabeledProps>(\n (\n {\n label: value = \"\",\n onChange,\n level = \"p\",\n children,\n orientation = \"top\",\n style,\n className,\n ...props\n },\n ref,\n ) => {\n return (\n <Align.Space\n style={{\n // You may be wondering, why do we do this here? Well it's because react flow\n // uses a ResizeObserver to determine when to re-render edges. When we switch\n // from 'left' to 'right' or 'top' to 'bottom', the width and height of the\n // node remains the same, so the ResizeObserver doesn't fire. We need to redraw\n // the edges, so we add a margin to trigger it.\n marginRight: orientation === \"right\" ? 1 : 0,\n marginTop: orientation === \"top\" ? 1 : 0,\n ...style,\n }}\n align=\"center\"\n justify=\"center\"\n direction={orientation}\n ref={ref}\n className={CSS(CSS.B(\"symbol\"), className)}\n {...props}\n >\n <Text.Editable\n value={value}\n onChange={useCallback(\n (label) =>\n onChange({\n label: { label, level, orientation },\n }),\n [onChange, level],\n )}\n level={level}\n />\n {children}\n </Align.Space>\n );\n },\n);\nLabeled.displayName = \"Labeled\";\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 useEffect,\n type ComponentPropsWithoutRef,\n type ReactElement,\n useRef,\n type PropsWithChildren,\n} from \"react\";\n\nimport { dimensions, type location, direction, xy } from \"@synnaxlabs/x\";\nimport {\n type HandleProps as RFHandleProps,\n Handle as RFHandle,\n Position as RFPosition,\n useUpdateNodeInternals,\n} from \"reactflow\";\n\nimport { Button as CoreButton } from \"@/button\";\nimport { Color } from \"@/color\";\nimport { CSS } from \"@/css\";\nimport { Input } from \"@/input\";\nimport { Theming } from \"@/theming\";\n\nimport \"@/vis/pid/primitives/Primitives.css\";\n\ninterface PathProps extends ComponentPropsWithoutRef<\"path\"> {}\n\nconst Path = (props: PathProps): ReactElement => (\n <path vectorEffect=\"non-scaling-stroke\" {...props} />\n);\n\ninterface RectProps extends ComponentPropsWithoutRef<\"rect\"> {}\n\nconst Rect = (props: RectProps): ReactElement => (\n <rect vectorEffect=\"non-scaling-stroke\" {...props} />\n);\n\ninterface CircleProps extends ComponentPropsWithoutRef<\"circle\"> {}\n\nconst Circle = (props: CircleProps): ReactElement => (\n <circle vectorEffect=\"non-scaling-stroke\" {...props} />\n);\n\ninterface LineProps extends ComponentPropsWithoutRef<\"line\"> {}\n\nconst Line = (props: LineProps): ReactElement => (\n <line vectorEffect=\"non-scaling-stroke\" {...props} />\n);\n\nexport interface OrientableProps {\n orientation?: location.Outer;\n}\n\nexport interface SVGBasedPrimitiveProps extends OrientableProps {\n color?: Color.Crude;\n scale?: number;\n}\n\nexport interface DivProps\n extends Omit<ComponentPropsWithoutRef<\"div\">, \"color\">,\n OrientableProps {}\n\ninterface ToggleProps\n extends Omit<ComponentPropsWithoutRef<\"button\">, \"color\" | \"value\"> {\n triggered?: boolean;\n enabled?: boolean;\n color?: Color.Crude;\n}\n\ninterface HandleProps extends Omit<RFHandleProps, \"type\" | \"position\"> {\n orientation: location.Outer;\n location: location.Outer;\n left: number;\n top: number;\n id: string;\n}\n\nconst ORIENTATION_RF_POSITIONS: Record<\n location.Outer,\n Record<location.Outer, RFPosition>\n> = {\n left: {\n left: RFPosition.Left,\n right: RFPosition.Right,\n top: RFPosition.Top,\n bottom: RFPosition.Bottom,\n },\n right: {\n left: RFPosition.Right,\n right: RFPosition.Left,\n top: RFPosition.Bottom,\n bottom: RFPosition.Top,\n },\n top: {\n left: RFPosition.Bottom,\n right: RFPosition.Top,\n top: RFPosition.Left,\n bottom: RFPosition.Right,\n },\n bottom: {\n left: RFPosition.Top,\n right: RFPosition.Bottom,\n top: RFPosition.Right,\n bottom: RFPosition.Left,\n },\n};\n\nconst smartPosition = (\n position: location.Outer,\n orientation: location.Outer,\n): RFPosition => ORIENTATION_RF_POSITIONS[orientation][position];\n\nconst adjustHandle = (\n top: number,\n left: number,\n orientation: location.Outer,\n): { left: number; top: number } => {\n if (orientation === \"left\") return { top, left };\n if (orientation === \"right\") return { top: 100 - top, left: 100 - left };\n if (orientation === \"top\") return { top: 100 - left, left: top };\n return { top: left, left: 100 - top };\n};\n\nexport interface SmartHandlesProps extends PropsWithChildren<{}>, OrientableProps {}\n\nconst HandleBoundary = ({ children, orientation }: SmartHandlesProps): ReactElement => {\n let updateInternals: ReturnType<typeof useUpdateNodeInternals> | undefined;\n try {\n updateInternals = useUpdateNodeInternals();\n } catch (e) {\n return <></>;\n }\n const ref = useRef<HTMLDivElement & HTMLButtonElement>(null);\n const first = useRef<boolean>(true);\n useEffect(() => {\n if (ref.current == null) return;\n if (first.current) {\n first.current = false;\n return;\n }\n const node = ref.current.closest(\".react-flow__node\");\n const id = node?.getAttribute(\"data-id\");\n if (id == null) return;\n updateInternals?.(id);\n }, [orientation]);\n return (\n <>\n <span ref={ref} />\n {children}\n </>\n );\n};\n\nconst Handle = ({\n location,\n orientation,\n left,\n top,\n ...props\n}: HandleProps): ReactElement => {\n const adjusted = adjustHandle(top, left, orientation);\n return (\n <RFHandle\n position={smartPosition(location, orientation)}\n {...props}\n type=\"source\"\n onClick={(e) => e.stopPropagation()}\n className={(CSS.B(\"handle\"), CSS.BE(\"handle\", props.id))}\n style={{\n left: `${adjusted.left}%`,\n top: `${adjusted.top}%`,\n }}\n />\n );\n};\n\ninterface ToggleValveButtonProps extends ToggleProps {\n orientation?: location.Outer;\n}\n\nconst Toggle = ({\n className,\n enabled = false,\n triggered = false,\n color,\n orientation = \"left\",\n ...props\n}: ToggleValveButtonProps): ReactElement => (\n <button\n className={CSS(\n CSS.B(\"symbol-primitive\"),\n CSS.B(\"symbol-primitive-toggle\"),\n orientation != null && CSS.loc(orientation),\n enabled && CSS.M(\"enabled\"),\n triggered && CSS.M(\"triggered\"),\n className,\n )}\n {...props}\n />\n);\n\nconst Div = ({ className, orientation = \"left\", ...props }: DivProps): ReactElement => (\n <div className={CSS(CSS.B(\"symbol-primitive\"), className)} {...props} />\n);\n\nexport interface InternalSVGProps\n extends SVGBasedPrimitiveProps,\n Omit<ComponentPropsWithoutRef<\"svg\">, \"direction\" | \"color\" | \"orientation\"> {\n dimensions: dimensions.Dimensions;\n color?: Color.Crude;\n scale?: number;\n}\n\nconst BASE_SCALE = 0.8;\n\nconst InternalSVG = ({\n dimensions: dims,\n orientation = \"left\",\n children,\n className,\n color,\n style = {},\n scale = 1,\n ...props\n}: InternalSVGProps): ReactElement => {\n const dir = direction.construct(orientation);\n dims = dir === \"y\" ? dimensions.swap(dims) : dims;\n const colorStr = Color.cssString(color);\n // @ts-expect-error - css variables\n if (color != null) style[CSS.var(\"symbol-color\")] = new Color.Color(color).rgbString;\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox={dimensions.svgViewBox(dims)}\n className={CSS(CSS.loc(orientation), className)}\n fill={colorStr}\n stroke={colorStr}\n {...props}\n style={{\n aspectRatio: `${dims.width} / ${dims.height}`,\n width: dimensions.scale(dims, scale * BASE_SCALE).width,\n ...style,\n }}\n >\n <g>{children}</g>\n </svg>\n );\n};\n\nexport interface FourWayValveProps extends ToggleProps, SVGBasedPrimitiveProps {}\n\nexport const FourWayValve = ({\n className,\n orientation,\n scale,\n color,\n ...props\n}: FourWayValveProps): ReactElement => (\n <Toggle\n {...props}\n orientation={orientation}\n className={CSS(CSS.B(\"four-way-valve\"), className)}\n >\n <HandleBoundary orientation={orientation}>\n <Handle location=\"left\" orientation=\"left\" left={0} top={50} id=\"1\" />\n <Handle location=\"right\" orientation=\"left\" left={100} top={50} id=\"2\" />\n <Handle location=\"top\" orientation=\"left\" left={50} top={0} id=\"3\" />\n <Handle location=\"bottom\" orientation=\"left\" left={50} top={100} id=\"4\" />\n </HandleBoundary>\n <InternalSVG dimensions={{ width: 87, height: 87 }} color={color} scale={scale}>\n <Path d=\"M43.5 43.5L6.35453 24.7035C4.35901 23.6937 2 25.1438 2 27.3803V59.6197C2 61.8562 4.35901 63.3063 6.35453 62.2965L43.5 43.5ZM43.5 43.5L80.6455 24.7035C82.641 23.6937 85 25.1438 85 27.3803V59.6197C85 61.8562 82.641 63.3063 80.6455 62.2965L43.5 43.5Z\" />\n <Path d=\"M43.5 43.5L24.7035 80.6455C23.6937 82.641 25.1438 85 27.3803 85H59.6197C61.8562 85 63.3063 82.641 62.2965 80.6455L43.5 43.5ZM43.5 43.5L24.7035 6.35453C23.6937 4.35901 25.1438 2 27.3803 2H59.6197C61.8562 2 63.3063 4.35901 62.2965 6.35453L43.5 43.5Z\" />\n </InternalSVG>\n </Toggle>\n);\n\nexport interface ThreeWayValveProps extends ToggleProps, SVGBasedPrimitiveProps {}\n\nexport const ThreeWayValve = ({\n color,\n orientation = \"left\",\n scale,\n ...props\n}: ThreeWayValveProps): ReactElement => (\n <Toggle\n {...props}\n className={CSS(CSS.B(\"three-way-valve\"))}\n orientation={orientation}\n >\n <HandleBoundary orientation={orientation}>\n <Handle location=\"bottom\" orientation={orientation} left={50} top={100} id=\"1\" />\n <Handle location=\"left\" orientation={orientation} left={0} top={33} id=\"2\" />\n <Handle location=\"right\" orientation={orientation} left={100} top={33} id=\"3\" />\n </HandleBoundary>\n <InternalSVG\n dimensions={{ width: 87, height: 64 }}\n color={color}\n orientation={orientation}\n scale={scale}\n >\n <Path d=\"M43.5 21L6.35453 2.20349C4.35901 1.19372 2 2.64384 2 4.88029V37.1197C2 39.3562 4.35901 40.8063 6.35453 39.7965L43.5 21ZM43.5 21L80.6455 2.20349C82.641 1.19372 85 2.64384 85 4.8803V37.1197C85 39.3562 82.641 40.8063 80.6455 39.7965L43.5 21Z\" />\n <Path d=\"M44.3923 22.3611C44.0222 21.6298 42.9778 21.6298 42.6077 22.3611L24.7035 57.7433C23.6937 59.7388 25.1438 62.0978 27.3803 62.0978L59.6197 62.0978C61.8562 62.0978 63.3063 59.7388 62.2965 57.7433L44.3923 22.3611Z\" />\n </InternalSVG>\n </Toggle>\n);\n\nexport interface ValveProps extends ToggleProps, SVGBasedPrimitiveProps {}\n\nexport const Valve = ({\n orientation = \"left\",\n color,\n scale,\n ...props\n}: ValveProps): ReactElement => (\n <Toggle {...props}>\n <HandleBoundary orientation={orientation}>\n <Handle location=\"left\" orientation={orientation} left={0} top={50} id=\"1\" />\n <Handle location=\"right\" orientation={orientation} left={100} top={50} id=\"2\" />\n </HandleBoundary>\n <InternalSVG\n dimensions={{ width: 87, height: 42 }}\n color={color}\n orientation={orientation}\n scale={scale}\n >\n <Path d=\"M43.5 21L6.35453 2.20349C4.35901 1.19372 2 2.64384 2 4.88029V37.1197C2 39.3562 4.35901 40.8063 6.35453 39.7965L43.5 21ZM43.5 21L80.6455 2.20349C82.641 1.19372 85 2.64384 85 4.8803V37.1197C85 39.3562 82.641 40.8063 80.6455 39.7965L43.5 21Z\" />\n </InternalSVG>\n </Toggle>\n);\n\nexport interface SolenoidValveProps extends ToggleProps, SVGBasedPrimitiveProps {\n normallyOpen?: boolean;\n}\n\nexport const SolenoidValve = ({\n className,\n color,\n orientation = \"left\",\n normallyOpen = false,\n scale,\n ...props\n}: SolenoidValveProps): ReactElement => (\n <Toggle\n className={CSS(\n CSS.B(\"solenoid-valve\"),\n normallyOpen && CSS.M(\"normally-open\"),\n className,\n )}\n {...props}\n >\n <HandleBoundary orientation={orientation}>\n <Handle location=\"left\" orientation={orientation} left={1} top={69} id=\"1\" />\n <Handle location=\"right\" orientation={orientation} left={99} top={69} id=\"2\" />\n </HandleBoundary>\n <InternalSVG\n dimensions={{ width: 87, height: 69 }}\n color={color}\n orientation={orientation}\n scale={scale}\n >\n <Path\n className={CSS.B(\"body\")}\n d=\"M43.5 48L6.35453 29.2035C4.35901 28.1937 2 29.6438 2 31.8803V64.1197C2 66.3562 4.35901 67.8063 6.35453 66.7965L43.5 48ZM43.5 48L80.6455 29.2035C82.641 28.1937 85 29.6438 85 31.8803V64.1197C85 66.3562 82.641 67.8063 80.6455 66.7965L43.5 48Z\"\n />\n <Path d=\"M43.5 47L43.5 24.6177\" />\n <Rect x=\"29\" y=\"2\" width=\"29\" height=\"22.5333\" rx=\"1\" />\n </InternalSVG>\n </Toggle>\n);\n\nexport interface ReliefValveProps extends DivProps, SVGBasedPrimitiveProps {}\n\nexport const ReliefValve = ({\n className,\n orientation = \"left\",\n color,\n scale,\n ...props\n}: ReliefValveProps): ReactElement => (\n <Div\n orientation={orientation}\n className={CSS(CSS.B(\"relief-valve\"), className)}\n {...props}\n >\n <HandleBoundary orientation={orientation}>\n <Handle location=\"left\" orientation={orientation} left={1} top={66} id=\"1\" />\n <Handle location=\"right\" orientation={orientation} left={99} top={66} id=\"2\" />\n </HandleBoundary>\n <InternalSVG\n dimensions={{ width: 87, height: 58 }}\n color={color}\n orientation={orientation}\n scale={scale}\n >\n <Path d=\"M43.5 37L6.35453 18.2035C4.35901 17.1937 2 18.6438 2 20.8803V53.1197C2 55.3562 4.35901 56.8063 6.35453 55.7965L43.5 37ZM43.5 37L80.6455 18.2035C82.641 17.1937 85 18.6438 85 20.8803V53.1197C85 55.3562 82.641 56.8063 80.6455 55.7965L43.5 37Z\" />\n <Path d=\"M43.5 2L43.5 38\" strokeLinecap=\"round\" />\n <Path d=\"M31.8011 14.0802L55.1773 4.29611\" strokeLinecap=\"round\" />\n <Path d=\"M31.8011 20.0802L55.1773 10.2961\" strokeLinecap=\"round\" />\n <Path d=\"M31.8011 26.0802L55.1773 16.2961\" strokeLinecap=\"round\" />\n </InternalSVG>\n </Div>\n);\n\nexport interface CheckValveProps extends DivProps, SVGBasedPrimitiveProps {}\n\nexport const CheckValve = ({\n className,\n orientation = \"left\",\n color,\n scale,\n ...props\n}: CheckValveProps): ReactElement => (\n <Div\n orientation={orientation}\n className={CSS(CSS.B(\"check-valve\"), className)}\n {...props}\n >\n <HandleBoundary orientation={orientation}>\n <Handle location=\"left\" orientation={orientation} left={1} top={50} id=\"1\" />\n <Handle location=\"right\" orientation={orientation} left={99} top={50} id=\"2\" />\n </HandleBoundary>\n <InternalSVG\n dimensions={{ width: 45, height: 43 }}\n color={color}\n orientation={orientation}\n scale={scale}\n >\n <Path d=\"M43 2L43 40\" strokeLinecap=\"round\" />\n <Path d=\"M41.6607 21.8946C42.3917 21.5238 42.3906 20.4794 41.6589 20.1101L6.25889 2.2412C4.26237 1.23341 1.90481 2.68589 1.90704 4.92235L1.93925 37.1617C1.94148 39.3982 4.30194 40.846 6.29644 39.8342L41.6607 21.8946Z\" />\n </InternalSVG>\n </Div>\n);\n\nexport interface AngledValveProps extends ToggleProps, SVGBasedPrimitiveProps {}\n\nexport const AngledValve = ({\n color,\n className,\n orientation = \"left\",\n scale,\n ...props\n}: AngledValveProps): ReactElement => (\n <Toggle\n {...props}\n orientation={orientation}\n className={CSS(CSS.B(\"angled-valve\"), className)}\n >\n <HandleBoundary orientation={orientation}>\n <Handle location=\"bottom\" orientation={orientation} left={33} top={100} id=\"1\" />\n <Handle location=\"right\" orientation={orientation} left={100} top={35} id=\"2\" />\n </HandleBoundary>\n <InternalSVG\n dimensions={{ width: 64, height: 64 }}\n color={color}\n orientation={orientation}\n scale={scale}\n >\n <Path d=\"M22.3611 20.1077C21.6298 20.4778 21.6298 21.5222 22.3611 21.8923L57.7433 39.7965C59.7388 40.8063 62.0978 39.3562 62.0978 37.1197L62.0978 4.88029C62.0978 2.64384 59.7388 1.19372 57.7433 2.2035L22.3611 20.1077Z\" />\n <Path d=\"M21.8923 22.3611C21.5222 21.6298 20.4778 21.6298 20.1077 22.3611L2.20349 57.7433C1.19372 59.7388 2.64384 62.0978 4.8803 62.0978L37.1197 62.0978C39.3562 62.0978 40.8063 59.7388 39.7965 57.7433L21.8923 22.3611Z\" />\n <Path d=\"M24.3461 18.5709L21.7484 19.88C20.9998 20.2572 20.3887 20.8601 20.0012 21.6035L19.3383 22.8756\" />\n </InternalSVG>\n </Toggle>\n);\n\nexport const Tag = (): ReactElement => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 66 25\">\n <Path d=\"M57.0945 1.83334H4.04767C2.39087 1.83334 1.45252 3.73241 2.45908 5.0484L7.42509 11.5411C7.96869 12.2518 7.97408 13.2371 7.43828 13.9538L2.94078 19.9691C1.95471 21.2879 2.89585 23.1667 4.54256 23.1667H57.2344C57.9298 23.1667 58.5752 22.8055 58.939 22.2128L64.2505 13.5584C64.6483 12.9102 64.644 12.0925 64.2395 11.4484L58.7881 2.76955C58.4222 2.18696 57.7825 1.83334 57.0945 1.83334Z\" />\n </svg>\n);\n\nexport interface ReduceFittingProps extends DivProps, SVGBasedPrimitiveProps {}\n\nexport const ReduceFitting = ({\n className,\n orientation,\n color,\n scale,\n ...props\n}: ReduceFittingProps): ReactElement => (\n <Div\n orientation={orientation}\n className={CSS(CSS.B(\"reduce-fitting\"), className)}\n {...props}\n >\n <InternalSVG\n dimensions={{ width: 42, height: 43 }}\n color={color}\n orientation={orientation}\n scale={scale}\n >\n <Path d=\"M38.862 31.1414L4.86205 41.3414C2.93721 41.9189 1 40.4775 1 38.4679V21.8707V4.53209C1 2.5225 2.93721 1.08116 4.86204 1.65861L38.862 11.8586C40.131 12.2393 41 13.4073 41 14.7321V21.5V28.2679C41 29.5927 40.131 30.7607 38.862 31.1414Z\" />\n </InternalSVG>\n </Div>\n);\n\nexport interface PumpProps extends ToggleProps, SVGBasedPrimitiveProps {}\n\nexport const Pump = ({\n color,\n className,\n orientation = \"left\",\n scale,\n ...props\n}: PumpProps): ReactElement => (\n <Toggle\n {...props}\n className={CSS(CSS.B(\"pump\"), className)}\n orientation={orientation}\n >\n <HandleBoundary orientation={orientation}>\n <Handle location=\"left\" orientation={orientation} left={1} top={39} id=\"1\" />\n <Handle location=\"right\" orientation={orientation} left={95} top={3} id=\"2\" />\n </HandleBoundary>\n <InternalSVG\n dimensions={{ width: 68, height: 61 }}\n color={color}\n orientation={orientation}\n scale={scale}\n >\n <Circle cx=\"35\" cy=\"25\" r=\"23\" />\n <Path d=\"M50 41.5L56.7186 50.8314C57.6711 52.1544 56.7257 54 55.0955 54H14.9045C13.2743 54 12.3289 52.1544 13.2814 50.8314L20 41.5\" />\n <Line x1=\"35\" y1=\"2\" x2=\"65.0167\" y2=\"2\" />\n <Line x1=\"1\" y1=\"24\" x2=\"35\" y2=\"24\" />\n </InternalSVG>\n </Toggle>\n);\n\nexport interface BurstDiscProps extends DivProps, SVGBasedPrimitiveProps {}\n\nexport const BurstDisc = ({\n className,\n color,\n orientation = \"left\",\n scale,\n ...props\n}: BurstDiscProps): ReactElement => {\n const colorStr = Color.cssString(color);\n return (\n <Div {...props} className={CSS(CSS.B(\"symbol\"), className)}>\n <HandleBoundary orientation={orientation}>\n <Handle location=\"left\" orientation={orientation} left={2} top={50} id=\"1\" />\n </HandleBoundary>\n <InternalSVG\n dimensions={{ width: 40, height: 48 }}\n color={color}\n orientation={orientation}\n scale={scale}\n >\n <Path d=\"M24 24C24 35.1852 15.2546 44.4725 3.87626 45.8297C2.90571 45.9455 2 45.1407 2 44V4C2 2.85926 2.90571 2.0545 3.87626 2.17027C15.2546 3.52755 24 12.8148 24 24Z\" />\n <Path\n d=\"M37.9706 23.2076C38.4906 23.6079 38.4906 24.3921 37.9706 24.7924L33.86 27.9568C33.2024 28.463 32.25 27.9942 32.25 27.1644V20.8356C32.25 20.0058 33.2024 19.537 33.86 20.0432L37.9706 23.2076Z\"\n fill={colorStr}\n />\n <Path d=\"M33 24H3\" strokeLinecap=\"round\" />\n </InternalSVG>\n </Div>\n );\n};\n\nexport interface CapProps extends SVGBasedPrimitiveProps, DivProps {}\n\nexport const Cap = ({\n className,\n orientation = \"left\",\n color,\n scale,\n ...props\n}: CapProps): ReactElement => (\n <Div className={CSS(CSS.B(\"cap\"), className)} {...props}>\n <HandleBoundary orientation={orientation}>\n <Handle location=\"left\" orientation={orientation} left={0} top={50} id=\"1\" />\n </HandleBoundary>\n <InternalSVG\n color={color}\n dimensions={{ width: 26, height: 48 }}\n orientation={orientation}\n scale={scale}\n >\n <Path d=\"M24 24C24 35.1852 15.2546 44.4725 3.87626 45.8297C2.90571 45.9455 2 45.1407 2 44V4C2 2.85926 2.90571 2.0545 3.87626 2.17027C15.2546 3.52755 24 12.8148 24 24Z\" />\n </InternalSVG>\n </Div>\n);\n\nexport interface ManualValveProps extends SVGBasedPrimitiveProps, DivProps {}\n\nexport const ManualValve = ({\n className,\n orientation = \"left\",\n color,\n scale,\n ...props\n}: ManualValveProps): ReactElement => (\n <Div className={CSS(CSS.B(\"manual-valve\"), className)} {...props}>\n <HandleBoundary orientation={orientation}>\n <Handle location=\"left\" orientation={orientation} left={1} top={58} id=\"1\" />\n <Handle location=\"right\" orientation={orientation} left={99} top={58} id=\"2\" />\n </HandleBoundary>\n <InternalSVG\n dimensions={{ width: 87, height: 48 }}\n color={color}\n orientation={orientation}\n scale={scale}\n >\n <Line x1=\"43.5\" y1=\"27\" x2=\"43.5\" y2=\"1\" />\n <Path d=\"M19.64 2L66.68 2\" strokeLinecap=\"round\" />\n <Path d=\"M43.5 27L6.35453 8.20349C4.35901 7.19372 2 8.64384 2 10.8803V43.1197C2 45.3562 4.35901 46.8063 6.35453 45.7965L43.5 27ZM43.5 27L80.6455 8.20349C82.641 7.19372 85 8.64384 85 10.8803V43.1197C85 45.3562 82.641 46.8063 80.6455 45.7965L43.5 27Z\" />\n </InternalSVG>\n </Div>\n);\n\nexport interface FilterProps extends SVGBasedPrimitiveProps, DivProps {}\n\nexport const Filter = ({\n className,\n orientation = \"left\",\n color,\n scale,\n ...props\n}: FilterProps): ReactElement => (\n <Div className={CSS(CSS.B(\"filter\"), className)} {...props}>\n <HandleBoundary orientation={orientation}>\n <Handle location=\"left\" orientation={orientation} left={2} top={50} id=\"1\" />\n <Handle location=\"right\" orientation={orientation} left={98} top={50} id=\"2\" />\n </HandleBoundary>\n <InternalSVG\n dimensions={{ width: 52, height: 34 }}\n orientation={orientation}\n color={color}\n scale={scale}\n >\n <Path d=\"M6 17L24.8 2.9C25.5111 2.36667 26.4889 2.36667 27.2 2.9L46 17M6 17L24.8 31.1C25.5111 31.6333 26.4889 31.6333 27.2 31.1L46 17M6 17H1M46 17H51\" />\n </InternalSVG>\n </Div>\n);\n\ntype DetailedBorderRadius = Record<location.CornerXYString, xy.XY>;\ntype BorderRadius =\n | number\n | Record<direction.Direction, number>\n | Record<location.CornerXYString, number>\n | DetailedBorderRadius;\n\nexport interface TankProps extends DivProps {\n dimensions?: dimensions.Dimensions;\n borderRadius?: BorderRadius;\n color?: Color.Crude;\n}\n\nconst parseBorderRadius = (radius: BorderRadius): DetailedBorderRadius => {\n if (typeof radius === \"number\")\n return {\n topLeft: xy.construct(radius),\n topRight: xy.construct(radius),\n bottomLeft: xy.construct(radius),\n bottomRight: xy.construct(radius),\n };\n if (\"x\" in radius)\n return {\n topLeft: radius,\n topRight: radius,\n bottomLeft: radius,\n bottomRight: radius,\n };\n if (typeof radius.bottomLeft === \"number\")\n return {\n topLeft: xy.construct(radius.topLeft),\n topRight: xy.construct(radius.topRight),\n bottomLeft: xy.construct(radius.bottomLeft),\n bottomRight: xy.construct(radius.bottomRight),\n };\n\n return radius as DetailedBorderRadius;\n};\n\nconst cssBorderRadius = (radius: DetailedBorderRadius): string => {\n const { topLeft, topRight, bottomLeft, bottomRight } = radius;\n return `${topLeft.x}% ${topRight.x}% ${bottomRight.x}% ${bottomLeft.x}% / ${topLeft.y}% ${topRight.y}% ${bottomRight.y}% ${bottomLeft.y}%`;\n};\n\nconst DEFAULT_DIMENSIONS = { width: 40, height: 80 };\nconst DEFAULT_BORDER_RADIUS = { x: 50, y: 10 };\n\nexport const Tank = ({\n className,\n dimensions = DEFAULT_DIMENSIONS,\n borderRadius = DEFAULT_BORDER_RADIUS,\n color,\n ...props\n}: TankProps): ReactElement => {\n const detailedRadius = parseBorderRadius(borderRadius);\n const t = Theming.use();\n return (\n <Div\n className={CSS(className, CSS.B(\"tank\"))}\n style={{\n ...dimensions,\n borderRadius: cssBorderRadius(detailedRadius),\n borderColor: Color.cssString(color ?? t.colors.gray.l9),\n }}\n {...props}\n >\n <HandleBoundary>\n <Handle location=\"top\" orientation=\"left\" left={50} top={0} id=\"1\" />\n <Handle\n location=\"top\"\n orientation=\"left\"\n left={-0.5}\n top={detailedRadius.topLeft.y - 1}\n id=\"2\"\n />\n <Handle\n location=\"top\"\n orientation=\"left\"\n left={101}\n top={detailedRadius.topRight.y - 1}\n id=\"3\"\n />\n <Handle location=\"bottom\" orientation=\"left\" left={50} top={100} id=\"4\" />\n <Handle\n location=\"bottom\"\n orientation=\"left\"\n left={-0.5}\n top={100 - detailedRadius.bottomLeft.y + 1}\n id=\"5\"\n />\n <Handle\n location=\"bottom\"\n orientation=\"left\"\n left={101}\n top={100 - detailedRadius.bottomRight.y + 1}\n id=\"6\"\n />\n <Handle location=\"left\" orientation=\"left\" left={-0.5} top={50} id=\"7\" />\n <Handle location=\"right\" orientation=\"left\" left={101} top={50} id=\"8\" />\n </HandleBoundary>\n </Div>\n );\n};\n\nexport interface RegulatorProps extends DivProps, SVGBasedPrimitiveProps {}\n\nexport const Regulator = ({\n className,\n orientation = \"left\",\n color,\n scale,\n ...props\n}: RegulatorProps): ReactElement => (\n <Div className={CSS(className, CSS.B(\"regulator\"))} {...props}>\n <HandleBoundary orientation={orientation}>\n <Handle location=\"left\" orientation={orientation} left={0} top={66} id=\"1\" />\n <Handle location=\"right\" orientation={orientation} left={100} top={66} id=\"2\" />\n </HandleBoundary>\n <InternalSVG\n dimensions={{ width: 84, height: 58 }}\n orientation={orientation}\n color={color}\n scale={scale}\n >\n <Path d=\"M42 36.5L5.41845 16.8709C3.41989 15.7985 1 17.2463 1 19.5144V53.4856C1 55.7537 3.4199 57.2015 5.41846 56.1291L42 36.5ZM42 36.5L78.5815 16.8709C80.5801 15.7985 83 17.2463 83 19.5144V53.4856C83 55.7537 80.5801 57.2015 78.5815 56.1291L42 36.5Z\" />\n <Path d=\"M40 1.5H27.1522C24.8526 1.5 23.4081 3.9809 24.5432 5.98082L41.1303 35.2058C41.6373 36.099 43 35.7392 43 34.7122V4.5C43 2.84315 41.6569 1.5 40 1.5Z\" />\n </InternalSVG>\n </Div>\n);\n\nexport interface OrificeProps extends DivProps, SVGBasedPrimitiveProps {}\n\nexport const Orifice = ({\n className,\n orientation = \"left\",\n scale,\n color,\n ...props\n}: OrificeProps): ReactElement => (\n <Div className={CSS(CSS.B(\"orifice\"), className)} {...props}>\n <HandleBoundary orientation={orientation}>\n <Handle location=\"left\" orientation={orientation} left={0} top={50} id=\"1\" />\n <Handle location=\"right\" orientation={orientation} left={100} top={50} id=\"2\" />\n </HandleBoundary>\n <InternalSVG\n dimensions={{ width: 70, height: 34 }}\n orientation={orientation}\n color={color}\n scale={scale}\n >\n <Path d=\"M2 2.5C27.451 21.3469 60.0915 12.0132 68 2.5\" strokeLinecap=\"round\" />\n <Path d=\"M2 32.5C27.451 13.6531 60.0915 22.9868 68 32.5\" strokeLinecap=\"round\" />\n </InternalSVG>\n </Div>\n);\n\nexport interface NeedleValveProps extends DivProps, SVGBasedPrimitiveProps {}\n\nexport const NeedleValve = ({\n className,\n orientation = \"left\",\n color,\n scale,\n ...props\n}: NeedleValveProps): ReactElement => (\n <Div className={CSS(CSS.B(\"needle-valve\"), className)} {...props}>\n <HandleBoundary orientation={orientation}>\n <Handle location=\"left\" orientation={orientation} left={1} top={50} id=\"1\" />\n <Handle location=\"right\" orientation={orientation} left={99} top={50} id=\"2\" />\n </HandleBoundary>\n <InternalSVG\n dimensions={{ width: 87, height: 42 }}\n orientation={orientation}\n color={color}\n scale={scale}\n >\n <Path\n d=\"M43.0152 21.5391L38.237 2.62245C38.1573 2.30658 38.396 2 38.7218 2L48.2782 2C48.604 2 48.8427 2.30658 48.763 2.62245L43.9848 21.5391C43.8576 22.0425 43.1424 22.0425 43.0152 21.5391Z\"\n fill={Color.cssString(color)}\n />\n <Path d=\"M43.5 21.5L6.35453 2.70349C4.35901 1.69372 2 3.14384 2 5.38029V37.6197C2 39.8562 4.35901 41.3063 6.35453 40.2965L43.5 21.5ZM43.5 21.5L80.6455 2.70349C82.641 1.69372 85 3.14384 85 5.3803V37.6197C85 39.8562 82.641 41.3063 80.6455 40.2965L43.5 21.5Z\" />\n </InternalSVG>\n </Div>\n);\n\nexport interface AngledReliefValveProps extends DivProps, SVGBasedPrimitiveProps {}\n\nexport const AngledReliefValve = ({\n className,\n orientation = \"left\",\n color,\n scale,\n ...props\n}: AngledReliefValveProps): ReactElement => (\n <Div\n orientation={orientation}\n className={CSS(CSS.B(\"angled-relief-valve\"), className)}\n {...props}\n >\n <HandleBoundary>\n <Handle location=\"bottom\" orientation={orientation} left={33} top={100} id=\"1\" />\n <Handle location=\"right\" orientation={orientation} left={100} top={45} id=\"2\" />\n </HandleBoundary>\n <InternalSVG\n dimensions={{ width: 64, height: 79 }}\n orientation={orientation}\n color={color}\n scale={scale}\n >\n <Path d=\"M20.75 2L20.75 38\" strokeLinecap=\"round\" />\n <Path d=\"M9.05106 14.0802L32.4273 4.29611\" strokeLinecap=\"round\" />\n <Path d=\"M9.05106 20.0802L32.4273 10.2961\" strokeLinecap=\"round\" />\n <Path d=\"M9.05106 26.0802L32.4273 16.2961\" strokeLinecap=\"round\" />\n <Path d=\"M22.3611 35.1077C21.6298 35.4778 21.6298 36.5222 22.3611 36.8923L57.7433 54.7965C59.7388 55.8063 62.0978 54.3562 62.0978 52.1197L62.0978 19.8803C62.0978 17.6438 59.7388 16.1937 57.7433 17.2035L22.3611 35.1077Z\" />\n <Path d=\"M21.8923 37.3611C21.5222 36.6298 20.4778 36.6298 20.1077 37.3611L2.20349 72.7433C1.19372 74.7388 2.64384 77.0978 4.8803 77.0978H37.1197C39.3562 77.0978 40.8063 74.7388 39.7965 72.7433L21.8923 37.3611Z\" />\n <Path d=\"M24.3461 33.5709L21.7484 34.88C20.9998 35.2572 20.3887 35.8601 20.0012 36.6035L19.3383 37.8756\" />\n </InternalSVG>\n </Div>\n);\n\nexport interface ValueProps extends DivProps {\n dimensions?: dimensions.Dimensions;\n color?: Color.Crude;\n}\n\nexport const Value = ({\n className,\n color,\n dimensions,\n orientation,\n ...props\n}: ValueProps): ReactElement => (\n <Div\n className={CSS(CSS.B(\"value\"), className)}\n {...props}\n style={{\n borderColor: Color.cssString(color),\n ...dimensions,\n }}\n >\n <HandleBoundary orientation={orientation}>\n <Handle location=\"left\" orientation=\"left\" left={-2} top={50} id=\"1\" />\n <Handle location=\"right\" orientation=\"left\" left={102} top={50} id=\"2\" />\n <Handle location=\"top\" orientation=\"left\" left={50} top={-2} id=\"3\" />\n <Handle location=\"bottom\" orientation=\"left\" left={50} top={102} id=\"4\" />\n </HandleBoundary>\n {props.children}\n </Div>\n);\n\nexport interface SwitchProps extends ToggleProps, DivProps {}\n\nexport const Switch = ({\n triggered,\n enabled = false,\n color,\n onClick,\n orientation = \"left\",\n ...props\n}: SwitchProps): ReactElement => {\n return (\n <Div orientation={orientation}>\n <Input.Switch value={enabled} onClick={onClick} onChange={() => {}} {...props} />\n <HandleBoundary orientation={orientation}>\n <Handle location=\"left\" orientation={orientation} left={0} top={50} id=\"1\" />\n <Handle location=\"right\" orientation={orientation} left={100} top={50} id=\"2\" />\n </HandleBoundary>\n </Div>\n );\n};\n\nexport interface ButtonProps extends DivProps {\n label?: string;\n}\n\nexport const Button = ({\n onClick,\n orientation = \"left\",\n label = \"\",\n}: ButtonProps): ReactElement => {\n return (\n <Div orientation={orientation}>\n <CoreButton.Button onClick={onClick}>{label}</CoreButton.Button>\n <HandleBoundary orientation={orientation}>\n <Handle location=\"left\" orientation={orientation} left={0} top={50} id=\"1\" />\n <Handle location=\"right\" orientation={orientation} left={100} top={50} id=\"2\" />\n <Handle location=\"top\" orientation={orientation} left={50} top={0} id=\"3\" />\n <Handle\n location=\"bottom\"\n orientation={orientation}\n left={50}\n top={100}\n id=\"4\"\n />\n </HandleBoundary>\n </Div>\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 { useCallback, useEffect } from \"react\";\n\nimport { type z } from \"zod\";\n\nimport { Aether } from \"@/aether\";\nimport { useMemoDeepEqualProps } from \"@/memo\";\nimport { toggle } from \"@/vis/toggle/aether\";\n\nexport interface UseProps\n extends Pick<z.input<typeof toggle.toggleStateZ>, \"source\" | \"sink\"> {\n aetherKey: string;\n}\n\nexport interface UseReturn\n extends Pick<z.output<typeof toggle.toggleStateZ>, \"triggered\" | \"enabled\"> {\n toggle: () => void;\n}\n\nexport const use = ({ aetherKey, source, sink }: UseProps): UseReturn => {\n const memoProps = useMemoDeepEqualProps({ source, sink });\n const [, { triggered, enabled }, setState] = Aether.use({\n aetherKey,\n type: toggle.Toggle.TYPE,\n schema: toggle.toggleStateZ,\n initialState: {\n triggered: false,\n enabled: false,\n ...memoProps,\n },\n });\n\n useEffect(() => {\n setState((state) => ({ ...state, ...memoProps }));\n }, [memoProps, setState]);\n\n const handleToggle = useCallback(\n () =>\n setState((state) => ({\n ...state,\n triggered: !state.triggered,\n })),\n [setState],\n );\n\n return {\n toggle: handleToggle,\n triggered,\n enabled,\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 { useState, type ReactElement } from \"react\";\n\nimport { box, type xy, location, type UnknownRecord, direction } from \"@synnaxlabs/x\";\n\nimport { Aether } from \"@/aether\";\nimport { Align } from \"@/align\";\nimport { type Color } from \"@/color\";\nimport { CSS } from \"@/css\";\nimport { useResize } from \"@/hooks\";\nimport { Control } from \"@/telem/control\";\nimport { Text } from \"@/text\";\nimport { Theming } from \"@/theming\";\nimport { Button as CoreButton } from \"@/vis/button\";\nimport { useInitialViewport } from \"@/vis/diagram/aether/Diagram\";\nimport { Labeled, type LabelExtensionProps } from \"@/vis/pid/Labeled\";\nimport { Primitives } from \"@/vis/pid/primitives\";\nimport { Toggle } from \"@/vis/toggle\";\nimport { Value as CoreValue } from \"@/vis/value\";\n\nimport \"@/vis/pid/Symbols.css\";\n\nexport interface ControlStateProps extends Omit<Align.SpaceProps, \"direction\"> {\n showChip?: boolean;\n showIndicator?: boolean;\n chip?: Control.ChipProps;\n indicator?: Control.IndicatorProps;\n orientation?: location.Outer;\n}\n\nconst swapXLocation = (l: location.Outer): location.Outer =>\n direction.construct(l) === \"x\" ? (location.swap(l) as location.Outer) : l;\nconst swapYLocation = (l: location.Outer): location.Outer =>\n direction.construct(l) === \"y\" ? (location.swap(l) as location.Outer) : l;\n\nexport const ControlState = ({\n showChip = true,\n showIndicator = true,\n indicator,\n orientation = \"left\",\n chip,\n children,\n ...props\n}: ControlStateProps): ReactElement => (\n <Align.Space\n direction={location.rotate90(orientation)}\n align=\"center\"\n justify=\"center\"\n empty\n {...props}\n >\n <Align.Space\n direction={direction.construct(orientation)}\n align=\"center\"\n className={CSS(CSS.B(\"control-state\"))}\n size=\"small\"\n >\n {showChip && <Control.Chip size=\"small\" {...chip} />}\n {showIndicator && <Control.Indicator {...indicator} />}\n </Align.Space>\n {children}\n </Align.Space>\n);\n\nexport type SymbolProps<P extends object = UnknownRecord> = P & {\n symbolKey: string;\n position: xy.XY;\n selected: boolean;\n onChange: (value: P) => void;\n};\n\nexport interface ThreeWayValveProps\n extends Primitives.ThreeWayValveProps,\n Omit<Toggle.UseProps, \"aetherKey\"> {\n label?: LabelExtensionProps;\n control?: ControlStateProps;\n}\n\nexport const ThreeWayValve = Aether.wrap<SymbolProps<ThreeWayValveProps>>(\n \"ThreeWayValve\",\n ({\n aetherKey,\n label,\n onChange,\n control,\n source,\n sink,\n orientation = \"left\",\n color,\n }): ReactElement => {\n const { enabled, triggered, toggle } = Toggle.use({\n aetherKey,\n source,\n sink,\n });\n return (\n <Labeled {...label} onChange={onChange}>\n <ControlState {...control} orientation={swapXLocation(orientation)}>\n <Primitives.ThreeWayValve\n enabled={enabled}\n triggered={triggered}\n onClick={toggle}\n orientation={orientation}\n color={color}\n />\n </ControlState>\n </Labeled>\n );\n },\n);\n\nexport const ThreeWayValvePreview = (props: ThreeWayValveProps): ReactElement => (\n <Primitives.ThreeWayValve {...props} />\n);\n\nexport interface ValveProps\n extends Primitives.ValveProps,\n Omit<Toggle.UseProps, \"aetherKey\"> {\n label?: LabelExtensionProps;\n control?: ControlStateProps;\n}\n\nexport const Valve = Aether.wrap<SymbolProps<ValveProps>>(\n \"Valve\",\n ({\n control,\n aetherKey,\n label,\n onChange,\n source,\n sink,\n orientation,\n color,\n }): ReactElement => {\n const { enabled, triggered, toggle } = Toggle.use({ aetherKey, source, sink });\n return (\n <Labeled {...label} onChange={onChange}>\n <ControlState {...control} orientation={orientation}>\n <Primitives.Valve\n enabled={enabled}\n triggered={triggered}\n onClick={toggle}\n orientation={orientation}\n color={color}\n />\n </ControlState>\n </Labeled>\n );\n },\n);\n\nexport const ValvePreview = (props: ValveProps): ReactElement => (\n <Primitives.Valve {...props} />\n);\n\nexport interface SolenoidValveProps\n extends Primitives.SolenoidValveProps,\n Omit<Toggle.UseProps, \"aetherKey\"> {\n label?: LabelExtensionProps;\n control?: ControlStateProps;\n}\n\nexport const SolenoidValve = Aether.wrap<SymbolProps<SolenoidValveProps>>(\n \"SolenoidValve\",\n ({\n aetherKey,\n label,\n onChange,\n orientation = \"left\",\n normallyOpen,\n color,\n source,\n sink,\n control,\n }): ReactElement => {\n const { enabled, triggered, toggle } = Toggle.use({ aetherKey, source, sink });\n return (\n <Labeled {...label} onChange={onChange}>\n <ControlState {...control} orientation={swapYLocation(orientation)}>\n <Primitives.SolenoidValve\n enabled={enabled}\n triggered={triggered}\n onClick={toggle}\n orientation={orientation}\n color={color}\n normallyOpen={normallyOpen}\n />\n </ControlState>\n </Labeled>\n );\n },\n);\n\nexport const SolenoidValvePreview = (props: SolenoidValveProps): ReactElement => (\n <Primitives.SolenoidValve {...props} />\n);\n\nexport interface FourWayValveProps\n extends Primitives.FourWayValveProps,\n Omit<Toggle.UseProps, \"aetherKey\"> {\n label?: LabelExtensionProps;\n control?: ControlStateProps;\n}\n\nexport const FourWayValve = Aether.wrap<SymbolProps<FourWayValveProps>>(\n \"FourWayValve\",\n ({ aetherKey, control, label, onChange, orientation, color }): ReactElement => {\n const { enabled, triggered, toggle } = Toggle.use({ aetherKey });\n return (\n <Labeled {...label} onChange={onChange}>\n <ControlState {...control} orientation={orientation}>\n <Primitives.FourWayValve\n enabled={enabled}\n triggered={triggered}\n onClick={toggle}\n orientation={orientation}\n color={color}\n />\n </ControlState>\n </Labeled>\n );\n },\n);\n\nexport const FourWayValvePreview = (props: FourWayValveProps): ReactElement => (\n <Primitives.FourWayValve {...props} />\n);\n\nexport interface AngledValveProps\n extends Primitives.AngledValveProps,\n Omit<Toggle.UseProps, \"aetherKey\"> {\n label?: LabelExtensionProps;\n control?: ControlStateProps;\n}\n\nexport const AngledValve = Aether.wrap<SymbolProps<AngledValveProps>>(\n \"AngleValve\",\n ({\n aetherKey,\n label,\n control,\n onChange,\n orientation,\n color,\n ...props\n }): ReactElement => {\n const { enabled, triggered, toggle } = Toggle.use({ aetherKey });\n return (\n <Labeled {...label} onChange={onChange}>\n <ControlState {...control} orientation={swapXLocation(orientation)}>\n <Primitives.AngledValve\n enabled={enabled}\n triggered={triggered}\n onClick={toggle}\n orientation={orientation}\n color={color}\n />\n </ControlState>\n </Labeled>\n );\n },\n);\n\nexport const AngledValvePreview = (props: AngledValveProps): ReactElement => (\n <Primitives.AngledValve {...props} />\n);\n\nexport interface PumpProps\n extends Primitives.PumpProps,\n Omit<Toggle.UseProps, \"aetherKey\"> {\n label?: LabelExtensionProps;\n control?: ControlStateProps;\n}\n\nexport const Pump = Aether.wrap<SymbolProps<PumpProps>>(\n \"Pump\",\n ({ aetherKey, label, control, onChange, orientation, color }): ReactElement => {\n const { enabled, triggered, toggle } = Toggle.use({ aetherKey });\n return (\n <Labeled {...label} onChange={onChange}>\n <ControlState {...control} orientation={orientation}>\n <Primitives.Pump\n enabled={enabled}\n triggered={triggered}\n onClick={toggle}\n orientation={orientation}\n color={color}\n />\n </ControlState>\n </Labeled>\n );\n },\n);\n\nexport const PumpPreview = (props: PumpProps): ReactElement => (\n <Primitives.Pump {...props} />\n);\n\nexport interface TankProps extends Primitives.TankProps {\n label?: LabelExtensionProps;\n}\n\nexport const Tank = Aether.wrap<SymbolProps<TankProps>>(\n \"Tank\",\n ({ label, onChange, orientation, color, dimensions, borderRadius }): ReactElement => {\n return (\n <Labeled {...label} onChange={onChange}>\n <Primitives.Tank\n orientation={orientation}\n color={color}\n dimensions={dimensions}\n borderRadius={borderRadius}\n />\n </Labeled>\n );\n },\n);\n\nexport const TankPreview = (props: TankProps): ReactElement => (\n <Primitives.Tank {...props} dimensions={{ width: 25, height: 50 }} />\n);\n\nexport interface ReliefValveProps extends Primitives.ReliefValveProps {\n label?: LabelExtensionProps;\n}\n\nexport const ReliefValve = ({\n label,\n onChange,\n orientation,\n color,\n}: SymbolProps<ReliefValveProps>): ReactElement => {\n return (\n <Labeled {...label} onChange={onChange}>\n <Primitives.ReliefValve orientation={orientation} color={color} />\n </Labeled>\n );\n};\n\nexport const ReliefValvePreview = (props: ReliefValveProps): ReactElement => (\n <Primitives.ReliefValve {...props} />\n);\n\nexport interface RegulatorProps extends Primitives.RegulatorProps {\n label?: LabelExtensionProps;\n}\n\nexport const Regulator = ({\n label,\n onChange,\n orientation,\n color,\n}: SymbolProps<RegulatorProps>): ReactElement => {\n return (\n <Labeled {...label} onChange={onChange}>\n <Primitives.Regulator orientation={orientation} color={color} />\n </Labeled>\n );\n};\n\nexport const RegulatorPreview = (props: RegulatorProps): ReactElement => (\n <Primitives.Regulator {...props} />\n);\n\nexport interface BurstDiscProps extends Primitives.BurstDiscProps {\n label?: LabelExtensionProps;\n}\n\nexport const BurstDisc = ({\n label,\n onChange,\n orientation,\n color,\n}: SymbolProps<BurstDiscProps>): ReactElement => {\n return (\n <Labeled {...label} onChange={onChange}>\n <Primitives.BurstDisc orientation={orientation} color={color} />\n </Labeled>\n );\n};\n\nexport const BurstDiscPreview = (props: BurstDiscProps): ReactElement => (\n <Primitives.BurstDisc {...props} />\n);\n\nexport interface CapProps extends Primitives.CapProps {\n label?: LabelExtensionProps;\n}\n\nexport const Cap = ({\n label,\n onChange,\n orientation,\n color,\n}: SymbolProps<CapProps>): ReactElement => {\n return (\n <Labeled {...label} onChange={onChange}>\n <Primitives.Cap orientation={orientation} color={color} />\n </Labeled>\n );\n};\n\nexport const CapPreview = (props: CapProps): ReactElement => (\n <Primitives.Cap {...props} />\n);\n\nexport interface ManualValveProps extends Primitives.ManualValveProps {\n label?: LabelExtensionProps;\n}\n\nexport const ManualValve = ({\n label,\n onChange,\n orientation,\n color,\n}: SymbolProps<ManualValveProps>): ReactElement => {\n return (\n <Labeled {...label} onChange={onChange}>\n <Primitives.ManualValve orientation={orientation} color={color} />\n </Labeled>\n );\n};\n\nexport const ManualValvePreview = (props: ManualValveProps): ReactElement => (\n <Primitives.ManualValve {...props} />\n);\n\nexport interface FilterProps extends Primitives.FilterProps {\n label?: LabelExtensionProps;\n}\n\nexport const Filter = ({\n label,\n onChange,\n orientation,\n color,\n}: SymbolProps<FilterProps>): ReactElement => {\n return (\n <Labeled {...label} onChange={onChange}>\n <Primitives.Filter orientation={orientation} color={color} />\n </Labeled>\n );\n};\n\nexport const FilterPreview = (props: FilterProps): ReactElement => (\n <Primitives.Filter {...props} />\n);\n\nexport interface NeedleValveProps extends Primitives.NeedleValveProps {\n label?: LabelExtensionProps;\n}\n\nexport const NeedleValve = ({\n label,\n onChange,\n orientation,\n color,\n}: SymbolProps<NeedleValveProps>): ReactElement => {\n return (\n <Labeled {...label} onChange={onChange}>\n <Primitives.NeedleValve orientation={orientation} color={color} />\n </Labeled>\n );\n};\n\nexport const NeedleValvePreview = (props: NeedleValveProps): ReactElement => (\n <Primitives.NeedleValve {...props} />\n);\n\nexport interface CheckValveProps extends Primitives.CheckValveProps {\n label?: LabelExtensionProps;\n}\n\nexport const CheckValve = ({\n label,\n onChange,\n orientation,\n color,\n}: SymbolProps<CheckValveProps>): ReactElement => {\n return (\n <Labeled {...label} onChange={onChange}>\n <Primitives.CheckValve orientation={orientation} color={color} />\n </Labeled>\n );\n};\n\nexport const CheckValvePreview = (props: CheckValveProps): ReactElement => (\n <Primitives.CheckValve {...props} />\n);\n\nexport interface OrificeProps extends Primitives.OrificeProps {\n label?: LabelExtensionProps;\n}\n\nexport const Orifice = ({\n label,\n onChange,\n orientation,\n color,\n}: SymbolProps<OrificeProps>): ReactElement => {\n return (\n <Labeled {...label} onChange={onChange}>\n <Primitives.Orifice orientation={orientation} color={color} />\n </Labeled>\n );\n};\n\nexport const OrificePreview = (props: OrificeProps): ReactElement => (\n <Primitives.Orifice {...props} />\n);\n\nexport interface AngledReliefValveProps extends Primitives.AngledReliefValveProps {\n label?: LabelExtensionProps;\n}\n\nexport const AngledReliefValve = ({\n label,\n onChange,\n orientation,\n color,\n}: SymbolProps<AngledReliefValveProps>): ReactElement => {\n return (\n <Labeled {...label} onChange={onChange}>\n <Primitives.AngledReliefValve orientation={orientation} color={color} />\n </Labeled>\n );\n};\n\nexport const AngledReliefValvePreview = (\n props: Primitives.AngledReliefValveProps,\n): ReactElement => <Primitives.AngledReliefValve {...props} />;\n\nexport interface ValueProps\n extends Omit<CoreValue.UseProps, \"box\" | \"aetherKey\">,\n Primitives.ValueProps {\n position?: xy.XY;\n label?: LabelExtensionProps;\n color?: Color.Crude;\n textColor?: Color.Crude;\n}\n\nexport const Value = Aether.wrap<SymbolProps<ValueProps>>(\n \"Value\",\n ({\n aetherKey,\n label,\n level = \"p\",\n position,\n className,\n children,\n textColor,\n color,\n precision,\n width,\n telem,\n onChange,\n }): ReactElement => {\n const font = Theming.useTypography(level);\n const [box_, setBox] = useState<box.Box>(box.ZERO);\n\n const valueBoxHeight = (font.lineHeight + 2) * font.baseSize + 2;\n const resizeRef = useResize(setBox, {});\n\n const zoom = useInitialViewport().zoom;\n\n const adjustedBox = adjustBox(\n label?.orientation ?? \"top\",\n zoom,\n box_,\n valueBoxHeight,\n position,\n );\n\n CoreValue.use({\n aetherKey,\n color: textColor,\n level,\n box: adjustedBox,\n telem,\n precision,\n width,\n });\n\n return (\n <Labeled\n className={CSS(className, CSS.B(\"value-labeled\"))}\n align=\"center\"\n ref={resizeRef}\n onChange={onChange}\n {...label}\n >\n <Primitives.Value\n color={color}\n dimensions={{\n height: valueBoxHeight,\n width: 100,\n }}\n >\n {children}\n </Primitives.Value>\n </Labeled>\n );\n },\n);\n\nconst adjustBox = (\n labelOrientation: location.Outer,\n zoom: number,\n b: box.Box,\n valueBoxHeight: number,\n position?: xy.XY,\n): box.Box => {\n if (labelOrientation === \"left\") {\n return box.construct(\n (position?.x ?? box.left(b)) + box.width(b) / zoom - 100,\n position?.y ?? box.top(b),\n 100,\n valueBoxHeight,\n );\n }\n if (labelOrientation === \"right\") {\n return box.construct(\n position?.x ?? box.left(b),\n position?.y ?? box.top(b),\n 100,\n valueBoxHeight,\n );\n }\n if (labelOrientation === \"bottom\") {\n return box.construct(\n position?.x ?? box.left(b),\n position?.y ?? box.top(b),\n box.width(b) / zoom,\n valueBoxHeight,\n );\n }\n\n return box.construct(\n position?.x ?? box.left(b),\n (position?.y ?? box.top(b)) + box.height(b) / zoom - valueBoxHeight,\n box.width(b) / zoom,\n valueBoxHeight,\n );\n};\n\nexport const ValuePreview = ({ color }: ValueProps): ReactElement => {\n return (\n <Primitives.Value\n color={color}\n dimensions={{\n width: 60,\n height: 25,\n }}\n >\n <Text.Text level=\"small\">500 psi</Text.Text>\n </Primitives.Value>\n );\n};\n\nexport interface SwitchProps\n extends Primitives.SwitchProps,\n Omit<Toggle.UseProps, \"aetherKey\"> {\n label?: LabelExtensionProps;\n control?: ControlStateProps;\n}\n\nexport const Switch = Aether.wrap<SymbolProps<SwitchProps>>(\n \"Switch\",\n ({\n aetherKey,\n label,\n control,\n onChange,\n orientation,\n color,\n source,\n sink,\n }): ReactElement => {\n const { enabled, triggered, toggle } = Toggle.use({ aetherKey, source, sink });\n return (\n <Labeled {...label} onChange={onChange}>\n <ControlState {...control} orientation={orientation}>\n <Primitives.Switch\n enabled={enabled}\n triggered={triggered}\n onClick={toggle}\n orientation={orientation}\n color={color}\n />\n </ControlState>\n </Labeled>\n );\n },\n);\n\nexport const SwitchPreview = (props: SwitchProps): ReactElement => (\n <Primitives.Switch {...props} />\n);\n\nexport interface ButtonProps\n extends Omit<Primitives.ButtonProps, \"label\">,\n Omit<CoreButton.UseProps, \"aetherKey\"> {\n label?: LabelExtensionProps;\n control?: ControlStateProps;\n}\n\nexport const Button = Aether.wrap<SymbolProps<ButtonProps>>(\n \"Button\",\n ({ aetherKey, label, orientation, sink, control }) => {\n const { click } = CoreButton.use({ aetherKey, sink });\n return (\n <ControlState {...control} className={CSS.B(\"symbol\")} orientation={orientation}>\n <Primitives.Button label={label?.label} onClick={click} />\n </ControlState>\n );\n },\n);\n\nexport const ButtonPreview = ({ label: _, ...props }: SwitchProps): ReactElement => (\n <Primitives.Button label=\"Button\" {...props} />\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 FC } from \"react\";\n\nimport { z } from \"zod\";\n\nimport { telem } from \"@/telem/aether\";\nimport { control } from \"@/telem/control/aether\";\nimport { type Theming } from \"@/theming\";\nimport {\n CommonToggleForm,\n type SymbolFormProps,\n SolenoidValveForm,\n TankForm,\n CommonNonToggleForm,\n ValueForm,\n ButtonForm,\n} from \"@/vis/pid/Forms\";\nimport {\n type ThreeWayValveProps,\n type SymbolProps,\n ThreeWayValve,\n ThreeWayValvePreview,\n type ValveProps,\n Valve,\n ValvePreview,\n type SolenoidValveProps,\n SolenoidValve,\n SolenoidValvePreview,\n FourWayValve,\n FourWayValvePreview,\n type AngledValveProps,\n type PumpProps,\n AngledValve,\n Pump,\n Tank,\n ReliefValve,\n ReliefValvePreview,\n TankPreview,\n type ReliefValveProps,\n type TankProps,\n type RegulatorProps,\n RegulatorPreview,\n Regulator,\n BurstDiscPreview,\n Cap,\n CapPreview,\n ManualValvePreview,\n type FilterProps,\n Filter,\n FilterPreview,\n type NeedleValveProps,\n NeedleValvePreview,\n type CheckValveProps,\n CheckValve,\n CheckValvePreview,\n BurstDisc,\n type ManualValveProps,\n ManualValve,\n NeedleValve,\n type OrificeProps,\n Orifice,\n OrificePreview,\n PumpPreview,\n AngledReliefValve,\n AngledValvePreview,\n AngledReliefValvePreview,\n type ValueProps,\n Value,\n ValuePreview,\n type ButtonProps,\n Button,\n ButtonPreview,\n Switch,\n SwitchPreview,\n type SwitchProps,\n} from \"@/vis/pid/Symbols\";\n\nexport interface Spec<P extends object> {\n name: string;\n variant: string;\n Form: FC<SymbolFormProps<P>>;\n Symbol: FC<SymbolProps<P>>;\n defaultProps: (t: Theming.Theme) => P;\n Preview: FC<SymbolProps<P>>;\n}\n\nconst VARIANTS = [\n \"threeWayValve\",\n \"valve\",\n \"solenoidValve\",\n \"fourWayValve\",\n \"angledValve\",\n \"pump\",\n \"tank\",\n \"reliefValve\",\n \"regulator\",\n \"burstDisc\",\n \"cap\",\n \"manualValve\",\n \"filter\",\n \"needleValve\",\n \"checkValve\",\n \"orifice\",\n \"angledReliefValve\",\n \"value\",\n \"button\",\n \"switch\",\n] as const;\n\nconst typeZ = z.enum(VARIANTS);\nexport type Variant = z.infer<typeof typeZ>;\n\nconst ZERO_TOGGLE_PROPS = {\n source: telem.sourcePipeline(\"boolean\", {\n connections: [\n {\n from: \"valueStream\",\n to: \"threshold\",\n },\n ],\n segments: {\n valueStream: telem.streamChannelValue({ channel: 0 }),\n threshold: telem.withinBounds({ trueBound: { lower: 0.9, upper: 1.1 } }),\n },\n outlet: \"threshold\",\n }),\n sink: telem.sinkPipeline(\"boolean\", {\n connections: [\n {\n from: \"setpoint\",\n to: \"setter\",\n },\n ],\n segments: {\n setter: control.setChannelValue({ channel: 0 }),\n setpoint: telem.setpoint({ truthy: 1, falsy: 0 }),\n },\n inlet: \"setpoint\",\n }),\n};\n\nconst threeWayValve: Spec<ThreeWayValveProps> = {\n name: \"Three Way Valve\",\n variant: \"threeWayValve\",\n Form: CommonToggleForm,\n Symbol: ThreeWayValve,\n defaultProps: (t) => ({\n color: t.colors.gray.l9.rgba255,\n label: {\n label: \"Three Way Valve\",\n level: \"p\",\n orientation: \"top\",\n },\n ...ZERO_TOGGLE_PROPS,\n orientation: \"left\",\n }),\n Preview: ThreeWayValvePreview,\n};\n\nconst valve: Spec<ValveProps> = {\n name: \"Valve\",\n variant: \"valve\",\n Form: CommonToggleForm,\n Symbol: Valve,\n defaultProps: (t) => ({\n color: t.colors.gray.l9.rgba255,\n label: {\n label: \"Valve\",\n level: \"p\",\n orientation: \"top\",\n },\n orientation: \"left\",\n ...ZERO_TOGGLE_PROPS,\n }),\n Preview: ValvePreview,\n};\n\nconst solenoidValve: Spec<SolenoidValveProps> = {\n name: \"Solenoid Valve\",\n variant: \"solenoidValve\",\n Form: SolenoidValveForm,\n Symbol: SolenoidValve,\n defaultProps: (t) => ({\n color: t.colors.gray.l9.rgba255,\n label: {\n label: \"Solenoid Valve\",\n level: \"p\",\n orientation: \"top\",\n },\n orientation: \"left\",\n ...ZERO_TOGGLE_PROPS,\n }),\n Preview: SolenoidValvePreview,\n};\n\nconst fourWayValve: Spec<ValveProps> = {\n name: \"Four Way Valve\",\n variant: \"fourWayValve\",\n Form: CommonToggleForm,\n Symbol: FourWayValve,\n defaultProps: (t) => ({\n color: t.colors.gray.l9.rgba255,\n label: {\n label: \"Four Way Valve\",\n level: \"p\",\n orientation: \"top\",\n },\n orientation: \"left\",\n }),\n Preview: FourWayValvePreview,\n};\n\nconst angledValve: Spec<AngledValveProps> = {\n name: \"Angled Valve\",\n variant: \"angledValve\",\n Form: CommonToggleForm,\n Symbol: AngledValve,\n defaultProps: (t) => ({\n color: t.colors.gray.l9.rgba255,\n label: {\n label: \"Angled Valve\",\n level: \"p\",\n orientation: \"top\",\n },\n orientation: \"left\",\n }),\n Preview: AngledValvePreview,\n};\n\nconst pump: Spec<PumpProps> = {\n name: \"Pump\",\n variant: \"pump\",\n Form: CommonToggleForm,\n Symbol: Pump,\n defaultProps: (t) => ({\n color: t.colors.gray.l9.rgba255,\n label: {\n label: \"Pump\",\n level: \"p\",\n orientation: \"top\",\n },\n orientation: \"left\",\n }),\n Preview: PumpPreview,\n};\n\nconst tank: Spec<TankProps> = {\n name: \"Tank\",\n variant: \"tank\",\n Form: TankForm,\n Symbol: Tank,\n defaultProps: (t) => ({\n color: t.colors.gray.l9.rgba255,\n label: {\n label: \"Tank\",\n level: \"p\",\n orientation: \"top\",\n },\n dimensions: {\n width: 100,\n height: 200,\n },\n orientation: \"left\",\n }),\n Preview: TankPreview,\n};\n\nconst reliefValve: Spec<ReliefValveProps> = {\n name: \"Relief Valve\",\n variant: \"reliefValve\",\n Form: CommonNonToggleForm,\n Symbol: ReliefValve,\n defaultProps: (t) => ({\n color: t.colors.gray.l9.rgba255,\n label: {\n label: \"Relief Valve\",\n level: \"p\",\n orientation: \"top\",\n },\n orientation: \"left\",\n }),\n Preview: ReliefValvePreview,\n};\n\nconst regulator: Spec<RegulatorProps> = {\n name: \"Regulator\",\n variant: \"regulator\",\n Form: CommonNonToggleForm,\n Symbol: Regulator,\n defaultProps: (t) => ({\n color: t.colors.gray.l9.rgba255,\n label: {\n label: \"Regulator\",\n level: \"p\",\n orientation: \"top\",\n },\n orientation: \"left\",\n }),\n Preview: RegulatorPreview,\n};\n\nconst burstDisc: Spec<ReliefValveProps> = {\n name: \"Burst Disc\",\n variant: \"burstDisc\",\n Form: CommonNonToggleForm,\n Symbol: BurstDisc,\n defaultProps: (t) => ({\n color: t.colors.gray.l9.rgba255,\n label: {\n label: \"Burst Disc\",\n level: \"p\",\n orientation: \"top\",\n },\n orientation: \"left\",\n }),\n Preview: BurstDiscPreview,\n};\n\nconst cap: Spec<ReliefValveProps> = {\n name: \"Cap\",\n variant: \"cap\",\n Form: CommonNonToggleForm,\n Symbol: Cap,\n defaultProps: (t) => ({\n color: t.colors.gray.l9.rgba255,\n label: {\n label: \"Cap\",\n level: \"p\",\n orientation: \"top\",\n },\n orientation: \"left\",\n }),\n Preview: CapPreview,\n};\n\nconst manualValve: Spec<ManualValveProps> = {\n name: \"Manual Valve\",\n variant: \"manualValve\",\n Form: CommonNonToggleForm,\n Symbol: ManualValve,\n defaultProps: (t) => ({\n color: t.colors.gray.l9.rgba255,\n label: {\n label: \"Manual Valve\",\n level: \"p\",\n orientation: \"top\",\n },\n orientation: \"left\",\n }),\n Preview: ManualValvePreview,\n};\n\nconst filter: Spec<FilterProps> = {\n name: \"Filter\",\n variant: \"filter\",\n Form: CommonNonToggleForm,\n Symbol: Filter,\n defaultProps: (t) => ({\n color: t.colors.gray.l9.rgba255,\n label: {\n label: \"Filter\",\n level: \"p\",\n orientation: \"top\",\n },\n orientation: \"left\",\n }),\n Preview: FilterPreview,\n};\n\nconst needleValve: Spec<NeedleValveProps> = {\n name: \"Needle Valve\",\n variant: \"needleValve\",\n Form: CommonNonToggleForm,\n Symbol: NeedleValve,\n defaultProps: (t) => ({\n color: t.colors.gray.l9.rgba255,\n label: {\n label: \"Needle Valve\",\n level: \"p\",\n },\n orientation: \"left\",\n }),\n Preview: NeedleValvePreview,\n};\n\nconst checkValve: Spec<CheckValveProps> = {\n name: \"Check Valve\",\n variant: \"checkValve\",\n Form: CommonNonToggleForm,\n Symbol: CheckValve,\n defaultProps: (t) => ({\n color: t.colors.gray.l9.rgba255,\n label: {\n label: \"Check Valve\",\n level: \"p\",\n orientation: \"top\",\n },\n orientation: \"left\",\n }),\n Preview: CheckValvePreview,\n};\n\nconst orifice: Spec<OrificeProps> = {\n name: \"Orifice\",\n variant: \"orifice\",\n Form: CommonNonToggleForm,\n Symbol: Orifice,\n defaultProps: (t) => ({\n color: t.colors.gray.l9.rgba255,\n label: {\n label: \"Orifice\",\n level: \"p\",\n orientation: \"top\",\n },\n orientation: \"left\",\n }),\n Preview: OrificePreview,\n};\n\nconst angledReliefValve: Spec<ReliefValveProps> = {\n name: \"Angled Relief Valve\",\n variant: \"angledReliefValve\",\n Form: CommonNonToggleForm,\n Symbol: AngledReliefValve,\n defaultProps: (t) => ({\n color: t.colors.gray.l9.rgba255,\n label: {\n label: \"Angled Relief Valve\",\n level: \"p\",\n orientation: \"top\",\n },\n orientation: \"left\",\n }),\n Preview: AngledReliefValvePreview,\n};\n\nconst value: Spec<ValueProps> = {\n name: \"Value\",\n variant: \"value\",\n Form: ValueForm,\n Symbol: Value,\n Preview: ValuePreview,\n defaultProps: (t) => ({\n color: t.colors.gray.l9.rgba255,\n level: \"small\",\n label: {\n label: \"Value\",\n level: \"p\",\n orientation: \"top\",\n },\n orientation: \"left\",\n telem: telem.sourcePipeline(\"string\", {\n connections: [\n {\n from: \"valueStream\",\n to: \"stringify\",\n },\n ],\n segments: {\n valueStream: telem.streamChannelValue({ channel: 0 }),\n stringify: telem.stringifyNumber({ precision: 2 }),\n },\n outlet: \"stringify\",\n }),\n }),\n};\n\nconst button: Spec<ButtonProps> = {\n name: \"Button\",\n variant: \"button\",\n Symbol: Button,\n Form: ButtonForm,\n Preview: ButtonPreview,\n defaultProps: (t) => ({\n label: {\n label: \"Button\",\n level: \"p\",\n orientation: \"top\",\n },\n orientation: \"left\",\n sink: telem.sinkPipeline(\"boolean\", {\n connections: [\n {\n from: \"setpoint\",\n to: \"setter\",\n },\n ],\n segments: {\n setter: control.setChannelValue({ channel: 0 }),\n setpoint: telem.setpoint({ truthy: 1, falsy: 0 }),\n },\n inlet: \"setpoint\",\n }),\n }),\n};\n\nconst switch_: Spec<SwitchProps> = {\n name: \"Switch\",\n variant: \"switch\",\n Symbol: Switch,\n Preview: SwitchPreview,\n Form: CommonToggleForm,\n defaultProps: (t) => ({\n label: {\n label: \"Switch\",\n level: \"p\",\n orientation: \"top\",\n },\n orientation: \"left\",\n ...ZERO_TOGGLE_PROPS,\n }),\n};\n\nexport const SYMBOLS: Record<Variant, Spec<any>> = {\n value,\n threeWayValve,\n valve,\n solenoidValve,\n fourWayValve,\n angledValve,\n pump,\n tank,\n reliefValve,\n regulator,\n burstDisc,\n cap,\n manualValve,\n filter,\n needleValve,\n checkValve,\n orifice,\n angledReliefValve,\n button,\n switch: switch_,\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 PropsWithChildren,\n type ReactElement,\n createContext,\n useContext,\n useEffect,\n} from \"react\";\n\nimport { Instrumentation } from \"@synnaxlabs/alamos\";\n\nimport { Aether } from \"@/aether\";\nimport { alamos } from \"@/alamos/aether\";\nimport { useMemoDeepEqualProps } from \"@/hooks\";\n\nexport interface ContextValue {\n instrumentation: Instrumentation;\n}\n\nconst Context = createContext<ContextValue>({\n instrumentation: Instrumentation.NOOP,\n});\n\nexport interface ProviderProps extends PropsWithChildren, alamos.ProviderState {}\n\nexport const useInstrumentation = (): Instrumentation =>\n useContext(Context).instrumentation;\n\nexport const Provider = Aether.wrap<ProviderProps>(\n alamos.Provider.TYPE,\n ({ aetherKey, children, ...props }): ReactElement => {\n const memoProps = useMemoDeepEqualProps(props);\n const [{ path }, , setState] = Aether.use({\n aetherKey,\n type: alamos.Provider.TYPE,\n schema: alamos.providerStateZ,\n initialState: memoProps,\n });\n\n useEffect(() => {\n setState(memoProps);\n }, [memoProps, setState]);\n\n return <Aether.Composite path={path}>{children}</Aether.Composite>;\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 PropsWithChildren, type ReactElement } from \"react\";\n\nimport { Aether } from \"@/aether\";\nimport { telem } from \"@/telem/aether\";\n\nexport interface ProviderProps extends PropsWithChildren<any> {}\n\nexport const Provider = Aether.wrap<ProviderProps>(\n telem.BaseProvider.TYPE,\n ({ children, aetherKey }): ReactElement | null => {\n const [{ path }] = Aether.use({\n aetherKey,\n type: telem.BaseProvider.TYPE,\n schema: telem.providerStateZ,\n initialState: {},\n });\n return <Aether.Composite path={path}>{children}</Aether.Composite>;\n },\n);\n"],"names":["value","color.ZERO","color.Color","jsx","obj","path","i","a","norm","n","match","location","score","pattern","result","item","searchers","query","e","t","s","c","l","p","y","u","g","o","r","f","runtime","memoize","data","mouseKey","Triggers.mouseKey","box","HAUL_TYPE","Dropdown.use","Theming.use","Haul.useDraggingState","canDrop","Haul.filterByType","Haul.useDragAndDrop","Button.Button","color.cssString","Text.Text","jsxs","Dropdown.Dialog","Core","direction","Multiple","Align.Space","Single","memo","state.usePurePassthrough","bounds","clamp","Color.Swatch","Text.MaybeEditable","Aether.wrap","canvas.Canvas","debounce","Aether.use","canvas.canvasStateZ","handleResize","bootstrapped","Fragment","Aether.Composite","canvas","Context","useContext","reactUseContext","deep","lineplot.LinePlot","lineplot.linePlotStateZ","Canvas.useRegion","Line","line.Line","line.stateZ","Core.Line","use","Triggers.flattenConfig","Triggers.compareModeConfigs","Triggers.determineMode","next","Triggers.useDrag","Triggers.use","Provider","Theming.useTypography","Icon","Text.WithIcon","Text.dimensions","_extends","pad","approxEqual","defaultKeyExtractor","defaultRangeExtractor","observeElementRect","handler","observeElementOffset","measureElement","elementScroll","Virtualizer","get","findNearestBinarySearch","getOffset","instance","Triggers.match","Status.Text","Input.Text","List.useContext","Filter","List","Button.Icon","CoreList.Selector","CoreList.Hover","CoreList.Column","CoreList.Core","Color.cssString","Text.ComponentSizeLevels","CoreList.Search","CoreList.Filter","CoreList.List","onChange","CoreList.useContext","Tag.Tag","Core.use","Core.Mask","lineplot.XAxis","lineplot.YAxis","useMemoDeepEqual","state","labelSize","tooltip.Tooltip","tooltip.tooltipStateZ","measure.Measure","measure.measureStateZ","Triggers.useHeldRef","LinePlot.useViewport","rule.Rule","rule.ruleStateZ","Text.Editable","synnax.ZERO_CONTEXT_VALUE","synnax.Provider","Status.useAggregator","TimeSpan","Synnax.use","aliases","filter","Select.Multiple","Select.Single","size","Resize.useMultiple","Resize.Multiple","Haul.Provider","key","Tabs.Tabs","eraser.Eraser","eraser.eraserStateZ","Eraser.use","Resize.Single","haulItems","Button.Link","name","List.Core","List.List","List.Selector","props","Text.edit","node","BackgroundVariant","dimensions","React","Background","shallow","Background$1","stump","connector.buildNew","connector.segmentsToPoints","connector.moveSourceNode","connector.checkIntegrity","connector.moveTargetNode","connector.dragSegment","diagram.Diagram","diagram.diagramStateZ","CoreViewport.DEFAULT_TRIGGERS","prev","useRFOnViewportChange","renderer","rfApplyNodeChanges","rfApplyEdgeChanges","rfAddEdge","EdgeComponent","Triggers.purgeMouse","RFBackground","Align.Pack","Button.ToggleIcon","table.Table","table.tableStateZ","table.TR","table.trStateZ","table.StringTD","table.stringTDStateZ","Value","Text.levelZ","Button","CoreButton.Icon","Input.Item","Text.SelectLevel","Color.ZERO","telem.sourcePipelinePropsZ","telem.sinkPipelinePropsZ","telem.streamChannelValuePropsZ","control.setChannelValuePropsZ","telem.sourcePipeline","telem.streamChannelValue","telem.withinBounds","telem.sinkPipeline","control.setChannelValue","telem.setpoint","control.authoritySource","control.acquireChannelControl","Channel.SelectSingle","Tabs.useStatic","Input.Switch","Input.Numeric","telem.stringifyNumber","control.Controller","control.controllerStateZ","control.StateProvider","control.stateProviderStateZ","control.Indicator","control.indicatorStateZ","Tooltip.Dialog","clientControl","control.Chip","control.chipStateZ","control.Legend","control.legendStateZ","s2","Core.Simple","button.Button","button.buttonStateZ","RFPosition","RFHandle","scale","Color.Color","FourWayValve","ThreeWayValve","Valve","SolenoidValve","ReliefValve","CheckValve","AngledValve","Pump","BurstDisc","Cap","ManualValve","Tank","Regulator","Orifice","NeedleValve","AngledReliefValve","Switch","CoreButton.Button","toggle.Toggle","toggle.toggleStateZ","Control.Chip","Control.Indicator","Toggle.use","Primitives.ThreeWayValve","Primitives.Valve","Primitives.SolenoidValve","Primitives.FourWayValve","Primitives.AngledValve","Primitives.Pump","Primitives.Tank","Primitives.ReliefValve","Primitives.Regulator","Primitives.BurstDisc","Primitives.Cap","Primitives.ManualValve","Primitives.Filter","Primitives.NeedleValve","Primitives.CheckValve","Primitives.Orifice","Primitives.AngledReliefValve","CoreValue.use","Primitives.Value","Primitives.Switch","CoreButton.use","Primitives.Button","alamos.Provider","alamos.providerStateZ","telem.BaseProvider","telem.providerStateZ"],"mappings":"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","x_google_ignoreList":[1,2,3,25,26,27,28,29,54]}