@dalcvil/steam-green-react 0.1.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +25 -25
- package/README.md +38 -12
- 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.css.d.ts +1 -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/FieldLabel/index.d.ts.map +1 -0
- 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 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +41 -2
- package/dist/styles/scrollbars.css +123 -0
- package/dist/styles/scrollbars.css.d.ts +1 -0
- package/dist/styles/theme.css +167 -122
- 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 +23 -14
- 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/{GreenButton/GreenButton.css.d.ts → Avatar/Avatar.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 @@
|
|
|
1
|
+
export {}
|
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 {}
|