@dalcvil/steam-green-react 0.1.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 (343) hide show
  1. package/LICENSE +25 -25
  2. package/README.md +38 -12
  3. package/dist/components/Avatar/Avatar.css +136 -0
  4. package/dist/components/Avatar/Avatar.d.ts +22 -0
  5. package/dist/components/Avatar/Avatar.d.ts.map +1 -0
  6. package/dist/components/Avatar/Avatar.js +49 -0
  7. package/dist/components/Avatar/Avatar.js.map +1 -0
  8. package/dist/components/Avatar/index.d.ts +3 -0
  9. package/dist/components/Avatar/index.d.ts.map +1 -0
  10. package/dist/components/Button/Button.css +117 -0
  11. package/dist/components/Button/Button.css.d.ts +1 -0
  12. package/dist/components/Button/Button.d.ts +18 -0
  13. package/dist/components/Button/Button.d.ts.map +1 -0
  14. package/dist/components/Button/Button.js +29 -0
  15. package/dist/components/Button/Button.js.map +1 -0
  16. package/dist/components/Button/index.d.ts +3 -0
  17. package/dist/components/Button/index.d.ts.map +1 -0
  18. package/dist/components/Checkbox/Checkbox.css +116 -0
  19. package/dist/components/Checkbox/Checkbox.css.d.ts +1 -0
  20. package/dist/components/Checkbox/Checkbox.d.ts +19 -0
  21. package/dist/components/Checkbox/Checkbox.d.ts.map +1 -0
  22. package/dist/components/Checkbox/Checkbox.js +51 -0
  23. package/dist/components/Checkbox/Checkbox.js.map +1 -0
  24. package/dist/components/Checkbox/index.d.ts +3 -0
  25. package/dist/components/Checkbox/index.d.ts.map +1 -0
  26. package/dist/components/ColorPicker/ColorPicker.css +331 -0
  27. package/dist/components/ColorPicker/ColorPicker.css.d.ts +1 -0
  28. package/dist/components/ColorPicker/ColorPicker.d.ts +29 -0
  29. package/dist/components/ColorPicker/ColorPicker.d.ts.map +1 -0
  30. package/dist/components/ColorPicker/ColorPicker.js +534 -0
  31. package/dist/components/ColorPicker/ColorPicker.js.map +1 -0
  32. package/dist/components/ColorPicker/index.d.ts +3 -0
  33. package/dist/components/{GreenButton → ColorPicker}/index.d.ts.map +1 -1
  34. package/dist/components/Console/Console.css +96 -0
  35. package/dist/components/Console/Console.css.d.ts +1 -0
  36. package/dist/components/Console/Console.d.ts +26 -0
  37. package/dist/components/Console/Console.d.ts.map +1 -0
  38. package/dist/components/Console/Console.js +59 -0
  39. package/dist/components/Console/Console.js.map +1 -0
  40. package/dist/components/Console/index.d.ts +3 -0
  41. package/dist/components/Console/index.d.ts.map +1 -0
  42. package/dist/components/Dialog/Dialog.css +137 -0
  43. package/dist/components/Dialog/Dialog.css.d.ts +1 -0
  44. package/dist/components/Dialog/Dialog.d.ts +28 -0
  45. package/dist/components/Dialog/Dialog.d.ts.map +1 -0
  46. package/dist/components/Dialog/Dialog.js +151 -0
  47. package/dist/components/Dialog/Dialog.js.map +1 -0
  48. package/dist/components/Dialog/index.d.ts +3 -0
  49. package/dist/components/Dialog/index.d.ts.map +1 -0
  50. package/dist/components/Divider/Divider.css +68 -0
  51. package/dist/components/Divider/Divider.css.d.ts +1 -0
  52. package/dist/components/Divider/Divider.d.ts +12 -0
  53. package/dist/components/Divider/Divider.d.ts.map +1 -0
  54. package/dist/components/Divider/Divider.js +23 -0
  55. package/dist/components/Divider/Divider.js.map +1 -0
  56. package/dist/components/Divider/index.d.ts +3 -0
  57. package/dist/components/Divider/index.d.ts.map +1 -0
  58. package/dist/components/FieldLabel/FieldLabel.css +98 -0
  59. package/dist/components/FieldLabel/FieldLabel.css.d.ts +1 -0
  60. package/dist/components/FieldLabel/FieldLabel.d.ts +29 -0
  61. package/dist/components/FieldLabel/FieldLabel.d.ts.map +1 -0
  62. package/dist/components/FieldLabel/FieldLabel.js +42 -0
  63. package/dist/components/FieldLabel/FieldLabel.js.map +1 -0
  64. package/dist/components/FieldLabel/index.d.ts +3 -0
  65. package/dist/components/FieldLabel/index.d.ts.map +1 -0
  66. package/dist/components/GroupBox/GroupBox.css +101 -0
  67. package/dist/components/GroupBox/GroupBox.css.d.ts +1 -0
  68. package/dist/components/GroupBox/GroupBox.d.ts +14 -0
  69. package/dist/components/GroupBox/GroupBox.d.ts.map +1 -0
  70. package/dist/components/GroupBox/GroupBox.js +25 -0
  71. package/dist/components/GroupBox/GroupBox.js.map +1 -0
  72. package/dist/components/GroupBox/index.d.ts +3 -0
  73. package/dist/components/GroupBox/index.d.ts.map +1 -0
  74. package/dist/components/IconButton/IconButton.css +184 -0
  75. package/dist/components/IconButton/IconButton.css.d.ts +1 -0
  76. package/dist/components/IconButton/IconButton.d.ts +56 -0
  77. package/dist/components/IconButton/IconButton.d.ts.map +1 -0
  78. package/dist/components/IconButton/IconButton.js +77 -0
  79. package/dist/components/IconButton/IconButton.js.map +1 -0
  80. package/dist/components/IconButton/index.d.ts +3 -0
  81. package/dist/components/IconButton/index.d.ts.map +1 -0
  82. package/dist/components/LevelMeter/LevelMeter.css +117 -0
  83. package/dist/components/LevelMeter/LevelMeter.css.d.ts +1 -0
  84. package/dist/components/LevelMeter/LevelMeter.d.ts +20 -0
  85. package/dist/components/LevelMeter/LevelMeter.d.ts.map +1 -0
  86. package/dist/components/LevelMeter/LevelMeter.js +44 -0
  87. package/dist/components/LevelMeter/LevelMeter.js.map +1 -0
  88. package/dist/components/LevelMeter/index.d.ts +3 -0
  89. package/dist/components/LevelMeter/index.d.ts.map +1 -0
  90. package/dist/components/Link/Link.css +127 -0
  91. package/dist/components/Link/Link.css.d.ts +1 -0
  92. package/dist/components/Link/Link.d.ts +26 -0
  93. package/dist/components/Link/Link.d.ts.map +1 -0
  94. package/dist/components/Link/Link.js +60 -0
  95. package/dist/components/Link/Link.js.map +1 -0
  96. package/dist/components/Link/index.d.ts +3 -0
  97. package/dist/components/Link/index.d.ts.map +1 -0
  98. package/dist/components/List/List.css +224 -0
  99. package/dist/components/List/List.css.d.ts +1 -0
  100. package/dist/components/List/List.d.ts +49 -0
  101. package/dist/components/List/List.d.ts.map +1 -0
  102. package/dist/components/List/List.js +300 -0
  103. package/dist/components/List/List.js.map +1 -0
  104. package/dist/components/List/index.d.ts +3 -0
  105. package/dist/components/List/index.d.ts.map +1 -0
  106. package/dist/components/Menu/Menu.css +122 -0
  107. package/dist/components/Menu/Menu.css.d.ts +1 -0
  108. package/dist/components/Menu/Menu.d.ts +46 -0
  109. package/dist/components/Menu/Menu.d.ts.map +1 -0
  110. package/dist/components/Menu/Menu.js +246 -0
  111. package/dist/components/Menu/Menu.js.map +1 -0
  112. package/dist/components/Menu/index.d.ts +3 -0
  113. package/dist/components/Menu/index.d.ts.map +1 -0
  114. package/dist/components/MenuBar/MenuBar.css +94 -0
  115. package/dist/components/MenuBar/MenuBar.css.d.ts +1 -0
  116. package/dist/components/MenuBar/MenuBar.d.ts +34 -0
  117. package/dist/components/MenuBar/MenuBar.d.ts.map +1 -0
  118. package/dist/components/MenuBar/MenuBar.js +129 -0
  119. package/dist/components/MenuBar/MenuBar.js.map +1 -0
  120. package/dist/components/MenuBar/index.d.ts +3 -0
  121. package/dist/components/MenuBar/index.d.ts.map +1 -0
  122. package/dist/components/NavBar/NavBar.css +179 -0
  123. package/dist/components/NavBar/NavBar.css.d.ts +1 -0
  124. package/dist/components/NavBar/NavBar.d.ts +39 -0
  125. package/dist/components/NavBar/NavBar.d.ts.map +1 -0
  126. package/dist/components/NavBar/NavBar.js +198 -0
  127. package/dist/components/NavBar/NavBar.js.map +1 -0
  128. package/dist/components/NavBar/index.d.ts +3 -0
  129. package/dist/components/NavBar/index.d.ts.map +1 -0
  130. package/dist/components/Notification/Notification.css +176 -0
  131. package/dist/components/Notification/Notification.css.d.ts +1 -0
  132. package/dist/components/Notification/Notification.d.ts +26 -0
  133. package/dist/components/Notification/Notification.d.ts.map +1 -0
  134. package/dist/components/Notification/Notification.js +181 -0
  135. package/dist/components/Notification/Notification.js.map +1 -0
  136. package/dist/components/Notification/index.d.ts +3 -0
  137. package/dist/components/Notification/index.d.ts.map +1 -0
  138. package/dist/components/Panel/Panel.css +56 -0
  139. package/dist/components/Panel/Panel.css.d.ts +1 -0
  140. package/dist/components/Panel/Panel.d.ts +14 -0
  141. package/dist/components/Panel/Panel.d.ts.map +1 -0
  142. package/dist/components/Panel/Panel.js +42 -0
  143. package/dist/components/Panel/Panel.js.map +1 -0
  144. package/dist/components/Panel/index.d.ts +3 -0
  145. package/dist/components/Panel/index.d.ts.map +1 -0
  146. package/dist/components/ProgressBar/ProgressBar.css +108 -0
  147. package/dist/components/ProgressBar/ProgressBar.css.d.ts +1 -0
  148. package/dist/components/ProgressBar/ProgressBar.d.ts +22 -0
  149. package/dist/components/ProgressBar/ProgressBar.d.ts.map +1 -0
  150. package/dist/components/ProgressBar/ProgressBar.js +43 -0
  151. package/dist/components/ProgressBar/ProgressBar.js.map +1 -0
  152. package/dist/components/ProgressBar/index.d.ts +3 -0
  153. package/dist/components/ProgressBar/index.d.ts.map +1 -0
  154. package/dist/components/Radio/Radio.css +125 -0
  155. package/dist/components/Radio/Radio.css.d.ts +1 -0
  156. package/dist/components/Radio/Radio.d.ts +40 -0
  157. package/dist/components/Radio/Radio.d.ts.map +1 -0
  158. package/dist/components/Radio/Radio.js +91 -0
  159. package/dist/components/Radio/Radio.js.map +1 -0
  160. package/dist/components/Radio/index.d.ts +3 -0
  161. package/dist/components/Radio/index.d.ts.map +1 -0
  162. package/dist/components/RichText/RichText.css +96 -0
  163. package/dist/components/RichText/RichText.css.d.ts +1 -0
  164. package/dist/components/RichText/RichText.d.ts +25 -0
  165. package/dist/components/RichText/RichText.d.ts.map +1 -0
  166. package/dist/components/RichText/RichText.js +56 -0
  167. package/dist/components/RichText/RichText.js.map +1 -0
  168. package/dist/components/RichText/index.d.ts +3 -0
  169. package/dist/components/RichText/index.d.ts.map +1 -0
  170. package/dist/components/ScrollArea/ScrollArea.css +236 -0
  171. package/dist/components/ScrollArea/ScrollArea.css.d.ts +1 -0
  172. package/dist/components/ScrollArea/ScrollArea.d.ts +25 -0
  173. package/dist/components/ScrollArea/ScrollArea.d.ts.map +1 -0
  174. package/dist/components/ScrollArea/ScrollArea.js +124 -0
  175. package/dist/components/ScrollArea/ScrollArea.js.map +1 -0
  176. package/dist/components/ScrollArea/index.d.ts +3 -0
  177. package/dist/components/ScrollArea/index.d.ts.map +1 -0
  178. package/dist/components/Scrollbar/Scrollbar.css +260 -0
  179. package/dist/components/Scrollbar/Scrollbar.css.d.ts +1 -0
  180. package/dist/components/Scrollbar/Scrollbar.d.ts +31 -0
  181. package/dist/components/Scrollbar/Scrollbar.d.ts.map +1 -0
  182. package/dist/components/Scrollbar/Scrollbar.js +277 -0
  183. package/dist/components/Scrollbar/Scrollbar.js.map +1 -0
  184. package/dist/components/Scrollbar/index.d.ts +3 -0
  185. package/dist/components/Scrollbar/index.d.ts.map +1 -0
  186. package/dist/components/Select/Select.css +299 -0
  187. package/dist/components/Select/Select.css.d.ts +1 -0
  188. package/dist/components/Select/Select.d.ts +52 -0
  189. package/dist/components/Select/Select.d.ts.map +1 -0
  190. package/dist/components/Select/Select.js +281 -0
  191. package/dist/components/Select/Select.js.map +1 -0
  192. package/dist/components/Select/index.d.ts +3 -0
  193. package/dist/components/Select/index.d.ts.map +1 -0
  194. package/dist/components/Slider/Slider.css +158 -0
  195. package/dist/components/Slider/Slider.css.d.ts +1 -0
  196. package/dist/components/Slider/Slider.d.ts +26 -0
  197. package/dist/components/Slider/Slider.d.ts.map +1 -0
  198. package/dist/components/Slider/Slider.js +67 -0
  199. package/dist/components/Slider/Slider.js.map +1 -0
  200. package/dist/components/Slider/index.d.ts +3 -0
  201. package/dist/components/Slider/index.d.ts.map +1 -0
  202. package/dist/components/SpinBox/SpinBox.css +152 -0
  203. package/dist/components/SpinBox/SpinBox.css.d.ts +1 -0
  204. package/dist/components/SpinBox/SpinBox.d.ts +28 -0
  205. package/dist/components/SpinBox/SpinBox.d.ts.map +1 -0
  206. package/dist/components/SpinBox/SpinBox.js +207 -0
  207. package/dist/components/SpinBox/SpinBox.js.map +1 -0
  208. package/dist/components/SpinBox/index.d.ts +3 -0
  209. package/dist/components/SpinBox/index.d.ts.map +1 -0
  210. package/dist/components/Spinner/Spinner.css +137 -0
  211. package/dist/components/Spinner/Spinner.css.d.ts +1 -0
  212. package/dist/components/Spinner/Spinner.d.ts +20 -0
  213. package/dist/components/Spinner/Spinner.d.ts.map +1 -0
  214. package/dist/components/Spinner/Spinner.js +36 -0
  215. package/dist/components/Spinner/Spinner.js.map +1 -0
  216. package/dist/components/Spinner/index.d.ts +3 -0
  217. package/dist/components/Spinner/index.d.ts.map +1 -0
  218. package/dist/components/Splitter/Splitter.css +119 -0
  219. package/dist/components/Splitter/Splitter.css.d.ts +1 -0
  220. package/dist/components/Splitter/Splitter.d.ts +25 -0
  221. package/dist/components/Splitter/Splitter.d.ts.map +1 -0
  222. package/dist/components/Splitter/Splitter.js +212 -0
  223. package/dist/components/Splitter/Splitter.js.map +1 -0
  224. package/dist/components/Splitter/index.d.ts +3 -0
  225. package/dist/components/Splitter/index.d.ts.map +1 -0
  226. package/dist/components/StatusBar/StatusBar.css +97 -0
  227. package/dist/components/StatusBar/StatusBar.css.d.ts +1 -0
  228. package/dist/components/StatusBar/StatusBar.d.ts +22 -0
  229. package/dist/components/StatusBar/StatusBar.d.ts.map +1 -0
  230. package/dist/components/StatusBar/StatusBar.js +56 -0
  231. package/dist/components/StatusBar/StatusBar.js.map +1 -0
  232. package/dist/components/StatusBar/index.d.ts +3 -0
  233. package/dist/components/StatusBar/index.d.ts.map +1 -0
  234. package/dist/components/StatusLabel/StatusLabel.css +93 -0
  235. package/dist/components/StatusLabel/StatusLabel.css.d.ts +1 -0
  236. package/dist/components/StatusLabel/StatusLabel.d.ts +20 -0
  237. package/dist/components/StatusLabel/StatusLabel.d.ts.map +1 -0
  238. package/dist/components/StatusLabel/StatusLabel.js +42 -0
  239. package/dist/components/StatusLabel/StatusLabel.js.map +1 -0
  240. package/dist/components/StatusLabel/index.d.ts +3 -0
  241. package/dist/components/StatusLabel/index.d.ts.map +1 -0
  242. package/dist/components/Table/Table.css +253 -0
  243. package/dist/components/Table/Table.css.d.ts +1 -0
  244. package/dist/components/Table/Table.d.ts +67 -0
  245. package/dist/components/Table/Table.d.ts.map +1 -0
  246. package/dist/components/Table/Table.js +429 -0
  247. package/dist/components/Table/Table.js.map +1 -0
  248. package/dist/components/Table/index.d.ts +3 -0
  249. package/dist/components/Table/index.d.ts.map +1 -0
  250. package/dist/components/Tabs/Tabs.css +138 -0
  251. package/dist/components/Tabs/Tabs.css.d.ts +1 -0
  252. package/dist/components/Tabs/Tabs.d.ts +34 -0
  253. package/dist/components/Tabs/Tabs.d.ts.map +1 -0
  254. package/dist/components/Tabs/Tabs.js +140 -0
  255. package/dist/components/Tabs/Tabs.js.map +1 -0
  256. package/dist/components/Tabs/index.d.ts +3 -0
  257. package/dist/components/Tabs/index.d.ts.map +1 -0
  258. package/dist/components/TextInput/TextInput.css +133 -0
  259. package/dist/components/TextInput/TextInput.css.d.ts +1 -0
  260. package/dist/components/TextInput/TextInput.d.ts +16 -0
  261. package/dist/components/TextInput/TextInput.d.ts.map +1 -0
  262. package/dist/components/TextInput/TextInput.js +38 -0
  263. package/dist/components/TextInput/TextInput.js.map +1 -0
  264. package/dist/components/TextInput/index.d.ts +3 -0
  265. package/dist/components/TextInput/index.d.ts.map +1 -0
  266. package/dist/components/Textarea/Textarea.css +121 -0
  267. package/dist/components/Textarea/Textarea.css.d.ts +1 -0
  268. package/dist/components/Textarea/Textarea.d.ts +21 -0
  269. package/dist/components/Textarea/Textarea.d.ts.map +1 -0
  270. package/dist/components/Textarea/Textarea.js +61 -0
  271. package/dist/components/Textarea/Textarea.js.map +1 -0
  272. package/dist/components/Textarea/index.d.ts +3 -0
  273. package/dist/components/Textarea/index.d.ts.map +1 -0
  274. package/dist/components/TitleBar/TitleBar.css +76 -0
  275. package/dist/components/TitleBar/TitleBar.css.d.ts +1 -0
  276. package/dist/components/TitleBar/TitleBar.d.ts +20 -0
  277. package/dist/components/TitleBar/TitleBar.d.ts.map +1 -0
  278. package/dist/components/TitleBar/TitleBar.js +43 -0
  279. package/dist/components/TitleBar/TitleBar.js.map +1 -0
  280. package/dist/components/TitleBar/index.d.ts +3 -0
  281. package/dist/components/TitleBar/index.d.ts.map +1 -0
  282. package/dist/components/ToggleButton/ToggleButton.css +162 -0
  283. package/dist/components/ToggleButton/ToggleButton.css.d.ts +1 -0
  284. package/dist/components/ToggleButton/ToggleButton.d.ts +27 -0
  285. package/dist/components/ToggleButton/ToggleButton.d.ts.map +1 -0
  286. package/dist/components/ToggleButton/ToggleButton.js +52 -0
  287. package/dist/components/ToggleButton/ToggleButton.js.map +1 -0
  288. package/dist/components/ToggleButton/index.d.ts +3 -0
  289. package/dist/components/ToggleButton/index.d.ts.map +1 -0
  290. package/dist/components/Toolbar/Toolbar.css +202 -0
  291. package/dist/components/Toolbar/Toolbar.css.d.ts +1 -0
  292. package/dist/components/Toolbar/Toolbar.d.ts +46 -0
  293. package/dist/components/Toolbar/Toolbar.d.ts.map +1 -0
  294. package/dist/components/Toolbar/Toolbar.js +102 -0
  295. package/dist/components/Toolbar/Toolbar.js.map +1 -0
  296. package/dist/components/Toolbar/index.d.ts +3 -0
  297. package/dist/components/Toolbar/index.d.ts.map +1 -0
  298. package/dist/components/Tooltip/Tooltip.css +86 -0
  299. package/dist/components/Tooltip/Tooltip.css.d.ts +1 -0
  300. package/dist/components/Tooltip/Tooltip.d.ts +22 -0
  301. package/dist/components/Tooltip/Tooltip.d.ts.map +1 -0
  302. package/dist/components/Tooltip/Tooltip.js +92 -0
  303. package/dist/components/Tooltip/Tooltip.js.map +1 -0
  304. package/dist/components/Tooltip/index.d.ts +3 -0
  305. package/dist/components/Tooltip/index.d.ts.map +1 -0
  306. package/dist/components/TreeView/TreeView.css +191 -0
  307. package/dist/components/TreeView/TreeView.css.d.ts +1 -0
  308. package/dist/components/TreeView/TreeView.d.ts +46 -0
  309. package/dist/components/TreeView/TreeView.d.ts.map +1 -0
  310. package/dist/components/TreeView/TreeView.js +331 -0
  311. package/dist/components/TreeView/TreeView.js.map +1 -0
  312. package/dist/components/TreeView/index.d.ts +3 -0
  313. package/dist/components/TreeView/index.d.ts.map +1 -0
  314. package/dist/components/Window/Window.css +218 -0
  315. package/dist/components/Window/Window.css.d.ts +1 -0
  316. package/dist/components/Window/Window.d.ts +30 -0
  317. package/dist/components/Window/Window.d.ts.map +1 -0
  318. package/dist/components/Window/Window.js +156 -0
  319. package/dist/components/Window/Window.js.map +1 -0
  320. package/dist/components/Window/index.d.ts +3 -0
  321. package/dist/components/Window/index.d.ts.map +1 -0
  322. package/dist/index.d.ts +91 -8
  323. package/dist/index.d.ts.map +1 -1
  324. package/dist/index.js +41 -2
  325. package/dist/styles/scrollbars.css +123 -0
  326. package/dist/styles/scrollbars.css.d.ts +1 -0
  327. package/dist/styles/theme.css +167 -122
  328. package/dist/styles/tokens.css +202 -0
  329. package/dist/styles/tokens.css.d.ts +1 -0
  330. package/dist/test/a11y.d.ts +3 -0
  331. package/dist/test/a11y.d.ts.map +1 -0
  332. package/dist/test/index.d.ts +2 -0
  333. package/dist/test/index.d.ts.map +1 -0
  334. package/dist/test/setup.d.ts +2 -0
  335. package/dist/test/setup.d.ts.map +1 -0
  336. package/package.json +23 -14
  337. package/dist/components/GreenButton/GreenButton.css +0 -47
  338. package/dist/components/GreenButton/GreenButton.d.ts +0 -8
  339. package/dist/components/GreenButton/GreenButton.d.ts.map +0 -1
  340. package/dist/components/GreenButton/GreenButton.js +0 -20
  341. package/dist/components/GreenButton/GreenButton.js.map +0 -1
  342. package/dist/components/GreenButton/index.d.ts +0 -3
  343. /package/dist/components/{GreenButton/GreenButton.css.d.ts → Avatar/Avatar.css.d.ts} +0 -0
