@langchain/macaw-components 1.0.0-beta.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 (566) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +27 -0
  3. package/dist/_chunks/ErrorState-CmPX01HV.js +13361 -0
  4. package/dist/_chunks/ErrorState-CmPX01HV.js.map +1 -0
  5. package/dist/_chunks/LoadingIndicator-DgtU9aqD.js +80 -0
  6. package/dist/_chunks/LoadingIndicator-DgtU9aqD.js.map +1 -0
  7. package/dist/base.css +305 -0
  8. package/dist/catalog.json +1675 -0
  9. package/dist/components/Avatar/Avatar.d.ts +28 -0
  10. package/dist/components/Avatar/Avatar.js +47 -0
  11. package/dist/components/Avatar/Avatar.js.map +1 -0
  12. package/dist/components/Avatar/index.d.ts +2 -0
  13. package/dist/components/Avatar/index.js +2 -0
  14. package/dist/components/Badge/Badge.d.ts +25 -0
  15. package/dist/components/Badge/Badge.js +82 -0
  16. package/dist/components/Badge/Badge.js.map +1 -0
  17. package/dist/components/Badge/index.d.ts +2 -0
  18. package/dist/components/Badge/index.js +2 -0
  19. package/dist/components/Banner/Banner.d.ts +15 -0
  20. package/dist/components/Banner/Banner.js +102 -0
  21. package/dist/components/Banner/Banner.js.map +1 -0
  22. package/dist/components/Banner/index.d.ts +2 -0
  23. package/dist/components/Banner/index.js +2 -0
  24. package/dist/components/BarChart/AnimatedBar.d.ts +20 -0
  25. package/dist/components/BarChart/AnimatedBar.js +65 -0
  26. package/dist/components/BarChart/AnimatedBar.js.map +1 -0
  27. package/dist/components/BarChart/BarChart.d.ts +25 -0
  28. package/dist/components/BarChart/BarChart.js +248 -0
  29. package/dist/components/BarChart/BarChart.js.map +1 -0
  30. package/dist/components/BarChart/BarChart.types.d.ts +239 -0
  31. package/dist/components/BarChart/BarChart.types.js +0 -0
  32. package/dist/components/BarChart/BarChart.utils.d.ts +51 -0
  33. package/dist/components/BarChart/BarChart.utils.js +215 -0
  34. package/dist/components/BarChart/BarChart.utils.js.map +1 -0
  35. package/dist/components/BarChart/BarChartAxes.d.ts +22 -0
  36. package/dist/components/BarChart/BarChartAxes.js +144 -0
  37. package/dist/components/BarChart/BarChartAxes.js.map +1 -0
  38. package/dist/components/BarChart/BarChartGuides.d.ts +22 -0
  39. package/dist/components/BarChart/BarChartGuides.js +83 -0
  40. package/dist/components/BarChart/BarChartGuides.js.map +1 -0
  41. package/dist/components/BarChart/BarChartPlot.d.ts +40 -0
  42. package/dist/components/BarChart/BarChartPlot.js +262 -0
  43. package/dist/components/BarChart/BarChartPlot.js.map +1 -0
  44. package/dist/components/BarChart/constants.d.ts +21 -0
  45. package/dist/components/BarChart/constants.js +26 -0
  46. package/dist/components/BarChart/constants.js.map +1 -0
  47. package/dist/components/BarChart/index.d.ts +3 -0
  48. package/dist/components/BarChart/index.js +3 -0
  49. package/dist/components/Button/Button.d.ts +36 -0
  50. package/dist/components/Button/Button.js +99 -0
  51. package/dist/components/Button/Button.js.map +1 -0
  52. package/dist/components/Button/constants.d.ts +26 -0
  53. package/dist/components/Button/constants.js +31 -0
  54. package/dist/components/Button/constants.js.map +1 -0
  55. package/dist/components/Button/index.d.ts +2 -0
  56. package/dist/components/Button/index.js +2 -0
  57. package/dist/components/ButtonGroup/ButtonGroup.d.ts +30 -0
  58. package/dist/components/ButtonGroup/ButtonGroup.js +26 -0
  59. package/dist/components/ButtonGroup/ButtonGroup.js.map +1 -0
  60. package/dist/components/ButtonGroup/index.d.ts +2 -0
  61. package/dist/components/ButtonGroup/index.js +2 -0
  62. package/dist/components/Card/Card.d.ts +10 -0
  63. package/dist/components/Card/Card.js +23 -0
  64. package/dist/components/Card/Card.js.map +1 -0
  65. package/dist/components/Card/index.d.ts +2 -0
  66. package/dist/components/Card/index.js +2 -0
  67. package/dist/components/ChartCard/ChartCard.d.ts +53 -0
  68. package/dist/components/ChartCard/ChartCard.js +172 -0
  69. package/dist/components/ChartCard/ChartCard.js.map +1 -0
  70. package/dist/components/ChartCard/ChartCardSkeleton.d.ts +7 -0
  71. package/dist/components/ChartCard/ChartCardSkeleton.js +61 -0
  72. package/dist/components/ChartCard/ChartCardSkeleton.js.map +1 -0
  73. package/dist/components/ChartCard/index.d.ts +4 -0
  74. package/dist/components/ChartCard/index.js +3 -0
  75. package/dist/components/ChartLegend/ChartLegend.d.ts +19 -0
  76. package/dist/components/ChartLegend/ChartLegend.js +195 -0
  77. package/dist/components/ChartLegend/ChartLegend.js.map +1 -0
  78. package/dist/components/ChartLegend/ChartLegendItemRenderer.d.ts +14 -0
  79. package/dist/components/ChartLegend/ChartLegendItemRenderer.js +90 -0
  80. package/dist/components/ChartLegend/ChartLegendItemRenderer.js.map +1 -0
  81. package/dist/components/ChartLegend/index.d.ts +3 -0
  82. package/dist/components/ChartLegend/index.js +3 -0
  83. package/dist/components/ChartLegend/useChartLegendActiveItem.d.ts +7 -0
  84. package/dist/components/ChartLegend/useChartLegendActiveItem.js +35 -0
  85. package/dist/components/ChartLegend/useChartLegendActiveItem.js.map +1 -0
  86. package/dist/components/ChartLegend/utils.d.ts +20 -0
  87. package/dist/components/ChartLegend/utils.js +33 -0
  88. package/dist/components/ChartLegend/utils.js.map +1 -0
  89. package/dist/components/ChartTooltip/ChartTooltip.d.ts +23 -0
  90. package/dist/components/ChartTooltip/ChartTooltip.js +83 -0
  91. package/dist/components/ChartTooltip/ChartTooltip.js.map +1 -0
  92. package/dist/components/ChartTooltip/index.d.ts +2 -0
  93. package/dist/components/ChartTooltip/index.js +2 -0
  94. package/dist/components/Checkbox/Checkbox.d.ts +58 -0
  95. package/dist/components/Checkbox/Checkbox.js +50 -0
  96. package/dist/components/Checkbox/Checkbox.js.map +1 -0
  97. package/dist/components/Checkbox/constants.d.ts +28 -0
  98. package/dist/components/Checkbox/constants.js +57 -0
  99. package/dist/components/Checkbox/constants.js.map +1 -0
  100. package/dist/components/Checkbox/getCheckedState.d.ts +6 -0
  101. package/dist/components/Checkbox/getCheckedState.js +14 -0
  102. package/dist/components/Checkbox/getCheckedState.js.map +1 -0
  103. package/dist/components/Checkbox/index.d.ts +3 -0
  104. package/dist/components/Checkbox/index.js +3 -0
  105. package/dist/components/CircularProgress/CircularProgress.d.ts +54 -0
  106. package/dist/components/CircularProgress/CircularProgress.js +85 -0
  107. package/dist/components/CircularProgress/CircularProgress.js.map +1 -0
  108. package/dist/components/CircularProgress/index.d.ts +2 -0
  109. package/dist/components/CircularProgress/index.js +2 -0
  110. package/dist/components/Code/Code.utils.d.ts +24 -0
  111. package/dist/components/Code/Code.utils.js +160 -0
  112. package/dist/components/Code/Code.utils.js.map +1 -0
  113. package/dist/components/Code/CodeLite.d.ts +19 -0
  114. package/dist/components/Code/CodeLite.js +146 -0
  115. package/dist/components/Code/CodeLite.js.map +1 -0
  116. package/dist/components/Code/CodeLite.utils.d.ts +24 -0
  117. package/dist/components/Code/CodeLite.utils.js +273 -0
  118. package/dist/components/Code/CodeLite.utils.js.map +1 -0
  119. package/dist/components/Code/ImageReplacerExtension.d.ts +9 -0
  120. package/dist/components/Code/ImageReplacerExtension.js +227 -0
  121. package/dist/components/Code/ImageReplacerExtension.js.map +1 -0
  122. package/dist/components/Code/JsonHighlighterExtension.d.ts +4 -0
  123. package/dist/components/Code/JsonHighlighterExtension.js +172 -0
  124. package/dist/components/Code/JsonHighlighterExtension.js.map +1 -0
  125. package/dist/components/Code/constants.d.ts +6 -0
  126. package/dist/components/Code/constants.js +11 -0
  127. package/dist/components/Code/constants.js.map +1 -0
  128. package/dist/components/Code/index.d.ts +30 -0
  129. package/dist/components/Code/index.js +140 -0
  130. package/dist/components/Code/index.js.map +1 -0
  131. package/dist/components/Code/languages/json.d.ts +1 -0
  132. package/dist/components/Code/languages/json.js +7 -0
  133. package/dist/components/Code/languages/json.js.map +1 -0
  134. package/dist/components/Code/languages/languages.d.ts +7 -0
  135. package/dist/components/Code/languages/languages.js +12 -0
  136. package/dist/components/Code/languages/languages.js.map +1 -0
  137. package/dist/components/Code/languages/python.d.ts +1 -0
  138. package/dist/components/Code/languages/python.js +7 -0
  139. package/dist/components/Code/languages/python.js.map +1 -0
  140. package/dist/components/Code/languages/shell.d.ts +7 -0
  141. package/dist/components/Code/languages/shell.js +241 -0
  142. package/dist/components/Code/languages/shell.js.map +1 -0
  143. package/dist/components/Code/languages/typescript.d.ts +1 -0
  144. package/dist/components/Code/languages/typescript.js +7 -0
  145. package/dist/components/Code/languages/typescript.js.map +1 -0
  146. package/dist/components/Code/languages/yaml.d.ts +2 -0
  147. package/dist/components/Code/languages/yaml.js +44 -0
  148. package/dist/components/Code/languages/yaml.js.map +1 -0
  149. package/dist/components/Code/types.d.ts +8 -0
  150. package/dist/components/Code/types.js +0 -0
  151. package/dist/components/Code/utils.d.ts +4 -0
  152. package/dist/components/Code/utils.js +27 -0
  153. package/dist/components/Code/utils.js.map +1 -0
  154. package/dist/components/Command/Command.d.ts +78 -0
  155. package/dist/components/Command/Command.js +78 -0
  156. package/dist/components/Command/Command.js.map +1 -0
  157. package/dist/components/Command/CommandMenu.d.ts +65 -0
  158. package/dist/components/Command/CommandMenu.js +101 -0
  159. package/dist/components/Command/CommandMenu.js.map +1 -0
  160. package/dist/components/Command/index.d.ts +4 -0
  161. package/dist/components/Command/index.js +3 -0
  162. package/dist/components/ContextMenu/ContextMenu.d.ts +9 -0
  163. package/dist/components/ContextMenu/ContextMenu.js +43 -0
  164. package/dist/components/ContextMenu/ContextMenu.js.map +1 -0
  165. package/dist/components/ContextMenu/index.d.ts +1 -0
  166. package/dist/components/ContextMenu/index.js +2 -0
  167. package/dist/components/CopyButton/CopyButton.d.ts +24 -0
  168. package/dist/components/CopyButton/CopyButton.js +121 -0
  169. package/dist/components/CopyButton/CopyButton.js.map +1 -0
  170. package/dist/components/CopyButton/copyToClipboard.d.ts +1 -0
  171. package/dist/components/CopyButton/copyToClipboard.js +29 -0
  172. package/dist/components/CopyButton/copyToClipboard.js.map +1 -0
  173. package/dist/components/CopyButton/index.d.ts +4 -0
  174. package/dist/components/CopyButton/index.js +4 -0
  175. package/dist/components/CopyButton/useCopy.d.ts +10 -0
  176. package/dist/components/CopyButton/useCopy.js +46 -0
  177. package/dist/components/CopyButton/useCopy.js.map +1 -0
  178. package/dist/components/Dialog/index.d.ts +49 -0
  179. package/dist/components/Dialog/index.js +130 -0
  180. package/dist/components/Dialog/index.js.map +1 -0
  181. package/dist/components/Divider/Divider.d.ts +9 -0
  182. package/dist/components/Divider/Divider.js +27 -0
  183. package/dist/components/Divider/Divider.js.map +1 -0
  184. package/dist/components/Divider/index.d.ts +2 -0
  185. package/dist/components/Divider/index.js +2 -0
  186. package/dist/components/DonutChart/DonutChart.d.ts +101 -0
  187. package/dist/components/DonutChart/DonutChart.js +197 -0
  188. package/dist/components/DonutChart/DonutChart.js.map +1 -0
  189. package/dist/components/DonutChart/DonutChart.utils.d.ts +38 -0
  190. package/dist/components/DonutChart/DonutChart.utils.js +93 -0
  191. package/dist/components/DonutChart/DonutChart.utils.js.map +1 -0
  192. package/dist/components/DonutChart/constants.d.ts +7 -0
  193. package/dist/components/DonutChart/constants.js +12 -0
  194. package/dist/components/DonutChart/constants.js.map +1 -0
  195. package/dist/components/DonutChart/index.d.ts +4 -0
  196. package/dist/components/DonutChart/index.js +4 -0
  197. package/dist/components/DropdownMenu/DropdownMenu.d.ts +24 -0
  198. package/dist/components/DropdownMenu/DropdownMenu.js +149 -0
  199. package/dist/components/DropdownMenu/DropdownMenu.js.map +1 -0
  200. package/dist/components/DropdownMenu/index.d.ts +1 -0
  201. package/dist/components/DropdownMenu/index.js +2 -0
  202. package/dist/components/EmptyState/EmptyState.d.ts +26 -0
  203. package/dist/components/EmptyState/EmptyState.js +85 -0
  204. package/dist/components/EmptyState/EmptyState.js.map +1 -0
  205. package/dist/components/EmptyState/index.d.ts +2 -0
  206. package/dist/components/EmptyState/index.js +2 -0
  207. package/dist/components/ErrorBoundary.d.ts +35 -0
  208. package/dist/components/ErrorBoundary.js +41 -0
  209. package/dist/components/ErrorBoundary.js.map +1 -0
  210. package/dist/components/ErrorMessage/ErrorMessage.d.ts +17 -0
  211. package/dist/components/ErrorMessage/ErrorMessage.js +146 -0
  212. package/dist/components/ErrorMessage/ErrorMessage.js.map +1 -0
  213. package/dist/components/ErrorMessage/index.d.ts +2 -0
  214. package/dist/components/ErrorMessage/index.js +2 -0
  215. package/dist/components/ErrorState/ErrorState.d.ts +23 -0
  216. package/dist/components/ErrorState/ErrorState.js +2 -0
  217. package/dist/components/ErrorState/index.d.ts +2 -0
  218. package/dist/components/ErrorState/index.js +2 -0
  219. package/dist/components/GroupedTabs/GroupedTabs.d.ts +31 -0
  220. package/dist/components/GroupedTabs/GroupedTabs.js +92 -0
  221. package/dist/components/GroupedTabs/GroupedTabs.js.map +1 -0
  222. package/dist/components/GroupedTabs/index.d.ts +2 -0
  223. package/dist/components/GroupedTabs/index.js +2 -0
  224. package/dist/components/HoverCard.d.ts +4 -0
  225. package/dist/components/HoverCard.js +34 -0
  226. package/dist/components/HoverCard.js.map +1 -0
  227. package/dist/components/Icon/Icon.d.ts +25 -0
  228. package/dist/components/Icon/Icon.js +57 -0
  229. package/dist/components/Icon/Icon.js.map +1 -0
  230. package/dist/components/Icon/index.d.ts +2 -0
  231. package/dist/components/Icon/index.js +2 -0
  232. package/dist/components/IconButton/IconButton.d.ts +35 -0
  233. package/dist/components/IconButton/IconButton.js +73 -0
  234. package/dist/components/IconButton/IconButton.js.map +1 -0
  235. package/dist/components/IconButton/index.d.ts +2 -0
  236. package/dist/components/IconButton/index.js +2 -0
  237. package/dist/components/Input/Input.d.ts +72 -0
  238. package/dist/components/Input/Input.js +221 -0
  239. package/dist/components/Input/Input.js.map +1 -0
  240. package/dist/components/Input/index.d.ts +2 -0
  241. package/dist/components/Input/index.js +2 -0
  242. package/dist/components/Input/inputStyles.d.ts +28 -0
  243. package/dist/components/Input/inputStyles.js +45 -0
  244. package/dist/components/Input/inputStyles.js.map +1 -0
  245. package/dist/components/Kbd/Kbd.d.ts +15 -0
  246. package/dist/components/Kbd/Kbd.js +30 -0
  247. package/dist/components/Kbd/Kbd.js.map +1 -0
  248. package/dist/components/Kbd/index.d.ts +2 -0
  249. package/dist/components/Kbd/index.js +2 -0
  250. package/dist/components/LineChart/LineChart.d.ts +8 -0
  251. package/dist/components/LineChart/LineChart.js +194 -0
  252. package/dist/components/LineChart/LineChart.js.map +1 -0
  253. package/dist/components/LineChart/LineChart.types.d.ts +138 -0
  254. package/dist/components/LineChart/LineChart.types.js +0 -0
  255. package/dist/components/LineChart/LineChart.utils.d.ts +29 -0
  256. package/dist/components/LineChart/LineChart.utils.js +123 -0
  257. package/dist/components/LineChart/LineChart.utils.js.map +1 -0
  258. package/dist/components/LineChart/LineChartPlot.d.ts +43 -0
  259. package/dist/components/LineChart/LineChartPlot.js +306 -0
  260. package/dist/components/LineChart/LineChartPlot.js.map +1 -0
  261. package/dist/components/LineChart/constants.d.ts +3 -0
  262. package/dist/components/LineChart/constants.js +8 -0
  263. package/dist/components/LineChart/constants.js.map +1 -0
  264. package/dist/components/LineChart/index.d.ts +2 -0
  265. package/dist/components/LineChart/index.js +2 -0
  266. package/dist/components/LinearProgress/LinearProgress.d.ts +16 -0
  267. package/dist/components/LinearProgress/LinearProgress.js +42 -0
  268. package/dist/components/LinearProgress/LinearProgress.js.map +1 -0
  269. package/dist/components/LinearProgress/index.d.ts +2 -0
  270. package/dist/components/LinearProgress/index.js +2 -0
  271. package/dist/components/Link/Link.d.ts +30 -0
  272. package/dist/components/Link/Link.js +51 -0
  273. package/dist/components/Link/Link.js.map +1 -0
  274. package/dist/components/Link/index.d.ts +2 -0
  275. package/dist/components/Link/index.js +2 -0
  276. package/dist/components/Logo/index.d.ts +17 -0
  277. package/dist/components/Logo/index.js +705 -0
  278. package/dist/components/Logo/index.js.map +1 -0
  279. package/dist/components/MetricChart/MetricChart.d.ts +9 -0
  280. package/dist/components/MetricChart/MetricChart.js +42 -0
  281. package/dist/components/MetricChart/MetricChart.js.map +1 -0
  282. package/dist/components/MetricChart/formatters.d.ts +18 -0
  283. package/dist/components/MetricChart/formatters.js +34 -0
  284. package/dist/components/MetricChart/formatters.js.map +1 -0
  285. package/dist/components/MetricChart/index.d.ts +4 -0
  286. package/dist/components/MetricChart/index.js +3 -0
  287. package/dist/components/Pane/Pane.d.ts +29 -0
  288. package/dist/components/Pane/Pane.js +171 -0
  289. package/dist/components/Pane/Pane.js.map +1 -0
  290. package/dist/components/Pane/Pane.utils.d.ts +10 -0
  291. package/dist/components/Pane/Pane.utils.js +7 -0
  292. package/dist/components/Pane/Pane.utils.js.map +1 -0
  293. package/dist/components/Pane/index.d.ts +3 -0
  294. package/dist/components/Pane/index.js +3 -0
  295. package/dist/components/PlainTextEditor/hooks/useResizeTextEditor.d.ts +9 -0
  296. package/dist/components/PlainTextEditor/hooks/useResizeTextEditor.js +76 -0
  297. package/dist/components/PlainTextEditor/hooks/useResizeTextEditor.js.map +1 -0
  298. package/dist/components/PlainTextEditor/index.d.ts +18 -0
  299. package/dist/components/PlainTextEditor/index.js +71 -0
  300. package/dist/components/PlainTextEditor/index.js.map +1 -0
  301. package/dist/components/Popover/Popover.d.ts +13 -0
  302. package/dist/components/Popover/Popover.js +48 -0
  303. package/dist/components/Popover/Popover.js.map +1 -0
  304. package/dist/components/Popover/constants.d.ts +1 -0
  305. package/dist/components/Popover/constants.js +6 -0
  306. package/dist/components/Popover/constants.js.map +1 -0
  307. package/dist/components/Popover/index.d.ts +1 -0
  308. package/dist/components/Popover/index.js +2 -0
  309. package/dist/components/PortalSlot.d.ts +11 -0
  310. package/dist/components/PortalSlot.js +41 -0
  311. package/dist/components/PortalSlot.js.map +1 -0
  312. package/dist/components/ProgressBar/ProgressBar.d.ts +38 -0
  313. package/dist/components/ProgressBar/ProgressBar.js +82 -0
  314. package/dist/components/ProgressBar/ProgressBar.js.map +1 -0
  315. package/dist/components/ProgressBar/index.d.ts +2 -0
  316. package/dist/components/ProgressBar/index.js +2 -0
  317. package/dist/components/RadioButton/RadioButton.d.ts +62 -0
  318. package/dist/components/RadioButton/RadioButton.js +38 -0
  319. package/dist/components/RadioButton/RadioButton.js.map +1 -0
  320. package/dist/components/RadioButton/constants.d.ts +30 -0
  321. package/dist/components/RadioButton/constants.js +55 -0
  322. package/dist/components/RadioButton/constants.js.map +1 -0
  323. package/dist/components/RadioButton/index.d.ts +2 -0
  324. package/dist/components/RadioButton/index.js +2 -0
  325. package/dist/components/RadioCard/RadioCard.d.ts +26 -0
  326. package/dist/components/RadioCard/RadioCard.js +43 -0
  327. package/dist/components/RadioCard/RadioCard.js.map +1 -0
  328. package/dist/components/RadioCard/index.d.ts +2 -0
  329. package/dist/components/RadioCard/index.js +2 -0
  330. package/dist/components/RadioGroup/RadioGroup.d.ts +5 -0
  331. package/dist/components/RadioGroup/RadioGroup.js +17 -0
  332. package/dist/components/RadioGroup/RadioGroup.js.map +1 -0
  333. package/dist/components/RadioGroup/RadioGroupItem.d.ts +5 -0
  334. package/dist/components/RadioGroup/RadioGroupItem.js +22 -0
  335. package/dist/components/RadioGroup/RadioGroupItem.js.map +1 -0
  336. package/dist/components/RadioGroup/index.d.ts +4 -0
  337. package/dist/components/RadioGroup/index.js +3 -0
  338. package/dist/components/Select/Select.d.ts +84 -0
  339. package/dist/components/Select/Select.js +120 -0
  340. package/dist/components/Select/Select.js.map +1 -0
  341. package/dist/components/Select/SelectPrimitive.d.ts +17 -0
  342. package/dist/components/Select/SelectPrimitive.js +126 -0
  343. package/dist/components/Select/SelectPrimitive.js.map +1 -0
  344. package/dist/components/Select/index.d.ts +4 -0
  345. package/dist/components/Select/index.js +3 -0
  346. package/dist/components/Skeleton/Skeleton.d.ts +13 -0
  347. package/dist/components/Skeleton/Skeleton.js +25 -0
  348. package/dist/components/Skeleton/Skeleton.js.map +1 -0
  349. package/dist/components/Skeleton/index.d.ts +1 -0
  350. package/dist/components/Skeleton/index.js +2 -0
  351. package/dist/components/Slider/Slider.d.ts +33 -0
  352. package/dist/components/Slider/Slider.js +64 -0
  353. package/dist/components/Slider/Slider.js.map +1 -0
  354. package/dist/components/Slider/index.d.ts +2 -0
  355. package/dist/components/Slider/index.js +2 -0
  356. package/dist/components/SparkLineChart/SparkLineChart.d.ts +14 -0
  357. package/dist/components/SparkLineChart/SparkLineChart.js +112 -0
  358. package/dist/components/SparkLineChart/SparkLineChart.js.map +1 -0
  359. package/dist/components/SparkLineChart/index.d.ts +2 -0
  360. package/dist/components/SparkLineChart/index.js +2 -0
  361. package/dist/components/Spinner/Spinner.d.ts +12 -0
  362. package/dist/components/Spinner/Spinner.js +33 -0
  363. package/dist/components/Spinner/Spinner.js.map +1 -0
  364. package/dist/components/Spinner/index.d.ts +1 -0
  365. package/dist/components/Spinner/index.js +2 -0
  366. package/dist/components/SplitViewPane/SplitViewPane.d.ts +41 -0
  367. package/dist/components/SplitViewPane/SplitViewPane.js +314 -0
  368. package/dist/components/SplitViewPane/SplitViewPane.js.map +1 -0
  369. package/dist/components/SplitViewPane/SplitViewPaneHeader.d.ts +22 -0
  370. package/dist/components/SplitViewPane/SplitViewPaneHeader.js +105 -0
  371. package/dist/components/SplitViewPane/SplitViewPaneHeader.js.map +1 -0
  372. package/dist/components/SplitViewPane/index.d.ts +2 -0
  373. package/dist/components/SplitViewPane/index.js +3 -0
  374. package/dist/components/SplitViewPane/openPaneRegistry.d.ts +2 -0
  375. package/dist/components/SplitViewPane/openPaneRegistry.js +49 -0
  376. package/dist/components/SplitViewPane/openPaneRegistry.js.map +1 -0
  377. package/dist/components/Switch/Switch.d.ts +35 -0
  378. package/dist/components/Switch/Switch.js +65 -0
  379. package/dist/components/Switch/Switch.js.map +1 -0
  380. package/dist/components/Switch/index.d.ts +2 -0
  381. package/dist/components/Switch/index.js +2 -0
  382. package/dist/components/Tabs/index.d.ts +27 -0
  383. package/dist/components/Tabs/index.js +45 -0
  384. package/dist/components/Tabs/index.js.map +1 -0
  385. package/dist/components/Text/Text.d.ts +13 -0
  386. package/dist/components/Text/Text.js +58 -0
  387. package/dist/components/Text/Text.js.map +1 -0
  388. package/dist/components/Text/index.d.ts +2 -0
  389. package/dist/components/Text/index.js +2 -0
  390. package/dist/components/TextVirtualizer.d.ts +8 -0
  391. package/dist/components/TextVirtualizer.js +53 -0
  392. package/dist/components/TextVirtualizer.js.map +1 -0
  393. package/dist/components/TextWithLinks.d.ts +6 -0
  394. package/dist/components/TextWithLinks.js +61 -0
  395. package/dist/components/TextWithLinks.js.map +1 -0
  396. package/dist/components/Textarea/Textarea.d.ts +47 -0
  397. package/dist/components/Textarea/Textarea.js +150 -0
  398. package/dist/components/Textarea/Textarea.js.map +1 -0
  399. package/dist/components/Textarea/index.d.ts +2 -0
  400. package/dist/components/Textarea/index.js +2 -0
  401. package/dist/components/ThinkingState/LoadingIndicator.d.ts +19 -0
  402. package/dist/components/ThinkingState/LoadingIndicator.js +2 -0
  403. package/dist/components/ThinkingState/NOTICE +25 -0
  404. package/dist/components/ThinkingState/ThinkingState.d.ts +21 -0
  405. package/dist/components/ThinkingState/ThinkingState.js +42 -0
  406. package/dist/components/ThinkingState/ThinkingState.js.map +1 -0
  407. package/dist/components/ThinkingState/ThinkingStateTimer.d.ts +9 -0
  408. package/dist/components/ThinkingState/ThinkingStateTimer.js +43 -0
  409. package/dist/components/ThinkingState/ThinkingStateTimer.js.map +1 -0
  410. package/dist/components/ThinkingState/index.d.ts +4 -0
  411. package/dist/components/ThinkingState/index.js +3 -0
  412. package/dist/components/Toast/ToastContext.d.ts +5 -0
  413. package/dist/components/Toast/ToastContext.js +9 -0
  414. package/dist/components/Toast/ToastContext.js.map +1 -0
  415. package/dist/components/Toast/index.d.ts +13 -0
  416. package/dist/components/Toast/index.js +166 -0
  417. package/dist/components/Toast/index.js.map +1 -0
  418. package/dist/components/Toast/useToast.d.ts +3 -0
  419. package/dist/components/Toast/useToast.js +11 -0
  420. package/dist/components/Toast/useToast.js.map +1 -0
  421. package/dist/components/Tooltip/Tooltip.d.ts +19 -0
  422. package/dist/components/Tooltip/Tooltip.js +57 -0
  423. package/dist/components/Tooltip/Tooltip.js.map +1 -0
  424. package/dist/components/Tooltip/index.d.ts +3 -0
  425. package/dist/components/Tooltip/index.js +3 -0
  426. package/dist/components/TopList/TopList.d.ts +3 -0
  427. package/dist/components/TopList/TopList.js +186 -0
  428. package/dist/components/TopList/TopList.js.map +1 -0
  429. package/dist/components/TopList/TopList.types.d.ts +34 -0
  430. package/dist/components/TopList/TopList.types.js +0 -0
  431. package/dist/components/TopList/TopList.utils.d.ts +3 -0
  432. package/dist/components/TopList/TopList.utils.js +16 -0
  433. package/dist/components/TopList/TopList.utils.js.map +1 -0
  434. package/dist/components/TopList/index.d.ts +2 -0
  435. package/dist/components/TopList/index.js +2 -0
  436. package/dist/components/Typeahead/Typeahead.d.ts +5 -0
  437. package/dist/components/Typeahead/Typeahead.js +305 -0
  438. package/dist/components/Typeahead/Typeahead.js.map +1 -0
  439. package/dist/components/Typeahead/Typeahead.types.d.ts +99 -0
  440. package/dist/components/Typeahead/Typeahead.types.js +0 -0
  441. package/dist/components/Typeahead/Typeahead.utils.d.ts +25 -0
  442. package/dist/components/Typeahead/Typeahead.utils.js +73 -0
  443. package/dist/components/Typeahead/Typeahead.utils.js.map +1 -0
  444. package/dist/components/Typeahead/TypeaheadParts.d.ts +25 -0
  445. package/dist/components/Typeahead/TypeaheadParts.js +109 -0
  446. package/dist/components/Typeahead/TypeaheadParts.js.map +1 -0
  447. package/dist/components/Typeahead/TypeaheadView.d.ts +81 -0
  448. package/dist/components/Typeahead/TypeaheadView.js +228 -0
  449. package/dist/components/Typeahead/TypeaheadView.js.map +1 -0
  450. package/dist/components/Typeahead/index.d.ts +2 -0
  451. package/dist/components/Typeahead/index.js +2 -0
  452. package/dist/components/Typeahead/useTypeaheadDomSync.d.ts +15 -0
  453. package/dist/components/Typeahead/useTypeaheadDomSync.js +43 -0
  454. package/dist/components/Typeahead/useTypeaheadDomSync.js.map +1 -0
  455. package/dist/components/Typeahead/useTypeaheadUncontrolledInput.d.ts +11 -0
  456. package/dist/components/Typeahead/useTypeaheadUncontrolledInput.js +32 -0
  457. package/dist/components/Typeahead/useTypeaheadUncontrolledInput.js.map +1 -0
  458. package/dist/components/UnsavedChangesDialog.d.ts +14 -0
  459. package/dist/components/UnsavedChangesDialog.js +67 -0
  460. package/dist/components/UnsavedChangesDialog.js.map +1 -0
  461. package/dist/components/index.d.ts +58 -0
  462. package/dist/components/index.js +35 -0
  463. package/dist/components.css +102 -0
  464. package/dist/contexts/ErrorReporterContext.d.ts +6 -0
  465. package/dist/contexts/ErrorReporterContext.js +7 -0
  466. package/dist/contexts/ErrorReporterContext.js.map +1 -0
  467. package/dist/hooks/AppThemeProvider.d.ts +8 -0
  468. package/dist/hooks/AppThemeProvider.js +52 -0
  469. package/dist/hooks/AppThemeProvider.js.map +1 -0
  470. package/dist/hooks/useColorScheme.d.ts +20 -0
  471. package/dist/hooks/useColorScheme.js +50 -0
  472. package/dist/hooks/useColorScheme.js.map +1 -0
  473. package/dist/icons/LongTailPhosphorIcons.d.ts +51 -0
  474. package/dist/icons/LongTailPhosphorIcons.js +102 -0
  475. package/dist/icons/LongTailPhosphorIcons.js.map +1 -0
  476. package/dist/icons/PaddedPhosphorIcons.d.ts +17 -0
  477. package/dist/icons/PaddedPhosphorIcons.js +55 -0
  478. package/dist/icons/PaddedPhosphorIcons.js.map +1 -0
  479. package/dist/icons/WeightedPhosphorIcons.d.ts +45 -0
  480. package/dist/icons/WeightedPhosphorIcons.js +96 -0
  481. package/dist/icons/WeightedPhosphorIcons.js.map +1 -0
  482. package/dist/icons/index.d.ts +2 -0
  483. package/dist/icons/index.js +4 -0
  484. package/dist/index.d.ts +1 -0
  485. package/dist/index.js +36 -0
  486. package/dist/styles.css +10 -0
  487. package/dist/utilities.css +2 -0
  488. package/dist/utils/VirtuosoCustomScrollParentContext/index.d.ts +7 -0
  489. package/dist/utils/VirtuosoCustomScrollParentContext/index.js +15 -0
  490. package/dist/utils/VirtuosoCustomScrollParentContext/index.js.map +1 -0
  491. package/dist/utils/VirtuosoCustomScrollParentContext/useScrollParent.d.ts +4 -0
  492. package/dist/utils/VirtuosoCustomScrollParentContext/useScrollParent.js +10 -0
  493. package/dist/utils/VirtuosoCustomScrollParentContext/useScrollParent.js.map +1 -0
  494. package/dist/utils/ZIndexContext.d.ts +5 -0
  495. package/dist/utils/ZIndexContext.js +13 -0
  496. package/dist/utils/ZIndexContext.js.map +1 -0
  497. package/dist/utils/animation.d.ts +37 -0
  498. package/dist/utils/animation.js +42 -0
  499. package/dist/utils/animation.js.map +1 -0
  500. package/dist/utils/chartAxisLayout.d.ts +6 -0
  501. package/dist/utils/chartAxisLayout.js +8 -0
  502. package/dist/utils/chartAxisLayout.js.map +1 -0
  503. package/dist/utils/chartColors.d.ts +38 -0
  504. package/dist/utils/chartColors.js +78 -0
  505. package/dist/utils/chartColors.js.map +1 -0
  506. package/dist/utils/chartConstants.d.ts +10 -0
  507. package/dist/utils/chartConstants.js +15 -0
  508. package/dist/utils/chartConstants.js.map +1 -0
  509. package/dist/utils/chartValues.d.ts +2 -0
  510. package/dist/utils/chartValues.js +36 -0
  511. package/dist/utils/chartValues.js.map +1 -0
  512. package/dist/utils/clamp.d.ts +2 -0
  513. package/dist/utils/clamp.js +7 -0
  514. package/dist/utils/clamp.js.map +1 -0
  515. package/dist/utils/cn.d.ts +2 -0
  516. package/dist/utils/cn.js +191 -0
  517. package/dist/utils/cn.js.map +1 -0
  518. package/dist/utils/componentSizes.d.ts +104 -0
  519. package/dist/utils/componentSizes.js +104 -0
  520. package/dist/utils/componentSizes.js.map +1 -0
  521. package/dist/utils/controlIconSizes.d.ts +10 -0
  522. package/dist/utils/controlIconSizes.js +32 -0
  523. package/dist/utils/controlIconSizes.js.map +1 -0
  524. package/dist/utils/csp-nonce.d.ts +11 -0
  525. package/dist/utils/csp-nonce.js +17 -0
  526. package/dist/utils/csp-nonce.js.map +1 -0
  527. package/dist/utils/get-closest-scroll-parent.d.ts +1 -0
  528. package/dist/utils/get-closest-scroll-parent.js +16 -0
  529. package/dist/utils/get-closest-scroll-parent.js.map +1 -0
  530. package/dist/utils/get-color-by-string.d.ts +1 -0
  531. package/dist/utils/get-color-by-string.js +10 -0
  532. package/dist/utils/get-color-by-string.js.map +1 -0
  533. package/dist/utils/getYAxisLeftMargin.d.ts +10 -0
  534. package/dist/utils/getYAxisLeftMargin.js +20 -0
  535. package/dist/utils/getYAxisLeftMargin.js.map +1 -0
  536. package/dist/utils/icon-types.d.ts +8 -0
  537. package/dist/utils/icon-types.js +0 -0
  538. package/dist/utils/lazy-codemirror-loader.d.ts +70 -0
  539. package/dist/utils/lazy-codemirror-loader.js +79 -0
  540. package/dist/utils/lazy-codemirror-loader.js.map +1 -0
  541. package/dist/utils/merge-refs.d.ts +2 -0
  542. package/dist/utils/merge-refs.js +13 -0
  543. package/dist/utils/merge-refs.js.map +1 -0
  544. package/dist/utils/parseTextLinks.d.ts +7 -0
  545. package/dist/utils/parseTextLinks.js +46 -0
  546. package/dist/utils/parseTextLinks.js.map +1 -0
  547. package/dist/utils/prettify-error-payload.d.ts +7 -0
  548. package/dist/utils/prettify-error-payload.js +188 -0
  549. package/dist/utils/prettify-error-payload.js.map +1 -0
  550. package/dist/utils/spacing.d.ts +30 -0
  551. package/dist/utils/spacing.js +34 -0
  552. package/dist/utils/spacing.js.map +1 -0
  553. package/dist/utils/useCodeMirror.d.ts +7 -0
  554. package/dist/utils/useCodeMirror.js +28 -0
  555. package/dist/utils/useCodeMirror.js.map +1 -0
  556. package/dist/utils/useZIndex.d.ts +52 -0
  557. package/dist/utils/useZIndex.js +62 -0
  558. package/dist/utils/useZIndex.js.map +1 -0
  559. package/dist/utils/zIndices.d.ts +42 -0
  560. package/dist/utils/zIndices.js +46 -0
  561. package/dist/utils/zIndices.js.map +1 -0
  562. package/docs/DESIGN.md +134 -0
  563. package/docs/STYLES.md +568 -0
  564. package/package.json +619 -0
  565. package/tailwind.preset.cjs +738 -0
  566. package/tailwind.preset.d.cts +5 -0
