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