@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,176 @@
1
+ /*
2
+ * Green Steam notification — a raised, beveled toast
3
+ * (docs/components/Notification.md).
4
+ *
5
+ * The component is presentational: the queue, the timers and the stacking are
6
+ * the consumer's policy. `index` is therefore published as the
7
+ * `--vgui-notification-index` custom property instead of being turned into a
8
+ * layout offset here, because the component cannot know a neighbour's height.
9
+ */
10
+
11
+ .vgui-notification {
12
+ display: flex;
13
+ align-items: flex-start;
14
+ gap: 8px;
15
+ box-sizing: border-box;
16
+ min-width: 260px;
17
+ max-width: 380px;
18
+ padding: 8px 10px;
19
+ background-color: var(--vgui-surface);
20
+ border-top: 1px solid var(--vgui-bevel-light);
21
+ border-left: 1px solid var(--vgui-bevel-light);
22
+ border-bottom: 1px solid var(--vgui-bevel-dark);
23
+ border-right: 1px solid var(--vgui-bevel-dark);
24
+ color: var(--vgui-text);
25
+ font-family: var(--vgui-font);
26
+ font-size: var(--vgui-font-size);
27
+ line-height: var(--vgui-line-height);
28
+ /* VGUI has no drop shadows — the bevel plus placement is what makes a
29
+ notification read as on top. Resist adding one. */
30
+ box-shadow: none;
31
+ z-index: calc(var(--vgui-notification-index, 0) + 1);
32
+ }
33
+
34
+ .vgui-notification__icon {
35
+ flex: 0 0 auto;
36
+ display: inline-flex;
37
+ align-items: center;
38
+ justify-content: center;
39
+ width: 16px;
40
+ height: 16px;
41
+ }
42
+
43
+ .vgui-notification__content {
44
+ flex: 1 1 auto;
45
+ min-width: 0;
46
+ overflow-wrap: anywhere;
47
+ }
48
+
49
+ .vgui-notification__title {
50
+ display: block;
51
+ color: var(--vgui-text-strong);
52
+ font-weight: bold;
53
+ }
54
+
55
+ .vgui-notification__message {
56
+ display: block;
57
+ }
58
+
59
+ /* The error variant's non-colour cue. */
60
+ .vgui-notification__prefix {
61
+ color: var(--vgui-text-strong);
62
+ }
63
+
64
+ /* --- Variant accents ---------------------------------------------------- */
65
+
66
+ .vgui-notification--info .vgui-notification__icon {
67
+ color: var(--vgui-text-muted);
68
+ }
69
+
70
+ .vgui-notification--success .vgui-notification__icon {
71
+ color: var(--vgui-steam-green);
72
+ }
73
+
74
+ .vgui-notification--warning .vgui-notification__icon {
75
+ color: var(--vgui-heading);
76
+ }
77
+
78
+ .vgui-notification--error .vgui-notification__icon {
79
+ color: var(--vgui-danger);
80
+ }
81
+
82
+ /* --- Dismiss control ---------------------------------------------------- */
83
+
84
+ .vgui-notification__dismiss {
85
+ flex: 0 0 auto;
86
+ display: inline-flex;
87
+ align-items: center;
88
+ justify-content: center;
89
+ box-sizing: border-box;
90
+ /* WCAG 2.5.8: an 18px glyph is too small a target on its own. */
91
+ min-width: var(--vgui-min-target-size);
92
+ min-height: var(--vgui-min-target-size);
93
+ margin: 0;
94
+ padding: 0;
95
+ border: 0;
96
+ background: none;
97
+ color: var(--vgui-text);
98
+ font-family: var(--vgui-font);
99
+ font-size: var(--vgui-font-size-small);
100
+ line-height: 1;
101
+ cursor: pointer;
102
+ }
103
+
104
+ .vgui-notification__dismiss:hover {
105
+ color: var(--vgui-text-hover);
106
+ }
107
+
108
+ .vgui-notification__dismiss:focus-visible {
109
+ outline: var(--vgui-focus-ring);
110
+ outline-offset: var(--vgui-focus-ring-offset);
111
+ }
112
+
113
+ /* --- Corner anchoring --------------------------------------------------- */
114
+
115
+ .vgui-notification--corner-top-left {
116
+ position: fixed;
117
+ inset-block-start: 20px;
118
+ inset-inline-start: 20px;
119
+ }
120
+
121
+ .vgui-notification--corner-top-right {
122
+ position: fixed;
123
+ inset-block-start: 20px;
124
+ inset-inline-end: 20px;
125
+ }
126
+
127
+ .vgui-notification--corner-bottom-left {
128
+ position: fixed;
129
+ inset-block-end: 20px;
130
+ inset-inline-start: 20px;
131
+ }
132
+
133
+ .vgui-notification--corner-bottom-right {
134
+ position: fixed;
135
+ inset-block-end: 20px;
136
+ inset-inline-end: 20px;
137
+ }
138
+
139
+ /* --- Entering ----------------------------------------------------------- */
140
+
141
+ /*
142
+ * The slide is keyed to mount, so the class is present from the first render
143
+ * and the animation is guarded rather than the class being toggled.
144
+ */
145
+ @media (prefers-reduced-motion: no-preference) {
146
+ .vgui-notification--entering {
147
+ animation: vgui-notification-in 120ms ease-out;
148
+ }
149
+
150
+ .vgui-notification--corner-top-left.vgui-notification--entering,
151
+ .vgui-notification--corner-top-right.vgui-notification--entering {
152
+ animation-name: vgui-notification-in-from-top;
153
+ }
154
+
155
+ @keyframes vgui-notification-in {
156
+ from {
157
+ transform: translateY(8px);
158
+ opacity: 0;
159
+ }
160
+ to {
161
+ transform: none;
162
+ opacity: 1;
163
+ }
164
+ }
165
+
166
+ @keyframes vgui-notification-in-from-top {
167
+ from {
168
+ transform: translateY(-8px);
169
+ opacity: 0;
170
+ }
171
+ to {
172
+ transform: none;
173
+ opacity: 1;
174
+ }
175
+ }
176
+ }
@@ -0,0 +1,26 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ import './Notification.css';
3
+ type NotificationVariant = 'info' | 'success' | 'warning' | 'error';
4
+ export interface NotificationProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
5
+ /** Bold headline. Optional — a message alone is fine. */
6
+ title?: ReactNode;
7
+ /** Body text. */
8
+ children?: ReactNode;
9
+ /** Semantic variant; changes the icon colour and the live-region politeness. */
10
+ variant?: NotificationVariant;
11
+ /** Optional leading glyph; overrides the variant's default. */
12
+ icon?: ReactNode;
13
+ /** Which corner of the viewport to anchor to. */
14
+ corner?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right';
15
+ /** Show a dismiss button. */
16
+ dismissable?: boolean;
17
+ /** Called when the dismiss button is pressed. */
18
+ onDismiss?: () => void;
19
+ /** Milliseconds before auto-dismissal; 0 or undefined disables it. */
20
+ duration?: number;
21
+ /** Stacking order within the corner; larger is further from the edge. */
22
+ index?: number;
23
+ }
24
+ export declare const Notification: import("react").ForwardRefExoticComponent<NotificationProps & import("react").RefAttributes<HTMLDivElement>>;
25
+ export {};
26
+ //# sourceMappingURL=Notification.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Notification.d.ts","sourceRoot":"","sources":["../../../src/components/Notification/Notification.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,cAAc,EAAiB,SAAS,EAAE,MAAM,OAAO,CAAA;AAEpF,OAAO,oBAAoB,CAAA;AAE3B,KAAK,mBAAmB,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAA;AAInE,MAAM,WAAW,iBAAkB,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IACtF,yDAAyD;IACzD,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,iBAAiB;IACjB,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,gFAAgF;IAChF,OAAO,CAAC,EAAE,mBAAmB,CAAA;IAC7B,+DAA+D;IAC/D,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,iDAAiD;IACjD,MAAM,CAAC,EAAE,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,cAAc,CAAA;IAClE,6BAA6B;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,yEAAyE;IACzE,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AA0CD,eAAO,MAAM,YAAY,8GAyGvB,CAAA"}
@@ -0,0 +1,181 @@
1
+ import { forwardRef, useEffect, useState } from "react";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import "./Notification.css";
4
+ //#region src/components/Notification/Notification.tsx
5
+ var GLYPHS = {
6
+ info: /* @__PURE__ */ jsxs("svg", {
7
+ viewBox: "0 0 16 16",
8
+ width: "16",
9
+ height: "16",
10
+ "aria-hidden": "true",
11
+ focusable: "false",
12
+ children: [
13
+ /* @__PURE__ */ jsx("circle", {
14
+ cx: "8",
15
+ cy: "8",
16
+ r: "6.5",
17
+ fill: "none",
18
+ stroke: "currentColor"
19
+ }),
20
+ /* @__PURE__ */ jsx("rect", {
21
+ x: "7.25",
22
+ y: "7",
23
+ width: "1.5",
24
+ height: "5",
25
+ fill: "currentColor"
26
+ }),
27
+ /* @__PURE__ */ jsx("rect", {
28
+ x: "7.25",
29
+ y: "4",
30
+ width: "1.5",
31
+ height: "1.5",
32
+ fill: "currentColor"
33
+ })
34
+ ]
35
+ }),
36
+ success: /* @__PURE__ */ jsx("svg", {
37
+ viewBox: "0 0 16 16",
38
+ width: "16",
39
+ height: "16",
40
+ "aria-hidden": "true",
41
+ focusable: "false",
42
+ children: /* @__PURE__ */ jsx("path", {
43
+ d: "M2.5 8.5 6 12l7.5-8",
44
+ fill: "none",
45
+ stroke: "currentColor",
46
+ strokeWidth: "2",
47
+ strokeLinecap: "round",
48
+ strokeLinejoin: "round"
49
+ })
50
+ }),
51
+ warning: /* @__PURE__ */ jsxs("svg", {
52
+ viewBox: "0 0 16 16",
53
+ width: "16",
54
+ height: "16",
55
+ "aria-hidden": "true",
56
+ focusable: "false",
57
+ children: [
58
+ /* @__PURE__ */ jsx("path", {
59
+ d: "M8 1.5 15 14.5H1Z",
60
+ fill: "none",
61
+ stroke: "currentColor",
62
+ strokeLinejoin: "round"
63
+ }),
64
+ /* @__PURE__ */ jsx("rect", {
65
+ x: "7.25",
66
+ y: "6",
67
+ width: "1.5",
68
+ height: "4.5",
69
+ fill: "currentColor"
70
+ }),
71
+ /* @__PURE__ */ jsx("rect", {
72
+ x: "7.25",
73
+ y: "11.5",
74
+ width: "1.5",
75
+ height: "1.5",
76
+ fill: "currentColor"
77
+ })
78
+ ]
79
+ }),
80
+ error: /* @__PURE__ */ jsx("svg", {
81
+ viewBox: "0 0 16 16",
82
+ width: "16",
83
+ height: "16",
84
+ "aria-hidden": "true",
85
+ focusable: "false",
86
+ children: /* @__PURE__ */ jsx("path", {
87
+ d: "M3 3 13 13M13 3 3 13",
88
+ fill: "none",
89
+ stroke: "currentColor",
90
+ strokeWidth: "2",
91
+ strokeLinecap: "round"
92
+ })
93
+ })
94
+ };
95
+ var Notification = forwardRef(function Notification({ className, title, children, variant = "info", icon, corner = "bottom-right", dismissable = false, onDismiss, duration, index = 0, style, onKeyDown, onFocus, onBlur, onPointerEnter, onPointerLeave, ...rest }, ref) {
96
+ const [paused, setPaused] = useState(false);
97
+ const timeout = variant === "error" ? 0 : duration ?? 0;
98
+ useEffect(() => {
99
+ if (timeout <= 0 || paused || !onDismiss) return;
100
+ const timer = setTimeout(onDismiss, timeout);
101
+ return () => clearTimeout(timer);
102
+ }, [
103
+ timeout,
104
+ paused,
105
+ onDismiss
106
+ ]);
107
+ const classes = [
108
+ "vgui-notification",
109
+ `vgui-notification--${variant}`,
110
+ `vgui-notification--corner-${corner}`,
111
+ "vgui-notification--entering"
112
+ ];
113
+ if (className) classes.push(className);
114
+ const handleKeyDown = (event) => {
115
+ onKeyDown?.(event);
116
+ if (event.key === "Escape" && onDismiss) onDismiss();
117
+ };
118
+ const mergedStyle = {
119
+ ...style,
120
+ "--vgui-notification-index": index
121
+ };
122
+ return /* @__PURE__ */ jsxs("div", {
123
+ ref,
124
+ role: variant === "error" ? "alert" : "status",
125
+ className: classes.join(" "),
126
+ style: mergedStyle,
127
+ onKeyDown: handleKeyDown,
128
+ onPointerEnter: (event) => {
129
+ onPointerEnter?.(event);
130
+ setPaused(true);
131
+ },
132
+ onPointerLeave: (event) => {
133
+ onPointerLeave?.(event);
134
+ setPaused(false);
135
+ },
136
+ onFocus: (event) => {
137
+ onFocus?.(event);
138
+ setPaused(true);
139
+ },
140
+ onBlur: (event) => {
141
+ onBlur?.(event);
142
+ setPaused(false);
143
+ },
144
+ ...rest,
145
+ children: [
146
+ /* @__PURE__ */ jsx("span", {
147
+ className: "vgui-notification__icon",
148
+ "aria-hidden": "true",
149
+ children: icon ?? GLYPHS[variant]
150
+ }),
151
+ /* @__PURE__ */ jsxs("div", {
152
+ className: "vgui-notification__content",
153
+ children: [title != null ? /* @__PURE__ */ jsx("span", {
154
+ className: "vgui-notification__title",
155
+ children: title
156
+ }) : null, /* @__PURE__ */ jsxs("span", {
157
+ className: "vgui-notification__message",
158
+ children: [variant === "error" && title == null ? /* @__PURE__ */ jsx("strong", {
159
+ className: "vgui-notification__prefix",
160
+ children: "Error: "
161
+ }) : null, children]
162
+ })]
163
+ }),
164
+ dismissable ? /* @__PURE__ */ jsx("button", {
165
+ type: "button",
166
+ className: "vgui-notification__dismiss",
167
+ "aria-label": "Dismiss notification",
168
+ onClick: onDismiss,
169
+ children: /* @__PURE__ */ jsx("span", {
170
+ "aria-hidden": "true",
171
+ children: "×"
172
+ })
173
+ }) : null
174
+ ]
175
+ });
176
+ });
177
+ Notification.displayName = "Notification";
178
+ //#endregion
179
+ export { Notification };
180
+
181
+ //# sourceMappingURL=Notification.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Notification.js","names":[],"sources":["../../../src/components/Notification/Notification.tsx"],"sourcesContent":["import { forwardRef, useEffect, useState } from 'react'\nimport type { CSSProperties, HTMLAttributes, KeyboardEvent, ReactNode } from 'react'\n\nimport './Notification.css'\n\ntype NotificationVariant = 'info' | 'success' | 'warning' | 'error'\n\n// `title` is narrowed to `ReactNode` here, so the inherited `title: string` has\n// to be dropped first — the same trade `Window` makes.\nexport interface NotificationProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n /** Bold headline. Optional — a message alone is fine. */\n title?: ReactNode\n /** Body text. */\n children?: ReactNode\n /** Semantic variant; changes the icon colour and the live-region politeness. */\n variant?: NotificationVariant\n /** Optional leading glyph; overrides the variant's default. */\n icon?: ReactNode\n /** Which corner of the viewport to anchor to. */\n corner?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'\n /** Show a dismiss button. */\n dismissable?: boolean\n /** Called when the dismiss button is pressed. */\n onDismiss?: () => void\n /** Milliseconds before auto-dismissal; 0 or undefined disables it. */\n duration?: number\n /** Stacking order within the corner; larger is further from the edge. */\n index?: number\n}\n\nconst GLYPHS: Record<NotificationVariant, ReactNode> = {\n info: (\n <svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" aria-hidden=\"true\" focusable=\"false\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" fill=\"none\" stroke=\"currentColor\" />\n <rect x=\"7.25\" y=\"7\" width=\"1.5\" height=\"5\" fill=\"currentColor\" />\n <rect x=\"7.25\" y=\"4\" width=\"1.5\" height=\"1.5\" fill=\"currentColor\" />\n </svg>\n ),\n success: (\n <svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" aria-hidden=\"true\" focusable=\"false\">\n <path\n d=\"M2.5 8.5 6 12l7.5-8\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n ),\n warning: (\n <svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" aria-hidden=\"true\" focusable=\"false\">\n <path d=\"M8 1.5 15 14.5H1Z\" fill=\"none\" stroke=\"currentColor\" strokeLinejoin=\"round\" />\n <rect x=\"7.25\" y=\"6\" width=\"1.5\" height=\"4.5\" fill=\"currentColor\" />\n <rect x=\"7.25\" y=\"11.5\" width=\"1.5\" height=\"1.5\" fill=\"currentColor\" />\n </svg>\n ),\n error: (\n <svg viewBox=\"0 0 16 16\" width=\"16\" height=\"16\" aria-hidden=\"true\" focusable=\"false\">\n <path\n d=\"M3 3 13 13M13 3 3 13\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n ),\n}\n\nexport const Notification = forwardRef<HTMLDivElement, NotificationProps>(function Notification(\n {\n className,\n title,\n children,\n variant = 'info',\n icon,\n corner = 'bottom-right',\n dismissable = false,\n onDismiss,\n duration,\n index = 0,\n style,\n onKeyDown,\n onFocus,\n onBlur,\n onPointerEnter,\n onPointerLeave,\n ...rest\n },\n ref,\n) {\n const [paused, setPaused] = useState(false)\n\n // An error that vanishes on a timer fails WCAG 2.2.1 for precisely the\n // message that most needs to be read, so `error` never auto-dismisses.\n const timeout = variant === 'error' ? 0 : duration ?? 0\n\n useEffect(() => {\n if (timeout <= 0 || paused || !onDismiss) return\n const timer = setTimeout(onDismiss, timeout)\n return () => clearTimeout(timer)\n }, [timeout, paused, onDismiss])\n\n const classes = [\n 'vgui-notification',\n `vgui-notification--${variant}`,\n `vgui-notification--corner-${corner}`,\n 'vgui-notification--entering',\n ]\n if (className) classes.push(className)\n\n const handleKeyDown = (event: KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event)\n if (event.key === 'Escape' && onDismiss) onDismiss()\n }\n\n // `index` is published rather than applied: the queue and the stacking are the\n // consumer's policy, and the component cannot guess a neighbour's height.\n const mergedStyle = { ...style, '--vgui-notification-index': index } as CSSProperties\n\n return (\n <div\n ref={ref}\n // The politeness is semantic: an error interrupts, everything else waits\n // its turn.\n role={variant === 'error' ? 'alert' : 'status'}\n className={classes.join(' ')}\n style={mergedStyle}\n onKeyDown={handleKeyDown}\n onPointerEnter={(event) => {\n onPointerEnter?.(event)\n setPaused(true)\n }}\n onPointerLeave={(event) => {\n onPointerLeave?.(event)\n setPaused(false)\n }}\n onFocus={(event) => {\n onFocus?.(event)\n setPaused(true)\n }}\n onBlur={(event) => {\n onBlur?.(event)\n setPaused(false)\n }}\n {...rest}\n >\n <span className=\"vgui-notification__icon\" aria-hidden=\"true\">\n {icon ?? GLYPHS[variant]}\n </span>\n <div className=\"vgui-notification__content\">\n {title != null ? <span className=\"vgui-notification__title\">{title}</span> : null}\n <span className=\"vgui-notification__message\">\n {/* Colour alone may never be the error indicator (WCAG 1.4.1), so the\n message leads with a word. A `title` already carries that word, so\n the prefix is only added when there is no title to do it. */}\n {variant === 'error' && title == null ? (\n <strong className=\"vgui-notification__prefix\">Error: </strong>\n ) : null}\n {children}\n </span>\n </div>\n {dismissable ? (\n <button\n type=\"button\"\n className=\"vgui-notification__dismiss\"\n aria-label=\"Dismiss notification\"\n onClick={onDismiss}\n >\n <span aria-hidden=\"true\">×</span>\n </button>\n ) : null}\n </div>\n )\n})\n\nNotification.displayName = 'Notification'\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { Notification } from './Notification';
2
+ export type { NotificationProps } from './Notification';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Notification/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,YAAY,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1,56 @@
1
+ /*
2
+ * Green Steam panel.
3
+ *
4
+ * The beveled surface everything else sits on. `--inset` overrides only the
5
+ * four `border-*-color` longhands rather than redeclaring the shorthand, which
6
+ * keeps the border widths in one place and makes the inversion auditable.
7
+ */
8
+
9
+ .vgui-panel {
10
+ /* `max-width` is a layout constraint from the CSS port, not a requirement, so
11
+ * it is routed through a local property an application shell can override. */
12
+ --vgui-panel-max-width: var(--vgui-window-max-width);
13
+
14
+ box-sizing: border-box;
15
+ background-color: var(--vgui-surface);
16
+ border-top: var(--vgui-bevel-width) solid var(--vgui-bevel-light);
17
+ border-left: var(--vgui-bevel-width) solid var(--vgui-bevel-light);
18
+ border-bottom: var(--vgui-bevel-width) solid var(--vgui-bevel-dark);
19
+ border-right: var(--vgui-bevel-width) solid var(--vgui-bevel-dark);
20
+ padding: 10px;
21
+ max-width: var(--vgui-panel-max-width);
22
+ margin: 0 0 20px;
23
+ }
24
+
25
+ .vgui-panel--inset {
26
+ background-color: var(--vgui-surface-dark);
27
+ border-top-color: var(--vgui-bevel-dark);
28
+ border-left-color: var(--vgui-bevel-dark);
29
+ border-bottom-color: var(--vgui-bevel-light);
30
+ border-right-color: var(--vgui-bevel-light);
31
+ }
32
+
33
+ /*
34
+ * Dropping the border removes the only non-text boundary cue, so `--rounded`
35
+ * substitutes an outline to stay above WCAG 1.4.11's 3:1 for UI components.
36
+ */
37
+ .vgui-panel--rounded {
38
+ border: none;
39
+ border-radius: 10px;
40
+ outline: var(--vgui-bevel-width) solid var(--vgui-bevel-dark);
41
+ outline-offset: -1px;
42
+ }
43
+
44
+ /* The caption strip. Uppercase + 2px tracking is the theme's signature. */
45
+ .vgui-panel__titlebar {
46
+ display: block;
47
+ width: 100%;
48
+ height: var(--vgui-titlebar-height);
49
+ line-height: var(--vgui-titlebar-height);
50
+ margin: 0 0 1em;
51
+ text-transform: uppercase;
52
+ letter-spacing: var(--vgui-chrome-tracking);
53
+ font-size: var(--vgui-font-size-small);
54
+ font-weight: bold;
55
+ color: var(--vgui-text-strong);
56
+ }
@@ -0,0 +1 @@
1
+ export {}
@@ -0,0 +1,14 @@
1
+ import type { HTMLAttributes, ReactNode } from 'react';
2
+ import './Panel.css';
3
+ export interface PanelProps extends HTMLAttributes<HTMLDivElement> {
4
+ /** Uppercase VGUI title bar text. Omit it to render a panel without one. */
5
+ heading?: ReactNode;
6
+ /** Darken the body to the VGUI "inset" look, e.g. for read-only content. */
7
+ inset?: boolean;
8
+ /** Round the corners and drop the beveled border. */
9
+ rounded?: boolean;
10
+ /** Render the caption inside an h{level} so screen readers can navigate between panels. */
11
+ headingLevel?: 1 | 2 | 3 | 4 | 5 | 6;
12
+ }
13
+ export declare const Panel: import("react").ForwardRefExoticComponent<PanelProps & import("react").RefAttributes<HTMLDivElement>>;
14
+ //# sourceMappingURL=Panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Panel.d.ts","sourceRoot":"","sources":["../../../src/components/Panel/Panel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtD,OAAO,aAAa,CAAA;AAIpB,MAAM,WAAW,UAAW,SAAQ,cAAc,CAAC,cAAc,CAAC;IAChE,4EAA4E;IAC5E,OAAO,CAAC,EAAE,SAAS,CAAA;IACnB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,qDAAqD;IACrD,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,2FAA2F;IAC3F,YAAY,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;CACrC;AAED,eAAO,MAAM,KAAK,uGA2ChB,CAAA"}
@@ -0,0 +1,42 @@
1
+ import { createElement, forwardRef, useId } from "react";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import "./Panel.css";
4
+ //#region src/components/Panel/Panel.tsx
5
+ var HEADING_TAGS = [
6
+ "h1",
7
+ "h2",
8
+ "h3",
9
+ "h4",
10
+ "h5",
11
+ "h6"
12
+ ];
13
+ var Panel = forwardRef(function Panel({ className, heading, inset = false, rounded = false, headingLevel, children, ...rest }, ref) {
14
+ const titlebarId = useId();
15
+ const classes = ["vgui-panel"];
16
+ if (inset) classes.push("vgui-panel--inset");
17
+ if (rounded) classes.push("vgui-panel--rounded");
18
+ if (className) classes.push(className);
19
+ const hasHeading = heading != null;
20
+ const titlebar = hasHeading ? createElement(headingLevel ? HEADING_TAGS[headingLevel - 1] : "div", {
21
+ id: titlebarId,
22
+ className: "vgui-panel__titlebar"
23
+ }, heading) : null;
24
+ if (hasHeading) return /* @__PURE__ */ jsxs("section", {
25
+ ref,
26
+ className: classes.join(" "),
27
+ "aria-labelledby": titlebarId,
28
+ ...rest,
29
+ children: [titlebar, children]
30
+ });
31
+ return /* @__PURE__ */ jsx("div", {
32
+ ref,
33
+ className: classes.join(" "),
34
+ ...rest,
35
+ children
36
+ });
37
+ });
38
+ Panel.displayName = "Panel";
39
+ //#endregion
40
+ export { Panel };
41
+
42
+ //# sourceMappingURL=Panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Panel.js","names":[],"sources":["../../../src/components/Panel/Panel.tsx"],"sourcesContent":["import { createElement, forwardRef, useId } from 'react'\nimport type { HTMLAttributes, ReactNode } from 'react'\n\nimport './Panel.css'\n\nconst HEADING_TAGS = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] as const\n\nexport interface PanelProps extends HTMLAttributes<HTMLDivElement> {\n /** Uppercase VGUI title bar text. Omit it to render a panel without one. */\n heading?: ReactNode\n /** Darken the body to the VGUI \"inset\" look, e.g. for read-only content. */\n inset?: boolean\n /** Round the corners and drop the beveled border. */\n rounded?: boolean\n /** Render the caption inside an h{level} so screen readers can navigate between panels. */\n headingLevel?: 1 | 2 | 3 | 4 | 5 | 6\n}\n\nexport const Panel = forwardRef<HTMLDivElement, PanelProps>(function Panel(\n { className, heading, inset = false, rounded = false, headingLevel, children, ...rest },\n ref,\n) {\n const titlebarId = useId()\n\n if (import.meta.env.DEV && inset && rounded) {\n console.warn(\n 'Panel: `inset` and `rounded` cannot be combined — Valve has no rounded-inset panel and the combination has no defined look.',\n )\n }\n\n const classes = ['vgui-panel']\n if (inset) classes.push('vgui-panel--inset')\n if (rounded) classes.push('vgui-panel--rounded')\n if (className) classes.push(className)\n\n const hasHeading = heading != null\n\n const titlebar = hasHeading\n ? createElement(\n headingLevel ? HEADING_TAGS[headingLevel - 1] : 'div',\n { id: titlebarId, className: 'vgui-panel__titlebar' },\n heading,\n )\n : null\n\n // With a caption the panel is a named region, so it is a real <section> wired\n // to that caption. Without one it is a generic container.\n if (hasHeading) {\n return (\n <section ref={ref} className={classes.join(' ')} aria-labelledby={titlebarId} {...rest}>\n {titlebar}\n {children}\n </section>\n )\n }\n\n return (\n <div ref={ref} className={classes.join(' ')} {...rest}>\n {children}\n </div>\n )\n})\n\nPanel.displayName = 'Panel'\n"],"mappings":";;;;AAKA,IAAM,eAAe;CAAC;CAAM;CAAM;CAAM;CAAM;CAAM;AAAI;AAaxD,IAAa,QAAQ,WAAuC,SAAS,MACnE,EAAE,WAAW,SAAS,QAAQ,OAAO,UAAU,OAAO,cAAc,UAAU,GAAG,QACjF,KACA;CACA,MAAM,aAAa,MAAM;CAQzB,MAAM,UAAU,CAAC,YAAY;CAC7B,IAAI,OAAO,QAAQ,KAAK,mBAAmB;CAC3C,IAAI,SAAS,QAAQ,KAAK,qBAAqB;CAC/C,IAAI,WAAW,QAAQ,KAAK,SAAS;CAErC,MAAM,aAAa,WAAW;CAE9B,MAAM,WAAW,aACb,cACE,eAAe,aAAa,eAAe,KAAK,OAChD;EAAE,IAAI;EAAY,WAAW;CAAuB,GACpD,OACF,IACA;CAIJ,IAAI,YACF,OACE,qBAAC,WAAD;EAAc;EAAK,WAAW,QAAQ,KAAK,GAAG;EAAG,mBAAiB;EAAY,GAAI;EAAlF,UAAA,CACG,UACA,QACM;;CAIb,OACE,oBAAC,OAAD;EAAU;EAAK,WAAW,QAAQ,KAAK,GAAG;EAAG,GAAI;EAC9C;CACE,CAAA;AAET,CAAC;AAED,MAAM,cAAc"}
@@ -0,0 +1,3 @@
1
+ export { Panel } from './Panel';
2
+ export type { PanelProps } from './Panel';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Panel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAC/B,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,108 @@
1
+ /*
2
+ * Green Steam progress bar — VGUI `ProgressBar` / `ContinuousProgressBar`
3
+ * (docs/components/ProgressBar.md).
4
+ *
5
+ * The three details that make this read as Valve's bar rather than a generic
6
+ * one:
7
+ *
8
+ * 1. The trough is `--vgui-surface-dark`, not black — the bar is a recess in
9
+ * the panel, not a hollowed-out text field.
10
+ * 2. The fill is a *stripe*: 8px of maize, then 4px of trough, every 12px.
11
+ * 3. The fill is inset 4px inside the 26px trough, giving the 16px fill.
12
+ *
13
+ * `--vgui-progress-fill` and `--vgui-progress-stripe` are declared here rather
14
+ * than in `tokens.css` because the token layer's own `--vgui-progress-fill`
15
+ * means the *height* of the fill; see docs/components/ProgressBar.md.
16
+ */
17
+
18
+ .vgui-progress {
19
+ --vgui-progress-stripe: 12px;
20
+ --vgui-progress-fill: 8px;
21
+ --vgui-progress-inset: 4px;
22
+ --vgui-progress-max-width: 480px;
23
+
24
+ display: block;
25
+ width: 100%;
26
+ max-width: var(--vgui-progress-max-width);
27
+ }
28
+
29
+ .vgui-progress__trough {
30
+ box-sizing: border-box;
31
+ position: relative;
32
+ height: 26px;
33
+ padding: var(--vgui-progress-inset);
34
+ background-color: var(--vgui-surface-dark);
35
+ /* Inset: the bar is recessed into the panel rather than raised off it. */
36
+ border-top: var(--vgui-bevel-width) solid var(--vgui-bevel-dark);
37
+ border-left: var(--vgui-bevel-width) solid var(--vgui-bevel-dark);
38
+ border-bottom: var(--vgui-bevel-width) solid var(--vgui-bevel-light);
39
+ border-right: var(--vgui-bevel-width) solid var(--vgui-bevel-light);
40
+ }
41
+
42
+ .vgui-progress__fill {
43
+ box-sizing: border-box;
44
+ height: 100%;
45
+ width: var(--vgui-progress, 0%);
46
+ /* The boundary cue: the fill's own 2.77:1 against the trough fails WCAG
47
+ * 1.4.11, so the extent is carried by a 5.40:1 leading edge. */
48
+ border-right: var(--vgui-bevel-width) solid var(--vgui-bevel-light-strong);
49
+ background-image: repeating-linear-gradient(
50
+ to right,
51
+ var(--vgui-accent-darker) 0 var(--vgui-progress-fill),
52
+ var(--vgui-surface-dark) var(--vgui-progress-fill) var(--vgui-progress-stripe)
53
+ );
54
+ /* Anchors the stripe phase to the bar's left edge so the pattern does not
55
+ * slide as the value changes. */
56
+ background-attachment: local;
57
+ background-repeat: repeat-x;
58
+ transition: width 120ms linear;
59
+ }
60
+
61
+ .vgui-progress__text {
62
+ display: block;
63
+ margin-top: 2px;
64
+ font-size: var(--vgui-font-size-small);
65
+ color: var(--vgui-text);
66
+ text-align: center;
67
+ }
68
+
69
+ .vgui-progress--small .vgui-progress__trough {
70
+ --vgui-progress-inset: 2px;
71
+
72
+ height: 16px;
73
+ }
74
+
75
+ /* Both variants advance on their own, so both animate — and never `width`. */
76
+ .vgui-progress--indeterminate .vgui-progress__fill,
77
+ .vgui-progress--continuous .vgui-progress__fill {
78
+ width: 100%;
79
+ background-size: 240px 100%;
80
+ animation: vgui-progress-sweep 1.2s linear infinite;
81
+ }
82
+
83
+ @media (prefers-reduced-motion: no-preference) {
84
+ @keyframes vgui-progress-sweep {
85
+ from {
86
+ background-position-x: 0;
87
+ }
88
+
89
+ to {
90
+ background-position-x: 240px;
91
+ }
92
+ }
93
+ }
94
+
95
+ /* Without motion an indeterminate bar becomes a full static stripe. */
96
+ @media (prefers-reduced-motion: reduce) {
97
+ .vgui-progress--indeterminate .vgui-progress__fill,
98
+ .vgui-progress--continuous .vgui-progress__fill {
99
+ animation: none;
100
+ opacity: 0.6;
101
+ }
102
+ }
103
+
104
+ /* The frame carries the error, not the fill. */
105
+ .vgui-progress--error .vgui-progress__trough {
106
+ border-top-color: var(--vgui-danger);
107
+ border-left-color: var(--vgui-danger);
108
+ }
@@ -0,0 +1 @@
1
+ export {}