@@ -0,0 +1,76 @@
1
+ import { useEffect, useRef, useState } from "react";
2
+ //#region packages/components/src/components/PlainTextEditor/hooks/useResizeTextEditor.ts
3
+ var useResizeTextEditor = ({ maxHeight, internalValue, textRef }) => {
4
+ const displayDivRef = useRef(null);
5
+ const textareaRef = useRef(null);
6
+ const actualTextRef = textRef ?? textareaRef;
7
+ const [manuallyResized, setManuallyResized] = useState(false);
8
+ const lastContentLength = useRef(internalValue.length);
9
+ const maxHeightPx = maxHeight ? typeof maxHeight === "number" ? `${maxHeight}px` : maxHeight : "300px";
10
+ useEffect(() => {
11
+ const textarea = actualTextRef.current;
12
+ const displayDiv = displayDivRef.current;
13
+ if (!textarea) return;
14
+ const syncScroll = () => {
15
+ if (!displayDiv) return;
16
+ displayDiv.scrollTop = textarea.scrollTop;
17
+ };
18
+ const autoResizeTextarea = () => {
19
+ if (!textarea || manuallyResized) return;
20
+ textarea.style.height = "auto";
21
+ const newHeight = Math.min(textarea.scrollHeight, parseInt(maxHeightPx));
22
+ textarea.style.height = `${newHeight}px`;
23
+ const shouldScroll = textarea.scrollHeight > parseInt(maxHeightPx);
24
+ textarea.style.overflowY = shouldScroll ? "auto" : "hidden";
25
+ if (displayDiv) {
26
+ displayDiv.style.height = "auto";
27
+ displayDiv.style.height = `${newHeight}px`;
28
+ displayDiv.style.overflowY = "hidden";
29
+ }
30
+ };
31
+ const syncDimensions = () => {
32
+ if (!displayDiv) return;
33
+ const computedStyle = window.getComputedStyle(textarea);
34
+ displayDiv.style.width = computedStyle.width;
35
+ displayDiv.style.height = computedStyle.height;
36
+ displayDiv.style.overflowY = "hidden";
37
+ };
38
+ if (!manuallyResized) autoResizeTextarea();
39
+ const resizeObserver = new ResizeObserver(() => {
40
+ const currentHeight = parseInt(window.getComputedStyle(textarea).height);
41
+ const contentScrollHeight = textarea.scrollHeight;
42
+ if (Math.abs(currentHeight - contentScrollHeight) > 5 && currentHeight !== parseInt(maxHeightPx)) setManuallyResized(true);
43
+ syncDimensions();
44
+ });
45
+ const handleInput = () => {
46
+ const currentLength = textarea.value.length;
47
+ if (Math.abs(currentLength - lastContentLength.current) > 20) {
48
+ setManuallyResized(false);
49
+ lastContentLength.current = currentLength;
50
+ }
51
+ if (!manuallyResized) autoResizeTextarea();
52
+ };
53
+ resizeObserver.observe(textarea);
54
+ textarea.addEventListener("input", handleInput);
55
+ textarea.addEventListener("scroll", syncScroll);
56
+ return () => {
57
+ textarea.removeEventListener("scroll", syncScroll);
58
+ textarea.removeEventListener("input", handleInput);
59
+ resizeObserver.disconnect();
60
+ };
61
+ }, [
62
+ actualTextRef,
63
+ maxHeightPx,
64
+ manuallyResized,
65
+ internalValue
66
+ ]);
67
+ return {
68
+ displayDivRef,
69
+ textAreaRef: actualTextRef,
70
+ maxHeight: manuallyResized ? "none" : maxHeightPx
71
+ };
72
+ };
73
+ //#endregion
74
+ export { useResizeTextEditor };
75
+
76
+ //# sourceMappingURL=useResizeTextEditor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useResizeTextEditor.js","names":[],"sources":["../../../../src/components/PlainTextEditor/hooks/useResizeTextEditor.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nexport const useResizeTextEditor = ({\n maxHeight,\n internalValue,\n textRef,\n}: {\n maxHeight?: number | string;\n internalValue: string;\n textRef?: React.RefObject<HTMLTextAreaElement | null> | undefined;\n}) => {\n const displayDivRef = useRef<HTMLDivElement>(null);\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const actualTextRef = textRef ?? textareaRef;\n const [manuallyResized, setManuallyResized] = useState(false);\n const lastContentLength = useRef(internalValue.length);\n\n const maxHeightPx = maxHeight\n ? typeof maxHeight === 'number'\n ? `${maxHeight}px`\n : maxHeight\n : '300px';\n // Sync scroll position between textarea and display div\n useEffect(() => {\n const textarea = actualTextRef.current;\n const displayDiv = displayDivRef.current;\n\n if (!textarea) return;\n\n const syncScroll = () => {\n if (!displayDiv) return;\n displayDiv.scrollTop = textarea.scrollTop;\n };\n\n // Function to auto-resize the textarea based on content\n const autoResizeTextarea = () => {\n if (!textarea || manuallyResized) return;\n\n // Reset height temporarily to get the correct scrollHeight\n textarea.style.height = 'auto';\n\n // Calculate new height (limit to maxHeight)\n const newHeight = Math.min(textarea.scrollHeight, parseInt(maxHeightPx));\n\n // Apply the new height to both elements\n textarea.style.height = `${newHeight}px`;\n // Set overflow to auto only if content exceeds max height\n const shouldScroll = textarea.scrollHeight > parseInt(maxHeightPx);\n textarea.style.overflowY = shouldScroll ? 'auto' : 'hidden';\n if (displayDiv) {\n displayDiv.style.height = 'auto';\n displayDiv.style.height = `${newHeight}px`;\n // Only show scrollbar on textarea, hide it on display div\n displayDiv.style.overflowY = 'hidden';\n }\n };\n\n // Function to sync dimensions from textarea to display div\n const syncDimensions = () => {\n if (!displayDiv) return;\n const computedStyle = window.getComputedStyle(textarea);\n\n displayDiv.style.width = computedStyle.width;\n displayDiv.style.height = computedStyle.height;\n // Always hide scrollbar on display div, keep content scrollable\n displayDiv.style.overflowY = 'hidden';\n };\n\n // Run the auto-resize on mount\n if (!manuallyResized) {\n autoResizeTextarea();\n }\n\n // Set up resize observer to detect manual resizing\n const resizeObserver = new ResizeObserver(() => {\n const currentHeight = parseInt(window.getComputedStyle(textarea).height);\n const contentScrollHeight = textarea.scrollHeight;\n\n // If current height is different from what auto-resize would set\n // and it's not due to overflow, consider it a manual resize\n if (\n Math.abs(currentHeight - contentScrollHeight) > 5 &&\n currentHeight !== parseInt(maxHeightPx)\n ) {\n setManuallyResized(true);\n }\n\n syncDimensions();\n });\n\n // Input handler to check for content changes that might reset manual resize\n const handleInput = () => {\n const currentLength = textarea.value.length;\n // If content length changed dramatically, consider resetting manual resize\n if (Math.abs(currentLength - lastContentLength.current) > 20) {\n setManuallyResized(false);\n lastContentLength.current = currentLength;\n }\n\n if (!manuallyResized) {\n autoResizeTextarea();\n }\n };\n\n resizeObserver.observe(textarea);\n textarea.addEventListener('input', handleInput);\n textarea.addEventListener('scroll', syncScroll);\n\n return () => {\n textarea.removeEventListener('scroll', syncScroll);\n textarea.removeEventListener('input', handleInput);\n resizeObserver.disconnect();\n };\n }, [actualTextRef, maxHeightPx, manuallyResized, internalValue]);\n\n return {\n displayDivRef,\n textAreaRef: actualTextRef,\n maxHeight: manuallyResized ? 'none' : maxHeightPx,\n };\n};\n"],"mappings":";;AAEA,IAAa,uBAAuB,EAClC,WACA,eACA,cAKI;CACJ,MAAM,gBAAgB,OAAuB,IAAI;CACjD,MAAM,cAAc,OAA4B,IAAI;CACpD,MAAM,gBAAgB,WAAW;CACjC,MAAM,CAAC,iBAAiB,sBAAsB,SAAS,KAAK;CAC5D,MAAM,oBAAoB,OAAO,cAAc,MAAM;CAErD,MAAM,cAAc,YAChB,OAAO,cAAc,WACnB,GAAG,UAAU,MACb,YACF;CAEJ,gBAAgB;EACd,MAAM,WAAW,cAAc;EAC/B,MAAM,aAAa,cAAc;EAEjC,IAAI,CAAC,UAAU;EAEf,MAAM,mBAAmB;GACvB,IAAI,CAAC,YAAY;GACjB,WAAW,YAAY,SAAS;EAClC;EAGA,MAAM,2BAA2B;GAC/B,IAAI,CAAC,YAAY,iBAAiB;GAGlC,SAAS,MAAM,SAAS;GAGxB,MAAM,YAAY,KAAK,IAAI,SAAS,cAAc,SAAS,WAAW,CAAC;GAGvE,SAAS,MAAM,SAAS,GAAG,UAAU;GAErC,MAAM,eAAe,SAAS,eAAe,SAAS,WAAW;GACjE,SAAS,MAAM,YAAY,eAAe,SAAS;GACnD,IAAI,YAAY;IACd,WAAW,MAAM,SAAS;IAC1B,WAAW,MAAM,SAAS,GAAG,UAAU;IAEvC,WAAW,MAAM,YAAY;GAC/B;EACF;EAGA,MAAM,uBAAuB;GAC3B,IAAI,CAAC,YAAY;GACjB,MAAM,gBAAgB,OAAO,iBAAiB,QAAQ;GAEtD,WAAW,MAAM,QAAQ,cAAc;GACvC,WAAW,MAAM,SAAS,cAAc;GAExC,WAAW,MAAM,YAAY;EAC/B;EAGA,IAAI,CAAC,iBACH,mBAAmB;EAIrB,MAAM,iBAAiB,IAAI,qBAAqB;GAC9C,MAAM,gBAAgB,SAAS,OAAO,iBAAiB,QAAQ,CAAC,CAAC,MAAM;GACvE,MAAM,sBAAsB,SAAS;GAIrC,IACE,KAAK,IAAI,gBAAgB,mBAAmB,IAAI,KAChD,kBAAkB,SAAS,WAAW,GAEtC,mBAAmB,IAAI;GAGzB,eAAe;EACjB,CAAC;EAGD,MAAM,oBAAoB;GACxB,MAAM,gBAAgB,SAAS,MAAM;GAErC,IAAI,KAAK,IAAI,gBAAgB,kBAAkB,OAAO,IAAI,IAAI;IAC5D,mBAAmB,KAAK;IACxB,kBAAkB,UAAU;GAC9B;GAEA,IAAI,CAAC,iBACH,mBAAmB;EAEvB;EAEA,eAAe,QAAQ,QAAQ;EAC/B,SAAS,iBAAiB,SAAS,WAAW;EAC9C,SAAS,iBAAiB,UAAU,UAAU;EAE9C,aAAa;GACX,SAAS,oBAAoB,UAAU,UAAU;GACjD,SAAS,oBAAoB,SAAS,WAAW;GACjD,eAAe,WAAW;EAC5B;CACF,GAAG;EAAC;EAAe;EAAa;EAAiB;CAAa,CAAC;CAE/D,OAAO;EACL;EACA,aAAa;EACb,WAAW,kBAAkB,SAAS;CACxC;AACF"}
@@ -0,0 +1,18 @@
1
+ export declare function PlainTextEditor(props: {
2
+ id?: string;
3
+ textRef?: React.RefObject<HTMLTextAreaElement | null>;
4
+ value?: string | null | undefined;
5
+ placeholder?: string;
6
+ className?: string;
7
+ onChange?: (e: string) => void;
8
+ onFocus?: () => void;
9
+ onBlur?: () => void;
10
+ onKeyDown?: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;
11
+ autoFocus?: boolean;
12
+ readOnly?: boolean;
13
+ textareaClassName?: string;
14
+ resize?: boolean;
15
+ defaultRows?: number;
16
+ fullLength?: boolean;
17
+ maxHeight?: number | string;
18
+ }): import("react").JSX.Element;
@@ -0,0 +1,71 @@
1
+ import { cn } from "../../utils/cn.js";
2
+ import { TextWithLinks } from "../TextWithLinks.js";
3
+ import { useResizeTextEditor } from "./hooks/useResizeTextEditor.js";
4
+ import { useLayoutEffect, useState } from "react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { useDebouncedCallback } from "use-debounce";
7
+ //#region packages/components/src/components/PlainTextEditor/index.tsx
8
+ var COMMON_CLS = cn("text-md col-[1] row-[1] m-0 w-full overflow-y-hidden whitespace-pre-wrap break-words border-none bg-transparent p-0 text-base");
9
+ function PlainTextEditor(props) {
10
+ const [internalValue, setInternalValue] = useState(props.value ?? "");
11
+ const { displayDivRef, textAreaRef, maxHeight } = useResizeTextEditor({
12
+ maxHeight: props.maxHeight,
13
+ internalValue,
14
+ textRef: props.textRef
15
+ });
16
+ useLayoutEffect(() => {
17
+ setInternalValue(props.value ?? "");
18
+ }, [props.value]);
19
+ const [hasScroll, setHasScroll] = useState(false);
20
+ useLayoutEffect(() => {
21
+ if (textAreaRef.current) setHasScroll(textAreaRef.current.scrollHeight > textAreaRef.current.clientHeight);
22
+ }, [textAreaRef]);
23
+ const debouncedOnChange = useDebouncedCallback((value) => {
24
+ props.onChange?.(value);
25
+ }, 100);
26
+ let valueToDisplay = internalValue;
27
+ if (typeof valueToDisplay !== "string" && valueToDisplay != null) valueToDisplay = JSON.stringify(valueToDisplay);
28
+ if (props.readOnly) return /* @__PURE__ */ jsx("div", {
29
+ className: cn(COMMON_CLS, "pointer-events-auto select-text", props.className),
30
+ children: /* @__PURE__ */ jsx(TextWithLinks, {
31
+ text: valueToDisplay ?? "",
32
+ fullLength: props.fullLength
33
+ })
34
+ });
35
+ return /* @__PURE__ */ jsxs("div", {
36
+ className: cn("grid w-full grid-cols-1", props.className),
37
+ children: [/* @__PURE__ */ jsx("textarea", {
38
+ ref: textAreaRef,
39
+ id: props.id,
40
+ className: cn(COMMON_CLS, "text-transparent caret-[var(--text-primary)] placeholder:text-quaternary", props.textareaClassName, !props.resize && "resize-none"),
41
+ style: { maxHeight },
42
+ value: valueToDisplay ?? "",
43
+ rows: props.defaultRows ?? 1,
44
+ onChange: (e) => {
45
+ const target = e.target;
46
+ setInternalValue(target.value);
47
+ debouncedOnChange(target.value);
48
+ },
49
+ onFocus: props.onFocus,
50
+ onBlur: props.onBlur,
51
+ placeholder: props.placeholder,
52
+ readOnly: props.readOnly,
53
+ autoFocus: props.autoFocus && !props.readOnly,
54
+ onKeyDown: props.onKeyDown
55
+ }), /* @__PURE__ */ jsxs("div", {
56
+ ref: displayDivRef,
57
+ "aria-hidden": true,
58
+ className: cn(COMMON_CLS, "pointer-events-none select-none", hasScroll && "pr-4", props.textareaClassName),
59
+ style: { maxHeight },
60
+ children: [/* @__PURE__ */ jsx(TextWithLinks, {
61
+ text: valueToDisplay ?? "",
62
+ fullLength: true,
63
+ useRawSpan: true
64
+ }), valueToDisplay?.endsWith("\n") && /* @__PURE__ */ jsx("br", {})]
65
+ })]
66
+ });
67
+ }
68
+ //#endregion
69
+ export { PlainTextEditor };
70
+
71
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/components/PlainTextEditor/index.tsx"],"sourcesContent":["import { useLayoutEffect, useState } from 'react';\n\nimport { useDebouncedCallback } from 'use-debounce';\n\nimport { cn } from '../../utils/cn';\nimport { TextWithLinks } from '../TextWithLinks';\nimport { useResizeTextEditor } from './hooks/useResizeTextEditor';\n\nconst COMMON_CLS = cn(\n 'text-md col-[1] row-[1] m-0 w-full overflow-y-hidden whitespace-pre-wrap break-words border-none bg-transparent p-0 text-base'\n);\n\nexport function PlainTextEditor(props: {\n id?: string;\n textRef?: React.RefObject<HTMLTextAreaElement | null>;\n value?: string | null | undefined;\n placeholder?: string;\n className?: string;\n onChange?: (e: string) => void;\n onFocus?: () => void;\n onBlur?: () => void;\n onKeyDown?: (e: React.KeyboardEvent<HTMLTextAreaElement>) => void;\n autoFocus?: boolean;\n readOnly?: boolean;\n textareaClassName?: string;\n resize?: boolean;\n defaultRows?: number;\n fullLength?: boolean;\n maxHeight?: number | string;\n}) {\n // Internal state for immediate UI updates\n const [internalValue, setInternalValue] = useState(props.value ?? '');\n const { displayDivRef, textAreaRef, maxHeight } = useResizeTextEditor({\n maxHeight: props.maxHeight,\n internalValue,\n textRef: props.textRef,\n });\n\n useLayoutEffect(() => {\n setInternalValue(props.value ?? '');\n }, [props.value]);\n\n const [hasScroll, setHasScroll] = useState(false);\n useLayoutEffect(() => {\n if (textAreaRef.current) {\n setHasScroll(\n textAreaRef.current.scrollHeight > textAreaRef.current.clientHeight\n );\n }\n }, [textAreaRef]);\n\n // Debounced callback for parent updates\n const debouncedOnChange = useDebouncedCallback((value: string) => {\n props.onChange?.(value);\n }, 100);\n\n let valueToDisplay = internalValue;\n\n // https://react.dev/errors/31?invariant=31&args%5B%5D=object%2520with%2520keys%2520%257Bcontent%252C%2520additional_kwargs%252C%2520response_metadata%252C%2520type%252C%2520name%252C%2520id%252C%2520example%252C%2520tool_calls%252C%2520invalid_tool_calls%252C%2520usage_metadata%257D\n if (typeof valueToDisplay !== 'string' && valueToDisplay != null) {\n valueToDisplay = JSON.stringify(valueToDisplay);\n }\n\n // Use different rendering approaches for read-only vs editable content\n // Read-only: Simple display with expandable text\n // Editable: Complex textarea overlay for full editing capabilities\n if (props.readOnly) {\n return (\n <div\n className={cn(\n COMMON_CLS,\n 'pointer-events-auto select-text',\n props.className\n )}\n >\n <TextWithLinks\n text={valueToDisplay ?? ''}\n fullLength={props.fullLength}\n />\n </div>\n );\n }\n\n return (\n <div className={cn('grid w-full grid-cols-1', props.className)}>\n <textarea\n ref={textAreaRef}\n id={props.id}\n className={cn(\n COMMON_CLS,\n 'text-transparent caret-[var(--text-primary)] placeholder:text-quaternary',\n props.textareaClassName,\n !props.resize && 'resize-none'\n )}\n style={{\n maxHeight,\n }}\n value={valueToDisplay ?? ''}\n rows={props.defaultRows ?? 1}\n onChange={(e) => {\n const target = e.target as HTMLTextAreaElement;\n setInternalValue(target.value);\n debouncedOnChange(target.value);\n }}\n onFocus={props.onFocus}\n onBlur={props.onBlur}\n placeholder={props.placeholder}\n readOnly={props.readOnly}\n autoFocus={props.autoFocus && !props.readOnly}\n onKeyDown={props.onKeyDown}\n />\n {/* NOTE: this div displays the text in this editor, not the textarea */}\n <div\n ref={displayDivRef}\n aria-hidden\n className={cn(\n COMMON_CLS,\n 'pointer-events-none select-none',\n hasScroll && 'pr-4',\n props.textareaClassName\n )}\n style={{\n maxHeight,\n }}\n >\n <TextWithLinks\n text={valueToDisplay ?? ''}\n fullLength={true}\n useRawSpan={true}\n />\n {valueToDisplay?.endsWith('\\n') && <br />}\n </div>\n </div>\n );\n}\n"],"mappings":";;;;;;;AAQA,IAAM,aAAa,GACjB,+HACF;AAEA,SAAgB,gBAAgB,OAiB7B;CAED,MAAM,CAAC,eAAe,oBAAoB,SAAS,MAAM,SAAS,EAAE;CACpE,MAAM,EAAE,eAAe,aAAa,cAAc,oBAAoB;EACpE,WAAW,MAAM;EACjB;EACA,SAAS,MAAM;CACjB,CAAC;CAED,sBAAsB;EACpB,iBAAiB,MAAM,SAAS,EAAE;CACpC,GAAG,CAAC,MAAM,KAAK,CAAC;CAEhB,MAAM,CAAC,WAAW,gBAAgB,SAAS,KAAK;CAChD,sBAAsB;EACpB,IAAI,YAAY,SACd,aACE,YAAY,QAAQ,eAAe,YAAY,QAAQ,YACzD;CAEJ,GAAG,CAAC,WAAW,CAAC;CAGhB,MAAM,oBAAoB,sBAAsB,UAAkB;EAChE,MAAM,WAAW,KAAK;CACxB,GAAG,GAAG;CAEN,IAAI,iBAAiB;CAGrB,IAAI,OAAO,mBAAmB,YAAY,kBAAkB,MAC1D,iBAAiB,KAAK,UAAU,cAAc;CAMhD,IAAI,MAAM,UACR,OACE,oBAAC,OAAD;EACE,WAAW,GACT,YACA,mCACA,MAAM,SACR;EAEA,UAAA,oBAAC,eAAD;GACE,MAAM,kBAAkB;GACxB,YAAY,MAAM;EACnB,CAAA;CACE,CAAA;CAIT,OACE,qBAAC,OAAD;EAAK,WAAW,GAAG,2BAA2B,MAAM,SAAS;EAA7D,UAAA,CACE,oBAAC,YAAD;GACE,KAAK;GACL,IAAI,MAAM;GACV,WAAW,GACT,YACA,4EACA,MAAM,mBACN,CAAC,MAAM,UAAU,aACnB;GACA,OAAO,EACL,UACF;GACA,OAAO,kBAAkB;GACzB,MAAM,MAAM,eAAe;GAC3B,WAAW,MAAM;IACf,MAAM,SAAS,EAAE;IACjB,iBAAiB,OAAO,KAAK;IAC7B,kBAAkB,OAAO,KAAK;GAChC;GACA,SAAS,MAAM;GACf,QAAQ,MAAM;GACd,aAAa,MAAM;GACnB,UAAU,MAAM;GAChB,WAAW,MAAM,aAAa,CAAC,MAAM;GACrC,WAAW,MAAM;EAClB,CAAA,GAED,qBAAC,OAAD;GACE,KAAK;GACL,eAAA;GACA,WAAW,GACT,YACA,mCACA,aAAa,QACb,MAAM,iBACR;GACA,OAAO,EACL,UACF;GAXF,UAAA,CAaE,oBAAC,eAAD;IACE,MAAM,kBAAkB;IACxB,YAAY;IACZ,YAAY;GACb,CAAA,GACA,gBAAgB,SAAS,IAAI,KAAK,oBAAC,MAAD,CAAK,CAAA,CACrC;EACF,CAAA,CAAA;;AAET"}
@@ -0,0 +1,13 @@
1
+ import * as PopoverPrimitive from '@radix-ui/react-popover';
2
+ export declare const Popover: import("react").FC<PopoverPrimitive.PopoverProps>;
3
+ export declare const PopoverTrigger: import("react").ForwardRefExoticComponent<PopoverPrimitive.PopoverTriggerProps & import("react").RefAttributes<HTMLButtonElement>>;
4
+ export declare const PopoverAnchor: import("react").ForwardRefExoticComponent<PopoverPrimitive.PopoverAnchorProps & import("react").RefAttributes<HTMLDivElement>>;
5
+ export declare const PopoverArrow: import("react").ForwardRefExoticComponent<Omit<PopoverPrimitive.PopoverArrowProps & import("react").RefAttributes<SVGSVGElement>, "ref"> & import("react").RefAttributes<SVGSVGElement>>;
6
+ export declare const PopoverContent: import("react").ForwardRefExoticComponent<Omit<PopoverPrimitive.PopoverContentProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & {
7
+ /**
8
+ * Portal target for the popover. When omitted, the popover automatically
9
+ * portals into the enclosing modal `Dialog` (if any) so it stays
10
+ * mouse-interactive, and falls back to `document.body` otherwise.
11
+ */
12
+ container?: HTMLElement | null;
13
+ } & import("react").RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,48 @@
1
+ import { cn } from "../../utils/cn.js";
2
+ import zIndices from "../../utils/zIndices.js";
3
+ import { useZIndex } from "../../utils/useZIndex.js";
4
+ import { ZIndexProvider } from "../../utils/ZIndexContext.js";
5
+ import { useDialogContainer } from "../Dialog/index.js";
6
+ import { popoverSurfaceClassName } from "./constants.js";
7
+ import { forwardRef } from "react";
8
+ import { jsx } from "react/jsx-runtime";
9
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
10
+ //#region packages/components/src/components/Popover/Popover.tsx
11
+ var Popover = PopoverPrimitive.Root;
12
+ var PopoverTrigger = PopoverPrimitive.Trigger;
13
+ var PopoverAnchor = PopoverPrimitive.Anchor;
14
+ var PopoverArrow = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(PopoverPrimitive.Arrow, {
15
+ ref,
16
+ className: cn("fill-popover", className),
17
+ ...props
18
+ }));
19
+ PopoverArrow.displayName = "PopoverArrow";
20
+ var PopoverContent = forwardRef(({ className, align = "center", sideOffset = 4, forceMount, container, children, ...props }, ref) => {
21
+ const zIndex = useZIndex(zIndices.popover);
22
+ const dialogContainer = useDialogContainer();
23
+ return /* @__PURE__ */ jsx(PopoverPrimitive.Portal, {
24
+ forceMount,
25
+ container: container ?? dialogContainer ?? void 0,
26
+ children: /* @__PURE__ */ jsx(PopoverPrimitive.Content, {
27
+ ref,
28
+ align,
29
+ sideOffset,
30
+ forceMount,
31
+ className: cn(popoverSurfaceClassName, className),
32
+ ...props,
33
+ style: {
34
+ zIndex,
35
+ ...props.style
36
+ },
37
+ children: /* @__PURE__ */ jsx(ZIndexProvider, {
38
+ value: zIndex,
39
+ children
40
+ })
41
+ })
42
+ });
43
+ });
44
+ PopoverContent.displayName = PopoverPrimitive.Content.displayName;
45
+ //#endregion
46
+ export { Popover, PopoverAnchor, PopoverArrow, PopoverContent, PopoverTrigger };
47
+
48
+ //# sourceMappingURL=Popover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Popover.js","names":[],"sources":["../../../src/components/Popover/Popover.tsx"],"sourcesContent":["import type { ComponentPropsWithoutRef, ElementRef } from 'react';\nimport { forwardRef } from 'react';\n\nimport * as PopoverPrimitive from '@radix-ui/react-popover';\n\nimport { cn } from '../../utils/cn';\nimport { useZIndex } from '../../utils/useZIndex';\nimport { ZIndexProvider } from '../../utils/ZIndexContext';\nimport zIndices from '../../utils/zIndices';\nimport { useDialogContainer } from '../Dialog';\nimport { popoverSurfaceClassName } from './constants';\n\nexport const Popover = PopoverPrimitive.Root;\n\nexport const PopoverTrigger = PopoverPrimitive.Trigger;\nexport const PopoverAnchor = PopoverPrimitive.Anchor;\n\nexport const PopoverArrow = forwardRef<\n ElementRef<typeof PopoverPrimitive.Arrow>,\n ComponentPropsWithoutRef<typeof PopoverPrimitive.Arrow>\n>(({ className, ...props }, ref) => (\n <PopoverPrimitive.Arrow\n ref={ref}\n className={cn('fill-popover', className)}\n {...props}\n />\n));\nPopoverArrow.displayName = 'PopoverArrow';\n\nexport const PopoverContent = forwardRef<\n ElementRef<typeof PopoverPrimitive.Content>,\n ComponentPropsWithoutRef<typeof PopoverPrimitive.Content> & {\n /**\n * Portal target for the popover. When omitted, the popover automatically\n * portals into the enclosing modal `Dialog` (if any) so it stays\n * mouse-interactive, and falls back to `document.body` otherwise.\n */\n container?: HTMLElement | null;\n }\n>(\n (\n {\n className,\n align = 'center',\n sideOffset = 4,\n forceMount,\n container,\n children,\n ...props\n },\n ref\n ) => {\n const zIndex = useZIndex(zIndices.popover);\n // Portal into the enclosing modal Dialog (null when not inside one) so the\n // popover stays inside the dialog's pointer-events-interactive region.\n const dialogContainer = useDialogContainer();\n\n return (\n <PopoverPrimitive.Portal\n forceMount={forceMount}\n // Fall back to `undefined` (not `null`) when there is no dialog: Radix's\n // Portal only defaults to `document.body` when `container` is absent, so\n // an explicit `null` leaves non-forceMount popovers unrendered.\n container={container ?? dialogContainer ?? undefined}\n >\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n forceMount={forceMount}\n className={cn(popoverSurfaceClassName, className)}\n {...props}\n style={{ zIndex, ...props.style }}\n >\n <ZIndexProvider value={zIndex}>{children}</ZIndexProvider>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n );\n }\n);\nPopoverContent.displayName = PopoverPrimitive.Content.displayName;\n"],"mappings":";;;;;;;;;;AAYA,IAAa,UAAU,iBAAiB;AAExC,IAAa,iBAAiB,iBAAiB;AAC/C,IAAa,gBAAgB,iBAAiB;AAE9C,IAAa,eAAe,YAGzB,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,iBAAiB,OAAlB;CACO;CACL,WAAW,GAAG,gBAAgB,SAAS;CACvC,GAAI;AACL,CAAA,CACF;AACD,aAAa,cAAc;AAE3B,IAAa,iBAAiB,YAY1B,EACE,WACA,QAAQ,UACR,aAAa,GACb,YACA,WACA,UACA,GAAG,SAEL,QACG;CACH,MAAM,SAAS,UAAU,SAAS,OAAO;CAGzC,MAAM,kBAAkB,mBAAmB;CAE3C,OACE,oBAAC,iBAAiB,QAAlB;EACc;EAIZ,WAAW,aAAa,mBAAmB,KAAA;EAE3C,UAAA,oBAAC,iBAAiB,SAAlB;GACO;GACE;GACK;GACA;GACZ,WAAW,GAAG,yBAAyB,SAAS;GAChD,GAAI;GACJ,OAAO;IAAE;IAAQ,GAAG,MAAM;GAAM;GAEhC,UAAA,oBAAC,gBAAD;IAAgB,OAAO;IAAS;GAAyB,CAAA;EACjC,CAAA;CACH,CAAA;AAE7B,CACF;AACA,eAAe,cAAc,iBAAiB,QAAQ"}
@@ -0,0 +1 @@
1
+ export declare const popoverSurfaceClassName = "w-72 rounded-md bg-popover p-space-4 outline-none [filter:drop-shadow(0_1px_0_var(--border-secondary))_drop-shadow(0_-1px_0_var(--border-secondary))_drop-shadow(1px_0_0_var(--border-secondary))_drop-shadow(-1px_0_0_var(--border-secondary))_drop-shadow(0_2px_3px_var(--shadow-color-subtle))_drop-shadow(0_6px_12px_var(--shadow-color-subtle))]";
@@ -0,0 +1,6 @@
1
+ //#region packages/components/src/components/Popover/constants.ts
2
+ var popoverSurfaceClassName = "w-72 rounded-md bg-popover p-space-4 outline-none [filter:drop-shadow(0_1px_0_var(--border-secondary))_drop-shadow(0_-1px_0_var(--border-secondary))_drop-shadow(1px_0_0_var(--border-secondary))_drop-shadow(-1px_0_0_var(--border-secondary))_drop-shadow(0_2px_3px_var(--shadow-color-subtle))_drop-shadow(0_6px_12px_var(--shadow-color-subtle))]";
3
+ //#endregion
4
+ export { popoverSurfaceClassName };
5
+
6
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","names":[],"sources":["../../../src/components/Popover/constants.ts"],"sourcesContent":["export const popoverSurfaceClassName =\n 'w-72 rounded-md bg-popover p-space-4 outline-none [filter:drop-shadow(0_1px_0_var(--border-secondary))_drop-shadow(0_-1px_0_var(--border-secondary))_drop-shadow(1px_0_0_var(--border-secondary))_drop-shadow(-1px_0_0_var(--border-secondary))_drop-shadow(0_2px_3px_var(--shadow-color-subtle))_drop-shadow(0_6px_12px_var(--shadow-color-subtle))]';\n"],"mappings":";AAAA,IAAa,0BACX"}
@@ -0,0 +1 @@
1
+ export { Popover, PopoverAnchor, PopoverArrow, PopoverContent, PopoverTrigger, } from './Popover.js';
@@ -0,0 +1,2 @@
1
+ import { Popover, PopoverAnchor, PopoverArrow, PopoverContent, PopoverTrigger } from "./Popover.js";
2
+ export { Popover, PopoverAnchor, PopoverArrow, PopoverContent, PopoverTrigger };
@@ -0,0 +1,11 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ export declare const createPortalSlot: () => {
3
+ Fill: (props: {
4
+ children?: ReactNode;
5
+ }) => import("react").ReactPortal | null;
6
+ Slot: (props: HTMLAttributes<HTMLDivElement>) => import("react").JSX.Element;
7
+ Context: (props: {
8
+ children?: ReactNode;
9
+ }) => import("react").JSX.Element;
10
+ useCanFillSlot: () => boolean;
11
+ };
@@ -0,0 +1,41 @@
1
+ import { createContext, useContext, useLayoutEffect, useRef, useState } from "react";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { createPortal } from "react-dom";
4
+ //#region packages/components/src/components/PortalSlot.tsx
5
+ var createPortalSlot = () => {
6
+ const SlotContext = createContext(null);
7
+ const Fill = (props) => {
8
+ const [ref] = useContext(SlotContext) ?? [];
9
+ if (!ref) return null;
10
+ return createPortal(props.children, ref);
11
+ };
12
+ const useCanFillSlot = () => {
13
+ return useContext(SlotContext) != null;
14
+ };
15
+ const Slot = (props) => {
16
+ const ref = useRef(null);
17
+ const [, setStateRef] = useContext(SlotContext) ?? [];
18
+ useLayoutEffect(() => setStateRef?.(ref.current), [setStateRef]);
19
+ return /* @__PURE__ */ jsx("div", {
20
+ ...props,
21
+ ref
22
+ });
23
+ };
24
+ function Context(props) {
25
+ const [state, setState] = useState(null);
26
+ return /* @__PURE__ */ jsx(SlotContext.Provider, {
27
+ value: [state, setState],
28
+ children: props.children
29
+ });
30
+ }
31
+ return {
32
+ Fill,
33
+ Slot,
34
+ Context,
35
+ useCanFillSlot
36
+ };
37
+ };
38
+ //#endregion
39
+ export { createPortalSlot };
40
+
41
+ //# sourceMappingURL=PortalSlot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PortalSlot.js","names":[],"sources":["../../src/components/PortalSlot.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from 'react';\nimport {\n createContext,\n useContext,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\n\nimport { createPortal } from 'react-dom';\n\nexport const createPortalSlot = () => {\n const SlotContext = createContext<\n [HTMLElement | null, (node: HTMLElement | null) => void] | null\n >(null);\n\n const Fill = (props: { children?: ReactNode }) => {\n const [ref] = useContext(SlotContext) ?? [];\n\n if (!ref) return null;\n return createPortal(props.children, ref);\n };\n\n const useCanFillSlot = () => {\n const context = useContext(SlotContext);\n return context != null;\n };\n\n const Slot = (props: HTMLAttributes<HTMLDivElement>) => {\n const ref = useRef<HTMLDivElement>(null);\n const [, setStateRef] = useContext(SlotContext) ?? [];\n useLayoutEffect(() => setStateRef?.(ref.current), [setStateRef]);\n\n return <div {...props} ref={ref} />;\n };\n\n function Context(props: { children?: ReactNode }) {\n const [state, setState] = useState<HTMLElement | null>(null);\n\n return (\n <SlotContext.Provider value={[state, setState]}>\n {props.children}\n </SlotContext.Provider>\n );\n }\n\n return { Fill, Slot, Context, useCanFillSlot };\n};\n"],"mappings":";;;;AAWA,IAAa,yBAAyB;CACpC,MAAM,cAAc,cAElB,IAAI;CAEN,MAAM,QAAQ,UAAoC;EAChD,MAAM,CAAC,OAAO,WAAW,WAAW,KAAK,CAAC;EAE1C,IAAI,CAAC,KAAK,OAAO;EACjB,OAAO,aAAa,MAAM,UAAU,GAAG;CACzC;CAEA,MAAM,uBAAuB;EAE3B,OADgB,WAAW,WACpB,KAAW;CACpB;CAEA,MAAM,QAAQ,UAA0C;EACtD,MAAM,MAAM,OAAuB,IAAI;EACvC,MAAM,GAAG,eAAe,WAAW,WAAW,KAAK,CAAC;EACpD,sBAAsB,cAAc,IAAI,OAAO,GAAG,CAAC,WAAW,CAAC;EAE/D,OAAO,oBAAC,OAAD;GAAK,GAAI;GAAY;EAAM,CAAA;CACpC;CAEA,SAAS,QAAQ,OAAiC;EAChD,MAAM,CAAC,OAAO,YAAY,SAA6B,IAAI;EAE3D,OACE,oBAAC,YAAY,UAAb;GAAsB,OAAO,CAAC,OAAO,QAAQ;GAC1C,UAAA,MAAM;EACa,CAAA;CAE1B;CAEA,OAAO;EAAE;EAAM;EAAM;EAAS;CAAe;AAC/C"}
@@ -0,0 +1,38 @@
1
+ import { type HTMLAttributes } from 'react';
2
+ type ProgressBarSize = 'sm' | 'md' | 'lg';
3
+ type ProgressBarColor = 'brand' | 'neutral' | 'success' | 'warning' | 'error';
4
+ type ProgressBarLabelPosition = 'top' | 'bottom';
5
+ interface ProgressBarBaseProps extends Omit<HTMLAttributes<HTMLDivElement>, 'aria-label' | 'aria-labelledby' | 'aria-valuemax' | 'aria-valuemin' | 'aria-valuenow' | 'children' | 'color' | 'role'> {
6
+ /** Current progress value. */
7
+ value: number;
8
+ /** Minimum progress value. */
9
+ min?: number;
10
+ /** Maximum progress value. */
11
+ max?: number;
12
+ /** Bar height. Use `sm` in dense table layouts. */
13
+ size?: ProgressBarSize;
14
+ /** Semantic color for the completed portion of the bar. */
15
+ color?: ProgressBarColor;
16
+ /** Optional fixed-style label rendered above or beneath the bar. */
17
+ label?: string;
18
+ /** Vertical label placement. */
19
+ labelPosition?: ProgressBarLabelPosition;
20
+ }
21
+ interface ProgressBarWithAriaLabel extends ProgressBarBaseProps {
22
+ /** Accessible name describing what is progressing. */
23
+ 'aria-label': string;
24
+ 'aria-labelledby'?: never;
25
+ }
26
+ interface ProgressBarWithAriaLabelledBy extends ProgressBarBaseProps {
27
+ /** ID of an element that names what is progressing. */
28
+ 'aria-labelledby': string;
29
+ 'aria-label'?: never;
30
+ }
31
+ type ProgressBarProps = ProgressBarWithAriaLabel | ProgressBarWithAriaLabelledBy;
32
+ /**
33
+ * A single-value determinate horizontal progress indicator for measurable
34
+ * completion or usage. Use `LinearProgress` for indeterminate loading states.
35
+ */
36
+ declare const ProgressBar: import("react").ForwardRefExoticComponent<ProgressBarProps & import("react").RefAttributes<HTMLDivElement>>;
37
+ export { ProgressBar };
38
+ export type { ProgressBarColor, ProgressBarLabelPosition, ProgressBarProps, ProgressBarSize, };
@@ -0,0 +1,82 @@
1
+ import { cn } from "../../utils/cn.js";
2
+ import { Text } from "../Text/Text.js";
3
+ import { forwardRef } from "react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ //#region packages/components/src/components/ProgressBar/ProgressBar.tsx
6
+ var SIZE_CLASSES = {
7
+ sm: "h-1",
8
+ md: "h-2",
9
+ lg: "h-3"
10
+ };
11
+ var LABEL_VARIANTS = {
12
+ sm: "xs",
13
+ md: "sm",
14
+ lg: "md"
15
+ };
16
+ var COLOR_GRADIENTS = {
17
+ brand: "linear-gradient(to left, var(--viz-brand-200), var(--viz-brand-75))",
18
+ neutral: "linear-gradient(to left, var(--viz-neutral-150), var(--viz-neutral-75))",
19
+ success: "linear-gradient(to left, var(--viz-green-200), var(--viz-green-100))",
20
+ warning: "linear-gradient(to left, var(--viz-orange-150), var(--viz-orange-75))",
21
+ error: "linear-gradient(to left, var(--viz-red-300), var(--viz-red-200))"
22
+ };
23
+ function getFiniteValue(value, fallback) {
24
+ return Number.isFinite(value) ? value : fallback;
25
+ }
26
+ function getNormalizedRange(min, max) {
27
+ const normalizedMin = getFiniteValue(min, 0);
28
+ const normalizedMax = getFiniteValue(max, normalizedMin + 100);
29
+ return {
30
+ min: normalizedMin,
31
+ max: normalizedMax > normalizedMin ? normalizedMax : normalizedMin + 100
32
+ };
33
+ }
34
+ function clampValue(value, min, max) {
35
+ return Math.min(Math.max(getFiniteValue(value, min), min), max);
36
+ }
37
+ /**
38
+ * A single-value determinate horizontal progress indicator for measurable
39
+ * completion or usage. Use `LinearProgress` for indeterminate loading states.
40
+ */
41
+ var ProgressBar = forwardRef(({ value, min = 0, max = 100, size = "md", color = "brand", label, labelPosition = "bottom", className, ...props }, ref) => {
42
+ const range = getNormalizedRange(min, max);
43
+ const clampedValue = clampValue(value, range.min, range.max);
44
+ const progressPercent = (clampedValue - range.min) / (range.max - range.min) * 100;
45
+ const progressBar = /* @__PURE__ */ jsx("div", {
46
+ ...props,
47
+ ref,
48
+ role: "progressbar",
49
+ "aria-valuemin": range.min,
50
+ "aria-valuemax": range.max,
51
+ "aria-valuenow": clampedValue,
52
+ className: cn("relative w-full flex-none overflow-hidden rounded-xs bg-surface-level-3", SIZE_CLASSES[size], className),
53
+ children: /* @__PURE__ */ jsx("div", {
54
+ "aria-hidden": "true",
55
+ className: "h-full rounded-xs transition-[width] duration-normal ease-out motion-reduce:transition-none",
56
+ style: {
57
+ width: `${progressPercent}%`,
58
+ backgroundImage: COLOR_GRADIENTS[color]
59
+ }
60
+ })
61
+ });
62
+ if (label === void 0) return progressBar;
63
+ const progressLabel = /* @__PURE__ */ jsx(Text, {
64
+ as: "span",
65
+ variant: LABEL_VARIANTS[size],
66
+ color: "tertiary",
67
+ children: label
68
+ });
69
+ return /* @__PURE__ */ jsxs("div", {
70
+ className: "flex w-full flex-col gap-space-1",
71
+ children: [
72
+ labelPosition === "top" && progressLabel,
73
+ progressBar,
74
+ labelPosition === "bottom" && progressLabel
75
+ ]
76
+ });
77
+ });
78
+ ProgressBar.displayName = "ProgressBar";
79
+ //#endregion
80
+ export { ProgressBar };
81
+
82
+ //# sourceMappingURL=ProgressBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressBar.js","names":[],"sources":["../../../src/components/ProgressBar/ProgressBar.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes } from 'react';\n\nimport { cn } from '../../utils/cn';\nimport { Text } from '../Text';\n\ntype ProgressBarSize = 'sm' | 'md' | 'lg';\ntype ProgressBarColor = 'brand' | 'neutral' | 'success' | 'warning' | 'error';\ntype ProgressBarLabelPosition = 'top' | 'bottom';\n\ninterface ProgressBarBaseProps extends Omit<\n HTMLAttributes<HTMLDivElement>,\n | 'aria-label'\n | 'aria-labelledby'\n | 'aria-valuemax'\n | 'aria-valuemin'\n | 'aria-valuenow'\n | 'children'\n | 'color'\n | 'role'\n> {\n /** Current progress value. */\n value: number;\n /** Minimum progress value. */\n min?: number;\n /** Maximum progress value. */\n max?: number;\n /** Bar height. Use `sm` in dense table layouts. */\n size?: ProgressBarSize;\n /** Semantic color for the completed portion of the bar. */\n color?: ProgressBarColor;\n /** Optional fixed-style label rendered above or beneath the bar. */\n label?: string;\n /** Vertical label placement. */\n labelPosition?: ProgressBarLabelPosition;\n}\n\ninterface ProgressBarWithAriaLabel extends ProgressBarBaseProps {\n /** Accessible name describing what is progressing. */\n 'aria-label': string;\n 'aria-labelledby'?: never;\n}\n\ninterface ProgressBarWithAriaLabelledBy extends ProgressBarBaseProps {\n /** ID of an element that names what is progressing. */\n 'aria-labelledby': string;\n 'aria-label'?: never;\n}\n\ntype ProgressBarProps =\n | ProgressBarWithAriaLabel\n | ProgressBarWithAriaLabelledBy;\n\nconst SIZE_CLASSES: Record<ProgressBarSize, string> = {\n sm: 'h-1',\n md: 'h-2',\n lg: 'h-3',\n};\n\nconst LABEL_VARIANTS: Record<ProgressBarSize, 'xs' | 'sm' | 'md'> = {\n sm: 'xs',\n md: 'sm',\n lg: 'md',\n};\n\nconst COLOR_GRADIENTS: Record<ProgressBarColor, string> = {\n brand: 'linear-gradient(to left, var(--viz-brand-200), var(--viz-brand-75))',\n neutral:\n 'linear-gradient(to left, var(--viz-neutral-150), var(--viz-neutral-75))',\n success:\n 'linear-gradient(to left, var(--viz-green-200), var(--viz-green-100))',\n warning:\n 'linear-gradient(to left, var(--viz-orange-150), var(--viz-orange-75))',\n error: 'linear-gradient(to left, var(--viz-red-300), var(--viz-red-200))',\n};\n\nfunction getFiniteValue(value: number, fallback: number) {\n return Number.isFinite(value) ? value : fallback;\n}\n\nfunction getNormalizedRange(min: number, max: number) {\n const normalizedMin = getFiniteValue(min, 0);\n const normalizedMax = getFiniteValue(max, normalizedMin + 100);\n\n return {\n min: normalizedMin,\n max: normalizedMax > normalizedMin ? normalizedMax : normalizedMin + 100,\n };\n}\n\nfunction clampValue(value: number, min: number, max: number) {\n return Math.min(Math.max(getFiniteValue(value, min), min), max);\n}\n\n/**\n * A single-value determinate horizontal progress indicator for measurable\n * completion or usage. Use `LinearProgress` for indeterminate loading states.\n */\nconst ProgressBar = forwardRef<HTMLDivElement, ProgressBarProps>(\n (\n {\n value,\n min = 0,\n max = 100,\n size = 'md',\n color = 'brand',\n label,\n labelPosition = 'bottom',\n className,\n ...props\n },\n ref\n ) => {\n const range = getNormalizedRange(min, max);\n const clampedValue = clampValue(value, range.min, range.max);\n const progressPercent =\n ((clampedValue - range.min) / (range.max - range.min)) * 100;\n\n const progressBar = (\n <div\n {...props}\n ref={ref}\n role=\"progressbar\"\n aria-valuemin={range.min}\n aria-valuemax={range.max}\n aria-valuenow={clampedValue}\n className={cn(\n 'relative w-full flex-none overflow-hidden rounded-xs bg-surface-level-3',\n SIZE_CLASSES[size],\n className\n )}\n >\n <div\n aria-hidden=\"true\"\n className=\"h-full rounded-xs transition-[width] duration-normal ease-out motion-reduce:transition-none\"\n style={{\n width: `${progressPercent}%`,\n backgroundImage: COLOR_GRADIENTS[color],\n }}\n />\n </div>\n );\n\n if (label === undefined) return progressBar;\n\n const progressLabel = (\n <Text as=\"span\" variant={LABEL_VARIANTS[size]} color=\"tertiary\">\n {label}\n </Text>\n );\n\n return (\n <div className=\"flex w-full flex-col gap-space-1\">\n {labelPosition === 'top' && progressLabel}\n {progressBar}\n {labelPosition === 'bottom' && progressLabel}\n </div>\n );\n }\n);\n\nProgressBar.displayName = 'ProgressBar';\n\nexport { ProgressBar };\nexport type {\n ProgressBarColor,\n ProgressBarLabelPosition,\n ProgressBarProps,\n ProgressBarSize,\n};\n"],"mappings":";;;;;AAoDA,IAAM,eAAgD;CACpD,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAM,iBAA8D;CAClE,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAEA,IAAM,kBAAoD;CACxD,OAAO;CACP,SACE;CACF,SACE;CACF,SACE;CACF,OAAO;AACT;AAEA,SAAS,eAAe,OAAe,UAAkB;CACvD,OAAO,OAAO,SAAS,KAAK,IAAI,QAAQ;AAC1C;AAEA,SAAS,mBAAmB,KAAa,KAAa;CACpD,MAAM,gBAAgB,eAAe,KAAK,CAAC;CAC3C,MAAM,gBAAgB,eAAe,KAAK,gBAAgB,GAAG;CAE7D,OAAO;EACL,KAAK;EACL,KAAK,gBAAgB,gBAAgB,gBAAgB,gBAAgB;CACvE;AACF;AAEA,SAAS,WAAW,OAAe,KAAa,KAAa;CAC3D,OAAO,KAAK,IAAI,KAAK,IAAI,eAAe,OAAO,GAAG,GAAG,GAAG,GAAG,GAAG;AAChE;;;;;AAMA,IAAM,cAAc,YAEhB,EACE,OACA,MAAM,GACN,MAAM,KACN,OAAO,MACP,QAAQ,SACR,OACA,gBAAgB,UAChB,WACA,GAAG,SAEL,QACG;CACH,MAAM,QAAQ,mBAAmB,KAAK,GAAG;CACzC,MAAM,eAAe,WAAW,OAAO,MAAM,KAAK,MAAM,GAAG;CAC3D,MAAM,mBACF,eAAe,MAAM,QAAQ,MAAM,MAAM,MAAM,OAAQ;CAE3D,MAAM,cACJ,oBAAC,OAAD;EACE,GAAI;EACC;EACL,MAAK;EACL,iBAAe,MAAM;EACrB,iBAAe,MAAM;EACrB,iBAAe;EACf,WAAW,GACT,2EACA,aAAa,OACb,SACF;EAEA,UAAA,oBAAC,OAAD;GACE,eAAY;GACZ,WAAU;GACV,OAAO;IACL,OAAO,GAAG,gBAAgB;IAC1B,iBAAiB,gBAAgB;GACnC;EACD,CAAA;CACE,CAAA;CAGP,IAAI,UAAU,KAAA,GAAW,OAAO;CAEhC,MAAM,gBACJ,oBAAC,MAAD;EAAM,IAAG;EAAO,SAAS,eAAe;EAAO,OAAM;EAClD,UAAA;CACG,CAAA;CAGR,OACE,qBAAC,OAAD;EAAK,WAAU;EAAf,UAAA;GACG,kBAAkB,SAAS;GAC3B;GACA,kBAAkB,YAAY;EAC5B;;AAET,CACF;AAEA,YAAY,cAAc"}
@@ -0,0 +1,2 @@
1
+ export { ProgressBar } from './ProgressBar.js';
2
+ export type { ProgressBarColor, ProgressBarLabelPosition, ProgressBarProps, ProgressBarSize, } from './ProgressBar.js';
@@ -0,0 +1,2 @@
1
+ import { ProgressBar } from "./ProgressBar.js";
2
+ export { ProgressBar };
@@ -0,0 +1,62 @@
1
+ import { type SelectionControlSize } from '../../utils/componentSizes.js';
2
+ /**
3
+ * Base props shared by all RadioButton variants.
4
+ */
5
+ interface RadioButtonBaseProps {
6
+ /** Current value of this radio button */
7
+ value: string;
8
+ /** Additional CSS classes for the container */
9
+ className?: string;
10
+ /** Whether the radio button is disabled */
11
+ disabled?: boolean;
12
+ /** Visual indicator size. The pointer target remains at least 24px. */
13
+ size?: SelectionControlSize;
14
+ /** Test ID for testing purposes */
15
+ 'data-testid'?: string;
16
+ }
17
+ /**
18
+ * Props for RadioButton with a visible label.
19
+ */
20
+ interface RadioButtonWithLabelProps extends RadioButtonBaseProps {
21
+ /** Visible label text or React node displayed next to the radio button */
22
+ label: React.ReactNode;
23
+ /** Additional CSS classes for the label */
24
+ labelClassName?: string;
25
+ 'aria-label'?: never;
26
+ 'aria-labelledby'?: never;
27
+ }
28
+ /**
29
+ * Props for RadioButton with aria-label (no visible label).
30
+ */
31
+ interface RadioButtonWithAriaLabelProps extends RadioButtonBaseProps {
32
+ /** Accessible label for screen readers when no visible label is present */
33
+ 'aria-label': string;
34
+ label?: never;
35
+ labelClassName?: never;
36
+ 'aria-labelledby'?: never;
37
+ }
38
+ /**
39
+ * Props for RadioButton with aria-labelledby (labeled by external element).
40
+ */
41
+ interface RadioButtonWithAriaLabelledByProps extends RadioButtonBaseProps {
42
+ /** ID of an element that labels this radio button */
43
+ 'aria-labelledby': string;
44
+ label?: never;
45
+ labelClassName?: never;
46
+ 'aria-label'?: never;
47
+ }
48
+ /**
49
+ * RadioButton component props.
50
+ *
51
+ * For accessibility compliance (WCAG 2.1), radio buttons must have an accessible name.
52
+ * This is enforced at the type level by requiring one of:
53
+ * - `label`: A visible label displayed next to the radio button
54
+ * - `aria-label`: An accessible label for screen readers (when no visible label)
55
+ * - `aria-labelledby`: Reference to an external labeling element
56
+ *
57
+ * @see https://www.w3.org/WAI/tutorials/forms/labels/
58
+ * @see https://www.w3.org/WAI/ARIA/apg/patterns/radio/
59
+ */
60
+ export type RadioButtonProps = RadioButtonWithLabelProps | RadioButtonWithAriaLabelProps | RadioButtonWithAriaLabelledByProps;
61
+ export declare const RadioButton: import("react").ForwardRefExoticComponent<RadioButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
62
+ export {};
@@ -0,0 +1,38 @@
1
+ import { cn } from "../../utils/cn.js";
2
+ import { SELECTION_CONTROL_HIT_AREA_STYLES } from "../../utils/componentSizes.js";
3
+ import { Text } from "../Text/Text.js";
4
+ import { radioButtonBaseStyles, radioButtonDotSizeStyles, radioButtonFocusStyles, radioButtonIndicatorStyles, radioButtonRootStateStyles, radioButtonSizeStyles } from "./constants.js";
5
+ import { forwardRef, useId } from "react";
6
+ import { jsx, jsxs } from "react/jsx-runtime";
7
+ import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
8
+ //#region packages/components/src/components/RadioButton/RadioButton.tsx
9
+ var RadioButton = forwardRef(({ value, label, className, labelClassName, disabled, size = "sm", "data-testid": dataTestId, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledBy }, ref) => {
10
+ const id = useId();
11
+ return /* @__PURE__ */ jsxs("div", {
12
+ className: cn("flex items-center gap-space-2", className),
13
+ children: [/* @__PURE__ */ jsx(RadioGroupPrimitive.Item, {
14
+ ref,
15
+ className: cn("peer", radioButtonBaseStyles, radioButtonFocusStyles, SELECTION_CONTROL_HIT_AREA_STYLES, radioButtonSizeStyles[size], radioButtonRootStateStyles),
16
+ value,
17
+ id,
18
+ disabled,
19
+ "data-testid": dataTestId,
20
+ "aria-label": ariaLabel,
21
+ "aria-labelledby": ariaLabelledBy,
22
+ children: /* @__PURE__ */ jsx(RadioGroupPrimitive.Indicator, { className: cn("flex items-center justify-center rounded-full", radioButtonDotSizeStyles[size], radioButtonIndicatorStyles) })
23
+ }), label && /* @__PURE__ */ jsx("label", {
24
+ htmlFor: id,
25
+ className: cn("flex cursor-pointer items-center peer-data-[disabled]:cursor-not-allowed peer-data-[disabled]:text-tertiary"),
26
+ children: /* @__PURE__ */ jsx(Text, {
27
+ variant: "sm",
28
+ className: labelClassName,
29
+ children: label
30
+ })
31
+ })]
32
+ });
33
+ });
34
+ RadioButton.displayName = "RadioButton";
35
+ //#endregion
36
+ export { RadioButton };
37
+
38
+ //# sourceMappingURL=RadioButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioButton.js","names":[],"sources":["../../../src/components/RadioButton/RadioButton.tsx"],"sourcesContent":["import { forwardRef, useId } from 'react';\n\nimport * as RadioGroupPrimitive from '@radix-ui/react-radio-group';\n\nimport { cn } from '../../utils/cn';\nimport {\n SELECTION_CONTROL_HIT_AREA_STYLES,\n type SelectionControlSize,\n} from '../../utils/componentSizes';\nimport { Text } from '../Text';\nimport {\n radioButtonBaseStyles,\n radioButtonDotSizeStyles,\n radioButtonFocusStyles,\n radioButtonIndicatorStyles,\n radioButtonRootStateStyles,\n radioButtonSizeStyles,\n} from './constants';\n\n/**\n * Base props shared by all RadioButton variants.\n */\ninterface RadioButtonBaseProps {\n /** Current value of this radio button */\n value: string;\n /** Additional CSS classes for the container */\n className?: string;\n /** Whether the radio button is disabled */\n disabled?: boolean;\n /** Visual indicator size. The pointer target remains at least 24px. */\n size?: SelectionControlSize;\n /** Test ID for testing purposes */\n 'data-testid'?: string;\n}\n\n/**\n * Props for RadioButton with a visible label.\n */\ninterface RadioButtonWithLabelProps extends RadioButtonBaseProps {\n /** Visible label text or React node displayed next to the radio button */\n label: React.ReactNode;\n /** Additional CSS classes for the label */\n labelClassName?: string;\n 'aria-label'?: never;\n 'aria-labelledby'?: never;\n}\n\n/**\n * Props for RadioButton with aria-label (no visible label).\n */\ninterface RadioButtonWithAriaLabelProps extends RadioButtonBaseProps {\n /** Accessible label for screen readers when no visible label is present */\n 'aria-label': string;\n label?: never;\n labelClassName?: never;\n 'aria-labelledby'?: never;\n}\n\n/**\n * Props for RadioButton with aria-labelledby (labeled by external element).\n */\ninterface RadioButtonWithAriaLabelledByProps extends RadioButtonBaseProps {\n /** ID of an element that labels this radio button */\n 'aria-labelledby': string;\n label?: never;\n labelClassName?: never;\n 'aria-label'?: never;\n}\n\n/**\n * RadioButton component props.\n *\n * For accessibility compliance (WCAG 2.1), radio buttons must have an accessible name.\n * This is enforced at the type level by requiring one of:\n * - `label`: A visible label displayed next to the radio button\n * - `aria-label`: An accessible label for screen readers (when no visible label)\n * - `aria-labelledby`: Reference to an external labeling element\n *\n * @see https://www.w3.org/WAI/tutorials/forms/labels/\n * @see https://www.w3.org/WAI/ARIA/apg/patterns/radio/\n */\nexport type RadioButtonProps =\n | RadioButtonWithLabelProps\n | RadioButtonWithAriaLabelProps\n | RadioButtonWithAriaLabelledByProps;\n\nexport const RadioButton = forwardRef<HTMLButtonElement, RadioButtonProps>(\n (\n {\n value,\n label,\n className,\n labelClassName,\n disabled,\n size = 'sm',\n 'data-testid': dataTestId,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n },\n ref\n ) => {\n const id = useId();\n\n return (\n <div className={cn('flex items-center gap-space-2', className)}>\n <RadioGroupPrimitive.Item\n ref={ref}\n className={cn(\n 'peer',\n radioButtonBaseStyles,\n radioButtonFocusStyles,\n SELECTION_CONTROL_HIT_AREA_STYLES,\n radioButtonSizeStyles[size],\n radioButtonRootStateStyles\n )}\n value={value}\n id={id}\n disabled={disabled}\n data-testid={dataTestId}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n >\n <RadioGroupPrimitive.Indicator\n className={cn(\n 'flex items-center justify-center rounded-full',\n radioButtonDotSizeStyles[size],\n radioButtonIndicatorStyles\n )}\n />\n </RadioGroupPrimitive.Item>\n {label && (\n <label\n htmlFor={id}\n // `flex` collapses the label's inherited line box to the text it\n // wraps, so the row's `items-center` aligns the label against the\n // control instead of against a taller, invisible line box.\n className={cn(\n 'flex cursor-pointer items-center peer-data-[disabled]:cursor-not-allowed peer-data-[disabled]:text-tertiary'\n )}\n >\n <Text variant=\"sm\" className={labelClassName}>\n {label}\n </Text>\n </label>\n )}\n </div>\n );\n }\n);\n\nRadioButton.displayName = 'RadioButton';\n"],"mappings":";;;;;;;;AAsFA,IAAa,cAAc,YAEvB,EACE,OACA,OACA,WACA,gBACA,UACA,OAAO,MACP,eAAe,YACf,cAAc,WACd,mBAAmB,kBAErB,QACG;CACH,MAAM,KAAK,MAAM;CAEjB,OACE,qBAAC,OAAD;EAAK,WAAW,GAAG,iCAAiC,SAAS;EAA7D,UAAA,CACE,oBAAC,oBAAoB,MAArB;GACO;GACL,WAAW,GACT,QACA,uBACA,wBACA,mCACA,sBAAsB,OACtB,0BACF;GACO;GACH;GACM;GACV,eAAa;GACb,cAAY;GACZ,mBAAiB;GAEjB,UAAA,oBAAC,oBAAoB,WAArB,EACE,WAAW,GACT,iDACA,yBAAyB,OACzB,0BACF,EACD,CAAA;EACuB,CAAA,GACzB,SACC,oBAAC,SAAD;GACE,SAAS;GAIT,WAAW,GACT,6GACF;GAEA,UAAA,oBAAC,MAAD;IAAM,SAAQ;IAAK,WAAW;IAC3B,UAAA;GACG,CAAA;EACD,CAAA,CAEN;;AAET,CACF;AAEA,YAAY,cAAc"}