@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":"Item-EDdYN2NK.js","sources":["../src/menu/ContextMenu.tsx","../src/menu/Menu.tsx","../src/menu/Item.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 type ComponentPropsWithoutRef,\n type ForwardedRef,\n forwardRef,\n type ReactElement,\n type RefCallback,\n useRef,\n useState,\n} from \"react\";\n\nimport { box, unique, xy } from \"@synnaxlabs/x\";\n\nimport { CSS } from \"@/css\";\nimport { useClickOutside } from \"@/hooks\";\nimport { type RenderProp } from \"@/util/renderProp\";\n\nimport \"@/menu/ContextMenu.css\";\n\ninterface ContextMenuState {\n visible: boolean;\n keys: string[];\n xy: xy.XY;\n}\n\n/** Supported event types for triggering a context menu. */\nexport type ContextMenuEvent = xy.Client & {\n preventDefault: () => void;\n stopPropagation: () => void;\n target: Element;\n};\n\n/** Opens the context menu. See {@link Menu.useContextMenu} for more details. */\nexport type ContextMenuOpen = (\n pos: xy.Crude | ContextMenuEvent,\n keys?: string[],\n) => void;\n\n/** Return value for the {@Menu.useContextMenu} hook. */\nexport interface UseContextMenuReturn extends ContextMenuState {\n visible: boolean;\n close: () => void;\n open: ContextMenuOpen;\n ref: RefCallback<HTMLDivElement>;\n}\n\nconst INITIAL_STATE: ContextMenuState = {\n visible: false,\n keys: [],\n xy: xy.ZERO,\n};\n\nexport const CONTEXT_SELECTED = CSS.BM(\"context\", \"selected\");\nexport const CONTEXT_TARGET = CSS.BE(\"context\", \"target\");\nconst CONTEXT_MENU_CONTAINER = CSS.BE(\"menu-context\", \"container\");\n\nconst findTarget = (target: HTMLElement): HTMLElement => {\n let candidate = target;\n while (candidate != null && !candidate.classList.contains(CONTEXT_TARGET)) {\n if (candidate.classList.contains(CONTEXT_MENU_CONTAINER)) return target;\n candidate = candidate.parentElement as HTMLElement;\n }\n return candidate;\n};\n\nconst findSelected = (target_: HTMLElement): HTMLElement[] => {\n const target = findTarget(target_);\n const selected = (target.parentElement?.querySelectorAll(`.${CONTEXT_SELECTED}`) ??\n []) as HTMLElement[];\n return [target, ...Array.from(selected)];\n};\n\n/**\n * Menu.useContextMenu extracts the logic for toggling a context menu, allowing\n * the caller to control the menu's visibility and position.\n *\n * @returns visible - Whether the menu is visible.\n * @returns close - A function to close the menu.\n * @returns open - A function to open the menu. The function accepts an XY coordinate and\n * an optional set of keys to set as the selected menu items. It's important to note\n * that these keys override the default behavior of the menu, which is explained in\n * the documentation for {@link Menu.ContextMenu}.\n */\nexport const useContextMenu = (): UseContextMenuReturn => {\n const menuRef = useRef<HTMLDivElement | null>(null);\n const [state, setMenuState] = useState<ContextMenuState>(INITIAL_STATE);\n\n const handleOpen: ContextMenuOpen = (e, keys) => {\n const p = xy.construct(e);\n if (\"preventDefault\" in e) {\n e.preventDefault();\n // Prevent parent context menus from opening.\n e.stopPropagation();\n keys = keys ?? unique(findSelected(e.target as HTMLElement).map((el) => el.id));\n } else keys = [];\n setMenuState({ visible: true, keys, xy: p });\n };\n\n const refCallback = (el: HTMLDivElement): void => {\n menuRef.current = el;\n if (el == null) return;\n setMenuState((prev) => {\n if (prev.visible) {\n const [repositioned, changed] = box.positionSoVisible(\n el,\n window.document.documentElement,\n );\n if (changed) return { ...prev, xy: box.topLeft(repositioned) };\n }\n return prev;\n });\n };\n\n const hideMenu = (): void => setMenuState(INITIAL_STATE);\n\n useClickOutside(menuRef, hideMenu);\n\n return {\n ...state,\n close: hideMenu,\n open: handleOpen,\n ref: refCallback,\n };\n};\n\nexport interface ContextMenuMenuProps {\n keys: string[];\n}\n\nexport interface ContextMenuProps\n extends UseContextMenuReturn,\n ComponentPropsWithoutRef<\"div\"> {\n menu?: RenderProp<ContextMenuMenuProps>;\n}\n\nconst ContextMenuCore = (\n {\n children,\n menu,\n visible,\n open,\n close,\n xy,\n keys,\n className,\n ...props\n }: ContextMenuProps,\n ref: ForwardedRef<HTMLDivElement>,\n): ReactElement => {\n const menuC = visible ? menu?.({ keys }) : null;\n\n return (\n <div\n className={CSS(CONTEXT_MENU_CONTAINER, className, CSS.inheritDims())}\n onContextMenu={open}\n {...props}\n >\n {children}\n {menuC != null && (\n <div\n className={CSS(CSS.B(\"menu-context\"), CSS.bordered())}\n ref={ref}\n style={{ left: xy.x, top: xy.y }}\n onClick={close}\n >\n {menuC}\n </div>\n )}\n </div>\n );\n};\n\n/**\n * Menu.ContextMenu wraps a set of children with a context menu. When the user right\n * clicks within wrapped area, the provided menu will be shown. Menu.ContextMenu should\n * be used in conjunction with the Menu.useContextMenu hook.\n *\n * The rendered menu is provided with a set of keys that represent the HTML IDs of the\n * context target elements. The first target is evaluated by traversing the parents\n * of the element that was right clicked until an element with the class \"pluto-context-target\"\n * is found. If no such element is found, the right clicked element itself is used as\n * the target. Subsequent targets are found by querying all siblings of the first target\n * that have the \"pluto-context-selected\" class.\n *\n * @example <caption>Example DOM structure</caption>\n * <div id=\"pluto-menu-context__container\">\n * <div className=\"pluto-context-target\" id=\"1\">\n * <span>\n * <h2>I was right clicked!</h2>\n * </span>\n * </div>\n * <div className=\"pluto-context-target pluto-context-selected\" id=\"2\">\n * <div className=\"pluto-context-target\" id=\"3\">\n * </div>\n *\n * In the above example, the keys provided to the menu would be [\"1\", \"2\"].\n *\n * The target resolution logic is ideal for both single and multi-select scenarios,\n * such as lists that have several selected rows that should be acted upon together.\n *\n * @param props - Props for the component. Expects all return values from the\n * useContextMenu hook. All non-hook and unlisted props will be spread to the\n * underlying div component acting as the root element.\n * @param props.menu - The menu to show when the user right clicks.\n */\nexport const ContextMenu = forwardRef(ContextMenuCore);\nContextMenu.displayName = \"ContextMenu\";\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 type ReactElement,\n useContext,\n} from \"react\";\n\nimport { type Input } from \"@/input\";\nimport { type Text } from \"@/text\";\nimport { type ComponentSize } from \"@/util/component\";\n\ninterface MenuContextValue {\n onClick: (key: string) => void;\n selected: string;\n level?: Text.Level;\n iconSpacing?: ComponentSize;\n}\n\nexport const MenuContext = createContext<MenuContextValue>({\n onClick: () => {},\n selected: \"\",\n});\n\nexport interface MenuProps\n extends Partial<Input.Control<string>>,\n PropsWithChildren,\n Pick<MenuContextValue, \"level\" | \"iconSpacing\"> {}\n\nexport const useMenuContext = (): MenuContextValue => useContext(MenuContext);\n\n/**\n * Menu is a modular component that allows you to create a menu with a list of items.\n * It satisfies the InputControl string interface, so it's selected value can be\n * controlled.\n *\n * @param props - Props for the component. All unlisted props will be spread to the\n * underlying Space component acting as the root element.\n * @param props.onChange - Callback executed when the selected item changes.\n * @param props.value - The selected item.\n */\nexport const Menu = ({\n children,\n onChange,\n level,\n iconSpacing,\n value = \"\",\n}: MenuProps): ReactElement => {\n const handleClick: MenuProps[\"onChange\"] = (key) => onChange?.(key);\n return (\n <MenuContext.Provider\n value={{ onClick: handleClick, selected: value, level, iconSpacing }}\n >\n {children}\n </MenuContext.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 FunctionComponent, type ReactElement } from \"react\";\n\nimport { Button } from \"@/button\";\nimport { CSS } from \"@/css\";\nimport { useMenuContext } from \"@/menu/Menu\";\n\nimport \"@/menu/Item.css\";\n\nconst menuItemFactory =\n <E extends Pick<Button.ButtonProps, \"className\" | \"onClick\">>(\n Base: FunctionComponent<E>,\n defaultProps?: Partial<E>,\n ): FunctionComponent<E & { itemKey: string }> =>\n // eslint-disable-next-line react/display-name\n (props): ReactElement => {\n const { itemKey, className, onClick, size, ...rest } = {\n ...defaultProps,\n ...props,\n };\n\n const { onClick: ctxOnClick, selected, level, iconSpacing } = useMenuContext();\n\n const handleClick: Button.ButtonProps[\"onClick\"] = (e) => {\n ctxOnClick(itemKey);\n onClick?.(e);\n };\n const _selected = selected === itemKey;\n return (\n // @ts-expect-error\n <Base\n level={level}\n {...rest}\n onClick={handleClick}\n variant=\"text\"\n className={CSS(CSS.B(\"menu-item\"), CSS.selected(_selected), className)}\n size={size ?? iconSpacing}\n />\n );\n };\n\nexport interface ItemProps extends Button.ButtonProps {\n itemKey: string;\n}\nexport const CoreItem = menuItemFactory(Button.Button, { noWrap: true });\n\nexport interface ItemIconProps extends Button.IconProps {\n itemKey: string;\n}\nconst ItemIcon = menuItemFactory(Button.Icon);\n\nconst ItemLink = menuItemFactory(Button.Link, { noWrap: true });\nexport interface MenuItemLinkProps extends Button.LinkProps {\n itemKey: string;\n}\n\ntype CoreItemType = typeof CoreItem;\n\nexport interface ItemType extends CoreItemType {\n Icon: typeof ItemIcon;\n Link: typeof ItemLink;\n}\n\n/**\n * Menu.Item renders a menu item.\n *\n * @param props - Props for the component. Identical props to those of Use except\n * for the ones listed below.\n * @param props.itemKey - The key of the item. This is used to identify the item and\n * is passed to the onChange callback of the Menu.\n */\nexport const Item = CoreItem as ItemType;\nItem.Icon = ItemIcon;\nItem.Link = ItemLink;\n"],"names":["box","xy","jsxs","jsx","Button.Button","Button.Icon","Button.Link"],"mappings":"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"}
@@ -0,0 +1,170 @@
1
+ "use strict";
2
+ const jsxRuntime = require("./jsx-runtime-N1ikfypN.cjs");
3
+ const React = require("react");
4
+ const css = require("./css-V3VUT_Js.cjs");
5
+ const Toggle = require("./Toggle-eOKYw1OT.cjs");
6
+ const Link = require("./Link-xlTZan29.cjs");
7
+ const INITIAL_STATE = {
8
+ visible: false,
9
+ keys: [],
10
+ xy: css.xy.ZERO
11
+ };
12
+ const CONTEXT_SELECTED = css.CSS.BM("context", "selected");
13
+ const CONTEXT_TARGET = css.CSS.BE("context", "target");
14
+ const CONTEXT_MENU_CONTAINER = css.CSS.BE("menu-context", "container");
15
+ const findTarget = (target) => {
16
+ let candidate = target;
17
+ while (candidate != null && !candidate.classList.contains(CONTEXT_TARGET)) {
18
+ if (candidate.classList.contains(CONTEXT_MENU_CONTAINER))
19
+ return target;
20
+ candidate = candidate.parentElement;
21
+ }
22
+ return candidate;
23
+ };
24
+ const findSelected = (target_) => {
25
+ var _a;
26
+ const target = findTarget(target_);
27
+ const selected = ((_a = target.parentElement) == null ? void 0 : _a.querySelectorAll(`.${CONTEXT_SELECTED}`)) ?? [];
28
+ return [target, ...Array.from(selected)];
29
+ };
30
+ const useContextMenu = () => {
31
+ const menuRef = React.useRef(null);
32
+ const [state, setMenuState] = React.useState(INITIAL_STATE);
33
+ const handleOpen = (e, keys) => {
34
+ const p = css.xy.construct(e);
35
+ if ("preventDefault" in e) {
36
+ e.preventDefault();
37
+ e.stopPropagation();
38
+ keys = keys ?? css.unique(findSelected(e.target).map((el) => el.id));
39
+ } else
40
+ keys = [];
41
+ setMenuState({ visible: true, keys, xy: p });
42
+ };
43
+ const refCallback = (el) => {
44
+ menuRef.current = el;
45
+ if (el == null)
46
+ return;
47
+ setMenuState((prev) => {
48
+ if (prev.visible) {
49
+ const [repositioned, changed] = css.box$1.positionSoVisible(
50
+ el,
51
+ window.document.documentElement
52
+ );
53
+ if (changed)
54
+ return { ...prev, xy: css.box$1.topLeft(repositioned) };
55
+ }
56
+ return prev;
57
+ });
58
+ };
59
+ const hideMenu = () => setMenuState(INITIAL_STATE);
60
+ Toggle.useClickOutside(menuRef, hideMenu);
61
+ return {
62
+ ...state,
63
+ close: hideMenu,
64
+ open: handleOpen,
65
+ ref: refCallback
66
+ };
67
+ };
68
+ const ContextMenuCore = ({
69
+ children,
70
+ menu,
71
+ visible,
72
+ open,
73
+ close,
74
+ xy: xy2,
75
+ keys,
76
+ className,
77
+ ...props
78
+ }, ref) => {
79
+ const menuC = visible ? menu == null ? void 0 : menu({ keys }) : null;
80
+ return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsxs(
81
+ "div",
82
+ {
83
+ className: css.CSS(CONTEXT_MENU_CONTAINER, className, css.CSS.inheritDims()),
84
+ onContextMenu: open,
85
+ ...props,
86
+ children: [
87
+ children,
88
+ menuC != null && /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(
89
+ "div",
90
+ {
91
+ className: css.CSS(css.CSS.B("menu-context"), css.CSS.bordered()),
92
+ ref,
93
+ style: { left: xy2.x, top: xy2.y },
94
+ onClick: close,
95
+ children: menuC
96
+ }
97
+ )
98
+ ]
99
+ }
100
+ );
101
+ };
102
+ const ContextMenu = React.forwardRef(ContextMenuCore);
103
+ ContextMenu.displayName = "ContextMenu";
104
+ const MenuContext = React.createContext({
105
+ onClick: () => {
106
+ },
107
+ selected: ""
108
+ });
109
+ const useMenuContext = () => React.useContext(MenuContext);
110
+ const Menu = ({
111
+ children,
112
+ onChange,
113
+ level,
114
+ iconSpacing,
115
+ value = ""
116
+ }) => {
117
+ const handleClick = (key) => onChange == null ? void 0 : onChange(key);
118
+ return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(
119
+ MenuContext.Provider,
120
+ {
121
+ value: { onClick: handleClick, selected: value, level, iconSpacing },
122
+ children
123
+ }
124
+ );
125
+ };
126
+ const menuItemFactory = (Base, defaultProps) => (
127
+ // eslint-disable-next-line react/display-name
128
+ (props) => {
129
+ const { itemKey, className, onClick, size, ...rest } = {
130
+ ...defaultProps,
131
+ ...props
132
+ };
133
+ const { onClick: ctxOnClick, selected, level, iconSpacing } = useMenuContext();
134
+ const handleClick = (e) => {
135
+ ctxOnClick(itemKey);
136
+ onClick == null ? void 0 : onClick(e);
137
+ };
138
+ const _selected = selected === itemKey;
139
+ return (
140
+ // @ts-expect-error
141
+ /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(
142
+ Base,
143
+ {
144
+ level,
145
+ ...rest,
146
+ onClick: handleClick,
147
+ variant: "text",
148
+ className: css.CSS(css.CSS.B("menu-item"), css.CSS.selected(_selected), className),
149
+ size: size ?? iconSpacing
150
+ }
151
+ )
152
+ );
153
+ }
154
+ );
155
+ const CoreItem = menuItemFactory(Toggle.Button, { noWrap: true });
156
+ const ItemIcon = menuItemFactory(Toggle.Icon);
157
+ const ItemLink = menuItemFactory(Link.Link, { noWrap: true });
158
+ const Item = CoreItem;
159
+ Item.Icon = ItemIcon;
160
+ Item.Link = ItemLink;
161
+ exports.CONTEXT_SELECTED = CONTEXT_SELECTED;
162
+ exports.CONTEXT_TARGET = CONTEXT_TARGET;
163
+ exports.ContextMenu = ContextMenu;
164
+ exports.CoreItem = CoreItem;
165
+ exports.Item = Item;
166
+ exports.Menu = Menu;
167
+ exports.MenuContext = MenuContext;
168
+ exports.useContextMenu = useContextMenu;
169
+ exports.useMenuContext = useMenuContext;
170
+ //# sourceMappingURL=Item-HWzX7RK2.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Item-HWzX7RK2.cjs","sources":["../src/menu/ContextMenu.tsx","../src/menu/Menu.tsx","../src/menu/Item.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 type ComponentPropsWithoutRef,\n type ForwardedRef,\n forwardRef,\n type ReactElement,\n type RefCallback,\n useRef,\n useState,\n} from \"react\";\n\nimport { box, unique, xy } from \"@synnaxlabs/x\";\n\nimport { CSS } from \"@/css\";\nimport { useClickOutside } from \"@/hooks\";\nimport { type RenderProp } from \"@/util/renderProp\";\n\nimport \"@/menu/ContextMenu.css\";\n\ninterface ContextMenuState {\n visible: boolean;\n keys: string[];\n xy: xy.XY;\n}\n\n/** Supported event types for triggering a context menu. */\nexport type ContextMenuEvent = xy.Client & {\n preventDefault: () => void;\n stopPropagation: () => void;\n target: Element;\n};\n\n/** Opens the context menu. See {@link Menu.useContextMenu} for more details. */\nexport type ContextMenuOpen = (\n pos: xy.Crude | ContextMenuEvent,\n keys?: string[],\n) => void;\n\n/** Return value for the {@Menu.useContextMenu} hook. */\nexport interface UseContextMenuReturn extends ContextMenuState {\n visible: boolean;\n close: () => void;\n open: ContextMenuOpen;\n ref: RefCallback<HTMLDivElement>;\n}\n\nconst INITIAL_STATE: ContextMenuState = {\n visible: false,\n keys: [],\n xy: xy.ZERO,\n};\n\nexport const CONTEXT_SELECTED = CSS.BM(\"context\", \"selected\");\nexport const CONTEXT_TARGET = CSS.BE(\"context\", \"target\");\nconst CONTEXT_MENU_CONTAINER = CSS.BE(\"menu-context\", \"container\");\n\nconst findTarget = (target: HTMLElement): HTMLElement => {\n let candidate = target;\n while (candidate != null && !candidate.classList.contains(CONTEXT_TARGET)) {\n if (candidate.classList.contains(CONTEXT_MENU_CONTAINER)) return target;\n candidate = candidate.parentElement as HTMLElement;\n }\n return candidate;\n};\n\nconst findSelected = (target_: HTMLElement): HTMLElement[] => {\n const target = findTarget(target_);\n const selected = (target.parentElement?.querySelectorAll(`.${CONTEXT_SELECTED}`) ??\n []) as HTMLElement[];\n return [target, ...Array.from(selected)];\n};\n\n/**\n * Menu.useContextMenu extracts the logic for toggling a context menu, allowing\n * the caller to control the menu's visibility and position.\n *\n * @returns visible - Whether the menu is visible.\n * @returns close - A function to close the menu.\n * @returns open - A function to open the menu. The function accepts an XY coordinate and\n * an optional set of keys to set as the selected menu items. It's important to note\n * that these keys override the default behavior of the menu, which is explained in\n * the documentation for {@link Menu.ContextMenu}.\n */\nexport const useContextMenu = (): UseContextMenuReturn => {\n const menuRef = useRef<HTMLDivElement | null>(null);\n const [state, setMenuState] = useState<ContextMenuState>(INITIAL_STATE);\n\n const handleOpen: ContextMenuOpen = (e, keys) => {\n const p = xy.construct(e);\n if (\"preventDefault\" in e) {\n e.preventDefault();\n // Prevent parent context menus from opening.\n e.stopPropagation();\n keys = keys ?? unique(findSelected(e.target as HTMLElement).map((el) => el.id));\n } else keys = [];\n setMenuState({ visible: true, keys, xy: p });\n };\n\n const refCallback = (el: HTMLDivElement): void => {\n menuRef.current = el;\n if (el == null) return;\n setMenuState((prev) => {\n if (prev.visible) {\n const [repositioned, changed] = box.positionSoVisible(\n el,\n window.document.documentElement,\n );\n if (changed) return { ...prev, xy: box.topLeft(repositioned) };\n }\n return prev;\n });\n };\n\n const hideMenu = (): void => setMenuState(INITIAL_STATE);\n\n useClickOutside(menuRef, hideMenu);\n\n return {\n ...state,\n close: hideMenu,\n open: handleOpen,\n ref: refCallback,\n };\n};\n\nexport interface ContextMenuMenuProps {\n keys: string[];\n}\n\nexport interface ContextMenuProps\n extends UseContextMenuReturn,\n ComponentPropsWithoutRef<\"div\"> {\n menu?: RenderProp<ContextMenuMenuProps>;\n}\n\nconst ContextMenuCore = (\n {\n children,\n menu,\n visible,\n open,\n close,\n xy,\n keys,\n className,\n ...props\n }: ContextMenuProps,\n ref: ForwardedRef<HTMLDivElement>,\n): ReactElement => {\n const menuC = visible ? menu?.({ keys }) : null;\n\n return (\n <div\n className={CSS(CONTEXT_MENU_CONTAINER, className, CSS.inheritDims())}\n onContextMenu={open}\n {...props}\n >\n {children}\n {menuC != null && (\n <div\n className={CSS(CSS.B(\"menu-context\"), CSS.bordered())}\n ref={ref}\n style={{ left: xy.x, top: xy.y }}\n onClick={close}\n >\n {menuC}\n </div>\n )}\n </div>\n );\n};\n\n/**\n * Menu.ContextMenu wraps a set of children with a context menu. When the user right\n * clicks within wrapped area, the provided menu will be shown. Menu.ContextMenu should\n * be used in conjunction with the Menu.useContextMenu hook.\n *\n * The rendered menu is provided with a set of keys that represent the HTML IDs of the\n * context target elements. The first target is evaluated by traversing the parents\n * of the element that was right clicked until an element with the class \"pluto-context-target\"\n * is found. If no such element is found, the right clicked element itself is used as\n * the target. Subsequent targets are found by querying all siblings of the first target\n * that have the \"pluto-context-selected\" class.\n *\n * @example <caption>Example DOM structure</caption>\n * <div id=\"pluto-menu-context__container\">\n * <div className=\"pluto-context-target\" id=\"1\">\n * <span>\n * <h2>I was right clicked!</h2>\n * </span>\n * </div>\n * <div className=\"pluto-context-target pluto-context-selected\" id=\"2\">\n * <div className=\"pluto-context-target\" id=\"3\">\n * </div>\n *\n * In the above example, the keys provided to the menu would be [\"1\", \"2\"].\n *\n * The target resolution logic is ideal for both single and multi-select scenarios,\n * such as lists that have several selected rows that should be acted upon together.\n *\n * @param props - Props for the component. Expects all return values from the\n * useContextMenu hook. All non-hook and unlisted props will be spread to the\n * underlying div component acting as the root element.\n * @param props.menu - The menu to show when the user right clicks.\n */\nexport const ContextMenu = forwardRef(ContextMenuCore);\nContextMenu.displayName = \"ContextMenu\";\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 type ReactElement,\n useContext,\n} from \"react\";\n\nimport { type Input } from \"@/input\";\nimport { type Text } from \"@/text\";\nimport { type ComponentSize } from \"@/util/component\";\n\ninterface MenuContextValue {\n onClick: (key: string) => void;\n selected: string;\n level?: Text.Level;\n iconSpacing?: ComponentSize;\n}\n\nexport const MenuContext = createContext<MenuContextValue>({\n onClick: () => {},\n selected: \"\",\n});\n\nexport interface MenuProps\n extends Partial<Input.Control<string>>,\n PropsWithChildren,\n Pick<MenuContextValue, \"level\" | \"iconSpacing\"> {}\n\nexport const useMenuContext = (): MenuContextValue => useContext(MenuContext);\n\n/**\n * Menu is a modular component that allows you to create a menu with a list of items.\n * It satisfies the InputControl string interface, so it's selected value can be\n * controlled.\n *\n * @param props - Props for the component. All unlisted props will be spread to the\n * underlying Space component acting as the root element.\n * @param props.onChange - Callback executed when the selected item changes.\n * @param props.value - The selected item.\n */\nexport const Menu = ({\n children,\n onChange,\n level,\n iconSpacing,\n value = \"\",\n}: MenuProps): ReactElement => {\n const handleClick: MenuProps[\"onChange\"] = (key) => onChange?.(key);\n return (\n <MenuContext.Provider\n value={{ onClick: handleClick, selected: value, level, iconSpacing }}\n >\n {children}\n </MenuContext.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 FunctionComponent, type ReactElement } from \"react\";\n\nimport { Button } from \"@/button\";\nimport { CSS } from \"@/css\";\nimport { useMenuContext } from \"@/menu/Menu\";\n\nimport \"@/menu/Item.css\";\n\nconst menuItemFactory =\n <E extends Pick<Button.ButtonProps, \"className\" | \"onClick\">>(\n Base: FunctionComponent<E>,\n defaultProps?: Partial<E>,\n ): FunctionComponent<E & { itemKey: string }> =>\n // eslint-disable-next-line react/display-name\n (props): ReactElement => {\n const { itemKey, className, onClick, size, ...rest } = {\n ...defaultProps,\n ...props,\n };\n\n const { onClick: ctxOnClick, selected, level, iconSpacing } = useMenuContext();\n\n const handleClick: Button.ButtonProps[\"onClick\"] = (e) => {\n ctxOnClick(itemKey);\n onClick?.(e);\n };\n const _selected = selected === itemKey;\n return (\n // @ts-expect-error\n <Base\n level={level}\n {...rest}\n onClick={handleClick}\n variant=\"text\"\n className={CSS(CSS.B(\"menu-item\"), CSS.selected(_selected), className)}\n size={size ?? iconSpacing}\n />\n );\n };\n\nexport interface ItemProps extends Button.ButtonProps {\n itemKey: string;\n}\nexport const CoreItem = menuItemFactory(Button.Button, { noWrap: true });\n\nexport interface ItemIconProps extends Button.IconProps {\n itemKey: string;\n}\nconst ItemIcon = menuItemFactory(Button.Icon);\n\nconst ItemLink = menuItemFactory(Button.Link, { noWrap: true });\nexport interface MenuItemLinkProps extends Button.LinkProps {\n itemKey: string;\n}\n\ntype CoreItemType = typeof CoreItem;\n\nexport interface ItemType extends CoreItemType {\n Icon: typeof ItemIcon;\n Link: typeof ItemLink;\n}\n\n/**\n * Menu.Item renders a menu item.\n *\n * @param props - Props for the component. Identical props to those of Use except\n * for the ones listed below.\n * @param props.itemKey - The key of the item. This is used to identify the item and\n * is passed to the onChange callback of the Menu.\n */\nexport const Item = CoreItem as ItemType;\nItem.Icon = ItemIcon;\nItem.Link = ItemLink;\n"],"names":["xy","CSS","useRef","useState","unique","box","useClickOutside","jsxs","jsx","forwardRef","createContext","useContext","Button.Button","Button.Icon","Button.Link"],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ import { j as jsxRuntimeExports } from "./jsx-runtime-rX5tAIG2.js";
2
+ import { C as CSS, d as direction$1 } from "./css-NTD4Xm8x.js";
3
+ import { useController } from "react-hook-form";
4
+ import { S as Space } from "./Center-gEKkAkdh.js";
5
+ import { g as Text } from "./Toggle-kLunfJtR.js";
6
+ import "./component-k78Jq9I7.js";
7
+ import "react";
8
+ const HelpText = ({
9
+ className,
10
+ variant = "error",
11
+ ...props
12
+ }) => /* @__PURE__ */ jsxRuntimeExports.jsx(
13
+ Text,
14
+ {
15
+ className: CSS(
16
+ CSS.B("input-help-text"),
17
+ CSS.BM("input-help-text", variant),
18
+ className
19
+ ),
20
+ level: "small",
21
+ ...props
22
+ }
23
+ );
24
+ const Label = ({ className, ...props }) => {
25
+ return /* @__PURE__ */ jsxRuntimeExports.jsx("label", { className: CSS(CSS.B("input-label"), className), ...props });
26
+ };
27
+ const camelToTitle = (str) => str.replace(/([A-Z])/g, " $1").replace(/^./, (str2) => str2.toUpperCase());
28
+ const maybeDefaultAlignment = (align, dir = "x") => {
29
+ if (align != null)
30
+ return align;
31
+ return direction$1.construct(dir) === "y" ? "stretch" : "center";
32
+ };
33
+ const Item = ({
34
+ label,
35
+ showLabel = true,
36
+ helpText,
37
+ direction: direction2 = "y",
38
+ className,
39
+ children,
40
+ align,
41
+ size = "small",
42
+ ...props
43
+ }) => {
44
+ let inputAndHelp;
45
+ if (direction2 === "x")
46
+ inputAndHelp = /* @__PURE__ */ jsxRuntimeExports.jsxs(Space, { direction: "y", size: "small", children: [
47
+ children,
48
+ helpText != null && /* @__PURE__ */ jsxRuntimeExports.jsx(HelpText, { children: helpText })
49
+ ] });
50
+ else
51
+ inputAndHelp = /* @__PURE__ */ jsxRuntimeExports.jsxs(jsxRuntimeExports.Fragment, { children: [
52
+ children,
53
+ helpText != null && /* @__PURE__ */ jsxRuntimeExports.jsx(HelpText, { children: helpText })
54
+ ] });
55
+ return /* @__PURE__ */ jsxRuntimeExports.jsxs(
56
+ Space,
57
+ {
58
+ className: CSS(CSS.B("input-item"), className),
59
+ direction: direction2,
60
+ size,
61
+ align: maybeDefaultAlignment(align, direction2),
62
+ ...props,
63
+ children: [
64
+ showLabel && /* @__PURE__ */ jsxRuntimeExports.jsx(Label, { children: label }),
65
+ inputAndHelp
66
+ ]
67
+ }
68
+ );
69
+ };
70
+ const ItemControlled = ({
71
+ name,
72
+ rules,
73
+ control,
74
+ shouldUnregister,
75
+ defaultValue,
76
+ label,
77
+ children,
78
+ ...props
79
+ }) => {
80
+ var _a;
81
+ const { field, fieldState } = useController({
82
+ control,
83
+ rules,
84
+ name,
85
+ shouldUnregister
86
+ });
87
+ if (label == null)
88
+ label = camelToTitle(name);
89
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Item, { ref: field.ref, label, helpText: (_a = fieldState.error) == null ? void 0 : _a.message, ...props, children: children({ value: field.value, onChange: field.onChange }) });
90
+ };
91
+ export {
92
+ HelpText as H,
93
+ Item as I,
94
+ Label as L,
95
+ ItemControlled as a
96
+ };
97
+ //# sourceMappingURL=Item-owLU4Xop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Item-owLU4Xop.js","sources":["../src/input/HelpText.tsx","../src/input/Label.tsx","../src/util/case.ts","../src/input/Item.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 { type ReactElement } from \"react\";\n\nimport { CSS } from \"@/css\";\nimport { type Status } from \"@/status\";\nimport { Text } from \"@/text\";\n\nimport \"@/input/HelpText.css\";\n\n/** Props for the {@link HelpText} component. */\nexport interface HelpTextProps extends Omit<Text.TextProps<\"small\">, \"level\" | \"ref\"> {\n variant?: Status.Variant;\n}\n\n/**\n * Help text for an input component. We generally recommend using Input.Item with a\n * 'helpText' prop instead of this component. This component is useful for low-level\n * control over the help text element.\n *\n * @param props - Props for the help text component. Unlisted props are passed to the\n * underlying text element.\n * @param props.variant - The variant of the help text.\n * \"success\" | \"error\" | \"warning\" | \"info\" | \"loading\" | \"disabled\n * @default \"info\"\n */\nexport const HelpText = ({\n className,\n variant = \"error\",\n ...props\n}: HelpTextProps): ReactElement => (\n <Text.Text<\"small\">\n className={CSS(\n CSS.B(\"input-help-text\"),\n CSS.BM(\"input-help-text\", variant),\n className,\n )}\n level=\"small\"\n {...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 DetailedHTMLProps, type HTMLAttributes, type ReactElement } from \"react\";\n\nimport { CSS } from \"@/css\";\n\nimport \"@/input/Label.css\";\n\n/** Props for the {@link Label} component. */\nexport interface LabelProps\n extends DetailedHTMLProps<HTMLAttributes<HTMLLabelElement>, HTMLLabelElement> {}\n\n/**\n * A thin, styled wrapper for an input label. We generally recommend using Input.Item\n * with a 'label' prop instead of this component. This component is useful for\n * low-level control over the label element.\n *\n * @param props - Props for the label component. Unlisted props are passed to the\n * underlying label element.\n */\nexport const Label = ({ className, ...props }: LabelProps): ReactElement => {\n return <label className={CSS(CSS.B(\"input-label\"), className)} {...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\nexport const camelToTitle = (str: string): string =>\n str.replace(/([A-Z])/g, \" $1\").replace(/^./, (str) => str.toUpperCase());\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 { direction } from \"@synnaxlabs/x\";\nimport {\n type UseControllerProps,\n useController,\n type FieldValues,\n type FieldPath,\n} from \"react-hook-form\";\n\nimport { Align } from \"@/align\";\nimport { CSS } from \"@/css\";\nimport { HelpText } from \"@/input/HelpText\";\nimport { Label } from \"@/input/Label\";\nimport { type Control, type Value } from \"@/input/types\";\nimport { camelToTitle } from \"@/util/case\";\n\nimport { type RenderProp } from \"..\";\n\nimport \"@/input/Item.css\";\n\ninterface ItemExtensionProps extends Align.SpaceExtensionProps {\n label?: string;\n showLabel?: boolean;\n helpText?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport interface ItemProps extends Align.SpaceProps {\n label?: string;\n showLabel?: boolean;\n helpText?: string;\n}\n\nconst maybeDefaultAlignment = (\n align?: Align.Alignment,\n dir: direction.Crude = \"x\",\n): Align.Alignment => {\n if (align != null) return align;\n return direction.construct(dir) === \"y\" ? \"stretch\" : \"center\";\n};\n\nexport const Item = ({\n label,\n showLabel = true,\n helpText,\n direction = \"y\",\n className,\n children,\n align,\n size = \"small\",\n ...props\n}: ItemProps): ReactElement => {\n let inputAndHelp: ReactElement;\n if (direction === \"x\")\n inputAndHelp = (\n <Align.Space direction=\"y\" size=\"small\">\n {children}\n {helpText != null && <HelpText>{helpText}</HelpText>}\n </Align.Space>\n );\n else\n inputAndHelp = (\n <>\n {children}\n {helpText != null && <HelpText>{helpText}</HelpText>}\n </>\n );\n\n return (\n <Align.Space\n className={CSS(CSS.B(\"input-item\"), className)}\n direction={direction}\n size={size}\n align={maybeDefaultAlignment(align, direction)}\n {...props}\n >\n {showLabel && <Label>{label}</Label>}\n {inputAndHelp}\n </Align.Space>\n );\n};\n\nexport type ItemControlledProps<\n I extends Value = string | number,\n O extends Value = I,\n F extends FieldValues = FieldValues,\n TName extends FieldPath<F> = FieldPath<F>,\n> = ItemExtensionProps &\n UseControllerProps<F, TName> & {\n children: RenderProp<Control<I, O>>;\n };\n\nexport const ItemControlled = <\n I extends Value = string | number,\n O extends Value = I,\n F extends FieldValues = FieldValues,\n TName extends FieldPath<F> = FieldPath<F>,\n>({\n name,\n rules,\n control,\n shouldUnregister,\n defaultValue,\n label,\n children,\n ...props\n}: ItemControlledProps<I, O, F, TName>): ReactElement => {\n const { field, fieldState } = useController<F, TName>({\n control,\n rules,\n name,\n shouldUnregister,\n });\n if (label == null) label = camelToTitle(name);\n return (\n <Item ref={field.ref} label={label} helpText={fieldState.error?.message} {...props}>\n {children({ value: field.value, onChange: field.onChange })}\n </Item>\n );\n};\n"],"names":["jsx","Text.Text","str","direction","Align.Space","jsxs","Fragment"],"mappings":";;;;;;;AAiCO,MAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA,UAAU;AAAA,EACV,GAAG;AACL,MACEA,kCAAA;AAAA,EAACC;AAAAA,EAAA;AAAA,IACC,WAAW;AAAA,MACT,IAAI,EAAE,iBAAiB;AAAA,MACvB,IAAI,GAAG,mBAAmB,OAAO;AAAA,MACjC;AAAA,IACF;AAAA,IACA,OAAM;AAAA,IACL,GAAG;AAAA,EAAA;AACN;ACnBK,MAAM,QAAQ,CAAC,EAAE,WAAW,GAAG,YAAsC;AACnE,SAAAD,kCAAA,IAAC,SAAM,EAAA,WAAW,IAAI,IAAI,EAAE,aAAa,GAAG,SAAS,GAAI,GAAG,MAAO,CAAA;AAC5E;ACpBO,MAAM,eAAe,CAAC,QAC3B,IAAI,QAAQ,YAAY,KAAK,EAAE,QAAQ,MAAM,CAACE,SAAQA,KAAI,aAAa;ACkCzE,MAAM,wBAAwB,CAC5B,OACA,MAAuB,QACH;AACpB,MAAI,SAAS;AAAa,WAAA;AAC1B,SAAOC,YAAU,UAAU,GAAG,MAAM,MAAM,YAAY;AACxD;AAEO,MAAM,OAAO,CAAC;AAAA,EACnB;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA,WAAAA,aAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,GAAG;AACL,MAA+B;AACzB,MAAA;AACJ,MAAIA,eAAc;AAChB,0DACGC,OAAA,EAAY,WAAU,KAAI,MAAK,SAC7B,UAAA;AAAA,MAAA;AAAA,MACA,YAAY,QAASJ,kCAAA,IAAA,UAAA,EAAU,UAAS,UAAA;AAAA,IAC3C,EAAA,CAAA;AAAA;AAGF,mBAEKK,kCAAA,KAAAC,4BAAA,EAAA,UAAA;AAAA,MAAA;AAAA,MACA,YAAY,QAASN,kCAAA,IAAA,UAAA,EAAU,UAAS,UAAA;AAAA,IAC3C,EAAA,CAAA;AAIF,SAAAK,kCAAA;AAAA,IAACD;AAAAA,IAAA;AAAA,MACC,WAAW,IAAI,IAAI,EAAE,YAAY,GAAG,SAAS;AAAA,MAC7C,WAAWD;AAAAA,MACX;AAAA,MACA,OAAO,sBAAsB,OAAOA,UAAS;AAAA,MAC5C,GAAG;AAAA,MAEH,UAAA;AAAA,QAAa,aAAAH,kCAAAA,IAAC,SAAO,UAAM,MAAA,CAAA;AAAA,QAC3B;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP;AAYO,MAAM,iBAAiB,CAK5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAyD;;AACvD,QAAM,EAAE,OAAO,WAAW,IAAI,cAAwB;AAAA,IACpD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACD,MAAI,SAAS;AAAM,YAAQ,aAAa,IAAI;AAE1C,SAAAA,sCAAC,QAAK,KAAK,MAAM,KAAK,OAAc,WAAU,gBAAW,UAAX,mBAAkB,SAAU,GAAG,OAC1E,UAAA,SAAS,EAAE,OAAO,MAAM,OAAO,UAAU,MAAM,SAAU,CAAA,EAC5D,CAAA;AAEJ;"}
@@ -0,0 +1,96 @@
1
+ "use strict";
2
+ const jsxRuntime = require("./jsx-runtime-N1ikfypN.cjs");
3
+ const css = require("./css-V3VUT_Js.cjs");
4
+ const reactHookForm = require("react-hook-form");
5
+ const Center = require("./Center-ZAcURh-3.cjs");
6
+ const Toggle = require("./Toggle-eOKYw1OT.cjs");
7
+ require("./component-joFaJiQW.cjs");
8
+ require("react");
9
+ const HelpText = ({
10
+ className,
11
+ variant = "error",
12
+ ...props
13
+ }) => /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(
14
+ Toggle.Text,
15
+ {
16
+ className: css.CSS(
17
+ css.CSS.B("input-help-text"),
18
+ css.CSS.BM("input-help-text", variant),
19
+ className
20
+ ),
21
+ level: "small",
22
+ ...props
23
+ }
24
+ );
25
+ const Label = ({ className, ...props }) => {
26
+ return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx("label", { className: css.CSS(css.CSS.B("input-label"), className), ...props });
27
+ };
28
+ const camelToTitle = (str) => str.replace(/([A-Z])/g, " $1").replace(/^./, (str2) => str2.toUpperCase());
29
+ const maybeDefaultAlignment = (align, dir = "x") => {
30
+ if (align != null)
31
+ return align;
32
+ return css.direction$1.construct(dir) === "y" ? "stretch" : "center";
33
+ };
34
+ const Item = ({
35
+ label,
36
+ showLabel = true,
37
+ helpText,
38
+ direction: direction2 = "y",
39
+ className,
40
+ children,
41
+ align,
42
+ size = "small",
43
+ ...props
44
+ }) => {
45
+ let inputAndHelp;
46
+ if (direction2 === "x")
47
+ inputAndHelp = /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsxs(Center.Space, { direction: "y", size: "small", children: [
48
+ children,
49
+ helpText != null && /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(HelpText, { children: helpText })
50
+ ] });
51
+ else
52
+ inputAndHelp = /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsxs(jsxRuntime.jsxRuntimeExports.Fragment, { children: [
53
+ children,
54
+ helpText != null && /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(HelpText, { children: helpText })
55
+ ] });
56
+ return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsxs(
57
+ Center.Space,
58
+ {
59
+ className: css.CSS(css.CSS.B("input-item"), className),
60
+ direction: direction2,
61
+ size,
62
+ align: maybeDefaultAlignment(align, direction2),
63
+ ...props,
64
+ children: [
65
+ showLabel && /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(Label, { children: label }),
66
+ inputAndHelp
67
+ ]
68
+ }
69
+ );
70
+ };
71
+ const ItemControlled = ({
72
+ name,
73
+ rules,
74
+ control,
75
+ shouldUnregister,
76
+ defaultValue,
77
+ label,
78
+ children,
79
+ ...props
80
+ }) => {
81
+ var _a;
82
+ const { field, fieldState } = reactHookForm.useController({
83
+ control,
84
+ rules,
85
+ name,
86
+ shouldUnregister
87
+ });
88
+ if (label == null)
89
+ label = camelToTitle(name);
90
+ return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(Item, { ref: field.ref, label, helpText: (_a = fieldState.error) == null ? void 0 : _a.message, ...props, children: children({ value: field.value, onChange: field.onChange }) });
91
+ };
92
+ exports.HelpText = HelpText;
93
+ exports.Item = Item;
94
+ exports.ItemControlled = ItemControlled;
95
+ exports.Label = Label;
96
+ //# sourceMappingURL=Item-rkSKzZoh.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Item-rkSKzZoh.cjs","sources":["../src/input/HelpText.tsx","../src/input/Label.tsx","../src/util/case.ts","../src/input/Item.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 { type ReactElement } from \"react\";\n\nimport { CSS } from \"@/css\";\nimport { type Status } from \"@/status\";\nimport { Text } from \"@/text\";\n\nimport \"@/input/HelpText.css\";\n\n/** Props for the {@link HelpText} component. */\nexport interface HelpTextProps extends Omit<Text.TextProps<\"small\">, \"level\" | \"ref\"> {\n variant?: Status.Variant;\n}\n\n/**\n * Help text for an input component. We generally recommend using Input.Item with a\n * 'helpText' prop instead of this component. This component is useful for low-level\n * control over the help text element.\n *\n * @param props - Props for the help text component. Unlisted props are passed to the\n * underlying text element.\n * @param props.variant - The variant of the help text.\n * \"success\" | \"error\" | \"warning\" | \"info\" | \"loading\" | \"disabled\n * @default \"info\"\n */\nexport const HelpText = ({\n className,\n variant = \"error\",\n ...props\n}: HelpTextProps): ReactElement => (\n <Text.Text<\"small\">\n className={CSS(\n CSS.B(\"input-help-text\"),\n CSS.BM(\"input-help-text\", variant),\n className,\n )}\n level=\"small\"\n {...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 DetailedHTMLProps, type HTMLAttributes, type ReactElement } from \"react\";\n\nimport { CSS } from \"@/css\";\n\nimport \"@/input/Label.css\";\n\n/** Props for the {@link Label} component. */\nexport interface LabelProps\n extends DetailedHTMLProps<HTMLAttributes<HTMLLabelElement>, HTMLLabelElement> {}\n\n/**\n * A thin, styled wrapper for an input label. We generally recommend using Input.Item\n * with a 'label' prop instead of this component. This component is useful for\n * low-level control over the label element.\n *\n * @param props - Props for the label component. Unlisted props are passed to the\n * underlying label element.\n */\nexport const Label = ({ className, ...props }: LabelProps): ReactElement => {\n return <label className={CSS(CSS.B(\"input-label\"), className)} {...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\nexport const camelToTitle = (str: string): string =>\n str.replace(/([A-Z])/g, \" $1\").replace(/^./, (str) => str.toUpperCase());\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 { direction } from \"@synnaxlabs/x\";\nimport {\n type UseControllerProps,\n useController,\n type FieldValues,\n type FieldPath,\n} from \"react-hook-form\";\n\nimport { Align } from \"@/align\";\nimport { CSS } from \"@/css\";\nimport { HelpText } from \"@/input/HelpText\";\nimport { Label } from \"@/input/Label\";\nimport { type Control, type Value } from \"@/input/types\";\nimport { camelToTitle } from \"@/util/case\";\n\nimport { type RenderProp } from \"..\";\n\nimport \"@/input/Item.css\";\n\ninterface ItemExtensionProps extends Align.SpaceExtensionProps {\n label?: string;\n showLabel?: boolean;\n helpText?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport interface ItemProps extends Align.SpaceProps {\n label?: string;\n showLabel?: boolean;\n helpText?: string;\n}\n\nconst maybeDefaultAlignment = (\n align?: Align.Alignment,\n dir: direction.Crude = \"x\",\n): Align.Alignment => {\n if (align != null) return align;\n return direction.construct(dir) === \"y\" ? \"stretch\" : \"center\";\n};\n\nexport const Item = ({\n label,\n showLabel = true,\n helpText,\n direction = \"y\",\n className,\n children,\n align,\n size = \"small\",\n ...props\n}: ItemProps): ReactElement => {\n let inputAndHelp: ReactElement;\n if (direction === \"x\")\n inputAndHelp = (\n <Align.Space direction=\"y\" size=\"small\">\n {children}\n {helpText != null && <HelpText>{helpText}</HelpText>}\n </Align.Space>\n );\n else\n inputAndHelp = (\n <>\n {children}\n {helpText != null && <HelpText>{helpText}</HelpText>}\n </>\n );\n\n return (\n <Align.Space\n className={CSS(CSS.B(\"input-item\"), className)}\n direction={direction}\n size={size}\n align={maybeDefaultAlignment(align, direction)}\n {...props}\n >\n {showLabel && <Label>{label}</Label>}\n {inputAndHelp}\n </Align.Space>\n );\n};\n\nexport type ItemControlledProps<\n I extends Value = string | number,\n O extends Value = I,\n F extends FieldValues = FieldValues,\n TName extends FieldPath<F> = FieldPath<F>,\n> = ItemExtensionProps &\n UseControllerProps<F, TName> & {\n children: RenderProp<Control<I, O>>;\n };\n\nexport const ItemControlled = <\n I extends Value = string | number,\n O extends Value = I,\n F extends FieldValues = FieldValues,\n TName extends FieldPath<F> = FieldPath<F>,\n>({\n name,\n rules,\n control,\n shouldUnregister,\n defaultValue,\n label,\n children,\n ...props\n}: ItemControlledProps<I, O, F, TName>): ReactElement => {\n const { field, fieldState } = useController<F, TName>({\n control,\n rules,\n name,\n shouldUnregister,\n });\n if (label == null) label = camelToTitle(name);\n return (\n <Item ref={field.ref} label={label} helpText={fieldState.error?.message} {...props}>\n {children({ value: field.value, onChange: field.onChange })}\n </Item>\n );\n};\n"],"names":["jsx","Text.Text","CSS","str","direction","Align.Space","jsxs","Fragment","useController"],"mappings":";;;;;;;;AAiCO,MAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA,UAAU;AAAA,EACV,GAAG;AACL,MACEA,2BAAA,kBAAA;AAAA,EAACC,OAAK;AAAA,EAAL;AAAA,IACC,WAAWC,IAAA;AAAA,MACTA,IAAA,IAAI,EAAE,iBAAiB;AAAA,MACvBA,QAAI,GAAG,mBAAmB,OAAO;AAAA,MACjC;AAAA,IACF;AAAA,IACA,OAAM;AAAA,IACL,GAAG;AAAA,EAAA;AACN;ACnBK,MAAM,QAAQ,CAAC,EAAE,WAAW,GAAG,YAAsC;AACnE,SAAAF,2BAAA,kBAAA,IAAC,SAAM,EAAA,WAAWE,IAAI,IAAAA,IAAA,IAAI,EAAE,aAAa,GAAG,SAAS,GAAI,GAAG,MAAO,CAAA;AAC5E;ACpBO,MAAM,eAAe,CAAC,QAC3B,IAAI,QAAQ,YAAY,KAAK,EAAE,QAAQ,MAAM,CAACC,SAAQA,KAAI,aAAa;ACkCzE,MAAM,wBAAwB,CAC5B,OACA,MAAuB,QACH;AACpB,MAAI,SAAS;AAAa,WAAA;AAC1B,SAAOC,IAAAA,YAAU,UAAU,GAAG,MAAM,MAAM,YAAY;AACxD;AAEO,MAAM,OAAO,CAAC;AAAA,EACnB;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA,WAAAA,aAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,GAAG;AACL,MAA+B;AACzB,MAAA;AACJ,MAAIA,eAAc;AAChB,qEACGC,OAAAA,OAAA,EAAY,WAAU,KAAI,MAAK,SAC7B,UAAA;AAAA,MAAA;AAAA,MACA,YAAY,QAASL,2BAAA,kBAAA,IAAA,UAAA,EAAU,UAAS,UAAA;AAAA,IAC3C,EAAA,CAAA;AAAA;AAGF,mBAEKM,2BAAA,kBAAA,KAAAC,uCAAA,EAAA,UAAA;AAAA,MAAA;AAAA,MACA,YAAY,QAASP,2BAAA,kBAAA,IAAA,UAAA,EAAU,UAAS,UAAA;AAAA,IAC3C,EAAA,CAAA;AAIF,SAAAM,2BAAA,kBAAA;AAAA,IAACD,OAAM;AAAA,IAAN;AAAA,MACC,WAAWH,IAAI,IAAAA,IAAA,IAAI,EAAE,YAAY,GAAG,SAAS;AAAA,MAC7C,WAAWE;AAAAA,MACX;AAAA,MACA,OAAO,sBAAsB,OAAOA,UAAS;AAAA,MAC5C,GAAG;AAAA,MAEH,UAAA;AAAA,QAAa,aAAAJ,2BAAAA,kBAAAA,IAAC,SAAO,UAAM,MAAA,CAAA;AAAA,QAC3B;AAAA,MAAA;AAAA,IAAA;AAAA,EAAA;AAGP;AAYO,MAAM,iBAAiB,CAK5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAyD;;AACvD,QAAM,EAAE,OAAO,WAAW,IAAIQ,4BAAwB;AAAA,IACpD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA,CACD;AACD,MAAI,SAAS;AAAM,YAAQ,aAAa,IAAI;AAE1C,SAAAR,iDAAC,QAAK,KAAK,MAAM,KAAK,OAAc,WAAU,gBAAW,UAAX,mBAAkB,SAAU,GAAG,OAC1E,UAAA,SAAS,EAAE,OAAO,MAAM,OAAO,UAAU,MAAM,SAAU,CAAA,EAC5D,CAAA;AAEJ;;;;;"}
@@ -0,0 +1,14 @@
1
+ import { j as jsxRuntimeExports } from "./jsx-runtime-rX5tAIG2.js";
2
+ import { C as CSS } from "./css-NTD4Xm8x.js";
3
+ import { g as Text } from "./Toggle-kLunfJtR.js";
4
+ const Keyboard = ({
5
+ className,
6
+ ...props
7
+ }) => (
8
+ // @ts-expect-error
9
+ /* @__PURE__ */ jsxRuntimeExports.jsx(Text, { className: CSS(className, CSS.BM("text", "keyboard")), ...props })
10
+ );
11
+ export {
12
+ Keyboard as K
13
+ };
14
+ //# sourceMappingURL=Keyboard-mE03PKwA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Keyboard-mE03PKwA.js","sources":["../src/text/Keyboard.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 { type ReactElement } from \"react\";\n\nimport { CSS } from \"@/css\";\nimport { type TextProps, Text } from \"@/text/Text\";\nimport { type Level } from \"@/text/types\";\n\nimport \"@/text/Keyboard.css\";\n\nexport type KeyboardProps<L extends Level = \"h1\"> = TextProps<L>;\n\nexport const Keyboard = <L extends Level = \"p\">({\n className,\n ...props\n}: KeyboardProps<L>): ReactElement => (\n // @ts-expect-error\n <Text<L> className={CSS(className, CSS.BM(\"text\", \"keyboard\"))} {...props} />\n);\n"],"names":["jsx"],"mappings":";;;AAmBO,MAAM,WAAW,CAAwB;AAAA,EAC9C;AAAA,EACA,GAAG;AACL;AAAA;AAAA,EAEGA,kCAAAA,IAAA,MAAA,EAAQ,WAAW,IAAI,WAAW,IAAI,GAAG,QAAQ,UAAU,CAAC,GAAI,GAAG,MAAO,CAAA;AAAA;"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ const jsxRuntime = require("./jsx-runtime-N1ikfypN.cjs");
3
+ const css = require("./css-V3VUT_Js.cjs");
4
+ const Toggle = require("./Toggle-eOKYw1OT.cjs");
5
+ const Keyboard = ({
6
+ className,
7
+ ...props
8
+ }) => (
9
+ // @ts-expect-error
10
+ /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(Toggle.Text, { className: css.CSS(className, css.CSS.BM("text", "keyboard")), ...props })
11
+ );
12
+ exports.Keyboard = Keyboard;
13
+ //# sourceMappingURL=Keyboard-w372197S.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Keyboard-w372197S.cjs","sources":["../src/text/Keyboard.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 { type ReactElement } from \"react\";\n\nimport { CSS } from \"@/css\";\nimport { type TextProps, Text } from \"@/text/Text\";\nimport { type Level } from \"@/text/types\";\n\nimport \"@/text/Keyboard.css\";\n\nexport type KeyboardProps<L extends Level = \"h1\"> = TextProps<L>;\n\nexport const Keyboard = <L extends Level = \"p\">({\n className,\n ...props\n}: KeyboardProps<L>): ReactElement => (\n // @ts-expect-error\n <Text<L> className={CSS(className, CSS.BM(\"text\", \"keyboard\"))} {...props} />\n);\n"],"names":["jsx","Text","CSS"],"mappings":";;;;AAmBO,MAAM,WAAW,CAAwB;AAAA,EAC9C;AAAA,EACA,GAAG;AACL;AAAA;AAAA,EAEGA,2BAAAA,kBAAAA,IAAAC,OAAAA,MAAA,EAAQ,WAAWC,IAAAA,IAAI,WAAWA,IAAAA,IAAI,GAAG,QAAQ,UAAU,CAAC,GAAI,GAAG,MAAO,CAAA;AAAA;;"}
@@ -0,0 +1,13 @@
1
+ import { j as jsxRuntimeExports } from "./jsx-runtime-rX5tAIG2.js";
2
+ import { B as Button } from "./Toggle-kLunfJtR.js";
3
+ const Link = ({
4
+ href,
5
+ target,
6
+ ...props
7
+ }) => {
8
+ return /* @__PURE__ */ jsxRuntimeExports.jsx(Button, { el: "a", href, ...props });
9
+ };
10
+ export {
11
+ Link as L
12
+ };
13
+ //# sourceMappingURL=Link-laNlv47N.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Link-laNlv47N.js","sources":["../src/button/Link.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 { type ReactElement } from \"react\";\n\nimport { Button, type ButtonProps } from \"@/button/Button\";\nimport { type Text } from \"@/text\";\n\n/** Props for the {@link Link} component. */\nexport interface LinkProps<L extends Text.Level = \"h1\">\n extends ButtonProps,\n Pick<Text.LinkProps<L>, \"href\" | \"target\"> {}\n/**\n * Use.Link renders a button that looks like a link and redirects to the given href\n * when clicked.\n *\n * @param props - Props for the component. Identical to the props for the Use component,\n * excluding 'variant', and adding the following:\n * @param props.href - The URL to redirect to when the button is clicked.\n * @param props.target - The target of the link. Defaults to \"_self\".\n */\n\nexport const Link = <L extends Text.Level = \"h1\">({\n href,\n target,\n ...props\n}: LinkProps<L>): ReactElement => {\n // @ts-expect-error\n return <Button<\"a\"> el=\"a\" href={href} {...props} />;\n};\n"],"names":[],"mappings":";;AA4BO,MAAM,OAAO,CAA8B;AAAA,EAChD;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAkC;AAEhC,+CAAQ,QAAY,EAAA,IAAG,KAAI,MAAa,GAAG,MAAO,CAAA;AACpD;"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ const jsxRuntime = require("./jsx-runtime-N1ikfypN.cjs");
3
+ const Toggle = require("./Toggle-eOKYw1OT.cjs");
4
+ const Link = ({
5
+ href,
6
+ target,
7
+ ...props
8
+ }) => {
9
+ return /* @__PURE__ */ jsxRuntime.jsxRuntimeExports.jsx(Toggle.Button, { el: "a", href, ...props });
10
+ };
11
+ exports.Link = Link;
12
+ //# sourceMappingURL=Link-xlTZan29.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Link-xlTZan29.cjs","sources":["../src/button/Link.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 { type ReactElement } from \"react\";\n\nimport { Button, type ButtonProps } from \"@/button/Button\";\nimport { type Text } from \"@/text\";\n\n/** Props for the {@link Link} component. */\nexport interface LinkProps<L extends Text.Level = \"h1\">\n extends ButtonProps,\n Pick<Text.LinkProps<L>, \"href\" | \"target\"> {}\n/**\n * Use.Link renders a button that looks like a link and redirects to the given href\n * when clicked.\n *\n * @param props - Props for the component. Identical to the props for the Use component,\n * excluding 'variant', and adding the following:\n * @param props.href - The URL to redirect to when the button is clicked.\n * @param props.target - The target of the link. Defaults to \"_self\".\n */\n\nexport const Link = <L extends Text.Level = \"h1\">({\n href,\n target,\n ...props\n}: LinkProps<L>): ReactElement => {\n // @ts-expect-error\n return <Button<\"a\"> el=\"a\" href={href} {...props} />;\n};\n"],"names":["Button"],"mappings":";;;AA4BO,MAAM,OAAO,CAA8B;AAAA,EAChD;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAkC;AAEhC,0DAAQA,OAAY,QAAA,EAAA,IAAG,KAAI,MAAa,GAAG,MAAO,CAAA;AACpD;;"}