@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 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Textarea/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,76 @@
1
+ /*
2
+ * Green Steam title bar — the uppercase caption strip
3
+ * (docs/components/TitleBar.md).
4
+ *
5
+ * Three details that are easy to get wrong and are deliberate here:
6
+ *
7
+ * 1. `letter-spacing` inherits into anything placed in `__actions`, so the
8
+ * trailing controls reset both the tracking and the casing.
9
+ * 2. `min-width: 0` on `__text` is mandatory, or the flex item refuses to
10
+ * shrink below its content and the ellipsis never appears.
11
+ * 3. `min-height`, never a fixed `height`, so the caption survives 200% zoom
12
+ * (WCAG 1.4.4).
13
+ */
14
+
15
+ .vgui-titlebar {
16
+ box-sizing: border-box;
17
+ display: flex;
18
+ align-items: center;
19
+ gap: 8px;
20
+ width: 100%;
21
+ min-height: var(--vgui-titlebar-height);
22
+ margin-bottom: 1em;
23
+ font-family: var(--vgui-font);
24
+ font-size: var(--vgui-font-size-small);
25
+ font-weight: bold;
26
+ line-height: var(--vgui-titlebar-height);
27
+ letter-spacing: var(--vgui-chrome-tracking);
28
+ text-transform: uppercase;
29
+ color: var(--vgui-text-strong);
30
+ }
31
+
32
+ .vgui-titlebar__icon {
33
+ flex: 0 0 auto;
34
+ display: inline-flex;
35
+ align-items: center;
36
+ justify-content: center;
37
+ width: 16px;
38
+ height: 16px;
39
+ }
40
+
41
+ .vgui-titlebar__text {
42
+ flex: 1 1 auto;
43
+ min-width: 0;
44
+ overflow: hidden;
45
+ overflow-wrap: anywhere;
46
+ text-overflow: ellipsis;
47
+ white-space: nowrap;
48
+ }
49
+
50
+ .vgui-titlebar__actions {
51
+ flex: 0 0 auto;
52
+ display: flex;
53
+ align-items: center;
54
+ gap: 2px;
55
+ /* Never track or uppercase the controls parked in the title bar. */
56
+ letter-spacing: normal;
57
+ text-transform: none;
58
+ }
59
+
60
+ .vgui-titlebar--subdued {
61
+ color: var(--vgui-text-muted);
62
+ }
63
+
64
+ .vgui-titlebar--clay {
65
+ color: var(--vgui-clay-glyph);
66
+ }
67
+
68
+ /*
69
+ * `2px` tracking is the theme's signature and also a legibility tax at 12px, so
70
+ * readers who ask for more contrast get it back.
71
+ */
72
+ @media (prefers-contrast: more) {
73
+ .vgui-titlebar {
74
+ letter-spacing: 0.5px;
75
+ }
76
+ }
@@ -0,0 +1 @@
1
+ export {}
@@ -0,0 +1,20 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ import './TitleBar.css';
3
+ export interface TitleBarProps extends HTMLAttributes<HTMLDivElement> {
4
+ /** Caption text. Rendered uppercase regardless of the casing you pass. */
5
+ children?: ReactNode;
6
+ /** Optional 16px leading glyph. */
7
+ icon?: ReactNode;
8
+ /** Trailing controls, e.g. Window's minimize/maximize/close cluster. */
9
+ actions?: ReactNode;
10
+ /** Render the grey property-sheet chrome instead of the green. */
11
+ clay?: boolean;
12
+ /** Dim the caption; for a window that does not have focus. */
13
+ subdued?: boolean;
14
+ /** Heading level for the caption, so it appears in the document outline. */
15
+ level?: 1 | 2 | 3 | 4 | 5 | 6;
16
+ /** Accessible name for the trailing control group. */
17
+ actionsLabel?: string;
18
+ }
19
+ export declare const TitleBar: import("react").ForwardRefExoticComponent<TitleBarProps & import("react").RefAttributes<HTMLDivElement>>;
20
+ //# sourceMappingURL=TitleBar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TitleBar.d.ts","sourceRoot":"","sources":["../../../src/components/TitleBar/TitleBar.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtD,OAAO,gBAAgB,CAAA;AAIvB,MAAM,WAAW,aAAc,SAAQ,cAAc,CAAC,cAAc,CAAC;IACnE,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,mCAAmC;IACnC,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,wEAAwE;IACxE,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,kEAAkE;IAClE,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,8DAA8D;IAC9D,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,sDAAsD;IACtD,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,eAAO,MAAM,QAAQ,0GA2CnB,CAAA"}
@@ -0,0 +1,43 @@
1
+ import { createElement, forwardRef } from "react";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import "./TitleBar.css";
4
+ //#region src/components/TitleBar/TitleBar.tsx
5
+ var HEADING_TAGS = [
6
+ "h1",
7
+ "h2",
8
+ "h3",
9
+ "h4",
10
+ "h5",
11
+ "h6"
12
+ ];
13
+ var TitleBar = forwardRef(function TitleBar({ className, children, icon, actions, clay = false, subdued = false, level, actionsLabel, ...rest }, ref) {
14
+ const classes = ["vgui-titlebar"];
15
+ if (clay) classes.push("vgui-titlebar--clay");
16
+ if (subdued) classes.push("vgui-titlebar--subdued");
17
+ if (className) classes.push(className);
18
+ const text = createElement(level ? HEADING_TAGS[level - 1] : "span", { className: "vgui-titlebar__text" }, children);
19
+ return /* @__PURE__ */ jsxs("div", {
20
+ ref,
21
+ className: classes.join(" "),
22
+ ...rest,
23
+ children: [
24
+ icon != null ? /* @__PURE__ */ jsx("span", {
25
+ className: "vgui-titlebar__icon",
26
+ "aria-hidden": "true",
27
+ children: icon
28
+ }) : null,
29
+ text,
30
+ actions != null ? /* @__PURE__ */ jsx("div", {
31
+ className: "vgui-titlebar__actions",
32
+ role: "group",
33
+ "aria-label": actionsLabel,
34
+ children: actions
35
+ }) : null
36
+ ]
37
+ });
38
+ });
39
+ TitleBar.displayName = "TitleBar";
40
+ //#endregion
41
+ export { TitleBar };
42
+
43
+ //# sourceMappingURL=TitleBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TitleBar.js","names":[],"sources":["../../../src/components/TitleBar/TitleBar.tsx"],"sourcesContent":["import { createElement, forwardRef } from 'react'\nimport type { HTMLAttributes, ReactNode } from 'react'\n\nimport './TitleBar.css'\n\nconst HEADING_TAGS = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] as const\n\nexport interface TitleBarProps extends HTMLAttributes<HTMLDivElement> {\n /** Caption text. Rendered uppercase regardless of the casing you pass. */\n children?: ReactNode\n /** Optional 16px leading glyph. */\n icon?: ReactNode\n /** Trailing controls, e.g. Window's minimize/maximize/close cluster. */\n actions?: ReactNode\n /** Render the grey property-sheet chrome instead of the green. */\n clay?: boolean\n /** Dim the caption; for a window that does not have focus. */\n subdued?: boolean\n /** Heading level for the caption, so it appears in the document outline. */\n level?: 1 | 2 | 3 | 4 | 5 | 6\n /** Accessible name for the trailing control group. */\n actionsLabel?: string\n}\n\nexport const TitleBar = forwardRef<HTMLDivElement, TitleBarProps>(function TitleBar(\n {\n className,\n children,\n icon,\n actions,\n clay = false,\n subdued = false,\n level,\n actionsLabel,\n ...rest\n },\n ref,\n) {\n const classes = ['vgui-titlebar']\n if (clay) classes.push('vgui-titlebar--clay')\n if (subdued) classes.push('vgui-titlebar--subdued')\n if (className) classes.push(className)\n\n // `level` is the only thing that makes the caption part of the outline. The\n // casing and the tracking are presentation, so the string itself is never\n // transformed — screen readers and copy/paste both keep the original.\n const text = createElement(\n level ? HEADING_TAGS[level - 1] : 'span',\n { className: 'vgui-titlebar__text' },\n children,\n )\n\n return (\n <div ref={ref} className={classes.join(' ')} {...rest}>\n {icon != null ? (\n <span className=\"vgui-titlebar__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n ) : null}\n {text}\n {actions != null ? (\n <div className=\"vgui-titlebar__actions\" role=\"group\" aria-label={actionsLabel}>\n {actions}\n </div>\n ) : null}\n </div>\n )\n})\n\nTitleBar.displayName = 'TitleBar'\n"],"mappings":";;;;AAKA,IAAM,eAAe;CAAC;CAAM;CAAM;CAAM;CAAM;CAAM;AAAI;AAmBxD,IAAa,WAAW,WAA0C,SAAS,SACzE,EACE,WACA,UACA,MACA,SACA,OAAO,OACP,UAAU,OACV,OACA,cACA,GAAG,QAEL,KACA;CACA,MAAM,UAAU,CAAC,eAAe;CAChC,IAAI,MAAM,QAAQ,KAAK,qBAAqB;CAC5C,IAAI,SAAS,QAAQ,KAAK,wBAAwB;CAClD,IAAI,WAAW,QAAQ,KAAK,SAAS;CAKrC,MAAM,OAAO,cACX,QAAQ,aAAa,QAAQ,KAAK,QAClC,EAAE,WAAW,sBAAsB,GACnC,QACF;CAEA,OACE,qBAAC,OAAD;EAAU;EAAK,WAAW,QAAQ,KAAK,GAAG;EAAG,GAAI;EAAjD,UAAA;GACG,QAAQ,OACP,oBAAC,QAAD;IAAM,WAAU;IAAsB,eAAY;IAC/C,UAAA;GACG,CAAA,IACJ;GACH;GACA,WAAW,OACV,oBAAC,OAAD;IAAK,WAAU;IAAyB,MAAK;IAAQ,cAAY;IAC9D,UAAA;GACE,CAAA,IACH;EACD;;AAET,CAAC;AAED,SAAS,cAAc"}
@@ -0,0 +1,3 @@
1
+ export { TitleBar } from './TitleBar';
2
+ export type { TitleBarProps } from './TitleBar';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/TitleBar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,162 @@
1
+ /*
2
+ * Green Steam toggle button.
3
+ *
4
+ * A `Button` that remembers its state. Three recorded differences from
5
+ * `.vgui-button` (docs/components/ToggleButton.md):
6
+ *
7
+ * 1. `:Selected` inverts the bevel *and* darkens the face to `DarkGreenBG`
8
+ * (`--vgui-surface-dark`), because a pressed toggle is a state and not a
9
+ * transient `:active`.
10
+ * 2. It *does* have a `MouseOver` border in `steam.styles`, so unlike a plain
11
+ * button it reacts to hover.
12
+ * 3. `font "UiBold"`, so it is dimensionally identical to `Button` and the
13
+ * two mix freely in a toolbar.
14
+ *
15
+ * The pressed state is styled from `[aria-pressed="true"]` — the attribute is
16
+ * what assistive tech reads, and a class would be a second, divergable copy of
17
+ * the same bit.
18
+ *
19
+ * `:active` always inverts, even when already pressed: Valve's `Button:Active`
20
+ * border wins over `:Selected`, and letting `:active` un-invert a pressed toggle
21
+ * would make the press invisible.
22
+ *
23
+ * Two WCAG-mandated deviations: the accessible focus ring replaces the dashed
24
+ * `BorderDark` ring (1.87:1), and a pressed face that differs from the base by
25
+ * only 1.30:1 never carries the state on its own — `aria-pressed` does.
26
+ */
27
+
28
+ .vgui-toggle-button {
29
+ box-sizing: border-box;
30
+ display: inline-flex;
31
+ align-items: center;
32
+ justify-content: flex-start;
33
+ gap: var(--vgui-field-inset);
34
+ min-height: var(--vgui-control-height);
35
+ min-width: var(--vgui-button-min-width);
36
+ padding: 0 8px 0 var(--vgui-field-inset);
37
+ font: inherit;
38
+ font-weight: lighter;
39
+ color: var(--vgui-text-strong);
40
+ background-color: var(--vgui-surface);
41
+ border-top: var(--vgui-bevel-width) solid var(--vgui-bevel-light);
42
+ border-left: var(--vgui-bevel-width) solid var(--vgui-bevel-light);
43
+ border-bottom: var(--vgui-bevel-width) solid var(--vgui-bevel-dark);
44
+ border-right: var(--vgui-bevel-width) solid var(--vgui-bevel-dark);
45
+ cursor: pointer;
46
+ }
47
+
48
+ /* 1.30:1 against the base surface: decorative, never the only affordance. */
49
+ .vgui-toggle-button:hover {
50
+ background-color: var(--vgui-surface-light);
51
+ }
52
+
53
+ /* Pressing and being pressed both invert; `:active` is not a no-op when on. */
54
+ .vgui-toggle-button:active,
55
+ .vgui-toggle-button[aria-pressed='true'] {
56
+ border-top-color: var(--vgui-bevel-dark);
57
+ border-left-color: var(--vgui-bevel-dark);
58
+ border-bottom-color: var(--vgui-bevel-light);
59
+ border-right-color: var(--vgui-bevel-light);
60
+ }
61
+
62
+ .vgui-toggle-button[aria-pressed='true'] {
63
+ background-color: var(--vgui-surface-dark);
64
+ }
65
+
66
+ .vgui-toggle-button:focus-visible {
67
+ outline: var(--vgui-focus-ring);
68
+ outline-offset: var(--vgui-focus-ring-offset);
69
+ }
70
+
71
+ .vgui-crisp .vgui-toggle-button:focus-visible {
72
+ outline: var(--vgui-focus-ring-valve);
73
+ outline-offset: var(--vgui-focus-ring-valve-offset);
74
+ }
75
+
76
+ .vgui-toggle-button:disabled {
77
+ cursor: not-allowed;
78
+ color: var(--vgui-text-disabled);
79
+ text-shadow: 1px 1px 0 var(--vgui-text-disabled-shadow);
80
+ }
81
+
82
+ /* Square glyph-only variant: an `IconButton` that latches. */
83
+ .vgui-toggle-button--icon-only {
84
+ justify-content: center;
85
+ padding: 0;
86
+ min-width: var(--vgui-control-height);
87
+ inline-size: var(--vgui-control-height);
88
+ }
89
+
90
+ .vgui-toggle-button--small {
91
+ min-height: 18px;
92
+ min-width: 60px;
93
+ padding: 0 var(--vgui-field-inset);
94
+ font-size: var(--vgui-font-size-small);
95
+ }
96
+
97
+ /* Declared after `[aria-pressed]` so the grey face wins in both states; the
98
+ * bevel still inverts, which is what carries "on" on this variant. */
99
+ .vgui-toggle-button--clay {
100
+ background-color: var(--vgui-clay-button);
101
+ }
102
+
103
+ .vgui-toggle-button__icon {
104
+ display: block;
105
+ flex: 0 0 auto;
106
+ inline-size: var(--vgui-checkbox-size);
107
+ block-size: var(--vgui-checkbox-size);
108
+ background-color: currentColor;
109
+ -webkit-mask-image: var(--vgui-toggle-button-icon, none);
110
+ mask-image: var(--vgui-toggle-button-icon, none);
111
+ -webkit-mask-repeat: no-repeat;
112
+ mask-repeat: no-repeat;
113
+ -webkit-mask-position: center;
114
+ mask-position: center;
115
+ -webkit-mask-size: contain;
116
+ mask-size: contain;
117
+ }
118
+
119
+ /* A caller-supplied node paints itself; `currentColor` still reaches it. */
120
+ .vgui-toggle-button__icon--node {
121
+ background-color: transparent;
122
+ }
123
+
124
+ .vgui-toggle-button__icon--node > svg {
125
+ display: block;
126
+ inline-size: 100%;
127
+ block-size: 100%;
128
+ fill: currentColor;
129
+ }
130
+
131
+ .vgui-toggle-button__label {
132
+ min-width: 0;
133
+ overflow: hidden;
134
+ text-overflow: ellipsis;
135
+ white-space: nowrap;
136
+ }
137
+
138
+ /*
139
+ * Segmented group (docs/components/ToggleButton.md, "Variants"): siblings share
140
+ * their inner edges. The React API exposes no `segmented` prop, so the group is
141
+ * opt-in markup — a wrapper with `role="group"` and an `aria-label` — and the
142
+ * group collapses its children's duplicated edges. `min-width: 0` drops VGUI's
143
+ * 75px floor, so the padding is raised to keep every segment wider than the
144
+ * 24px minimum target.
145
+ */
146
+ .vgui-toggle-group {
147
+ display: inline-flex;
148
+ }
149
+
150
+ .vgui-toggle-group .vgui-toggle-button {
151
+ min-width: 0;
152
+ padding-block: 0;
153
+ padding-inline: calc(var(--vgui-field-inset) * 2);
154
+ }
155
+
156
+ .vgui-toggle-group .vgui-toggle-button--icon-only {
157
+ padding-inline: 0;
158
+ }
159
+
160
+ .vgui-toggle-group .vgui-toggle-button + .vgui-toggle-button {
161
+ margin-left: calc(-1 * var(--vgui-bevel-width));
162
+ }
@@ -0,0 +1,27 @@
1
+ import type { ButtonHTMLAttributes, ReactNode } from 'react';
2
+ import './ToggleButton.css';
3
+ export interface ToggleButtonProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'aria-pressed'> {
4
+ /** Controlled pressed state. Omit for uncontrolled. */
5
+ pressed?: boolean;
6
+ /** Initial pressed state when uncontrolled. */
7
+ defaultPressed?: boolean;
8
+ /** Called with the next pressed state. */
9
+ onPressedChange?: (pressed: boolean) => void;
10
+ /** Optional leading glyph: a built-in glyph name or an inline SVG node. */
11
+ icon?: ReactNode | string;
12
+ /** Square variant, glyph only. Requires `label`. */
13
+ iconOnly?: boolean;
14
+ /** Accessible name. Required when `iconOnly` — a glyph is not a name. */
15
+ label?: string;
16
+ /** Compact variant for toolbars. */
17
+ small?: boolean;
18
+ /** Grey property-sheet face. */
19
+ clay?: boolean;
20
+ }
21
+ /**
22
+ * The VGUI class that stays down. `aria-pressed` is the single source of truth
23
+ * for both the stylesheet and assistive tech, so the state cannot diverge
24
+ * (docs/components/ToggleButton.md, "CSS recipe").
25
+ */
26
+ export declare const ToggleButton: import("react").ForwardRefExoticComponent<ToggleButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
27
+ //# sourceMappingURL=ToggleButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToggleButton.d.ts","sourceRoot":"","sources":["../../../src/components/ToggleButton/ToggleButton.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAA;AAG3E,OAAO,oBAAoB,CAAA;AAE3B,MAAM,WAAW,iBACf,SAAQ,IAAI,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,EAAE,cAAc,CAAC;IACrE,uDAAuD;IACvD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,0CAA0C;IAC1C,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IAC5C,2EAA2E;IAC3E,IAAI,CAAC,EAAE,SAAS,GAAG,MAAM,CAAA;IACzB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oCAAoC;IACpC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,gCAAgC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,iHA2EvB,CAAA"}
@@ -0,0 +1,52 @@
1
+ import { glyphMask } from "../IconButton/IconButton.js";
2
+ import { forwardRef, useState } from "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import "./ToggleButton.css";
5
+ //#region src/components/ToggleButton/ToggleButton.tsx
6
+ /**
7
+ * The VGUI class that stays down. `aria-pressed` is the single source of truth
8
+ * for both the stylesheet and assistive tech, so the state cannot diverge
9
+ * (docs/components/ToggleButton.md, "CSS recipe").
10
+ */
11
+ var ToggleButton = forwardRef(function ToggleButton({ className, type = "button", pressed, defaultPressed = false, onPressedChange, icon, iconOnly = false, label, small = false, clay = false, onClick, children, ...rest }, ref) {
12
+ const isControlled = pressed !== void 0;
13
+ const [uncontrolled, setUncontrolled] = useState(defaultPressed);
14
+ const isPressed = isControlled ? pressed : uncontrolled;
15
+ const handleClick = (event) => {
16
+ onClick?.(event);
17
+ if (event.defaultPrevented) return;
18
+ const next = !isPressed;
19
+ if (!isControlled) setUncontrolled(next);
20
+ onPressedChange?.(next);
21
+ };
22
+ const classes = ["vgui-toggle-button"];
23
+ if (iconOnly) classes.push("vgui-toggle-button--icon-only");
24
+ if (small) classes.push("vgui-toggle-button--small");
25
+ if (clay) classes.push("vgui-toggle-button--clay");
26
+ if (className) classes.push(className);
27
+ const mask = typeof icon === "string" ? glyphMask(icon) : null;
28
+ const iconStyle = mask ? { "--vgui-toggle-button-icon": `url("${mask}")` } : void 0;
29
+ return /* @__PURE__ */ jsxs("button", {
30
+ ref,
31
+ type,
32
+ className: classes.join(" "),
33
+ "aria-pressed": isPressed,
34
+ "aria-label": label,
35
+ onClick: handleClick,
36
+ ...rest,
37
+ children: [icon ? /* @__PURE__ */ jsx("span", {
38
+ className: mask ? "vgui-toggle-button__icon" : "vgui-toggle-button__icon vgui-toggle-button__icon--node",
39
+ style: iconStyle,
40
+ "aria-hidden": "true",
41
+ children: mask ? null : icon
42
+ }) : null, iconOnly ? null : /* @__PURE__ */ jsx("span", {
43
+ className: "vgui-toggle-button__label",
44
+ children
45
+ })]
46
+ });
47
+ });
48
+ ToggleButton.displayName = "ToggleButton";
49
+ //#endregion
50
+ export { ToggleButton };
51
+
52
+ //# sourceMappingURL=ToggleButton.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToggleButton.js","names":[],"sources":["../../../src/components/ToggleButton/ToggleButton.tsx"],"sourcesContent":["import { forwardRef, useState } from 'react'\nimport type { ButtonHTMLAttributes, CSSProperties, ReactNode } from 'react'\n\nimport { glyphMask } from '../IconButton/IconButton'\nimport './ToggleButton.css'\n\nexport interface ToggleButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'aria-pressed'> {\n /** Controlled pressed state. Omit for uncontrolled. */\n pressed?: boolean\n /** Initial pressed state when uncontrolled. */\n defaultPressed?: boolean\n /** Called with the next pressed state. */\n onPressedChange?: (pressed: boolean) => void\n /** Optional leading glyph: a built-in glyph name or an inline SVG node. */\n icon?: ReactNode | string\n /** Square variant, glyph only. Requires `label`. */\n iconOnly?: boolean\n /** Accessible name. Required when `iconOnly` — a glyph is not a name. */\n label?: string\n /** Compact variant for toolbars. */\n small?: boolean\n /** Grey property-sheet face. */\n clay?: boolean\n}\n\n/**\n * The VGUI class that stays down. `aria-pressed` is the single source of truth\n * for both the stylesheet and assistive tech, so the state cannot diverge\n * (docs/components/ToggleButton.md, \"CSS recipe\").\n */\nexport const ToggleButton = forwardRef<HTMLButtonElement, ToggleButtonProps>(function ToggleButton(\n {\n className,\n type = 'button',\n pressed,\n defaultPressed = false,\n onPressedChange,\n icon,\n iconOnly = false,\n label,\n small = false,\n clay = false,\n onClick,\n children,\n ...rest\n },\n ref,\n) {\n const isControlled = pressed !== undefined\n const [uncontrolled, setUncontrolled] = useState(defaultPressed)\n const isPressed = isControlled ? pressed : uncontrolled\n\n if (import.meta.env.DEV) {\n if (iconOnly && !label && !rest['aria-label']) {\n console.warn(\n 'ToggleButton: `iconOnly` needs a `label` (or `aria-label`) — a glyph alone is not an accessible name.',\n )\n }\n if (isControlled && defaultPressed) {\n console.warn(\n 'ToggleButton: `defaultPressed` is ignored because `pressed` makes the button controlled.',\n )\n }\n }\n\n const handleClick: NonNullable<ToggleButtonProps['onClick']> = (event) => {\n onClick?.(event)\n if (event.defaultPrevented) return\n\n const next = !isPressed\n if (!isControlled) setUncontrolled(next)\n onPressedChange?.(next)\n }\n\n const classes = ['vgui-toggle-button']\n if (iconOnly) classes.push('vgui-toggle-button--icon-only')\n if (small) classes.push('vgui-toggle-button--small')\n if (clay) classes.push('vgui-toggle-button--clay')\n if (className) classes.push(className)\n\n const mask = typeof icon === 'string' ? glyphMask(icon) : null\n const iconStyle = mask ? ({ '--vgui-toggle-button-icon': `url(\"${mask}\")` } as CSSProperties) : undefined\n\n return (\n <button\n ref={ref}\n type={type}\n className={classes.join(' ')}\n aria-pressed={isPressed}\n aria-label={label}\n onClick={handleClick}\n {...rest}\n >\n {icon ? (\n <span\n className={mask ? 'vgui-toggle-button__icon' : 'vgui-toggle-button__icon vgui-toggle-button__icon--node'}\n style={iconStyle}\n aria-hidden=\"true\"\n >\n {mask ? null : icon}\n </span>\n ) : null}\n {iconOnly ? null : <span className=\"vgui-toggle-button__label\">{children}</span>}\n </button>\n )\n})\n\nToggleButton.displayName = 'ToggleButton'\n"],"mappings":";;;;;;;;;;AA+BA,IAAa,eAAe,WAAiD,SAAS,aACpF,EACE,WACA,OAAO,UACP,SACA,iBAAiB,OACjB,iBACA,MACA,WAAW,OACX,OACA,QAAQ,OACR,OAAO,OACP,SACA,UACA,GAAG,QAEL,KACA;CACA,MAAM,eAAe,YAAY,KAAA;CACjC,MAAM,CAAC,cAAc,mBAAmB,SAAS,cAAc;CAC/D,MAAM,YAAY,eAAe,UAAU;CAe3C,MAAM,eAA0D,UAAU;EACxE,UAAU,KAAK;EACf,IAAI,MAAM,kBAAkB;EAE5B,MAAM,OAAO,CAAC;EACd,IAAI,CAAC,cAAc,gBAAgB,IAAI;EACvC,kBAAkB,IAAI;CACxB;CAEA,MAAM,UAAU,CAAC,oBAAoB;CACrC,IAAI,UAAU,QAAQ,KAAK,+BAA+B;CAC1D,IAAI,OAAO,QAAQ,KAAK,2BAA2B;CACnD,IAAI,MAAM,QAAQ,KAAK,0BAA0B;CACjD,IAAI,WAAW,QAAQ,KAAK,SAAS;CAErC,MAAM,OAAO,OAAO,SAAS,WAAW,UAAU,IAAI,IAAI;CAC1D,MAAM,YAAY,OAAQ,EAAE,6BAA6B,QAAQ,KAAK,IAAI,IAAsB,KAAA;CAEhG,OACE,qBAAC,UAAD;EACO;EACC;EACN,WAAW,QAAQ,KAAK,GAAG;EAC3B,gBAAc;EACd,cAAY;EACZ,SAAS;EACT,GAAI;EAPN,UAAA,CASG,OACC,oBAAC,QAAD;GACE,WAAW,OAAO,6BAA6B;GAC/C,OAAO;GACP,eAAY;GAEX,UAAA,OAAO,OAAO;EACX,CAAA,IACJ,MACH,WAAW,OAAO,oBAAC,QAAD;GAAM,WAAU;GAA6B;EAAe,CAAA,CACzE;;AAEZ,CAAC;AAED,aAAa,cAAc"}
@@ -0,0 +1,3 @@
1
+ export { ToggleButton } from './ToggleButton';
2
+ export type { ToggleButtonProps } from './ToggleButton';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ToggleButton/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,202 @@
1
+ /*
2
+ * Green Steam toolbar.
3
+ * See docs/components/Toolbar.md.
4
+ *
5
+ * There is no `ToolBar` block in `steam.styles`, and that absence is the
6
+ * spec: a VGUI toolbar paints nothing, and its buttons are `bgcolor = none`
7
+ * with an empty `render_bg {}`. So the container is bare — no strip, no
8
+ * border, no divider — and a button's state is carried by the **sprite**, never
9
+ * by a hover face, a border colour or a transform.
10
+ *
11
+ * Four deliberate departures from the corpus, each one documented in the
12
+ * component doc's accessibility section:
13
+ *
14
+ * 1. The hit area is `--vgui-min-target-size` (24px) with the sprite still
15
+ * 16x16 and centred, because a 16x16 target fails WCAG 2.2 SC 2.5.8.
16
+ * 2. A focus ring exists at all — no toolbar button block defines one, and a
17
+ * chromeless glyph with no ring cannot be used from the keyboard.
18
+ * 3. The glyph insets (the `-5px` home pull and the 1px forward/reload/stop
19
+ * pulls) are kept verbatim from `steam.styles`: they are optical
20
+ * corrections for 16x16 art that does not fill its canvas.
21
+ * 4. The sprite set is not shipped. Valve's twenty `icon_button_*` sprites are
22
+ * copyrighted artwork and this package is redistributable, so each glyph is
23
+ * a procedural SVG stand-in drawn through `mask-image` (see
24
+ * `docs/assets.md`). A consumer who owns the art points `--vgui-toolbar-back`
25
+ * and friends at it and gets the original sprites back.
26
+ *
27
+ * The glyphs are painted as masks over `background-color`, so they follow the
28
+ * theme's tokens instead of being baked into an image, and they are invisible to
29
+ * assistive technology by construction: the accessible name is the button's
30
+ * `aria-label`.
31
+ */
32
+
33
+ .vgui-toolbar {
34
+ /*
35
+ * Component-local, per foundations.md §4. The glyph tints mirror `Window`'s
36
+ * frame controls so a toolbar and a titlebar read as the same material.
37
+ */
38
+ --vgui-toolbar-glyph: var(--vgui-clay-glyph-dim, #a6aca2);
39
+ --vgui-toolbar-glyph-active: var(--vgui-clay-glyph, #adb5a8);
40
+ --vgui-toolbar-glyph-disabled: var(--vgui-text-disabled, #75806f);
41
+
42
+ box-sizing: border-box;
43
+ display: flex;
44
+ align-items: center;
45
+ gap: var(--vgui-toolbar-gap, 8px);
46
+ height: var(--vgui-toolbar-height, 34px);
47
+ padding: 0 var(--vgui-toolbar-edge-margin, 10px);
48
+ /* No block in the corpus defines a toolbar background; the token exists so a
49
+ theme can add a strip without touching every button. */
50
+ background: var(--vgui-toolbar-bg, transparent);
51
+ border: 0;
52
+ }
53
+
54
+ .vgui-toolbar__button {
55
+ box-sizing: border-box;
56
+ /* 24px hit area, 16px sprite: padding plus `background-position: center`. */
57
+ flex: 0 0 var(--vgui-min-target-size, 24px);
58
+ width: var(--vgui-min-target-size, 24px);
59
+ height: var(--vgui-min-target-size, 24px);
60
+ padding: calc((var(--vgui-min-target-size, 24px) - var(--vgui-icon-size, 16px)) / 2);
61
+ /*
62
+ * `render_bg {}` — nothing is ever drawn *behind* a glyph. The glyph itself is
63
+ * painted as a MASK over `background-color`, so it follows the theme's tokens
64
+ * instead of being baked into an image; a `data:` URI cannot read a CSS
65
+ * variable. Every `icon_button_*` state sprite is the same shape and the same
66
+ * 16x16 size, so the four states are reproduced by the mask's colour rather
67
+ * than by swapping the image — and a consumer who points `--vgui-toolbar-back`
68
+ * at Valve's real `icon_button_back.png` gets the original four tints for free,
69
+ * because the sprites are grey-with-alpha and mask cleanly.
70
+ */
71
+ background-color: var(--vgui-toolbar-glyph);
72
+ mask-repeat: no-repeat;
73
+ mask-position: center;
74
+ mask-size: var(--vgui-icon-size, 16px);
75
+ border: 0;
76
+ border-radius: 0;
77
+ font: inherit;
78
+ color: inherit;
79
+ cursor: default;
80
+ /* No transition: the sprite swaps instantly. */
81
+ }
82
+
83
+ /* --- Browser chrome glyphs: five glyphs, four tinted states each --- */
84
+
85
+ .vgui-toolbar__button--back {
86
+ mask-image: var(--vgui-toolbar-back, url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M10.5 2.5 L4.5 8 L10.5 13.5' fill='none' stroke='white' stroke-width='2'/%3E%3C/svg%3E"));
87
+ }
88
+
89
+ .vgui-toolbar__button--forward {
90
+ mask-image: var(--vgui-toolbar-forward, url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M5.5 2.5 L11.5 8 L5.5 13.5' fill='none' stroke='white' stroke-width='2'/%3E%3C/svg%3E"));
91
+ }
92
+
93
+ .vgui-toolbar__button--home {
94
+ mask-image: var(--vgui-toolbar-home, url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M2 7.5 L8 2.5 L14 7.5' fill='none' stroke='white' stroke-width='2'/%3E%3Cpath d='M4 7.5 v6 h8 v-6' fill='none' stroke='white' stroke-width='2'/%3E%3C/svg%3E"));
95
+ }
96
+
97
+ .vgui-toolbar__button--reload {
98
+ mask-image: var(--vgui-toolbar-reload, url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M13 8 a5 5 0 1 1 -1.6 -3.7' fill='none' stroke='white' stroke-width='2'/%3E%3Cpath d='M13 2.5 L13 5.5 L10 5.5 Z' fill='white'/%3E%3C/svg%3E"));
99
+ }
100
+
101
+ .vgui-toolbar__button--stop {
102
+ mask-image: var(--vgui-toolbar-stop, url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3.5 3.5 L12.5 12.5 M12.5 3.5 L3.5 12.5' fill='none' stroke='white' stroke-width='2'/%3E%3C/svg%3E"));
103
+ }
104
+
105
+ /* The one bevelled glyph the corpus names (`FullscreenButton`). */
106
+ .vgui-toolbar__button--controller-bpm {
107
+ mask-image: var(--vgui-toolbar-controller-bpm, url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Crect x='2.5' y='5.5' width='11' height='5' rx='2.5' fill='none' stroke='white' stroke-width='1.5'/%3E%3Crect x='4.5' y='7.5' width='2' height='1.5' fill='white'/%3E%3Ccircle cx='10.5' cy='8' r='1.2' fill='white'/%3E%3C/svg%3E"));
108
+ }
109
+
110
+ /*
111
+ * The four states. The corpus swaps a differently-shaded sprite; because every
112
+ * `icon_button_*` sprite is the same shape, the readable equivalent is a tint
113
+ * change, which survives the consumer supplying their own art and keeps the
114
+ * glyph legible in every theme (see the component doc's accessibility section).
115
+ */
116
+ .vgui-toolbar__button:hover,
117
+ .vgui-toolbar__button:focus-visible,
118
+ .vgui-toolbar__button:active,
119
+ .vgui-toolbar__button[aria-pressed='true'] {
120
+ background-color: var(--vgui-toolbar-glyph-active);
121
+ }
122
+
123
+ .vgui-toolbar__button:disabled {
124
+ background-color: var(--vgui-toolbar-glyph-disabled);
125
+ }
126
+
127
+ /*
128
+ * Per-glyph optical corrections, straight from the corpus's hand-tuned insets
129
+ * ("0 0 0 0", "1 0 -1 0", "-5 0 0 0"). Do not tidy these into one shared
130
+ * value: four of the five glyphs are 1-5px off-centre without them.
131
+ */
132
+ .vgui-toolbar__button--forward,
133
+ .vgui-toolbar__button--reload,
134
+ .vgui-toolbar__button--stop {
135
+ margin-left: 1px;
136
+ margin-right: -1px;
137
+ }
138
+
139
+ .vgui-toolbar__button--home {
140
+ margin-left: -5px;
141
+ }
142
+
143
+ /* --- Focus: invented here, because no toolbar block defines one --- */
144
+
145
+ .vgui-toolbar__button:focus-visible {
146
+ outline: var(--vgui-focus-ring);
147
+ outline-offset: var(--vgui-focus-ring-offset);
148
+ }
149
+
150
+ .vgui-crisp .vgui-toolbar__button:focus-visible {
151
+ outline: var(--vgui-focus-ring-valve);
152
+ outline-offset: var(--vgui-focus-ring-valve-offset);
153
+ }
154
+
155
+ /* --- Text buttons: the server browser's 104-128px labelled controls --- */
156
+
157
+ .vgui-toolbar__button--text {
158
+ flex: 0 0 auto;
159
+ width: auto;
160
+ height: var(--vgui-toolbar-button-size, 24px);
161
+ padding: 0 8px;
162
+ /* No glyph: with `mask-image: none` the mask is opaque everywhere, so the
163
+ glyph paint has to be cleared or the button becomes a solid rectangle. */
164
+ mask-image: none;
165
+ background-color: transparent;
166
+ white-space: nowrap;
167
+ }
168
+
169
+ /* --- `--raised`: the `FullscreenButton` bevel --- */
170
+
171
+ .vgui-toolbar--raised .vgui-toolbar__button {
172
+ /* The bevel is a border, not a fill: `bgcolor` stays the glyph mask's paint,
173
+ so this rule must not reset `background-color`. */
174
+ border-top: var(--vgui-bevel-width) solid var(--vgui-bevel-light);
175
+ border-left: var(--vgui-bevel-width) solid var(--vgui-bevel-light);
176
+ border-right: var(--vgui-bevel-width) solid var(--vgui-bevel-dark);
177
+ border-bottom: var(--vgui-bevel-width) solid var(--vgui-bevel-dark);
178
+ }
179
+
180
+ /* Pressed = the same bevel rotated, never a colour change. */
181
+ .vgui-toolbar--raised .vgui-toolbar__button:active,
182
+ .vgui-toolbar--raised .vgui-toolbar__button[aria-pressed='true'] {
183
+ border-top-color: var(--vgui-bevel-dark);
184
+ border-left-color: var(--vgui-bevel-dark);
185
+ border-right-color: var(--vgui-bevel-light);
186
+ border-bottom-color: var(--vgui-bevel-light);
187
+ }
188
+
189
+ /* --- `--footer`: `DialogServerBrowser.res`'s 34px bottom region --- */
190
+
191
+ .vgui-toolbar--footer {
192
+ justify-content: flex-end;
193
+ padding-right: var(--vgui-toolbar-edge-margin, 10px);
194
+ }
195
+
196
+ .vgui-toolbar--footer .vgui-toolbar__button {
197
+ flex: 0 0 auto;
198
+ width: auto;
199
+ height: var(--vgui-toolbar-button-size, 24px);
200
+ padding: 0 8px;
201
+ font-size: var(--vgui-font-size-small);
202
+ }
@@ -0,0 +1 @@
1
+ export {}