@@ -0,0 +1,98 @@
1
+ /*
2
+ * Green Steam field label.
3
+ *
4
+ * `Label` in `steam.styles:1147` is four declarations: a font family, a size, a
5
+ * `textcolor` and a `selectedtextcolor`. No bevel, no face, no sprite, **no
6
+ * hover** and no disabled state — the sunken disabled treatment comes from the
7
+ * scheme's `DisabledText1` over `DisabledText2` pair instead
8
+ * (docs/components/FieldLabel.md).
9
+ *
10
+ * The whole visual identity is therefore colour, size and the two-colour shadow
11
+ * trick. Two things are deliberate:
12
+ *
13
+ * 1. **No hover state.** A caption that brightens on hover makes a VGUI layout
14
+ * look like a modern web page: everything starts to look clickable.
15
+ * 2. **No uppercase and no tracking.** Uppercase chrome text is `StatusLabel`'s
16
+ * signature, not this component's; a caption loses readability and gains
17
+ * nothing.
18
+ *
19
+ * `overflow-wrap: anywhere` is not cosmetic — form captions are the most
20
+ * translated strings in an application, and the corpus never had to care because
21
+ * it was English-only and bitmap-fonted.
22
+ */
23
+
24
+ .vgui-field-label {
25
+ display: inline-block;
26
+ font: inherit;
27
+ font-size: var(--vgui-font-size);
28
+ line-height: var(--vgui-line-height);
29
+ max-inline-size: 100%;
30
+ overflow-wrap: anywhere;
31
+ color: var(--vgui-text);
32
+ text-transform: none;
33
+ letter-spacing: 0;
34
+ }
35
+
36
+ /*
37
+ * The sunken look, exactly as `steamscheme.res:50-51` intends it: the dark copy
38
+ * drawn at +1px +1px and the light copy on top. A `text-shadow` is equivalent to
39
+ * two stacked elements and cannot drift out of alignment. It is decorative — the
40
+ * disabled control carries the meaning.
41
+ */
42
+ .vgui-field-label[data-disabled='true'] {
43
+ color: var(--vgui-text-disabled);
44
+ text-shadow: 1px 1px 0 var(--vgui-text-disabled-shadow);
45
+ }
46
+
47
+ .vgui-field-label--strong {
48
+ color: var(--vgui-text-strong);
49
+ }
50
+
51
+ /*
52
+ * The default caption is `--vgui-text` `#D8DED3` (**5.49:1** on `--vgui-surface`),
53
+ * not the classic `Label` grey `#A0AA95` (**3.11:1**), because a form caption is
54
+ * body text and 3.11:1 fails WCAG 1.4.3. The `Label` grey survives as the
55
+ * `--muted` variant, where it belongs — it reaches 4.06:1 on the
56
+ * `--vgui-surface-dark` `#3E4637` interiors that motivated it in the first
57
+ * place. The header comment above describes the corpus, not this decision; see
58
+ * docs/components/FieldLabel.md §Accessibility.
59
+ */
60
+
61
+ .vgui-field-label--muted {
62
+ color: var(--vgui-text-muted);
63
+ }
64
+
65
+ .vgui-field-label--heading {
66
+ color: var(--vgui-heading);
67
+ }
68
+
69
+ .vgui-field-label--error {
70
+ color: var(--vgui-danger);
71
+ }
72
+
73
+ /*
74
+ * The asterisk is a *shape*, but it is invisible to assistive tech, which is why
75
+ * `required` also sets `aria-required` on the label and should be paired with
76
+ * `required` on the control.
77
+ */
78
+ .vgui-field-label--required::after {
79
+ content: '*';
80
+ margin-inline-start: 0.25em;
81
+ color: var(--vgui-danger);
82
+ }
83
+
84
+ /*
85
+ * Only the `<label>` variant is ever focusable, and only in a form context. The
86
+ * literal Valve ring is a dotted `BorderDark` (1.87:1), so the shipped ring is
87
+ * the accessible accent ring — the same ring every other control in the library
88
+ * uses (docs/foundations.md §4, "Focus rings").
89
+ */
90
+ label.vgui-field-label:focus-visible {
91
+ outline: var(--vgui-focus-ring);
92
+ outline-offset: 2px;
93
+ }
94
+
95
+ .vgui-crisp label.vgui-field-label:focus-visible {
96
+ outline: var(--vgui-focus-ring-valve);
97
+ outline-offset: var(--vgui-focus-ring-valve-offset);
98
+ }
@@ -0,0 +1 @@
1
+ export {}
@@ -0,0 +1,29 @@
1
+ import type { LabelHTMLAttributes, ReactNode } from 'react';
2
+ import './FieldLabel.css';
3
+ export interface FieldLabelProps extends LabelHTMLAttributes<HTMLLabelElement> {
4
+ /** Text or inline content of the label. */
5
+ children?: ReactNode;
6
+ /** Render a <span> instead of a <label>, for standalone explanatory text. */
7
+ asText?: boolean;
8
+ /** Emphasis: strong white text rather than the default caption colour. */
9
+ strong?: boolean;
10
+ /** The classic Label grey `#A0AA95`, for captions on a darker surface. */
11
+ muted?: boolean;
12
+ /** Use the maize heading colour, for a label acting as a section title. */
13
+ heading?: boolean;
14
+ /** Actionable/validation failure state. Pair with a message; never colour alone. */
15
+ error?: boolean;
16
+ /** Append a danger-coloured asterisk. Adds `aria-required` semantics. */
17
+ required?: boolean;
18
+ /** Apply the sunken DisabledText1/DisabledText2 treatment. */
19
+ disabled?: boolean;
20
+ }
21
+ /**
22
+ * The ordinary caption: one element, one text node, no bevel and no interaction.
23
+ *
24
+ * It renders a real `<label>` whenever it captions a control, so `htmlFor` gives
25
+ * the click-to-focus behaviour for free; `asText` swaps in a `<span>` for
26
+ * standalone explanatory text (docs/components/FieldLabel.md, "Anatomy").
27
+ */
28
+ export declare const FieldLabel: import("react").ForwardRefExoticComponent<FieldLabelProps & import("react").RefAttributes<HTMLLabelElement>>;
29
+ //# sourceMappingURL=FieldLabel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldLabel.d.ts","sourceRoot":"","sources":["../../../src/components/FieldLabel/FieldLabel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAE3D,OAAO,kBAAkB,CAAA;AAEzB,MAAM,WAAW,eAAgB,SAAQ,mBAAmB,CAAC,gBAAgB,CAAC;IAC5E,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,6EAA6E;IAC7E,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,2EAA2E;IAC3E,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,oFAAoF;IACpF,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,yEAAyE;IACzE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,8GAuDrB,CAAA"}
@@ -0,0 +1,42 @@
1
+ import { forwardRef } from "react";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import "./FieldLabel.css";
4
+ //#region src/components/FieldLabel/FieldLabel.tsx
5
+ /**
6
+ * The ordinary caption: one element, one text node, no bevel and no interaction.
7
+ *
8
+ * It renders a real `<label>` whenever it captions a control, so `htmlFor` gives
9
+ * the click-to-focus behaviour for free; `asText` swaps in a `<span>` for
10
+ * standalone explanatory text (docs/components/FieldLabel.md, "Anatomy").
11
+ */
12
+ var FieldLabel = forwardRef(function FieldLabel({ className, children, asText = false, strong = false, muted = false, heading = false, error = false, required = false, disabled = false, htmlFor, ...rest }, ref) {
13
+ const classes = ["vgui-field-label"];
14
+ if (strong) classes.push("vgui-field-label--strong");
15
+ if (muted) classes.push("vgui-field-label--muted");
16
+ if (heading) classes.push("vgui-field-label--heading");
17
+ if (error) classes.push("vgui-field-label--error");
18
+ if (required) classes.push("vgui-field-label--required");
19
+ if (className) classes.push(className);
20
+ const isDisabled = disabled || void 0;
21
+ if (asText) return /* @__PURE__ */ jsx("span", {
22
+ className: classes.join(" "),
23
+ "data-disabled": disabled ? "true" : void 0,
24
+ "aria-disabled": isDisabled,
25
+ ...rest,
26
+ children
27
+ });
28
+ return /* @__PURE__ */ jsx("label", {
29
+ ref,
30
+ htmlFor,
31
+ className: classes.join(" "),
32
+ "data-disabled": disabled ? "true" : void 0,
33
+ "aria-disabled": isDisabled,
34
+ ...rest,
35
+ children
36
+ });
37
+ });
38
+ FieldLabel.displayName = "FieldLabel";
39
+ //#endregion
40
+ export { FieldLabel };
41
+
42
+ //# sourceMappingURL=FieldLabel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldLabel.js","names":[],"sources":["../../../src/components/FieldLabel/FieldLabel.tsx"],"sourcesContent":["import { forwardRef } from 'react'\nimport type { LabelHTMLAttributes, ReactNode } from 'react'\n\nimport './FieldLabel.css'\n\nexport interface FieldLabelProps extends LabelHTMLAttributes<HTMLLabelElement> {\n /** Text or inline content of the label. */\n children?: ReactNode\n /** Render a <span> instead of a <label>, for standalone explanatory text. */\n asText?: boolean\n /** Emphasis: strong white text rather than the default caption colour. */\n strong?: boolean\n /** The classic Label grey `#A0AA95`, for captions on a darker surface. */\n muted?: boolean\n /** Use the maize heading colour, for a label acting as a section title. */\n heading?: boolean\n /** Actionable/validation failure state. Pair with a message; never colour alone. */\n error?: boolean\n /** Append a danger-coloured asterisk. Adds `aria-required` semantics. */\n required?: boolean\n /** Apply the sunken DisabledText1/DisabledText2 treatment. */\n disabled?: boolean\n}\n\n/**\n * The ordinary caption: one element, one text node, no bevel and no interaction.\n *\n * It renders a real `<label>` whenever it captions a control, so `htmlFor` gives\n * the click-to-focus behaviour for free; `asText` swaps in a `<span>` for\n * standalone explanatory text (docs/components/FieldLabel.md, \"Anatomy\").\n */\nexport const FieldLabel = forwardRef<HTMLLabelElement, FieldLabelProps>(function FieldLabel(\n {\n className,\n children,\n asText = false,\n strong = false,\n muted = false,\n heading = false,\n error = false,\n required = false,\n disabled = false,\n htmlFor,\n ...rest\n },\n ref,\n) {\n const classes = ['vgui-field-label']\n if (strong) classes.push('vgui-field-label--strong')\n if (muted) classes.push('vgui-field-label--muted')\n if (heading) classes.push('vgui-field-label--heading')\n if (error) classes.push('vgui-field-label--error')\n if (required) classes.push('vgui-field-label--required')\n if (className) classes.push(className)\n\n // A `<label>` cannot be natively disabled, so the sunken look is opt-in and\n // keyed on `data-disabled`, with the semantics exposed alongside it. The\n // requirement itself stays on the control: `aria-required` on a `<label>` is\n // not permitted for the generic role.\n const isDisabled = disabled || undefined\n\n if (asText) {\n return (\n <span\n className={classes.join(' ')}\n data-disabled={disabled ? 'true' : undefined}\n aria-disabled={isDisabled}\n {...rest}\n >\n {children}\n </span>\n )\n }\n\n return (\n <label\n ref={ref}\n htmlFor={htmlFor}\n className={classes.join(' ')}\n data-disabled={disabled ? 'true' : undefined}\n aria-disabled={isDisabled}\n {...rest}\n >\n {children}\n </label>\n )\n})\n\nFieldLabel.displayName = 'FieldLabel'\n"],"mappings":";;;;;;;;;;;AA+BA,IAAa,aAAa,WAA8C,SAAS,WAC/E,EACE,WACA,UACA,SAAS,OACT,SAAS,OACT,QAAQ,OACR,UAAU,OACV,QAAQ,OACR,WAAW,OACX,WAAW,OACX,SACA,GAAG,QAEL,KACA;CACA,MAAM,UAAU,CAAC,kBAAkB;CACnC,IAAI,QAAQ,QAAQ,KAAK,0BAA0B;CACnD,IAAI,OAAO,QAAQ,KAAK,yBAAyB;CACjD,IAAI,SAAS,QAAQ,KAAK,2BAA2B;CACrD,IAAI,OAAO,QAAQ,KAAK,yBAAyB;CACjD,IAAI,UAAU,QAAQ,KAAK,4BAA4B;CACvD,IAAI,WAAW,QAAQ,KAAK,SAAS;CAMrC,MAAM,aAAa,YAAY,KAAA;CAE/B,IAAI,QACF,OACE,oBAAC,QAAD;EACE,WAAW,QAAQ,KAAK,GAAG;EAC3B,iBAAe,WAAW,SAAS,KAAA;EACnC,iBAAe;EACf,GAAI;EAEH;CACG,CAAA;CAIV,OACE,oBAAC,SAAD;EACO;EACI;EACT,WAAW,QAAQ,KAAK,GAAG;EAC3B,iBAAe,WAAW,SAAS,KAAA;EACnC,iBAAe;EACf,GAAI;EAEH;CACI,CAAA;AAEX,CAAC;AAED,WAAW,cAAc"}
@@ -0,0 +1,3 @@
1
+ export { FieldLabel } from './FieldLabel';
2
+ export type { FieldLabelProps } from './FieldLabel';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/FieldLabel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA"}
@@ -0,0 +1,101 @@
1
+ /*
2
+ * Green Steam group box — a real <fieldset> styled with the 1px bevel
3
+ * (docs/components/GroupBox.md).
4
+ *
5
+ * `theme.css` already gives every `fieldset` a bevel and every `legend` the
6
+ * uppercase 12px chrome treatment, but those are element-level rules this
7
+ * component has to be able to override, so the box and the legend are both
8
+ * declared here through their own classes.
9
+ */
10
+
11
+ .vgui-groupbox {
12
+ box-sizing: border-box;
13
+ margin: 0 0 16px;
14
+ padding: 12px;
15
+ /* Non-obvious but essential: a fieldset defaults to min-inline-size:
16
+ min-content and then refuses to shrink inside a flex or grid parent,
17
+ which silently breaks every responsive layout it is dropped into. */
18
+ min-inline-size: 0;
19
+ border-top: 1px solid var(--vgui-bevel-light);
20
+ border-left: 1px solid var(--vgui-bevel-light);
21
+ border-bottom: 1px solid var(--vgui-bevel-dark);
22
+ border-right: 1px solid var(--vgui-bevel-dark);
23
+ }
24
+
25
+ .vgui-groupbox--inset {
26
+ border-top-color: var(--vgui-bevel-dark);
27
+ border-left-color: var(--vgui-bevel-dark);
28
+ border-bottom-color: var(--vgui-bevel-light);
29
+ border-right-color: var(--vgui-bevel-light);
30
+ }
31
+
32
+ /* Legend: the theme's uppercase chrome treatment, straddling the top border. */
33
+ .vgui-groupbox__legend {
34
+ padding: 0 6px;
35
+ text-transform: uppercase;
36
+ letter-spacing: var(--vgui-chrome-tracking);
37
+ font-family: var(--vgui-font);
38
+ font-size: var(--vgui-font-size-small);
39
+ font-weight: bold;
40
+ color: var(--vgui-text-strong);
41
+ }
42
+
43
+ /*
44
+ * `--legend-top`: the caption takes the whole first row as a section rule
45
+ * instead of notching the border. The React API has no prop for it — the doc
46
+ * lists it as a variant, so it is reachable through `className`.
47
+ */
48
+ .vgui-groupbox--legend-top {
49
+ border-top: 0;
50
+ }
51
+
52
+ .vgui-groupbox--legend-top > .vgui-groupbox__legend {
53
+ display: block;
54
+ width: 100%;
55
+ padding: 0 0 6px;
56
+ }
57
+
58
+ /*
59
+ * `hideLegend` hides the caption from sight only. `display: none` would strip
60
+ * the group's accessible name entirely, so the legend is clipped instead.
61
+ */
62
+ .vgui-groupbox--legend-hidden > .vgui-groupbox__legend {
63
+ position: absolute;
64
+ width: 1px;
65
+ height: 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
+ /* `<fieldset disabled>` already disables the whole subtree; only the caption
75
+ needs a treatment of its own. */
76
+ .vgui-groupbox:disabled .vgui-groupbox__legend {
77
+ color: var(--vgui-text-disabled);
78
+ text-shadow: 1px 1px 0 var(--vgui-text-disabled-shadow);
79
+ }
80
+
81
+ /* Ruled variant: no box, just the engraved divider under the caption. */
82
+ .vgui-groupbox--ruled {
83
+ border: 0;
84
+ padding: 0;
85
+ }
86
+
87
+ .vgui-groupbox--ruled > .vgui-groupbox__legend {
88
+ display: block;
89
+ width: 100%;
90
+ padding: 0 0 6px;
91
+ border-bottom: 1px solid var(--vgui-bevel-dark);
92
+ box-shadow: 0 1px 0 var(--vgui-bevel-light);
93
+ }
94
+
95
+ /*
96
+ * Invalid border. Colour alone may never be the only indicator (WCAG 1.4.1),
97
+ * so this only draws the border — callers still owe a message or an icon.
98
+ */
99
+ .vgui-groupbox--invalid {
100
+ border-color: var(--vgui-danger);
101
+ }
@@ -0,0 +1 @@
1
+ export {}
@@ -0,0 +1,14 @@
1
+ import type { FieldsetHTMLAttributes, ReactNode } from 'react';
2
+ import './GroupBox.css';
3
+ export interface GroupBoxProps extends FieldsetHTMLAttributes<HTMLFieldSetElement> {
4
+ /** Uppercase caption drawn on the border. */
5
+ legend: ReactNode;
6
+ /** Invert the bevel, for a group sitting on a lighter surface. */
7
+ inset?: boolean;
8
+ /** Drop the box; render only the engraved rule under the caption. */
9
+ ruled?: boolean;
10
+ /** Hide the legend visually while keeping it for assistive technology. */
11
+ hideLegend?: boolean;
12
+ }
13
+ export declare const GroupBox: import("react").ForwardRefExoticComponent<GroupBoxProps & import("react").RefAttributes<HTMLFieldSetElement>>;
14
+ //# sourceMappingURL=GroupBox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupBox.d.ts","sourceRoot":"","sources":["../../../src/components/GroupBox/GroupBox.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAE9D,OAAO,gBAAgB,CAAA;AAEvB,MAAM,WAAW,aAAc,SAAQ,sBAAsB,CAAC,mBAAmB,CAAC;IAChF,6CAA6C;IAC7C,MAAM,EAAE,SAAS,CAAA;IACjB,kEAAkE;IAClE,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,qEAAqE;IACrE,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,0EAA0E;IAC1E,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,eAAO,MAAM,QAAQ,+GAkBnB,CAAA"}
@@ -0,0 +1,25 @@
1
+ import { forwardRef } from "react";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import "./GroupBox.css";
4
+ //#region src/components/GroupBox/GroupBox.tsx
5
+ var GroupBox = forwardRef(function GroupBox({ className, legend, inset = false, ruled = false, hideLegend = false, children, ...rest }, ref) {
6
+ const classes = ["vgui-groupbox"];
7
+ if (inset) classes.push("vgui-groupbox--inset");
8
+ if (ruled) classes.push("vgui-groupbox--ruled");
9
+ if (hideLegend) classes.push("vgui-groupbox--legend-hidden");
10
+ if (className) classes.push(className);
11
+ return /* @__PURE__ */ jsxs("fieldset", {
12
+ ref,
13
+ className: classes.join(" "),
14
+ ...rest,
15
+ children: [/* @__PURE__ */ jsx("legend", {
16
+ className: "vgui-groupbox__legend",
17
+ children: legend
18
+ }), children]
19
+ });
20
+ });
21
+ GroupBox.displayName = "GroupBox";
22
+ //#endregion
23
+ export { GroupBox };
24
+
25
+ //# sourceMappingURL=GroupBox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GroupBox.js","names":[],"sources":["../../../src/components/GroupBox/GroupBox.tsx"],"sourcesContent":["import { forwardRef } from 'react'\nimport type { FieldsetHTMLAttributes, ReactNode } from 'react'\n\nimport './GroupBox.css'\n\nexport interface GroupBoxProps extends FieldsetHTMLAttributes<HTMLFieldSetElement> {\n /** Uppercase caption drawn on the border. */\n legend: ReactNode\n /** Invert the bevel, for a group sitting on a lighter surface. */\n inset?: boolean\n /** Drop the box; render only the engraved rule under the caption. */\n ruled?: boolean\n /** Hide the legend visually while keeping it for assistive technology. */\n hideLegend?: boolean\n}\n\nexport const GroupBox = forwardRef<HTMLFieldSetElement, GroupBoxProps>(function GroupBox(\n { className, legend, inset = false, ruled = false, hideLegend = false, children, ...rest },\n ref,\n) {\n const classes = ['vgui-groupbox']\n if (inset) classes.push('vgui-groupbox--inset')\n if (ruled) classes.push('vgui-groupbox--ruled')\n if (hideLegend) classes.push('vgui-groupbox--legend-hidden')\n if (className) classes.push(className)\n\n // No `role=\"group\"`: the element already maps to the group role, and an\n // explicit role interferes with the legend-derived accessible name.\n return (\n <fieldset ref={ref} className={classes.join(' ')} {...rest}>\n <legend className=\"vgui-groupbox__legend\">{legend}</legend>\n {children}\n </fieldset>\n )\n})\n\nGroupBox.displayName = 'GroupBox'\n"],"mappings":";;;;AAgBA,IAAa,WAAW,WAA+C,SAAS,SAC9E,EAAE,WAAW,QAAQ,QAAQ,OAAO,QAAQ,OAAO,aAAa,OAAO,UAAU,GAAG,QACpF,KACA;CACA,MAAM,UAAU,CAAC,eAAe;CAChC,IAAI,OAAO,QAAQ,KAAK,sBAAsB;CAC9C,IAAI,OAAO,QAAQ,KAAK,sBAAsB;CAC9C,IAAI,YAAY,QAAQ,KAAK,8BAA8B;CAC3D,IAAI,WAAW,QAAQ,KAAK,SAAS;CAIrC,OACE,qBAAC,YAAD;EAAe;EAAK,WAAW,QAAQ,KAAK,GAAG;EAAG,GAAI;EAAtD,UAAA,CACE,oBAAC,UAAD;GAAQ,WAAU;GAAyB,UAAA;EAAe,CAAA,GACzD,QACO;;AAEd,CAAC;AAED,SAAS,cAAc"}
@@ -0,0 +1,3 @@
1
+ export { GroupBox } from './GroupBox';
2
+ export type { GroupBoxProps } from './GroupBox';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/GroupBox/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA"}
@@ -0,0 +1,184 @@
1
+ /*
2
+ * Green Steam icon button.
3
+ *
4
+ * A square face whose entire content is a glyph. Three things differ from
5
+ * `.vgui-button` (docs/components/IconButton.md):
6
+ *
7
+ * 1. The face is square and driven by the sprite's pixel size, not a label.
8
+ * 2. The glyph recolours per state through `currentColor` over a
9
+ * `mask-image`, so one URI covers normal/hover/active/disabled and every
10
+ * theme variant. There are no per-state assets.
11
+ * 3. `:active` inverts the bevel *and* drops the glyph 1px — the only place
12
+ * in the theme where content moves on press.
13
+ *
14
+ * Two deviations required by WCAG: the accessible focus ring replaces Valve's
15
+ * dashed `BorderDark` ring (1.87:1), and every face keeps an invisible 24×24
16
+ * hit area because a 15–20px square is below 2.5.8's minimum.
17
+ */
18
+
19
+ .vgui-icon-button {
20
+ box-sizing: border-box;
21
+ position: relative;
22
+ display: inline-flex;
23
+ align-items: center;
24
+ justify-content: center;
25
+ inline-size: var(--vgui-frame-control-size);
26
+ block-size: var(--vgui-frame-control-size);
27
+ padding: 0;
28
+ font: inherit;
29
+ color: var(--vgui-text);
30
+ background-color: var(--vgui-surface);
31
+ border-top: var(--vgui-bevel-width) solid var(--vgui-bevel-light);
32
+ border-left: var(--vgui-bevel-width) solid var(--vgui-bevel-light);
33
+ border-bottom: var(--vgui-bevel-width) solid var(--vgui-bevel-dark);
34
+ border-right: var(--vgui-bevel-width) solid var(--vgui-bevel-dark);
35
+ cursor: pointer;
36
+ }
37
+
38
+ /*
39
+ * The painted face is 15–20px; the target is not. A centred 24×24 overlay
40
+ * travels with the button, so the glyph stays sprite-sized while the pointer
41
+ * target meets WCAG 2.5.8.
42
+ */
43
+ .vgui-icon-button::before {
44
+ content: '';
45
+ position: absolute;
46
+ inset: 50% auto auto 50%;
47
+ inline-size: var(--vgui-min-target-size);
48
+ block-size: var(--vgui-min-target-size);
49
+ transform: translate(-50%, -50%);
50
+ }
51
+
52
+ /* The `_over` sprites are brighter glyphs, not a different face: the bevel
53
+ * stays raised and only the colour changes. */
54
+ .vgui-icon-button:hover,
55
+ .vgui-icon-button--toggled,
56
+ .vgui-icon-button[aria-pressed='true'] {
57
+ color: var(--vgui-text-strong);
58
+ }
59
+
60
+ /* Pressed and latched both invert the bevel — and `:active` does so even when
61
+ * already latched, so the press is never invisible. */
62
+ .vgui-icon-button:active,
63
+ .vgui-icon-button--toggled,
64
+ .vgui-icon-button[aria-pressed='true'] {
65
+ border-top-color: var(--vgui-bevel-dark);
66
+ border-left-color: var(--vgui-bevel-dark);
67
+ border-bottom-color: var(--vgui-bevel-light);
68
+ border-right-color: var(--vgui-bevel-light);
69
+ }
70
+
71
+ /* `icon_button_*_down` draws the glyph 1px lower. The movement is decorative
72
+ * and mirrors the bevel inversion, so it is a state change, not motion. */
73
+ .vgui-icon-button:active .vgui-icon-button__glyph {
74
+ transform: translateY(1px);
75
+ }
76
+
77
+ .vgui-icon-button:disabled {
78
+ color: var(--vgui-text-disabled);
79
+ cursor: default;
80
+ }
81
+
82
+ /* A disabled control is not a target, so it drops the expanded hit area rather
83
+ * than overlapping its still-enabled neighbours. */
84
+ .vgui-icon-button:disabled::before {
85
+ content: none;
86
+ }
87
+
88
+ .vgui-icon-button:focus-visible {
89
+ outline: var(--vgui-focus-ring);
90
+ outline-offset: var(--vgui-focus-ring-offset);
91
+ }
92
+
93
+ /* Valve's literal ring, reachable only through the pixel-perfect opt-in. */
94
+ .vgui-crisp .vgui-icon-button:focus-visible {
95
+ outline: var(--vgui-focus-ring-valve);
96
+ outline-offset: var(--vgui-focus-ring-valve-offset);
97
+ }
98
+
99
+ .vgui-icon-button--small {
100
+ inline-size: var(--vgui-checkbox-size);
101
+ block-size: var(--vgui-checkbox-size);
102
+ }
103
+
104
+ .vgui-icon-button--gutter {
105
+ inline-size: var(--vgui-scrollbar-size);
106
+ block-size: var(--vgui-scrollbar-size);
107
+ }
108
+
109
+ .vgui-icon-button--large {
110
+ inline-size: var(--vgui-control-height);
111
+ block-size: var(--vgui-control-height);
112
+ }
113
+
114
+ .vgui-icon-button--clay {
115
+ background-color: var(--vgui-clay-button);
116
+ }
117
+
118
+ /*
119
+ * Frameless: no chrome until hovered, for tree expanders and the `?` hint.
120
+ * Declared last so it also wins over `--clay` and the `:active` inversion sets
121
+ * above keep their bevel once shown.
122
+ */
123
+ .vgui-icon-button--frameless {
124
+ background-color: transparent;
125
+ border-color: transparent;
126
+ }
127
+
128
+ .vgui-icon-button--frameless:hover {
129
+ border-top-color: var(--vgui-bevel-light);
130
+ border-left-color: var(--vgui-bevel-light);
131
+ border-bottom-color: var(--vgui-bevel-dark);
132
+ border-right-color: var(--vgui-bevel-dark);
133
+ }
134
+
135
+ .vgui-icon-button--frameless:active,
136
+ .vgui-icon-button--frameless.vgui-icon-button--toggled,
137
+ .vgui-icon-button--frameless[aria-pressed='true'] {
138
+ border-top-color: var(--vgui-bevel-dark);
139
+ border-left-color: var(--vgui-bevel-dark);
140
+ border-bottom-color: var(--vgui-bevel-light);
141
+ border-right-color: var(--vgui-bevel-light);
142
+ }
143
+
144
+ /* `icon_button_*_disabled` has no bevel at all on this variant. */
145
+ .vgui-icon-button--frameless:disabled {
146
+ border-color: transparent;
147
+ }
148
+
149
+ /*
150
+ * The glyph box is 60% of the face — 12×12 inside the default 20×20, which is
151
+ * the sprite-derived metric in the doc. The mask is one image scaled to the
152
+ * box, tinted by `currentColor`.
153
+ */
154
+ .vgui-icon-button__glyph {
155
+ display: block;
156
+ flex: 0 0 auto;
157
+ inline-size: 60%;
158
+ block-size: 60%;
159
+ background-color: currentColor;
160
+ -webkit-mask-image: var(--vgui-icon-button-glyph, none);
161
+ mask-image: var(--vgui-icon-button-glyph, none);
162
+ -webkit-mask-repeat: no-repeat;
163
+ mask-repeat: no-repeat;
164
+ -webkit-mask-position: center;
165
+ mask-position: center;
166
+ -webkit-mask-size: contain;
167
+ mask-size: contain;
168
+ }
169
+
170
+ /*
171
+ * A caller-supplied node paints itself, so it must not also get the solid
172
+ * `currentColor` box the mask needs. `currentColor` is still inherited from the
173
+ * button, so `fill="currentColor"` in the node tracks every state.
174
+ */
175
+ .vgui-icon-button__glyph--node {
176
+ background-color: transparent;
177
+ }
178
+
179
+ .vgui-icon-button__glyph--node > svg {
180
+ display: block;
181
+ inline-size: 100%;
182
+ block-size: 100%;
183
+ fill: currentColor;
184
+ }
@@ -0,0 +1 @@
1
+ export {}
@@ -0,0 +1,56 @@
1
+ import type { ButtonHTMLAttributes, ReactNode } from 'react';
2
+ import './IconButton.css';
3
+ /**
4
+ * The built-in glyphs, keyed by the name accepted by `IconButton`'s `icon`
5
+ * prop. Geometry is drawn on a 12×12 grid and centred, rather than transcribed
6
+ * from Valve's sprites — `icon_down_*` is 9×6 while `icon_left_*`/`icon_right_*`
7
+ * are 13×13, so one primitive per direction is the only consistent option
8
+ * (docs/components/IconButton.md, "Assets").
9
+ */
10
+ export declare const glyphs: {
11
+ readonly back: string;
12
+ readonly forward: string;
13
+ readonly home: string;
14
+ readonly reload: string;
15
+ readonly stop: string;
16
+ readonly detail: string;
17
+ readonly close: string;
18
+ readonly minimize: string;
19
+ readonly maximize: string;
20
+ readonly restore: string;
21
+ readonly 'chevron-down': string;
22
+ readonly 'chevron-up': string;
23
+ readonly 'arrow-down': string;
24
+ readonly 'arrow-up': string;
25
+ readonly 'arrow-left': string;
26
+ readonly 'arrow-right': string;
27
+ readonly grid: string;
28
+ readonly list: string;
29
+ readonly pin: string;
30
+ readonly question: string;
31
+ };
32
+ /** The names accepted by `IconButton`'s `icon` prop. */
33
+ export type GlyphName = keyof typeof glyphs;
34
+ /** Resolves the built-in glyph data URI for a name, or `null` for a node. */
35
+ export declare function glyphMask(icon: ReactNode | GlyphName): string | null;
36
+ export interface IconButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
37
+ /** Accessible name. Required — a glyph alone is not a name. */
38
+ label: string;
39
+ /** The glyph: an inline SVG node, or the name of one of the built-in glyphs. */
40
+ icon: ReactNode | GlyphName;
41
+ /** Edge length in pixels. Defaults to 20. */
42
+ size?: 15 | 18 | 20 | 25;
43
+ /** Render without a bevel until hovered. */
44
+ frameless?: boolean;
45
+ /** Latched on: an inverted bevel that persists. */
46
+ toggled?: boolean;
47
+ /** Render the grey property-sheet face. */
48
+ clay?: boolean;
49
+ }
50
+ /**
51
+ * A square, glyph-only button. The tick target of a 20×20 face is under WCAG
52
+ * 2.5.8's 24×24, so every variant grows an invisible centred hit area rather
53
+ * than relying on the painted box (docs/foundations.md §10, rule 6).
54
+ */
55
+ export declare const IconButton: import("react").ForwardRefExoticComponent<IconButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
56
+ //# sourceMappingURL=IconButton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconButton.d.ts","sourceRoot":"","sources":["../../../src/components/IconButton/IconButton.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAA;AAE3E,OAAO,kBAAkB,CAAA;AAiBzB;;;;;;GAMG;AACH,eAAO,MAAM,MAAM;aACjB,IAAI;aACJ,OAAO;aACP,IAAI;aACJ,MAAM;aAGN,IAAI;aACJ,MAAM;aACN,KAAK;aACL,QAAQ;aACR,QAAQ;aAGR,OAAO;aAGP,cAAc;aAGd,YAAY;aAIZ,YAAY;aACZ,UAAU;aACV,YAAY;aACZ,aAAa;aACb,IAAI;aAGJ,IAAI;aAGJ,GAAG;aAGH,QAAQ;CAGA,CAAA;AAEV,wDAAwD;AACxD,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,MAAM,CAAA;AAE3C,6EAA6E;AAC7E,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAEpE;AAED,MAAM,WAAW,eAAgB,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC9E,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAA;IACb,gFAAgF;IAChF,IAAI,EAAE,SAAS,GAAG,SAAS,CAAA;IAC3B,6CAA6C;IAC7C,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAA;IACxB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,mDAAmD;IACnD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,2CAA2C;IAC3C,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,+GAkDrB,CAAA"}