@dalcvil/steam-green-react 0.2.0 → 1.0.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 (348) hide show
  1. package/README.md +20 -5
  2. package/dist/components/Avatar/Avatar.css +136 -0
  3. package/dist/components/Avatar/Avatar.d.ts +22 -0
  4. package/dist/components/Avatar/Avatar.d.ts.map +1 -0
  5. package/dist/components/Avatar/Avatar.js +49 -0
  6. package/dist/components/Avatar/Avatar.js.map +1 -0
  7. package/dist/components/Avatar/index.d.ts +3 -0
  8. package/dist/components/Avatar/index.d.ts.map +1 -0
  9. package/dist/components/Button/Button.css +117 -0
  10. package/dist/components/Button/Button.d.ts +18 -0
  11. package/dist/components/Button/Button.d.ts.map +1 -0
  12. package/dist/components/Button/Button.js +29 -0
  13. package/dist/components/Button/Button.js.map +1 -0
  14. package/dist/components/Button/index.d.ts +3 -0
  15. package/dist/components/Button/index.d.ts.map +1 -0
  16. package/dist/components/Checkbox/Checkbox.css +116 -0
  17. package/dist/components/Checkbox/Checkbox.css.d.ts +1 -0
  18. package/dist/components/Checkbox/Checkbox.d.ts +19 -0
  19. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
  20. package/dist/components/Checkbox/Checkbox.js +51 -0
  21. package/dist/components/Checkbox/Checkbox.js.map +1 -0
  22. package/dist/components/Checkbox/index.d.ts +3 -0
  23. package/dist/components/Checkbox/index.d.ts.map +1 -0
  24. package/dist/components/ColorPicker/ColorPicker.css +331 -0
  25. package/dist/components/ColorPicker/ColorPicker.css.d.ts +1 -0
  26. package/dist/components/ColorPicker/ColorPicker.d.ts +29 -0
  27. package/dist/components/ColorPicker/ColorPicker.d.ts.map +1 -0
  28. package/dist/components/ColorPicker/ColorPicker.js +534 -0
  29. package/dist/components/ColorPicker/ColorPicker.js.map +1 -0
  30. package/dist/components/ColorPicker/index.d.ts +3 -0
  31. package/dist/components/{GreenButton → ColorPicker}/index.d.ts.map +1 -1
  32. package/dist/components/Console/Console.css +96 -0
  33. package/dist/components/Console/Console.css.d.ts +1 -0
  34. package/dist/components/Console/Console.d.ts +26 -0
  35. package/dist/components/Console/Console.d.ts.map +1 -0
  36. package/dist/components/Console/Console.js +59 -0
  37. package/dist/components/Console/Console.js.map +1 -0
  38. package/dist/components/Console/index.d.ts +3 -0
  39. package/dist/components/Console/index.d.ts.map +1 -0
  40. package/dist/components/Dialog/Dialog.css +137 -0
  41. package/dist/components/Dialog/Dialog.css.d.ts +1 -0
  42. package/dist/components/Dialog/Dialog.d.ts +28 -0
  43. package/dist/components/Dialog/Dialog.d.ts.map +1 -0
  44. package/dist/components/Dialog/Dialog.js +151 -0
  45. package/dist/components/Dialog/Dialog.js.map +1 -0
  46. package/dist/components/Dialog/index.d.ts +3 -0
  47. package/dist/components/Dialog/index.d.ts.map +1 -0
  48. package/dist/components/Divider/Divider.css +68 -0
  49. package/dist/components/Divider/Divider.css.d.ts +1 -0
  50. package/dist/components/Divider/Divider.d.ts +12 -0
  51. package/dist/components/Divider/Divider.d.ts.map +1 -0
  52. package/dist/components/Divider/Divider.js +23 -0
  53. package/dist/components/Divider/Divider.js.map +1 -0
  54. package/dist/components/Divider/index.d.ts +3 -0
  55. package/dist/components/Divider/index.d.ts.map +1 -0
  56. package/dist/components/FieldLabel/FieldLabel.css +98 -0
  57. package/dist/components/FieldLabel/FieldLabel.css.d.ts +1 -0
  58. package/dist/components/FieldLabel/FieldLabel.d.ts +29 -0
  59. package/dist/components/FieldLabel/FieldLabel.d.ts.map +1 -0
  60. package/dist/components/FieldLabel/FieldLabel.js +42 -0
  61. package/dist/components/FieldLabel/FieldLabel.js.map +1 -0
  62. package/dist/components/FieldLabel/index.d.ts +3 -0
  63. package/dist/components/{GreenPanel → FieldLabel}/index.d.ts.map +1 -1
  64. package/dist/components/GroupBox/GroupBox.css +101 -0
  65. package/dist/components/GroupBox/GroupBox.css.d.ts +1 -0
  66. package/dist/components/GroupBox/GroupBox.d.ts +14 -0
  67. package/dist/components/GroupBox/GroupBox.d.ts.map +1 -0
  68. package/dist/components/GroupBox/GroupBox.js +25 -0
  69. package/dist/components/GroupBox/GroupBox.js.map +1 -0
  70. package/dist/components/GroupBox/index.d.ts +3 -0
  71. package/dist/components/GroupBox/index.d.ts.map +1 -0
  72. package/dist/components/IconButton/IconButton.css +184 -0
  73. package/dist/components/IconButton/IconButton.css.d.ts +1 -0
  74. package/dist/components/IconButton/IconButton.d.ts +56 -0
  75. package/dist/components/IconButton/IconButton.d.ts.map +1 -0
  76. package/dist/components/IconButton/IconButton.js +77 -0
  77. package/dist/components/IconButton/IconButton.js.map +1 -0
  78. package/dist/components/IconButton/index.d.ts +3 -0
  79. package/dist/components/IconButton/index.d.ts.map +1 -0
  80. package/dist/components/LevelMeter/LevelMeter.css +117 -0
  81. package/dist/components/LevelMeter/LevelMeter.css.d.ts +1 -0
  82. package/dist/components/LevelMeter/LevelMeter.d.ts +20 -0
  83. package/dist/components/LevelMeter/LevelMeter.d.ts.map +1 -0
  84. package/dist/components/LevelMeter/LevelMeter.js +44 -0
  85. package/dist/components/LevelMeter/LevelMeter.js.map +1 -0
  86. package/dist/components/LevelMeter/index.d.ts +3 -0
  87. package/dist/components/LevelMeter/index.d.ts.map +1 -0
  88. package/dist/components/Link/Link.css +127 -0
  89. package/dist/components/Link/Link.css.d.ts +1 -0
  90. package/dist/components/Link/Link.d.ts +26 -0
  91. package/dist/components/Link/Link.d.ts.map +1 -0
  92. package/dist/components/Link/Link.js +60 -0
  93. package/dist/components/Link/Link.js.map +1 -0
  94. package/dist/components/Link/index.d.ts +3 -0
  95. package/dist/components/Link/index.d.ts.map +1 -0
  96. package/dist/components/List/List.css +224 -0
  97. package/dist/components/List/List.css.d.ts +1 -0
  98. package/dist/components/List/List.d.ts +49 -0
  99. package/dist/components/List/List.d.ts.map +1 -0
  100. package/dist/components/List/List.js +300 -0
  101. package/dist/components/List/List.js.map +1 -0
  102. package/dist/components/List/index.d.ts +3 -0
  103. package/dist/components/List/index.d.ts.map +1 -0
  104. package/dist/components/Menu/Menu.css +122 -0
  105. package/dist/components/Menu/Menu.css.d.ts +1 -0
  106. package/dist/components/Menu/Menu.d.ts +46 -0
  107. package/dist/components/Menu/Menu.d.ts.map +1 -0
  108. package/dist/components/Menu/Menu.js +246 -0
  109. package/dist/components/Menu/Menu.js.map +1 -0
  110. package/dist/components/Menu/index.d.ts +3 -0
  111. package/dist/components/Menu/index.d.ts.map +1 -0
  112. package/dist/components/MenuBar/MenuBar.css +94 -0
  113. package/dist/components/MenuBar/MenuBar.css.d.ts +1 -0
  114. package/dist/components/MenuBar/MenuBar.d.ts +34 -0
  115. package/dist/components/MenuBar/MenuBar.d.ts.map +1 -0
  116. package/dist/components/MenuBar/MenuBar.js +129 -0
  117. package/dist/components/MenuBar/MenuBar.js.map +1 -0
  118. package/dist/components/MenuBar/index.d.ts +3 -0
  119. package/dist/components/MenuBar/index.d.ts.map +1 -0
  120. package/dist/components/NavBar/NavBar.css +179 -0
  121. package/dist/components/NavBar/NavBar.css.d.ts +1 -0
  122. package/dist/components/NavBar/NavBar.d.ts +39 -0
  123. package/dist/components/NavBar/NavBar.d.ts.map +1 -0
  124. package/dist/components/NavBar/NavBar.js +198 -0
  125. package/dist/components/NavBar/NavBar.js.map +1 -0
  126. package/dist/components/NavBar/index.d.ts +3 -0
  127. package/dist/components/NavBar/index.d.ts.map +1 -0
  128. package/dist/components/Notification/Notification.css +176 -0
  129. package/dist/components/Notification/Notification.css.d.ts +1 -0
  130. package/dist/components/Notification/Notification.d.ts +26 -0
  131. package/dist/components/Notification/Notification.d.ts.map +1 -0
  132. package/dist/components/Notification/Notification.js +181 -0
  133. package/dist/components/Notification/Notification.js.map +1 -0
  134. package/dist/components/Notification/index.d.ts +3 -0
  135. package/dist/components/Notification/index.d.ts.map +1 -0
  136. package/dist/components/Panel/Panel.css +56 -0
  137. package/dist/components/Panel/Panel.css.d.ts +1 -0
  138. package/dist/components/Panel/Panel.d.ts +14 -0
  139. package/dist/components/Panel/Panel.d.ts.map +1 -0
  140. package/dist/components/Panel/Panel.js +42 -0
  141. package/dist/components/Panel/Panel.js.map +1 -0
  142. package/dist/components/Panel/index.d.ts +3 -0
  143. package/dist/components/Panel/index.d.ts.map +1 -0
  144. package/dist/components/ProgressBar/ProgressBar.css +108 -0
  145. package/dist/components/ProgressBar/ProgressBar.css.d.ts +1 -0
  146. package/dist/components/ProgressBar/ProgressBar.d.ts +22 -0
  147. package/dist/components/ProgressBar/ProgressBar.d.ts.map +1 -0
  148. package/dist/components/ProgressBar/ProgressBar.js +43 -0
  149. package/dist/components/ProgressBar/ProgressBar.js.map +1 -0
  150. package/dist/components/ProgressBar/index.d.ts +3 -0
  151. package/dist/components/ProgressBar/index.d.ts.map +1 -0
  152. package/dist/components/Radio/Radio.css +125 -0
  153. package/dist/components/Radio/Radio.css.d.ts +1 -0
  154. package/dist/components/Radio/Radio.d.ts +40 -0
  155. package/dist/components/Radio/Radio.d.ts.map +1 -0
  156. package/dist/components/Radio/Radio.js +91 -0
  157. package/dist/components/Radio/Radio.js.map +1 -0
  158. package/dist/components/Radio/index.d.ts +3 -0
  159. package/dist/components/Radio/index.d.ts.map +1 -0
  160. package/dist/components/RichText/RichText.css +96 -0
  161. package/dist/components/RichText/RichText.css.d.ts +1 -0
  162. package/dist/components/RichText/RichText.d.ts +25 -0
  163. package/dist/components/RichText/RichText.d.ts.map +1 -0
  164. package/dist/components/RichText/RichText.js +56 -0
  165. package/dist/components/RichText/RichText.js.map +1 -0
  166. package/dist/components/RichText/index.d.ts +3 -0
  167. package/dist/components/RichText/index.d.ts.map +1 -0
  168. package/dist/components/ScrollArea/ScrollArea.css +236 -0
  169. package/dist/components/ScrollArea/ScrollArea.css.d.ts +1 -0
  170. package/dist/components/ScrollArea/ScrollArea.d.ts +25 -0
  171. package/dist/components/ScrollArea/ScrollArea.d.ts.map +1 -0
  172. package/dist/components/ScrollArea/ScrollArea.js +124 -0
  173. package/dist/components/ScrollArea/ScrollArea.js.map +1 -0
  174. package/dist/components/ScrollArea/index.d.ts +3 -0
  175. package/dist/components/ScrollArea/index.d.ts.map +1 -0
  176. package/dist/components/Scrollbar/Scrollbar.css +260 -0
  177. package/dist/components/Scrollbar/Scrollbar.css.d.ts +1 -0
  178. package/dist/components/Scrollbar/Scrollbar.d.ts +31 -0
  179. package/dist/components/Scrollbar/Scrollbar.d.ts.map +1 -0
  180. package/dist/components/Scrollbar/Scrollbar.js +277 -0
  181. package/dist/components/Scrollbar/Scrollbar.js.map +1 -0
  182. package/dist/components/Scrollbar/index.d.ts +3 -0
  183. package/dist/components/Scrollbar/index.d.ts.map +1 -0
  184. package/dist/components/Select/Select.css +299 -0
  185. package/dist/components/Select/Select.css.d.ts +1 -0
  186. package/dist/components/Select/Select.d.ts +52 -0
  187. package/dist/components/Select/Select.d.ts.map +1 -0
  188. package/dist/components/Select/Select.js +281 -0
  189. package/dist/components/Select/Select.js.map +1 -0
  190. package/dist/components/Select/index.d.ts +3 -0
  191. package/dist/components/Select/index.d.ts.map +1 -0
  192. package/dist/components/Slider/Slider.css +158 -0
  193. package/dist/components/Slider/Slider.css.d.ts +1 -0
  194. package/dist/components/Slider/Slider.d.ts +26 -0
  195. package/dist/components/Slider/Slider.d.ts.map +1 -0
  196. package/dist/components/Slider/Slider.js +67 -0
  197. package/dist/components/Slider/Slider.js.map +1 -0
  198. package/dist/components/Slider/index.d.ts +3 -0
  199. package/dist/components/Slider/index.d.ts.map +1 -0
  200. package/dist/components/SpinBox/SpinBox.css +152 -0
  201. package/dist/components/SpinBox/SpinBox.css.d.ts +1 -0
  202. package/dist/components/SpinBox/SpinBox.d.ts +28 -0
  203. package/dist/components/SpinBox/SpinBox.d.ts.map +1 -0
  204. package/dist/components/SpinBox/SpinBox.js +207 -0
  205. package/dist/components/SpinBox/SpinBox.js.map +1 -0
  206. package/dist/components/SpinBox/index.d.ts +3 -0
  207. package/dist/components/SpinBox/index.d.ts.map +1 -0
  208. package/dist/components/Spinner/Spinner.css +137 -0
  209. package/dist/components/Spinner/Spinner.css.d.ts +1 -0
  210. package/dist/components/Spinner/Spinner.d.ts +20 -0
  211. package/dist/components/Spinner/Spinner.d.ts.map +1 -0
  212. package/dist/components/Spinner/Spinner.js +36 -0
  213. package/dist/components/Spinner/Spinner.js.map +1 -0
  214. package/dist/components/Spinner/index.d.ts +3 -0
  215. package/dist/components/Spinner/index.d.ts.map +1 -0
  216. package/dist/components/Splitter/Splitter.css +119 -0
  217. package/dist/components/Splitter/Splitter.css.d.ts +1 -0
  218. package/dist/components/Splitter/Splitter.d.ts +25 -0
  219. package/dist/components/Splitter/Splitter.d.ts.map +1 -0
  220. package/dist/components/Splitter/Splitter.js +212 -0
  221. package/dist/components/Splitter/Splitter.js.map +1 -0
  222. package/dist/components/Splitter/index.d.ts +3 -0
  223. package/dist/components/Splitter/index.d.ts.map +1 -0
  224. package/dist/components/StatusBar/StatusBar.css +97 -0
  225. package/dist/components/StatusBar/StatusBar.css.d.ts +1 -0
  226. package/dist/components/StatusBar/StatusBar.d.ts +22 -0
  227. package/dist/components/StatusBar/StatusBar.d.ts.map +1 -0
  228. package/dist/components/StatusBar/StatusBar.js +56 -0
  229. package/dist/components/StatusBar/StatusBar.js.map +1 -0
  230. package/dist/components/StatusBar/index.d.ts +3 -0
  231. package/dist/components/StatusBar/index.d.ts.map +1 -0
  232. package/dist/components/StatusLabel/StatusLabel.css +93 -0
  233. package/dist/components/StatusLabel/StatusLabel.css.d.ts +1 -0
  234. package/dist/components/StatusLabel/StatusLabel.d.ts +20 -0
  235. package/dist/components/StatusLabel/StatusLabel.d.ts.map +1 -0
  236. package/dist/components/StatusLabel/StatusLabel.js +42 -0
  237. package/dist/components/StatusLabel/StatusLabel.js.map +1 -0
  238. package/dist/components/StatusLabel/index.d.ts +3 -0
  239. package/dist/components/StatusLabel/index.d.ts.map +1 -0
  240. package/dist/components/Table/Table.css +253 -0
  241. package/dist/components/Table/Table.css.d.ts +1 -0
  242. package/dist/components/Table/Table.d.ts +67 -0
  243. package/dist/components/Table/Table.d.ts.map +1 -0
  244. package/dist/components/Table/Table.js +429 -0
  245. package/dist/components/Table/Table.js.map +1 -0
  246. package/dist/components/Table/index.d.ts +3 -0
  247. package/dist/components/Table/index.d.ts.map +1 -0
  248. package/dist/components/Tabs/Tabs.css +138 -0
  249. package/dist/components/Tabs/Tabs.css.d.ts +1 -0
  250. package/dist/components/Tabs/Tabs.d.ts +34 -0
  251. package/dist/components/Tabs/Tabs.d.ts.map +1 -0
  252. package/dist/components/Tabs/Tabs.js +140 -0
  253. package/dist/components/Tabs/Tabs.js.map +1 -0
  254. package/dist/components/Tabs/index.d.ts +3 -0
  255. package/dist/components/Tabs/index.d.ts.map +1 -0
  256. package/dist/components/TextInput/TextInput.css +133 -0
  257. package/dist/components/TextInput/TextInput.css.d.ts +1 -0
  258. package/dist/components/TextInput/TextInput.d.ts +16 -0
  259. package/dist/components/TextInput/TextInput.d.ts.map +1 -0
  260. package/dist/components/TextInput/TextInput.js +38 -0
  261. package/dist/components/TextInput/TextInput.js.map +1 -0
  262. package/dist/components/TextInput/index.d.ts +3 -0
  263. package/dist/components/TextInput/index.d.ts.map +1 -0
  264. package/dist/components/Textarea/Textarea.css +121 -0
  265. package/dist/components/Textarea/Textarea.css.d.ts +1 -0
  266. package/dist/components/Textarea/Textarea.d.ts +21 -0
  267. package/dist/components/Textarea/Textarea.d.ts.map +1 -0
  268. package/dist/components/Textarea/Textarea.js +61 -0
  269. package/dist/components/Textarea/Textarea.js.map +1 -0
  270. package/dist/components/Textarea/index.d.ts +3 -0
  271. package/dist/components/Textarea/index.d.ts.map +1 -0
  272. package/dist/components/TitleBar/TitleBar.css +76 -0
  273. package/dist/components/TitleBar/TitleBar.css.d.ts +1 -0
  274. package/dist/components/TitleBar/TitleBar.d.ts +20 -0
  275. package/dist/components/TitleBar/TitleBar.d.ts.map +1 -0
  276. package/dist/components/TitleBar/TitleBar.js +43 -0
  277. package/dist/components/TitleBar/TitleBar.js.map +1 -0
  278. package/dist/components/TitleBar/index.d.ts +3 -0
  279. package/dist/components/TitleBar/index.d.ts.map +1 -0
  280. package/dist/components/ToggleButton/ToggleButton.css +162 -0
  281. package/dist/components/ToggleButton/ToggleButton.css.d.ts +1 -0
  282. package/dist/components/ToggleButton/ToggleButton.d.ts +27 -0
  283. package/dist/components/ToggleButton/ToggleButton.d.ts.map +1 -0
  284. package/dist/components/ToggleButton/ToggleButton.js +52 -0
  285. package/dist/components/ToggleButton/ToggleButton.js.map +1 -0
  286. package/dist/components/ToggleButton/index.d.ts +3 -0
  287. package/dist/components/ToggleButton/index.d.ts.map +1 -0
  288. package/dist/components/Toolbar/Toolbar.css +202 -0
  289. package/dist/components/Toolbar/Toolbar.css.d.ts +1 -0
  290. package/dist/components/Toolbar/Toolbar.d.ts +46 -0
  291. package/dist/components/Toolbar/Toolbar.d.ts.map +1 -0
  292. package/dist/components/Toolbar/Toolbar.js +102 -0
  293. package/dist/components/Toolbar/Toolbar.js.map +1 -0
  294. package/dist/components/Toolbar/index.d.ts +3 -0
  295. package/dist/components/Toolbar/index.d.ts.map +1 -0
  296. package/dist/components/Tooltip/Tooltip.css +86 -0
  297. package/dist/components/Tooltip/Tooltip.css.d.ts +1 -0
  298. package/dist/components/Tooltip/Tooltip.d.ts +22 -0
  299. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -0
  300. package/dist/components/Tooltip/Tooltip.js +92 -0
  301. package/dist/components/Tooltip/Tooltip.js.map +1 -0
  302. package/dist/components/Tooltip/index.d.ts +3 -0
  303. package/dist/components/Tooltip/index.d.ts.map +1 -0
  304. package/dist/components/TreeView/TreeView.css +191 -0
  305. package/dist/components/TreeView/TreeView.css.d.ts +1 -0
  306. package/dist/components/TreeView/TreeView.d.ts +46 -0
  307. package/dist/components/TreeView/TreeView.d.ts.map +1 -0
  308. package/dist/components/TreeView/TreeView.js +331 -0
  309. package/dist/components/TreeView/TreeView.js.map +1 -0
  310. package/dist/components/TreeView/index.d.ts +3 -0
  311. package/dist/components/TreeView/index.d.ts.map +1 -0
  312. package/dist/components/Window/Window.css +218 -0
  313. package/dist/components/Window/Window.css.d.ts +1 -0
  314. package/dist/components/Window/Window.d.ts +30 -0
  315. package/dist/components/Window/Window.d.ts.map +1 -0
  316. package/dist/components/Window/Window.js +156 -0
  317. package/dist/components/Window/Window.js.map +1 -0
  318. package/dist/components/Window/index.d.ts +3 -0
  319. package/dist/components/Window/index.d.ts.map +1 -0
  320. package/dist/index.d.ts +91 -10
  321. package/dist/index.d.ts.map +1 -1
  322. package/dist/index.js +41 -3
  323. package/dist/styles/scrollbars.css +123 -0
  324. package/dist/styles/scrollbars.css.d.ts +1 -0
  325. package/dist/styles/theme.css +86 -41
  326. package/dist/styles/tokens.css +202 -0
  327. package/dist/styles/tokens.css.d.ts +1 -0
  328. package/dist/test/a11y.d.ts +3 -0
  329. package/dist/test/a11y.d.ts.map +1 -0
  330. package/dist/test/index.d.ts +2 -0
  331. package/dist/test/index.d.ts.map +1 -0
  332. package/dist/test/setup.d.ts +2 -0
  333. package/dist/test/setup.d.ts.map +1 -0
  334. package/package.json +13 -2
  335. package/dist/components/GreenButton/GreenButton.css +0 -47
  336. package/dist/components/GreenButton/GreenButton.d.ts +0 -8
  337. package/dist/components/GreenButton/GreenButton.d.ts.map +0 -1
  338. package/dist/components/GreenButton/GreenButton.js +0 -20
  339. package/dist/components/GreenButton/GreenButton.js.map +0 -1
  340. package/dist/components/GreenButton/index.d.ts +0 -3
  341. package/dist/components/GreenPanel/GreenPanel.css +0 -45
  342. package/dist/components/GreenPanel/GreenPanel.d.ts +0 -12
  343. package/dist/components/GreenPanel/GreenPanel.d.ts.map +0 -1
  344. package/dist/components/GreenPanel/GreenPanel.js +0 -24
  345. package/dist/components/GreenPanel/GreenPanel.js.map +0 -1
  346. package/dist/components/GreenPanel/index.d.ts +0 -3
  347. /package/dist/components/{GreenButton/GreenButton.css.d.ts → Avatar/Avatar.css.d.ts} +0 -0
  348. /package/dist/components/{GreenPanel/GreenPanel.css.d.ts → Button/Button.css.d.ts} +0 -0
@@ -0,0 +1,22 @@
1
+ import type { HTMLAttributes } from 'react';
2
+ import './ProgressBar.css';
3
+ export interface ProgressBarProps extends HTMLAttributes<HTMLDivElement> {
4
+ /** 0–100. Omit to render the indeterminate variant. */
5
+ value?: number;
6
+ /** Upper bound when `value` is absolute rather than a percentage. Defaults to 100. */
7
+ max?: number;
8
+ /** Show a label under the bar. */
9
+ showValue?: boolean;
10
+ /** Format the label. Defaults to "NN%". */
11
+ formatValue?: (value: number, max: number) => string;
12
+ /** Accessible name. Required when there is no visible label. */
13
+ label?: string;
14
+ /** Compact variant, for inline use. */
15
+ small?: boolean;
16
+ /** Render the error frame. */
17
+ error?: boolean;
18
+ /** Continuous variant: no discrete value, advances on its own. */
19
+ continuous?: boolean;
20
+ }
21
+ export declare const ProgressBar: import("react").ForwardRefExoticComponent<ProgressBarProps & import("react").RefAttributes<HTMLDivElement>>;
22
+ //# sourceMappingURL=ProgressBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressBar.d.ts","sourceRoot":"","sources":["../../../src/components/ProgressBar/ProgressBar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,cAAc,EAAE,MAAM,OAAO,CAAA;AAE1D,OAAO,mBAAmB,CAAA;AAE1B,MAAM,WAAW,gBAAiB,SAAQ,cAAc,CAAC,cAAc,CAAC;IACtE,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,sFAAsF;IACtF,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,kCAAkC;IAClC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAA;IACpD,gEAAgE;IAChE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,uCAAuC;IACvC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,8BAA8B;IAC9B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,kEAAkE;IAClE,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,eAAO,MAAM,WAAW,6GAkDtB,CAAA"}
@@ -0,0 +1,43 @@
1
+ import { forwardRef } from "react";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import "./ProgressBar.css";
4
+ //#region src/components/ProgressBar/ProgressBar.tsx
5
+ var ProgressBar = forwardRef(function ProgressBar({ className, value, max = 100, showValue = false, formatValue, label, small = false, error = false, continuous = false, ...rest }, ref) {
6
+ const ratio = value === void 0 || max <= 0 ? 0 : value / max;
7
+ const percent = Math.min(100, Math.max(0, ratio * 100));
8
+ const text = value === void 0 ? null : formatValue ? formatValue(value, max) : `${Math.round(percent)}%`;
9
+ const hasText = text !== null;
10
+ const classes = ["vgui-progress"];
11
+ if (small) classes.push("vgui-progress--small");
12
+ if (error) classes.push("vgui-progress--error");
13
+ if (value === void 0) classes.push("vgui-progress--indeterminate");
14
+ if (continuous) classes.push("vgui-progress--continuous");
15
+ if (showValue && hasText) classes.push("vgui-progress--with-text");
16
+ if (className) classes.push(className);
17
+ return /* @__PURE__ */ jsxs("div", {
18
+ ref,
19
+ className: classes.join(" "),
20
+ role: "progressbar",
21
+ "aria-label": label,
22
+ "aria-valuemin": 0,
23
+ "aria-valuemax": max,
24
+ "aria-valuenow": value === void 0 ? void 0 : value,
25
+ "aria-valuetext": formatValue && hasText ? text : void 0,
26
+ ...rest,
27
+ children: [/* @__PURE__ */ jsx("div", {
28
+ className: "vgui-progress__trough",
29
+ children: /* @__PURE__ */ jsx("div", {
30
+ className: "vgui-progress__fill",
31
+ style: { "--vgui-progress": `${percent}%` }
32
+ })
33
+ }), showValue && text !== null ? /* @__PURE__ */ jsx("span", {
34
+ className: "vgui-progress__text",
35
+ children: text
36
+ }) : null]
37
+ });
38
+ });
39
+ ProgressBar.displayName = "ProgressBar";
40
+ //#endregion
41
+ export { ProgressBar };
42
+
43
+ //# sourceMappingURL=ProgressBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressBar.js","names":[],"sources":["../../../src/components/ProgressBar/ProgressBar.tsx"],"sourcesContent":["import { forwardRef } from 'react'\nimport type { CSSProperties, HTMLAttributes } from 'react'\n\nimport './ProgressBar.css'\n\nexport interface ProgressBarProps extends HTMLAttributes<HTMLDivElement> {\n /** 0–100. Omit to render the indeterminate variant. */\n value?: number\n /** Upper bound when `value` is absolute rather than a percentage. Defaults to 100. */\n max?: number\n /** Show a label under the bar. */\n showValue?: boolean\n /** Format the label. Defaults to \"NN%\". */\n formatValue?: (value: number, max: number) => string\n /** Accessible name. Required when there is no visible label. */\n label?: string\n /** Compact variant, for inline use. */\n small?: boolean\n /** Render the error frame. */\n error?: boolean\n /** Continuous variant: no discrete value, advances on its own. */\n continuous?: boolean\n}\n\nexport const ProgressBar = forwardRef<HTMLDivElement, ProgressBarProps>(function ProgressBar(\n {\n className,\n value,\n max = 100,\n showValue = false,\n formatValue,\n label,\n small = false,\n error = false,\n continuous = false,\n ...rest\n },\n ref,\n) {\n const ratio = value === undefined || max <= 0 ? 0 : value / max\n const percent = Math.min(100, Math.max(0, ratio * 100))\n const text = value === undefined ? null : formatValue ? formatValue(value, max) : `${Math.round(percent)}%`\n const hasText = text !== null\n\n const classes = ['vgui-progress']\n if (small) classes.push('vgui-progress--small')\n if (error) classes.push('vgui-progress--error')\n if (value === undefined) classes.push('vgui-progress--indeterminate')\n if (continuous) classes.push('vgui-progress--continuous')\n if (showValue && hasText) classes.push('vgui-progress--with-text')\n if (className) classes.push(className)\n\n return (\n <div\n ref={ref}\n className={classes.join(' ')}\n role=\"progressbar\"\n aria-label={label}\n aria-valuemin={0}\n aria-valuemax={max}\n /* Omitted entirely when unknown: `0` would announce \"0%\", not \"busy\". */\n aria-valuenow={value === undefined ? undefined : value}\n aria-valuetext={formatValue && hasText ? text : undefined}\n {...rest}\n >\n <div className=\"vgui-progress__trough\">\n <div\n className=\"vgui-progress__fill\"\n style={{ '--vgui-progress': `${percent}%` } as CSSProperties}\n />\n </div>\n {showValue && text !== null ? <span className=\"vgui-progress__text\">{text}</span> : null}\n </div>\n )\n})\n\nProgressBar.displayName = 'ProgressBar'\n"],"mappings":";;;;AAwBA,IAAa,cAAc,WAA6C,SAAS,YAC/E,EACE,WACA,OACA,MAAM,KACN,YAAY,OACZ,aACA,OACA,QAAQ,OACR,QAAQ,OACR,aAAa,OACb,GAAG,QAEL,KACA;CACA,MAAM,QAAQ,UAAU,KAAA,KAAa,OAAO,IAAI,IAAI,QAAQ;CAC5D,MAAM,UAAU,KAAK,IAAI,KAAK,KAAK,IAAI,GAAG,QAAQ,GAAG,CAAC;CACtD,MAAM,OAAO,UAAU,KAAA,IAAY,OAAO,cAAc,YAAY,OAAO,GAAG,IAAI,GAAG,KAAK,MAAM,OAAO,EAAE;CACzG,MAAM,UAAU,SAAS;CAEzB,MAAM,UAAU,CAAC,eAAe;CAChC,IAAI,OAAO,QAAQ,KAAK,sBAAsB;CAC9C,IAAI,OAAO,QAAQ,KAAK,sBAAsB;CAC9C,IAAI,UAAU,KAAA,GAAW,QAAQ,KAAK,8BAA8B;CACpE,IAAI,YAAY,QAAQ,KAAK,2BAA2B;CACxD,IAAI,aAAa,SAAS,QAAQ,KAAK,0BAA0B;CACjE,IAAI,WAAW,QAAQ,KAAK,SAAS;CAErC,OACE,qBAAC,OAAD;EACO;EACL,WAAW,QAAQ,KAAK,GAAG;EAC3B,MAAK;EACL,cAAY;EACZ,iBAAe;EACf,iBAAe;EAEf,iBAAe,UAAU,KAAA,IAAY,KAAA,IAAY;EACjD,kBAAgB,eAAe,UAAU,OAAO,KAAA;EAChD,GAAI;EAVN,UAAA,CAYE,oBAAC,OAAD;GAAK,WAAU;GACb,UAAA,oBAAC,OAAD;IACE,WAAU;IACV,OAAO,EAAE,mBAAmB,GAAG,QAAQ,GAAG;GAC3C,CAAA;EACE,CAAA,GACJ,aAAa,SAAS,OAAO,oBAAC,QAAD;GAAM,WAAU;GAAuB,UAAA;EAAW,CAAA,IAAI,IACjF;;AAET,CAAC;AAED,YAAY,cAAc"}
@@ -0,0 +1,3 @@
1
+ export { ProgressBar } from './ProgressBar';
2
+ export type { ProgressBarProps } from './ProgressBar';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ProgressBar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,125 @@
1
+ /*
2
+ * Green Steam radio button and its group.
3
+ *
4
+ * Geometry is identical to `.vgui-checkbox` — same 15×15, same 3px inset, same
5
+ * *inverted* bevel, same dotted `rad*Focus` ring — and only the shape and the
6
+ * mark differ (docs/components/Radio.md). The two stylesheets are kept as
7
+ * siblings rather than sharing a `vgui-check-control` base: a shared rule would
8
+ * have to live in one component's stylesheet and be imported by the other, and
9
+ * per-component CSS is what travels with a tree-shaken import.
10
+ *
11
+ * The circle and the dot are pure geometry — `border-radius` and a filled
12
+ * `::after` — so no sprites ship.
13
+ *
14
+ * Deviations required by WCAG:
15
+ *
16
+ * - `rad*Focus`'s dotted ring is 1.15:1 on the circle face; the shipped ring
17
+ * is `--vgui-focus-ring` at the same `-3px` offset, with the literal ring
18
+ * behind the `.vgui-crisp` opt-in.
19
+ * - A horizontal group wraps instead of overflowing at 200% zoom.
20
+ */
21
+
22
+ .vgui-radio-group {
23
+ display: block;
24
+ margin: 0;
25
+ padding: 0;
26
+ border: 0;
27
+ font: inherit;
28
+ color: var(--vgui-text);
29
+ }
30
+
31
+ /* The legend is the group's accessible name: "Fullscreen, selected, 1 of 3"
32
+ * is only intelligible with the question attached. */
33
+ .vgui-radio-group__legend {
34
+ padding: 0;
35
+ color: var(--vgui-text);
36
+ }
37
+
38
+ .vgui-radio-group__options {
39
+ display: flex;
40
+ flex-direction: column;
41
+ gap: 3px;
42
+ padding-top: 3px;
43
+ }
44
+
45
+ .vgui-radio-group--horizontal .vgui-radio-group__options {
46
+ flex-direction: row;
47
+ flex-wrap: wrap;
48
+ column-gap: 12px;
49
+ row-gap: var(--vgui-field-inset);
50
+ }
51
+
52
+ .vgui-radio {
53
+ display: inline-flex;
54
+ align-items: center;
55
+ gap: 3px;
56
+ font: inherit;
57
+ color: var(--vgui-text);
58
+ cursor: pointer;
59
+ }
60
+
61
+ /* Hidden but present and focusable — never `display: none`. */
62
+ .vgui-radio__input {
63
+ position: absolute;
64
+ inline-size: 1px;
65
+ block-size: 1px;
66
+ margin: -1px;
67
+ padding: 0;
68
+ overflow: hidden;
69
+ clip-path: inset(50%);
70
+ white-space: nowrap;
71
+ border: 0;
72
+ }
73
+
74
+ .vgui-radio__circle {
75
+ position: relative;
76
+ flex: 0 0 auto;
77
+ box-sizing: border-box;
78
+ inline-size: var(--vgui-checkbox-size);
79
+ block-size: var(--vgui-checkbox-size);
80
+ border-radius: 50%;
81
+ background-color: var(--vgui-surface);
82
+ border-top: var(--vgui-bevel-width) solid var(--vgui-bevel-dark);
83
+ border-left: var(--vgui-bevel-width) solid var(--vgui-bevel-dark);
84
+ border-bottom: var(--vgui-bevel-width) solid var(--vgui-bevel-light);
85
+ border-right: var(--vgui-bevel-width) solid var(--vgui-bevel-light);
86
+ }
87
+
88
+ /* `radSelStd`: a centred 5px filled dot, leaving a ring of background between
89
+ * the mark and the border, which is what the sprite shows. */
90
+ .vgui-radio__input:checked ~ .vgui-radio__circle::after {
91
+ content: '';
92
+ position: absolute;
93
+ left: 50%;
94
+ top: 50%;
95
+ inline-size: 5px;
96
+ block-size: 5px;
97
+ margin: -2.5px 0 0 -2.5px;
98
+ border-radius: 50%;
99
+ background-color: var(--vgui-text-strong);
100
+ }
101
+
102
+ .vgui-radio__input:focus-visible ~ .vgui-radio__circle {
103
+ outline: var(--vgui-focus-ring);
104
+ outline-offset: var(--vgui-focus-ring-offset);
105
+ }
106
+
107
+ /* Valve's literal `rad*Focus` ring, reachable only through the opt-in. */
108
+ .vgui-crisp .vgui-radio__input:focus-visible ~ .vgui-radio__circle {
109
+ outline: var(--vgui-focus-ring-valve);
110
+ outline-offset: var(--vgui-focus-ring-valve-offset);
111
+ }
112
+
113
+ .vgui-radio__input:disabled ~ .vgui-radio__label {
114
+ color: var(--vgui-text-disabled);
115
+ text-shadow: 1px 1px 0 var(--vgui-text-disabled-shadow);
116
+ }
117
+
118
+ .vgui-radio__input:disabled ~ .vgui-radio__circle {
119
+ cursor: not-allowed;
120
+ }
121
+
122
+ .vgui-radio__label {
123
+ min-width: 0;
124
+ overflow-wrap: anywhere;
125
+ }
@@ -0,0 +1 @@
1
+ export {}
@@ -0,0 +1,40 @@
1
+ import type { InputHTMLAttributes, ReactNode } from 'react';
2
+ import './Radio.css';
3
+ export interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {
4
+ /** Value reported to the enclosing RadioGroup. */
5
+ value: string;
6
+ /** The label. Rendered as part of the clickable area. */
7
+ label?: ReactNode;
8
+ }
9
+ export interface RadioGroupProps {
10
+ /** Group legend, rendered as a <legend>. */
11
+ label: ReactNode;
12
+ /** Controlled selected value. */
13
+ value?: string;
14
+ /** Initial value for uncontrolled use. */
15
+ defaultValue?: string;
16
+ /** Called with the newly selected value. */
17
+ onValueChange?: (value: string) => void;
18
+ /** Shared input name; useId() is used when omitted. */
19
+ name?: string;
20
+ /** Lay the radios out horizontally rather than stacked. */
21
+ orientation?: 'vertical' | 'horizontal';
22
+ /** Disable the whole group. */
23
+ disabled?: boolean;
24
+ children: ReactNode;
25
+ }
26
+ /**
27
+ * A `fieldset`/`legend` group for `Radio`s. It is a context provider, not a DOM
28
+ * wrapper for logic: it passes `name`, the selected value, `onChange` and
29
+ * `disabled` down, so `Radio` stays a thin wrapper over a native input and the
30
+ * browser's own arrow-key navigation inside the group keeps working
31
+ * (docs/components/Radio.md, "Grouping").
32
+ */
33
+ export declare function RadioGroup({ label, value, defaultValue, onValueChange, name, orientation, disabled, children, }: RadioGroupProps): import("react").JSX.Element;
34
+ /**
35
+ * A 15×15 circle with the same *inset* bevel as `Checkbox` — dark top/left,
36
+ * light bottom/right — and a filled dot instead of a tick
37
+ * (docs/components/Radio.md, "CSS recipe").
38
+ */
39
+ export declare const Radio: import("react").ForwardRefExoticComponent<RadioProps & import("react").RefAttributes<HTMLInputElement>>;
40
+ //# sourceMappingURL=Radio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Radio.d.ts","sourceRoot":"","sources":["../../../src/components/Radio/Radio.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAe,mBAAmB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAExE,OAAO,aAAa,CAAA;AAWpB,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACrF,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAA;IACb,yDAAyD;IACzD,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,4CAA4C;IAC5C,KAAK,EAAE,SAAS,CAAA;IAChB,iCAAiC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,0CAA0C;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,2DAA2D;IAC3D,WAAW,CAAC,EAAE,UAAU,GAAG,YAAY,CAAA;IACvC,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,SAAS,CAAA;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,KAAK,EACL,YAAY,EACZ,aAAa,EACb,IAAI,EACJ,WAAwB,EACxB,QAAgB,EAChB,QAAQ,GACT,EAAE,eAAe,+BAkCjB;AAED;;;;GAIG;AACH,eAAO,MAAM,KAAK,yGA+BhB,CAAA"}
@@ -0,0 +1,91 @@
1
+ import { createContext, forwardRef, useCallback, useContext, useId, useMemo, useState } from "react";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import "./Radio.css";
4
+ //#region src/components/Radio/Radio.tsx
5
+ var RadioGroupContext = createContext(null);
6
+ /**
7
+ * A `fieldset`/`legend` group for `Radio`s. It is a context provider, not a DOM
8
+ * wrapper for logic: it passes `name`, the selected value, `onChange` and
9
+ * `disabled` down, so `Radio` stays a thin wrapper over a native input and the
10
+ * browser's own arrow-key navigation inside the group keeps working
11
+ * (docs/components/Radio.md, "Grouping").
12
+ */
13
+ function RadioGroup({ label, value, defaultValue, onValueChange, name, orientation = "vertical", disabled = false, children }) {
14
+ const generatedName = useId();
15
+ const isControlled = value !== void 0;
16
+ const [uncontrolled, setUncontrolled] = useState(defaultValue);
17
+ const selected = isControlled ? value : uncontrolled;
18
+ const select = useCallback((next) => {
19
+ if (!isControlled) setUncontrolled(next);
20
+ onValueChange?.(next);
21
+ }, [isControlled, onValueChange]);
22
+ const context = useMemo(() => ({
23
+ name: name ?? generatedName,
24
+ value: selected,
25
+ select,
26
+ disabled
27
+ }), [
28
+ name,
29
+ generatedName,
30
+ selected,
31
+ select,
32
+ disabled
33
+ ]);
34
+ return /* @__PURE__ */ jsxs("fieldset", {
35
+ className: orientation === "horizontal" ? "vgui-radio-group vgui-radio-group--horizontal" : "vgui-radio-group",
36
+ disabled,
37
+ children: [/* @__PURE__ */ jsx("legend", {
38
+ className: "vgui-radio-group__legend",
39
+ children: label
40
+ }), /* @__PURE__ */ jsx("div", {
41
+ className: "vgui-radio-group__options",
42
+ children: /* @__PURE__ */ jsx(RadioGroupContext.Provider, {
43
+ value: context,
44
+ children
45
+ })
46
+ })]
47
+ });
48
+ }
49
+ /**
50
+ * A 15×15 circle with the same *inset* bevel as `Checkbox` — dark top/left,
51
+ * light bottom/right — and a filled dot instead of a tick
52
+ * (docs/components/Radio.md, "CSS recipe").
53
+ */
54
+ var Radio = forwardRef(function Radio({ className, value, label, name, checked, disabled, onChange, ...rest }, ref) {
55
+ const group = useContext(RadioGroupContext);
56
+ const classes = ["vgui-radio"];
57
+ if (className) classes.push(className);
58
+ const handleChange = (event) => {
59
+ onChange?.(event);
60
+ if (!event.defaultPrevented) group?.select(value);
61
+ };
62
+ return /* @__PURE__ */ jsxs("label", {
63
+ className: classes.join(" "),
64
+ children: [
65
+ /* @__PURE__ */ jsx("input", {
66
+ ref,
67
+ type: "radio",
68
+ className: "vgui-radio__input",
69
+ value,
70
+ name: name ?? group?.name,
71
+ checked: checked ?? (group ? group.value === value : void 0),
72
+ disabled: disabled ?? group?.disabled ?? false,
73
+ onChange: handleChange,
74
+ ...rest
75
+ }),
76
+ /* @__PURE__ */ jsx("span", {
77
+ className: "vgui-radio__circle",
78
+ "aria-hidden": "true"
79
+ }),
80
+ label == null ? null : /* @__PURE__ */ jsx("span", {
81
+ className: "vgui-radio__label",
82
+ children: label
83
+ })
84
+ ]
85
+ });
86
+ });
87
+ Radio.displayName = "Radio";
88
+ //#endregion
89
+ export { Radio, RadioGroup };
90
+
91
+ //# sourceMappingURL=Radio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Radio.js","names":[],"sources":["../../../src/components/Radio/Radio.tsx"],"sourcesContent":["import { createContext, forwardRef, useCallback, useContext, useId, useMemo, useState } from 'react'\nimport type { ChangeEvent, InputHTMLAttributes, ReactNode } from 'react'\n\nimport './Radio.css'\n\ninterface RadioGroupContextValue {\n name: string\n value: string | undefined\n select: (value: string) => void\n disabled: boolean\n}\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null)\n\nexport interface RadioProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'type'> {\n /** Value reported to the enclosing RadioGroup. */\n value: string\n /** The label. Rendered as part of the clickable area. */\n label?: ReactNode\n}\n\nexport interface RadioGroupProps {\n /** Group legend, rendered as a <legend>. */\n label: ReactNode\n /** Controlled selected value. */\n value?: string\n /** Initial value for uncontrolled use. */\n defaultValue?: string\n /** Called with the newly selected value. */\n onValueChange?: (value: string) => void\n /** Shared input name; useId() is used when omitted. */\n name?: string\n /** Lay the radios out horizontally rather than stacked. */\n orientation?: 'vertical' | 'horizontal'\n /** Disable the whole group. */\n disabled?: boolean\n children: ReactNode\n}\n\n/**\n * A `fieldset`/`legend` group for `Radio`s. It is a context provider, not a DOM\n * wrapper for logic: it passes `name`, the selected value, `onChange` and\n * `disabled` down, so `Radio` stays a thin wrapper over a native input and the\n * browser's own arrow-key navigation inside the group keeps working\n * (docs/components/Radio.md, \"Grouping\").\n */\nexport function RadioGroup({\n label,\n value,\n defaultValue,\n onValueChange,\n name,\n orientation = 'vertical',\n disabled = false,\n children,\n}: RadioGroupProps) {\n const generatedName = useId()\n const isControlled = value !== undefined\n const [uncontrolled, setUncontrolled] = useState(defaultValue)\n const selected = isControlled ? value : uncontrolled\n\n const select = useCallback(\n (next: string) => {\n if (!isControlled) setUncontrolled(next)\n onValueChange?.(next)\n },\n [isControlled, onValueChange],\n )\n\n const context = useMemo<RadioGroupContextValue>(\n () => ({ name: name ?? generatedName, value: selected, select, disabled }),\n [name, generatedName, selected, select, disabled],\n )\n\n return (\n <fieldset\n className={\n orientation === 'horizontal'\n ? 'vgui-radio-group vgui-radio-group--horizontal'\n : 'vgui-radio-group'\n }\n disabled={disabled}\n >\n <legend className=\"vgui-radio-group__legend\">{label}</legend>\n <div className=\"vgui-radio-group__options\">\n <RadioGroupContext.Provider value={context}>{children}</RadioGroupContext.Provider>\n </div>\n </fieldset>\n )\n}\n\n/**\n * A 15×15 circle with the same *inset* bevel as `Checkbox` — dark top/left,\n * light bottom/right — and a filled dot instead of a tick\n * (docs/components/Radio.md, \"CSS recipe\").\n */\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(function Radio(\n { className, value, label, name, checked, disabled, onChange, ...rest },\n ref,\n) {\n const group = useContext(RadioGroupContext)\n\n const classes = ['vgui-radio']\n if (className) classes.push(className)\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n onChange?.(event)\n if (!event.defaultPrevented) group?.select(value)\n }\n\n return (\n <label className={classes.join(' ')}>\n <input\n ref={ref}\n type=\"radio\"\n className=\"vgui-radio__input\"\n value={value}\n name={name ?? group?.name}\n checked={checked ?? (group ? group.value === value : undefined)}\n disabled={disabled ?? group?.disabled ?? false}\n onChange={handleChange}\n {...rest}\n />\n <span className=\"vgui-radio__circle\" aria-hidden=\"true\" />\n {label == null ? null : <span className=\"vgui-radio__label\">{label}</span>}\n </label>\n )\n})\n\nRadio.displayName = 'Radio'\n"],"mappings":";;;;AAYA,IAAM,oBAAoB,cAA6C,IAAI;;;;;;;;AAkC3E,SAAgB,WAAW,EACzB,OACA,OACA,cACA,eACA,MACA,cAAc,YACd,WAAW,OACX,YACkB;CAClB,MAAM,gBAAgB,MAAM;CAC5B,MAAM,eAAe,UAAU,KAAA;CAC/B,MAAM,CAAC,cAAc,mBAAmB,SAAS,YAAY;CAC7D,MAAM,WAAW,eAAe,QAAQ;CAExC,MAAM,SAAS,aACZ,SAAiB;EAChB,IAAI,CAAC,cAAc,gBAAgB,IAAI;EACvC,gBAAgB,IAAI;CACtB,GACA,CAAC,cAAc,aAAa,CAC9B;CAEA,MAAM,UAAU,eACP;EAAE,MAAM,QAAQ;EAAe,OAAO;EAAU;EAAQ;CAAS,IACxE;EAAC;EAAM;EAAe;EAAU;EAAQ;CAAQ,CAClD;CAEA,OACE,qBAAC,YAAD;EACE,WACE,gBAAgB,eACZ,kDACA;EAEI;EANZ,UAAA,CAQE,oBAAC,UAAD;GAAQ,WAAU;GAA4B,UAAA;EAAc,CAAA,GAC5D,oBAAC,OAAD;GAAK,WAAU;GACb,UAAA,oBAAC,kBAAkB,UAAnB;IAA4B,OAAO;IAAU;GAAqC,CAAA;EAC/E,CAAA,CACG;;AAEd;;;;;;AAOA,IAAa,QAAQ,WAAyC,SAAS,MACrE,EAAE,WAAW,OAAO,OAAO,MAAM,SAAS,UAAU,UAAU,GAAG,QACjE,KACA;CACA,MAAM,QAAQ,WAAW,iBAAiB;CAE1C,MAAM,UAAU,CAAC,YAAY;CAC7B,IAAI,WAAW,QAAQ,KAAK,SAAS;CAErC,MAAM,gBAAgB,UAAyC;EAC7D,WAAW,KAAK;EAChB,IAAI,CAAC,MAAM,kBAAkB,OAAO,OAAO,KAAK;CAClD;CAEA,OACE,qBAAC,SAAD;EAAO,WAAW,QAAQ,KAAK,GAAG;EAAlC,UAAA;GACE,oBAAC,SAAD;IACO;IACL,MAAK;IACL,WAAU;IACH;IACP,MAAM,QAAQ,OAAO;IACrB,SAAS,YAAY,QAAQ,MAAM,UAAU,QAAQ,KAAA;IACrD,UAAU,YAAY,OAAO,YAAY;IACzC,UAAU;IACV,GAAI;GACL,CAAA;GACD,oBAAC,QAAD;IAAM,WAAU;IAAqB,eAAY;GAAQ,CAAA;GACxD,SAAS,OAAO,OAAO,oBAAC,QAAD;IAAM,WAAU;IAAqB,UAAA;GAAY,CAAA;EACpE;;AAEX,CAAC;AAED,MAAM,cAAc"}
@@ -0,0 +1,3 @@
1
+ export { Radio, RadioGroup } from './Radio';
2
+ export type { RadioProps, RadioGroupProps } from './Radio';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Radio/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AAC3C,YAAY,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,96 @@
1
+ /*
2
+ * Green Steam rich text — `RichText` and its three inline runs
3
+ * (docs/components/RichText.md).
4
+ *
5
+ * `RichText` draws its own bevel *and* fills the interior with `DarkGreenBG`,
6
+ * which is what makes the 1px border read as a carved edge rather than a hollow
7
+ * outline. The frame orientation is the inverse of `Button`'s raised bevel.
8
+ *
9
+ * Two documented departures from the corpus live here:
10
+ * - selected text is dark (`--vgui-selection-text`) rather than `White`,
11
+ * because `MaizeBG` + white is 3.70:1 and foundations.md §10 baseline 1
12
+ * requires dark text on every maize highlight;
13
+ * - `url` gains a hover/focus colour, because the corpus's `"RichText
14
+ * url:hover"` is a no-op and underline alone is the weaker signal.
15
+ *
16
+ * Component-local metrics are declared here per foundations.md §4 (with `var()`
17
+ * fallbacks, as the docs' convention requires); shared palette tokens are
18
+ * referenced bare.
19
+ */
20
+
21
+ .vgui-rich-text {
22
+ --vgui-richtext-bg: var(--vgui-surface-dark); /* DarkGreenBG */
23
+ --vgui-richtext-text: var(--vgui-text-strong); /* textcolor = White */
24
+ --vgui-richtext-selection-bg: var(--vgui-accent-dark); /* MaizeBG */
25
+ --vgui-richtext-inset: 6px; /* RichText.InsetX / InsetY */
26
+ --vgui-richtext-font-weight-bold: 700; /* origin 1000; 700 always resolves */
27
+ --vgui-richtext-underline-offset: 2px;
28
+
29
+ position: relative;
30
+ background-color: var(--vgui-richtext-bg);
31
+ color: var(--vgui-richtext-text);
32
+ font-family: var(--vgui-font);
33
+ font-size: var(--vgui-font-size);
34
+ font-weight: normal;
35
+ /* Recessed: top/left dark, bottom/right lit. */
36
+ border-block-start: var(--vgui-bevel-width) solid var(--vgui-bevel-dark);
37
+ border-inline-start: var(--vgui-bevel-width) solid var(--vgui-bevel-dark);
38
+ border-inline-end: var(--vgui-bevel-width) solid var(--vgui-bevel-light);
39
+ border-block-end: var(--vgui-bevel-width) solid var(--vgui-bevel-light);
40
+ padding: var(--vgui-richtext-inset);
41
+ }
42
+
43
+ /* `RichTextInterior {}` — an empty hook kept for parity; it only removes the
44
+ paragraph margin the browser would otherwise add inside the frame. */
45
+ .vgui-rich-text__interior {
46
+ margin: 0;
47
+ }
48
+
49
+ /*
50
+ * Two maizes exist: the corpus's `selectedbgcolor` (MaizeBG) and the theme
51
+ * layer's own `::selection`. Dark text is required on both, so the rule covers
52
+ * the container's own selection and any descendant's.
53
+ */
54
+ .vgui-rich-text::selection,
55
+ .vgui-rich-text ::selection {
56
+ background-color: var(--vgui-richtext-selection-bg);
57
+ color: var(--vgui-selection-text);
58
+ }
59
+
60
+ .vgui-rich-text__bold {
61
+ font-weight: var(--vgui-richtext-font-weight-bold, 700);
62
+ }
63
+
64
+ .vgui-rich-text__emphasis {
65
+ font-style: italic;
66
+ }
67
+
68
+ .vgui-rich-text__url {
69
+ color: inherit;
70
+ text-decoration: underline;
71
+ text-underline-offset: var(--vgui-richtext-underline-offset, 2px);
72
+ }
73
+
74
+ /* Not in the corpus, where hover is byte-identical to idle. */
75
+ .vgui-rich-text__url:hover {
76
+ color: var(--vgui-text-hover);
77
+ }
78
+
79
+ /*
80
+ * The corpus's focus style is a 1px dotted `BorderDark` ring; the accessible
81
+ * ring is the default here, per foundations.md §10 — the Valve ring remains
82
+ * available as `--vgui-focus-ring-valve` for a `.vgui-crisp` subtree.
83
+ */
84
+ .vgui-rich-text__url:focus-visible {
85
+ color: var(--vgui-text-hover);
86
+ outline: var(--vgui-focus-ring);
87
+ outline-offset: var(--vgui-focus-ring-offset);
88
+ }
89
+
90
+ /* Inside a List or a Panel the frame belongs to the container, not to us. */
91
+ .vgui-rich-text--interior,
92
+ .vgui-rich-text--list {
93
+ border: 0;
94
+ padding: 0;
95
+ background: transparent;
96
+ }
@@ -0,0 +1 @@
1
+ export {}
@@ -0,0 +1,25 @@
1
+ import type { AnchorHTMLAttributes, HTMLAttributes, ReactNode } from 'react';
2
+ import './RichText.css';
3
+ export interface RichTextProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
4
+ /** Sanitised HTML. Never pass untrusted markup — see Accessibility. */
5
+ children?: ReactNode;
6
+ /** Drops the recessed frame; use inside a List or Panel. */
7
+ interior?: boolean;
8
+ }
9
+ export interface RichTextLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {
10
+ }
11
+ export interface RichTextBoldProps extends HTMLAttributes<HTMLElement> {
12
+ }
13
+ export interface RichTextEmphasisProps extends HTMLAttributes<HTMLElement> {
14
+ }
15
+ export declare const RichText: import("react").ForwardRefExoticComponent<RichTextProps & import("react").RefAttributes<HTMLDivElement>>;
16
+ /**
17
+ * `"RichText url"` — the element the style maps onto. Prefer a bare `<a>` with
18
+ * `vgui-rich-text__url`; this exists for call sites that want a React component.
19
+ */
20
+ export declare const RichTextLink: import("react").ForwardRefExoticComponent<RichTextLinkProps & import("react").RefAttributes<HTMLAnchorElement>>;
21
+ /** `"RichText bold"` — `<strong>`, so the emphasis survives without the font. */
22
+ export declare const RichTextBold: import("react").ForwardRefExoticComponent<RichTextBoldProps & import("react").RefAttributes<HTMLElement>>;
23
+ /** `"RichText emphasis"` — `<em>`, for the same reason. */
24
+ export declare const RichTextEmphasis: import("react").ForwardRefExoticComponent<RichTextEmphasisProps & import("react").RefAttributes<HTMLElement>>;
25
+ //# sourceMappingURL=RichText.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RichText.d.ts","sourceRoot":"","sources":["../../../src/components/RichText/RichText.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAE5E,OAAO,gBAAgB,CAAA;AAEvB,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IACrF,uEAAuE;IACvE,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,iBAAkB,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;CAAG;AAErF,MAAM,WAAW,iBAAkB,SAAQ,cAAc,CAAC,WAAW,CAAC;CAAG;AAEzE,MAAM,WAAW,qBAAsB,SAAQ,cAAc,CAAC,WAAW,CAAC;CAAG;AAE7E,eAAO,MAAM,QAAQ,0GAanB,CAAA;AAIF;;;GAGG;AACH,eAAO,MAAM,YAAY,iHAOxB,CAAA;AAID,iFAAiF;AACjF,eAAO,MAAM,YAAY,2GAOxB,CAAA;AAID,2DAA2D;AAC3D,eAAO,MAAM,gBAAgB,+GAO5B,CAAA"}
@@ -0,0 +1,56 @@
1
+ import { forwardRef } from "react";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import "./RichText.css";
4
+ //#region src/components/RichText/RichText.tsx
5
+ var RichText = forwardRef(function RichText({ className, children, interior = false, ...rest }, ref) {
6
+ const classes = ["vgui-rich-text"];
7
+ if (interior) classes.push("vgui-rich-text--interior");
8
+ if (className) classes.push(className);
9
+ return /* @__PURE__ */ jsx("div", {
10
+ ref,
11
+ className: classes.join(" "),
12
+ ...rest,
13
+ children
14
+ });
15
+ });
16
+ RichText.displayName = "RichText";
17
+ /**
18
+ * `"RichText url"` — the element the style maps onto. Prefer a bare `<a>` with
19
+ * `vgui-rich-text__url`; this exists for call sites that want a React component.
20
+ */
21
+ var RichTextLink = forwardRef(function RichTextLink({ className, ...rest }, ref) {
22
+ const classes = ["vgui-rich-text__url"];
23
+ if (className) classes.push(className);
24
+ return /* @__PURE__ */ jsx("a", {
25
+ ref,
26
+ className: classes.join(" "),
27
+ ...rest
28
+ });
29
+ });
30
+ RichTextLink.displayName = "RichTextLink";
31
+ /** `"RichText bold"` — `<strong>`, so the emphasis survives without the font. */
32
+ var RichTextBold = forwardRef(function RichTextBold({ className, ...rest }, ref) {
33
+ const classes = ["vgui-rich-text__bold"];
34
+ if (className) classes.push(className);
35
+ return /* @__PURE__ */ jsx("strong", {
36
+ ref,
37
+ className: classes.join(" "),
38
+ ...rest
39
+ });
40
+ });
41
+ RichTextBold.displayName = "RichTextBold";
42
+ /** `"RichText emphasis"` — `<em>`, for the same reason. */
43
+ var RichTextEmphasis = forwardRef(function RichTextEmphasis({ className, ...rest }, ref) {
44
+ const classes = ["vgui-rich-text__emphasis"];
45
+ if (className) classes.push(className);
46
+ return /* @__PURE__ */ jsx("em", {
47
+ ref,
48
+ className: classes.join(" "),
49
+ ...rest
50
+ });
51
+ });
52
+ RichTextEmphasis.displayName = "RichTextEmphasis";
53
+ //#endregion
54
+ export { RichText, RichTextBold, RichTextEmphasis, RichTextLink };
55
+
56
+ //# sourceMappingURL=RichText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RichText.js","names":[],"sources":["../../../src/components/RichText/RichText.tsx"],"sourcesContent":["import { forwardRef } from 'react'\nimport type { AnchorHTMLAttributes, HTMLAttributes, ReactNode } from 'react'\n\nimport './RichText.css'\n\nexport interface RichTextProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n /** Sanitised HTML. Never pass untrusted markup — see Accessibility. */\n children?: ReactNode\n /** Drops the recessed frame; use inside a List or Panel. */\n interior?: boolean\n}\n\nexport interface RichTextLinkProps extends AnchorHTMLAttributes<HTMLAnchorElement> {}\n\nexport interface RichTextBoldProps extends HTMLAttributes<HTMLElement> {}\n\nexport interface RichTextEmphasisProps extends HTMLAttributes<HTMLElement> {}\n\nexport const RichText = forwardRef<HTMLDivElement, RichTextProps>(function RichText(\n { className, children, interior = false, ...rest },\n ref,\n) {\n const classes = ['vgui-rich-text']\n if (interior) classes.push('vgui-rich-text--interior')\n if (className) classes.push(className)\n\n return (\n <div ref={ref} className={classes.join(' ')} {...rest}>\n {children}\n </div>\n )\n})\n\nRichText.displayName = 'RichText'\n\n/**\n * `\"RichText url\"` — the element the style maps onto. Prefer a bare `<a>` with\n * `vgui-rich-text__url`; this exists for call sites that want a React component.\n */\nexport const RichTextLink = forwardRef<HTMLAnchorElement, RichTextLinkProps>(\n function RichTextLink({ className, ...rest }, ref) {\n const classes = ['vgui-rich-text__url']\n if (className) classes.push(className)\n\n return <a ref={ref} className={classes.join(' ')} {...rest} />\n },\n)\n\nRichTextLink.displayName = 'RichTextLink'\n\n/** `\"RichText bold\"` — `<strong>`, so the emphasis survives without the font. */\nexport const RichTextBold = forwardRef<HTMLElement, RichTextBoldProps>(\n function RichTextBold({ className, ...rest }, ref) {\n const classes = ['vgui-rich-text__bold']\n if (className) classes.push(className)\n\n return <strong ref={ref} className={classes.join(' ')} {...rest} />\n },\n)\n\nRichTextBold.displayName = 'RichTextBold'\n\n/** `\"RichText emphasis\"` — `<em>`, for the same reason. */\nexport const RichTextEmphasis = forwardRef<HTMLElement, RichTextEmphasisProps>(\n function RichTextEmphasis({ className, ...rest }, ref) {\n const classes = ['vgui-rich-text__emphasis']\n if (className) classes.push(className)\n\n return <em ref={ref} className={classes.join(' ')} {...rest} />\n },\n)\n\nRichTextEmphasis.displayName = 'RichTextEmphasis'\n"],"mappings":";;;;AAkBA,IAAa,WAAW,WAA0C,SAAS,SACzE,EAAE,WAAW,UAAU,WAAW,OAAO,GAAG,QAC5C,KACA;CACA,MAAM,UAAU,CAAC,gBAAgB;CACjC,IAAI,UAAU,QAAQ,KAAK,0BAA0B;CACrD,IAAI,WAAW,QAAQ,KAAK,SAAS;CAErC,OACE,oBAAC,OAAD;EAAU;EAAK,WAAW,QAAQ,KAAK,GAAG;EAAG,GAAI;EAC9C;CACE,CAAA;AAET,CAAC;AAED,SAAS,cAAc;;;;;AAMvB,IAAa,eAAe,WAC1B,SAAS,aAAa,EAAE,WAAW,GAAG,QAAQ,KAAK;CACjD,MAAM,UAAU,CAAC,qBAAqB;CACtC,IAAI,WAAW,QAAQ,KAAK,SAAS;CAErC,OAAO,oBAAC,KAAD;EAAQ;EAAK,WAAW,QAAQ,KAAK,GAAG;EAAG,GAAI;CAAO,CAAA;AAC/D,CACF;AAEA,aAAa,cAAc;;AAG3B,IAAa,eAAe,WAC1B,SAAS,aAAa,EAAE,WAAW,GAAG,QAAQ,KAAK;CACjD,MAAM,UAAU,CAAC,sBAAsB;CACvC,IAAI,WAAW,QAAQ,KAAK,SAAS;CAErC,OAAO,oBAAC,UAAD;EAAa;EAAK,WAAW,QAAQ,KAAK,GAAG;EAAG,GAAI;CAAO,CAAA;AACpE,CACF;AAEA,aAAa,cAAc;;AAG3B,IAAa,mBAAmB,WAC9B,SAAS,iBAAiB,EAAE,WAAW,GAAG,QAAQ,KAAK;CACrD,MAAM,UAAU,CAAC,0BAA0B;CAC3C,IAAI,WAAW,QAAQ,KAAK,SAAS;CAErC,OAAO,oBAAC,MAAD;EAAS;EAAK,WAAW,QAAQ,KAAK,GAAG;EAAG,GAAI;CAAO,CAAA;AAChE,CACF;AAEA,iBAAiB,cAAc"}
@@ -0,0 +1,3 @@
1
+ export { RichText, RichTextBold, RichTextEmphasis, RichTextLink } from './RichText';
2
+ export type { RichTextBoldProps, RichTextEmphasisProps, RichTextLinkProps, RichTextProps, } from './RichText';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/RichText/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACnF,YAAY,EACV,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,EACjB,aAAa,GACd,MAAM,YAAY,CAAA"}