@hyperpackai/hyperui 0.1.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 +21 -0
- package/README.md +82 -0
- package/dist/components/Accordion/index.d.ts +17 -0
- package/dist/components/Accordion/index.d.ts.map +1 -0
- package/dist/components/Accordion/index.js +46 -0
- package/dist/components/Alert/index.d.ts +13 -0
- package/dist/components/Alert/index.d.ts.map +1 -0
- package/dist/components/Alert/index.js +46 -0
- package/dist/components/AppBar/index.d.ts +19 -0
- package/dist/components/AppBar/index.d.ts.map +1 -0
- package/dist/components/AppBar/index.js +48 -0
- package/dist/components/AspectRatio/index.d.ts +8 -0
- package/dist/components/AspectRatio/index.d.ts.map +1 -0
- package/dist/components/AspectRatio/index.js +32 -0
- package/dist/components/Autocomplete/index.d.ts +21 -0
- package/dist/components/Autocomplete/index.d.ts.map +1 -0
- package/dist/components/Autocomplete/index.js +94 -0
- package/dist/components/Avatar/index.d.ts +12 -0
- package/dist/components/Avatar/index.d.ts.map +1 -0
- package/dist/components/Avatar/index.js +32 -0
- package/dist/components/AvatarGroup/index.d.ts +9 -0
- package/dist/components/AvatarGroup/index.d.ts.map +1 -0
- package/dist/components/AvatarGroup/index.js +24 -0
- package/dist/components/Backdrop/index.d.ts +10 -0
- package/dist/components/Backdrop/index.d.ts.map +1 -0
- package/dist/components/Backdrop/index.js +25 -0
- package/dist/components/Badge/index.d.ts +10 -0
- package/dist/components/Badge/index.d.ts.map +1 -0
- package/dist/components/Badge/index.js +30 -0
- package/dist/components/BottomNavigation/index.d.ts +16 -0
- package/dist/components/BottomNavigation/index.d.ts.map +1 -0
- package/dist/components/BottomNavigation/index.js +43 -0
- package/dist/components/Box/index.d.ts +21 -0
- package/dist/components/Box/index.d.ts.map +1 -0
- package/dist/components/Box/index.js +30 -0
- package/dist/components/Breadcrumb/index.d.ts +13 -0
- package/dist/components/Breadcrumb/index.d.ts.map +1 -0
- package/dist/components/Breadcrumb/index.js +19 -0
- package/dist/components/Button/index.d.ts +22 -0
- package/dist/components/Button/index.d.ts.map +1 -0
- package/dist/components/Button/index.js +93 -0
- package/dist/components/ButtonGroup/index.d.ts +9 -0
- package/dist/components/ButtonGroup/index.d.ts.map +1 -0
- package/dist/components/ButtonGroup/index.js +27 -0
- package/dist/components/Card/index.d.ts +14 -0
- package/dist/components/Card/index.d.ts.map +1 -0
- package/dist/components/Card/index.js +33 -0
- package/dist/components/Checkbox/index.d.ts +17 -0
- package/dist/components/Checkbox/index.d.ts.map +1 -0
- package/dist/components/Checkbox/index.js +42 -0
- package/dist/components/Chip/index.d.ts +18 -0
- package/dist/components/Chip/index.d.ts.map +1 -0
- package/dist/components/Chip/index.js +60 -0
- package/dist/components/CircularProgress/index.d.ts +14 -0
- package/dist/components/CircularProgress/index.d.ts.map +1 -0
- package/dist/components/CircularProgress/index.js +58 -0
- package/dist/components/ClickAwayListener/index.d.ts +11 -0
- package/dist/components/ClickAwayListener/index.d.ts.map +1 -0
- package/dist/components/ClickAwayListener/index.js +31 -0
- package/dist/components/Code/index.d.ts +9 -0
- package/dist/components/Code/index.d.ts.map +1 -0
- package/dist/components/Code/index.js +50 -0
- package/dist/components/Collapse/index.d.ts +11 -0
- package/dist/components/Collapse/index.d.ts.map +1 -0
- package/dist/components/Collapse/index.js +30 -0
- package/dist/components/CommandPalette/index.d.ts +26 -0
- package/dist/components/CommandPalette/index.d.ts.map +1 -0
- package/dist/components/CommandPalette/index.js +141 -0
- package/dist/components/Container/index.d.ts +11 -0
- package/dist/components/Container/index.d.ts.map +1 -0
- package/dist/components/Container/index.js +18 -0
- package/dist/components/DashboardLayout/index.d.ts +15 -0
- package/dist/components/DashboardLayout/index.d.ts.map +1 -0
- package/dist/components/DashboardLayout/index.js +67 -0
- package/dist/components/DataTable/index.d.ts +27 -0
- package/dist/components/DataTable/index.d.ts.map +1 -0
- package/dist/components/DataTable/index.js +59 -0
- package/dist/components/Dialog/index.d.ts +19 -0
- package/dist/components/Dialog/index.d.ts.map +1 -0
- package/dist/components/Dialog/index.js +96 -0
- package/dist/components/Divider/index.d.ts +13 -0
- package/dist/components/Divider/index.d.ts.map +1 -0
- package/dist/components/Divider/index.js +40 -0
- package/dist/components/Drawer/index.d.ts +17 -0
- package/dist/components/Drawer/index.d.ts.map +1 -0
- package/dist/components/Drawer/index.js +77 -0
- package/dist/components/DropdownMenu/index.d.ts +25 -0
- package/dist/components/DropdownMenu/index.d.ts.map +1 -0
- package/dist/components/DropdownMenu/index.js +67 -0
- package/dist/components/EmptyState/index.d.ts +11 -0
- package/dist/components/EmptyState/index.d.ts.map +1 -0
- package/dist/components/EmptyState/index.js +53 -0
- package/dist/components/ErrorState/index.d.ts +12 -0
- package/dist/components/ErrorState/index.d.ts.map +1 -0
- package/dist/components/ErrorState/index.js +54 -0
- package/dist/components/Fab/index.d.ts +16 -0
- package/dist/components/Fab/index.d.ts.map +1 -0
- package/dist/components/Fab/index.js +39 -0
- package/dist/components/Fade/index.d.ts +10 -0
- package/dist/components/Fade/index.d.ts.map +1 -0
- package/dist/components/Fade/index.js +13 -0
- package/dist/components/FocusTrap/index.d.ts +11 -0
- package/dist/components/FocusTrap/index.d.ts.map +1 -0
- package/dist/components/FocusTrap/index.js +69 -0
- package/dist/components/FormControl/index.d.ts +34 -0
- package/dist/components/FormControl/index.d.ts.map +1 -0
- package/dist/components/FormControl/index.js +52 -0
- package/dist/components/GlobalSearch/index.d.ts +23 -0
- package/dist/components/GlobalSearch/index.d.ts.map +1 -0
- package/dist/components/GlobalSearch/index.js +91 -0
- package/dist/components/Grid/index.d.ts +19 -0
- package/dist/components/Grid/index.d.ts.map +1 -0
- package/dist/components/Grid/index.js +30 -0
- package/dist/components/Grow/index.d.ts +10 -0
- package/dist/components/Grow/index.d.ts.map +1 -0
- package/dist/components/Grow/index.js +13 -0
- package/dist/components/IconButton/index.d.ts +16 -0
- package/dist/components/IconButton/index.d.ts.map +1 -0
- package/dist/components/IconButton/index.js +43 -0
- package/dist/components/ImageList/index.d.ts +21 -0
- package/dist/components/ImageList/index.d.ts.map +1 -0
- package/dist/components/ImageList/index.js +39 -0
- package/dist/components/Input/index.d.ts +33 -0
- package/dist/components/Input/index.d.ts.map +1 -0
- package/dist/components/Input/index.js +45 -0
- package/dist/components/Kbd/index.d.ts +8 -0
- package/dist/components/Kbd/index.d.ts.map +1 -0
- package/dist/components/Kbd/index.js +41 -0
- package/dist/components/KeyboardShortcut/index.d.ts +20 -0
- package/dist/components/KeyboardShortcut/index.d.ts.map +1 -0
- package/dist/components/KeyboardShortcut/index.js +63 -0
- package/dist/components/Label/index.d.ts +10 -0
- package/dist/components/Label/index.d.ts.map +1 -0
- package/dist/components/Label/index.js +17 -0
- package/dist/components/LinearProgress/index.d.ts +13 -0
- package/dist/components/LinearProgress/index.d.ts.map +1 -0
- package/dist/components/LinearProgress/index.js +69 -0
- package/dist/components/Link/index.d.ts +16 -0
- package/dist/components/Link/index.d.ts.map +1 -0
- package/dist/components/Link/index.js +25 -0
- package/dist/components/List/index.d.ts +40 -0
- package/dist/components/List/index.d.ts.map +1 -0
- package/dist/components/List/index.js +70 -0
- package/dist/components/LoadingState/index.d.ts +11 -0
- package/dist/components/LoadingState/index.d.ts.map +1 -0
- package/dist/components/LoadingState/index.js +66 -0
- package/dist/components/Menu/index.d.ts +40 -0
- package/dist/components/Menu/index.d.ts.map +1 -0
- package/dist/components/Menu/index.js +103 -0
- package/dist/components/MobileStepper/index.d.ts +16 -0
- package/dist/components/MobileStepper/index.d.ts.map +1 -0
- package/dist/components/MobileStepper/index.js +67 -0
- package/dist/components/Modal/index.d.ts +14 -0
- package/dist/components/Modal/index.d.ts.map +1 -0
- package/dist/components/Modal/index.js +51 -0
- package/dist/components/Navbar/index.d.ts +14 -0
- package/dist/components/Navbar/index.d.ts.map +1 -0
- package/dist/components/Navbar/index.js +27 -0
- package/dist/components/NoSSR/index.d.ts +7 -0
- package/dist/components/NoSSR/index.d.ts.map +1 -0
- package/dist/components/NoSSR/index.js +9 -0
- package/dist/components/PageLayout/index.d.ts +13 -0
- package/dist/components/PageLayout/index.d.ts.map +1 -0
- package/dist/components/PageLayout/index.js +41 -0
- package/dist/components/Pagination/index.d.ts +11 -0
- package/dist/components/Pagination/index.d.ts.map +1 -0
- package/dist/components/Pagination/index.js +56 -0
- package/dist/components/Paper/index.d.ts +12 -0
- package/dist/components/Paper/index.d.ts.map +1 -0
- package/dist/components/Paper/index.js +24 -0
- package/dist/components/Popover/index.d.ts +13 -0
- package/dist/components/Popover/index.d.ts.map +1 -0
- package/dist/components/Popover/index.js +34 -0
- package/dist/components/Progress/index.d.ts +13 -0
- package/dist/components/Progress/index.d.ts.map +1 -0
- package/dist/components/Progress/index.js +40 -0
- package/dist/components/Radio/index.d.ts +7 -0
- package/dist/components/Radio/index.d.ts.map +1 -0
- package/dist/components/Radio/index.js +28 -0
- package/dist/components/Rating/index.d.ts +15 -0
- package/dist/components/Rating/index.d.ts.map +1 -0
- package/dist/components/Rating/index.js +41 -0
- package/dist/components/ResizablePanel/index.d.ts +16 -0
- package/dist/components/ResizablePanel/index.d.ts.map +1 -0
- package/dist/components/ResizablePanel/index.js +41 -0
- package/dist/components/ScrollArea/index.d.ts +12 -0
- package/dist/components/ScrollArea/index.d.ts.map +1 -0
- package/dist/components/ScrollArea/index.js +50 -0
- package/dist/components/Select/index.d.ts +23 -0
- package/dist/components/Select/index.d.ts.map +1 -0
- package/dist/components/Select/index.js +52 -0
- package/dist/components/Sheet/index.d.ts +15 -0
- package/dist/components/Sheet/index.d.ts.map +1 -0
- package/dist/components/Sheet/index.js +61 -0
- package/dist/components/Sidebar/index.d.ts +23 -0
- package/dist/components/Sidebar/index.d.ts.map +1 -0
- package/dist/components/Sidebar/index.js +37 -0
- package/dist/components/Skeleton/index.d.ts +9 -0
- package/dist/components/Skeleton/index.d.ts.map +1 -0
- package/dist/components/Skeleton/index.js +22 -0
- package/dist/components/Slide/index.d.ts +12 -0
- package/dist/components/Slide/index.d.ts.map +1 -0
- package/dist/components/Slide/index.js +21 -0
- package/dist/components/Slider/index.d.ts +19 -0
- package/dist/components/Slider/index.d.ts.map +1 -0
- package/dist/components/Slider/index.js +49 -0
- package/dist/components/Snackbar/index.d.ts +28 -0
- package/dist/components/Snackbar/index.d.ts.map +1 -0
- package/dist/components/Snackbar/index.js +71 -0
- package/dist/components/SpeedDial/index.d.ts +18 -0
- package/dist/components/SpeedDial/index.d.ts.map +1 -0
- package/dist/components/SpeedDial/index.js +71 -0
- package/dist/components/Spinner/index.d.ts +10 -0
- package/dist/components/Spinner/index.d.ts.map +1 -0
- package/dist/components/Spinner/index.js +67 -0
- package/dist/components/SplitPane/index.d.ts +11 -0
- package/dist/components/SplitPane/index.d.ts.map +1 -0
- package/dist/components/SplitPane/index.js +46 -0
- package/dist/components/Stack/index.d.ts +17 -0
- package/dist/components/Stack/index.d.ts.map +1 -0
- package/dist/components/Stack/index.js +30 -0
- package/dist/components/Stepper/index.d.ts +20 -0
- package/dist/components/Stepper/index.d.ts.map +1 -0
- package/dist/components/Stepper/index.js +66 -0
- package/dist/components/Switch/index.d.ts +13 -0
- package/dist/components/Switch/index.d.ts.map +1 -0
- package/dist/components/Switch/index.js +38 -0
- package/dist/components/Tabs/index.d.ts +20 -0
- package/dist/components/Tabs/index.d.ts.map +1 -0
- package/dist/components/Tabs/index.js +62 -0
- package/dist/components/TextField/index.d.ts +35 -0
- package/dist/components/TextField/index.d.ts.map +1 -0
- package/dist/components/TextField/index.js +69 -0
- package/dist/components/Textarea/index.d.ts +22 -0
- package/dist/components/Textarea/index.d.ts.map +1 -0
- package/dist/components/Textarea/index.js +27 -0
- package/dist/components/Timeline/index.d.ts +16 -0
- package/dist/components/Timeline/index.d.ts.map +1 -0
- package/dist/components/Timeline/index.js +30 -0
- package/dist/components/Toast/index.d.ts +34 -0
- package/dist/components/Toast/index.d.ts.map +1 -0
- package/dist/components/Toast/index.js +106 -0
- package/dist/components/ToggleButton/index.d.ts +21 -0
- package/dist/components/ToggleButton/index.d.ts.map +1 -0
- package/dist/components/ToggleButton/index.js +81 -0
- package/dist/components/Tooltip/index.d.ts +14 -0
- package/dist/components/Tooltip/index.d.ts.map +1 -0
- package/dist/components/Tooltip/index.js +47 -0
- package/dist/components/TreeView/index.d.ts +19 -0
- package/dist/components/TreeView/index.d.ts.map +1 -0
- package/dist/components/TreeView/index.js +50 -0
- package/dist/components/Typography/index.d.ts +17 -0
- package/dist/components/Typography/index.d.ts.map +1 -0
- package/dist/components/Typography/index.js +44 -0
- package/dist/components/VisuallyHidden/index.d.ts +7 -0
- package/dist/components/VisuallyHidden/index.d.ts.map +1 -0
- package/dist/components/VisuallyHidden/index.js +18 -0
- package/dist/components/Zoom/index.d.ts +10 -0
- package/dist/components/Zoom/index.d.ts.map +1 -0
- package/dist/components/Zoom/index.js +13 -0
- package/dist/components/ai.d.ts +133 -0
- package/dist/components/ai.d.ts.map +1 -0
- package/dist/components/ai.js +184 -0
- package/dist/components/charts.d.ts +143 -0
- package/dist/components/charts.d.ts.map +1 -0
- package/dist/components/charts.js +435 -0
- package/dist/components/data.d.ts +192 -0
- package/dist/components/data.d.ts.map +1 -0
- package/dist/components/data.js +581 -0
- package/dist/components/date.d.ts +73 -0
- package/dist/components/date.d.ts.map +1 -0
- package/dist/components/date.js +199 -0
- package/dist/components/enterprise.d.ts +246 -0
- package/dist/components/enterprise.d.ts.map +1 -0
- package/dist/components/enterprise.js +428 -0
- package/dist/components/form.d.ts +132 -0
- package/dist/components/form.d.ts.map +1 -0
- package/dist/components/form.js +380 -0
- package/dist/components/index.d.ts +173 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/index.js +107 -0
- package/dist/components/inputs.d.ts +169 -0
- package/dist/components/inputs.d.ts.map +1 -0
- package/dist/components/inputs.js +437 -0
- package/dist/components/layout.d.ts +224 -0
- package/dist/components/layout.d.ts.map +1 -0
- package/dist/components/layout.js +644 -0
- package/dist/components/overlay.d.ts +102 -0
- package/dist/components/overlay.d.ts.map +1 -0
- package/dist/components/overlay.js +318 -0
- package/dist/components/surfaces.d.ts +180 -0
- package/dist/components/surfaces.d.ts.map +1 -0
- package/dist/components/surfaces.js +423 -0
- package/dist/components/typography.d.ts +69 -0
- package/dist/components/typography.d.ts.map +1 -0
- package/dist/components/typography.js +206 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +29 -0
- package/dist/portal.d.ts +3 -0
- package/dist/portal.d.ts.map +1 -0
- package/dist/portal.js +17 -0
- package/dist/theme/index.d.ts +31 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +258 -0
- package/dist/tokens/component.d.ts +124 -0
- package/dist/tokens/component.d.ts.map +1 -0
- package/dist/tokens/component.js +113 -0
- package/dist/tokens/index.d.ts +494 -0
- package/dist/tokens/index.d.ts.map +1 -0
- package/dist/tokens/index.js +345 -0
- package/dist/tokens/primitives.d.ts +675 -0
- package/dist/tokens/primitives.d.ts.map +1 -0
- package/dist/tokens/primitives.js +356 -0
- package/dist/tokens/semantic.d.ts +252 -0
- package/dist/tokens/semantic.d.ts.map +1 -0
- package/dist/tokens/semantic.js +242 -0
- package/dist/tokens/themes.d.ts +18 -0
- package/dist/tokens/themes.d.ts.map +1 -0
- package/dist/tokens/themes.js +316 -0
- package/package.json +69 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 HyperPack contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# @hyperpackai/hyperui
|
|
2
|
+
|
|
3
|
+
> Rich, accessible, enterprise-grade UI component library for Hyperion.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npm install @hyperpackai/hyperui
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick start
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import { initHyperUI, ThemeProvider, Button, Dialog, DataTable, useToast } from "@hyperpackai/hyperui";
|
|
15
|
+
import { applyTheme, createTheme } from "@hyperpackai/hyperui/tokens";
|
|
16
|
+
|
|
17
|
+
// Initialise with system dark mode
|
|
18
|
+
initHyperUI({ theme: "system" });
|
|
19
|
+
|
|
20
|
+
// Or apply a built-in theme preset
|
|
21
|
+
applyTheme("compact"); // "default" | "compact" | "comfortable" | "ocean" | "forest" | "sunset" | "violet" | "monochrome" | "highContrast"
|
|
22
|
+
|
|
23
|
+
// Or use the provider API with industry themes
|
|
24
|
+
ThemeProvider({
|
|
25
|
+
theme: "banking",
|
|
26
|
+
colorMode: "system",
|
|
27
|
+
direction: "ltr",
|
|
28
|
+
children: App()
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
// Build a custom brand theme
|
|
32
|
+
const myBrand = createTheme("default", { primaryColor: "#7c3aed", radius: "12px" });
|
|
33
|
+
applyTheme(myBrand);
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Industry presets: `banking`, `government`, `healthcare`, `retail`, `education`, `telecom`.
|
|
37
|
+
|
|
38
|
+
## Components
|
|
39
|
+
|
|
40
|
+
| Category | Components |
|
|
41
|
+
|---|---|
|
|
42
|
+
| Form | Form · FormField · FormSection · WizardForm · DynamicForm · ValidationEngine · Button · Label · Input · Textarea · Checkbox · Radio · Switch · Select · TextField · Autocomplete · Slider · Rating · FormControl |
|
|
43
|
+
| Date & Time | Calendar · DatePicker · TimePicker · DateTimePicker · DateRangePicker |
|
|
44
|
+
| Overlay | Dialog · Modal · Sheet · Drawer · Backdrop · Toast · Snackbar · Tooltip · Popover · DropdownMenu · Menu |
|
|
45
|
+
| Layout | Box · Container · Grid · Stack · Paper · Card · PageLayout · DashboardLayout · SplitPane · ResizablePanel · Navbar · Sidebar · Breadcrumb · Pagination · List · ImageList |
|
|
46
|
+
| Data | DataGrid · DataTable · VirtualTable · TreeGrid · PivotGrid · AdvancedFilters · SearchBuilder · DataExporter · DataImporter |
|
|
47
|
+
| Charts | LineChart · BarChart · PieChart · AreaChart · RadarChart · HeatMap · GaugeChart · Sparkline · FinancialChart · CandlestickChart |
|
|
48
|
+
| Enterprise | ApprovalFlow · AuditTrail · PermissionMatrix · RoleManager · FeatureFlags · TenantSelector · NotificationCenter · ActivityFeed · OrgChart · GanttChart · KanbanBoard · WorkflowDesigner · DocumentViewer |
|
|
49
|
+
| AI | AIChat · AIForm · AIGrid · AIChart · AIDashboard · AIInsights · AIWizard · AIReport |
|
|
50
|
+
| Feedback | Alert · Badge · Avatar · AvatarGroup · Chip · Spinner · Skeleton · Progress |
|
|
51
|
+
| Navigation | Tabs · Accordion · Stepper · Timeline · TreeView |
|
|
52
|
+
| Typography | Typography · Link · Divider |
|
|
53
|
+
|
|
54
|
+
## Enterprise Architecture
|
|
55
|
+
|
|
56
|
+
HyperUI's production roadmap, package split, component inventory, accessibility standards, testing standards, AI-native patterns, A2UI architecture, and release gates are defined in [ARCHITECTURE.md](./ARCHITECTURE.md).
|
|
57
|
+
|
|
58
|
+
Per-component implementation contracts are defined in [COMPONENT_BLUEPRINT.md](./COMPONENT_BLUEPRINT.md).
|
|
59
|
+
|
|
60
|
+
## Design Token System
|
|
61
|
+
|
|
62
|
+
```ts
|
|
63
|
+
import { tokens, useTokens, tokenToCSS, exportTokens } from "@hyperpackai/hyperui/tokens";
|
|
64
|
+
|
|
65
|
+
tokens.colors.indigo[500] // "#6366f1"
|
|
66
|
+
tokens.spacing[4] // "16px"
|
|
67
|
+
tokens.fontSize.xl[0] // "20px"
|
|
68
|
+
|
|
69
|
+
// Reactive theme in components
|
|
70
|
+
const { isDark } = useTokens();
|
|
71
|
+
|
|
72
|
+
// SSR head injection
|
|
73
|
+
const css = tokenToCSS(myBrand);
|
|
74
|
+
|
|
75
|
+
// Export for Figma / Style Dictionary
|
|
76
|
+
const json = exportTokens();
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Requirements
|
|
80
|
+
|
|
81
|
+
Node.js ≥ 20 (build) · Modern browser (runtime)
|
|
82
|
+
Peer dependency: `@hyperpackai/hyperion ^0.1.0`
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type VNode } from "../../theme/index.js";
|
|
2
|
+
export interface AccordionItem {
|
|
3
|
+
id: string;
|
|
4
|
+
title: string;
|
|
5
|
+
content: unknown;
|
|
6
|
+
icon?: unknown;
|
|
7
|
+
disabled?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface AccordionProps {
|
|
10
|
+
items: AccordionItem[];
|
|
11
|
+
multiple?: boolean;
|
|
12
|
+
defaultOpen?: string[];
|
|
13
|
+
variant?: "default" | "ghost";
|
|
14
|
+
class?: string;
|
|
15
|
+
}
|
|
16
|
+
export declare function Accordion(props: AccordionProps): VNode;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Accordion/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAsBpE,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,KAAK,CAqCtD"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { signal } from "@hyperpackai/hyperion";
|
|
2
|
+
import { injectCSS, cn, h } from "../../theme/index.js";
|
|
3
|
+
const ACCORDION_CSS = `
|
|
4
|
+
.hu-accordion { border: 1px solid var(--hu-border); border-radius: var(--hu-radius-md); overflow: hidden; }
|
|
5
|
+
.hu-accordion-item { border-bottom: 1px solid var(--hu-border); }
|
|
6
|
+
.hu-accordion-item:last-child { border-bottom: none; }
|
|
7
|
+
.hu-accordion-trigger {
|
|
8
|
+
display: flex; align-items: center; justify-content: space-between; width: 100%;
|
|
9
|
+
padding: var(--hu-space-4) var(--hu-space-5); background: transparent; border: none;
|
|
10
|
+
font-size: var(--hu-font-size-sm); font-weight: var(--hu-font-weight-medium); color: var(--hu-text);
|
|
11
|
+
cursor: pointer; text-align: left; transition: background var(--hu-duration) var(--hu-ease);
|
|
12
|
+
}
|
|
13
|
+
.hu-accordion-trigger:hover { background: var(--hu-bg-2); }
|
|
14
|
+
.hu-accordion-trigger[aria-expanded="true"] { color: var(--hu-primary); }
|
|
15
|
+
.hu-accordion-icon { width: 16px; height: 16px; flex-shrink: 0; color: var(--hu-text-3); transition: transform var(--hu-duration) var(--hu-ease); }
|
|
16
|
+
.hu-accordion-trigger[aria-expanded="true"] .hu-accordion-icon { transform: rotate(180deg); color: var(--hu-primary); }
|
|
17
|
+
.hu-accordion-content { padding: 0 var(--hu-space-5) var(--hu-space-4); font-size: var(--hu-font-size-sm); color: var(--hu-text-2); line-height: 1.6; animation: hu-slide-down var(--hu-duration-fast) var(--hu-ease); }
|
|
18
|
+
.hu-accordion--ghost { border: none; }
|
|
19
|
+
.hu-accordion--ghost .hu-accordion-item { border-bottom: 1px solid var(--hu-border); }
|
|
20
|
+
.hu-accordion--ghost .hu-accordion-item:last-child { border-bottom: none; }
|
|
21
|
+
`;
|
|
22
|
+
export function Accordion(props) {
|
|
23
|
+
injectCSS("hu-accordion", ACCORDION_CSS);
|
|
24
|
+
const { items, multiple = false, defaultOpen = [], variant = "default" } = props;
|
|
25
|
+
const open = signal(defaultOpen);
|
|
26
|
+
const toggle = (id) => {
|
|
27
|
+
const current = open.value;
|
|
28
|
+
if (multiple) {
|
|
29
|
+
open.value = current.includes(id) ? current.filter((i) => i !== id) : [...current, id];
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
open.value = current.includes(id) ? [] : [id];
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const chevronSVG = `<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5"><path d="M4 6l4 4 4-4"/></svg>`;
|
|
36
|
+
return h("div", { class: cn("hu-accordion", variant !== "default" && `hu-accordion--${variant}`, props.class) }, ...items.map((item) => {
|
|
37
|
+
const isOpen = () => open.value.includes(item.id);
|
|
38
|
+
return h("div", { key: item.id, class: "hu-accordion-item" }, h("button", {
|
|
39
|
+
class: "hu-accordion-trigger",
|
|
40
|
+
"aria-expanded": () => isOpen() ? "true" : "false",
|
|
41
|
+
"aria-controls": `accordion-${item.id}`,
|
|
42
|
+
disabled: item.disabled,
|
|
43
|
+
onClick: () => toggle(item.id)
|
|
44
|
+
}, h("span", { style: "display:flex;align-items:center;gap:8px;" }, item.icon && h("span", {}, item.icon), item.title), h("span", { class: "hu-accordion-icon", innerHTML: chevronSVG, "aria-hidden": "true" })), () => isOpen() ? h("div", { id: `accordion-${item.id}`, class: "hu-accordion-content" }, item.content) : null);
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type VNode } from "../../theme/index.js";
|
|
2
|
+
export interface AlertProps {
|
|
3
|
+
type?: "info" | "success" | "warning" | "error";
|
|
4
|
+
title?: string;
|
|
5
|
+
description?: string;
|
|
6
|
+
icon?: unknown | false;
|
|
7
|
+
onClose?: () => void;
|
|
8
|
+
closeLabel?: string;
|
|
9
|
+
class?: string;
|
|
10
|
+
children?: unknown;
|
|
11
|
+
}
|
|
12
|
+
export declare function Alert(props: AlertProps): VNode;
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Alert/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAoCpE,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,CAoB9C"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { injectCSS, cn, h } from "../../theme/index.js";
|
|
2
|
+
const ALERT_CSS = `
|
|
3
|
+
.hu-alert {
|
|
4
|
+
display: flex; align-items: flex-start; gap: var(--hu-space-3);
|
|
5
|
+
padding: var(--hu-space-4); border-radius: var(--hu-radius-lg);
|
|
6
|
+
border: 1px solid; font-size: var(--hu-font-size-sm);
|
|
7
|
+
box-shadow: var(--hu-shadow-xs);
|
|
8
|
+
}
|
|
9
|
+
.hu-alert--info { background: var(--hu-info-bg); border-color: var(--hu-info); color: var(--hu-info-text); }
|
|
10
|
+
.hu-alert--success { background: var(--hu-success-bg); border-color: var(--hu-success); color: var(--hu-success-text); }
|
|
11
|
+
.hu-alert--warning { background: var(--hu-warning-bg); border-color: var(--hu-warning); color: var(--hu-warning-text); }
|
|
12
|
+
.hu-alert--error { background: var(--hu-error-bg); border-color: var(--hu-error); color: var(--hu-error-text); }
|
|
13
|
+
.hu-alert-icon { width: 18px; height: 18px; flex-shrink: 0; margin-top: 1px; }
|
|
14
|
+
.hu-alert-content { flex: 1; min-width: 0; }
|
|
15
|
+
.hu-alert-title { font-weight: var(--hu-font-weight-semibold); margin-bottom: 2px; }
|
|
16
|
+
.hu-alert-desc { opacity: .85; line-height: 1.45; }
|
|
17
|
+
.hu-alert-close {
|
|
18
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
19
|
+
width: 28px; height: 28px; border-radius: var(--hu-radius-md);
|
|
20
|
+
background: color-mix(in srgb, currentColor 6%, transparent);
|
|
21
|
+
border: 1px solid color-mix(in srgb, currentColor 14%, transparent);
|
|
22
|
+
color: currentColor; cursor: pointer; opacity: .72; padding: 0; flex-shrink: 0;
|
|
23
|
+
transition: background var(--hu-duration) var(--hu-ease), border-color var(--hu-duration) var(--hu-ease), opacity var(--hu-duration) var(--hu-ease), transform var(--hu-duration-fast) var(--hu-ease);
|
|
24
|
+
}
|
|
25
|
+
.hu-alert-close:hover { opacity: 1; background: color-mix(in srgb, currentColor 10%, transparent); border-color: color-mix(in srgb, currentColor 24%, transparent); transform: translateY(-1px); }
|
|
26
|
+
.hu-alert-close:focus-visible { outline: 2px solid currentColor; outline-offset: 2px; }
|
|
27
|
+
`;
|
|
28
|
+
const ALERT_ICONS = {
|
|
29
|
+
info: `<svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z"/></svg>`,
|
|
30
|
+
success: `<svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z"/></svg>`,
|
|
31
|
+
warning: `<svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 5a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 0110 5zm0 9a1 1 0 100-2 1 1 0 000 2z"/></svg>`,
|
|
32
|
+
error: `<svg viewBox="0 0 20 20" fill="currentColor"><path fill-rule="evenodd" d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z"/></svg>`
|
|
33
|
+
};
|
|
34
|
+
export function Alert(props) {
|
|
35
|
+
injectCSS("hu-alert", ALERT_CSS);
|
|
36
|
+
const { type = "info", title, description, icon, children } = props;
|
|
37
|
+
const iconContent = icon === false ? null : icon ?? h("span", { innerHTML: ALERT_ICONS[type], "aria-hidden": "true" });
|
|
38
|
+
const closeSVG = `<svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2"><path d="M2 2l12 12M14 2L2 14"/></svg>`;
|
|
39
|
+
return h("div", { class: cn("hu-alert", `hu-alert--${type}`, props.class), role: "alert" }, iconContent && h("span", { class: "hu-alert-icon" }, iconContent), h("div", { class: "hu-alert-content" }, title && h("div", { class: "hu-alert-title" }, title), (description || children) && h("div", { class: "hu-alert-desc" }, description ?? children)), props.onClose && h("button", {
|
|
40
|
+
class: "hu-alert-close",
|
|
41
|
+
type: "button",
|
|
42
|
+
onClick: props.onClose,
|
|
43
|
+
"aria-label": props.closeLabel ?? "Dismiss alert",
|
|
44
|
+
innerHTML: closeSVG
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type VNode } from "../../theme/index.js";
|
|
2
|
+
export type AppBarPosition = "fixed" | "sticky" | "static" | "absolute" | "relative";
|
|
3
|
+
export type AppBarColor = "primary" | "default" | "dark" | "transparent" | "inherit";
|
|
4
|
+
export interface AppBarProps {
|
|
5
|
+
position?: AppBarPosition;
|
|
6
|
+
color?: AppBarColor;
|
|
7
|
+
elevation?: 0 | 1 | 2 | 3 | 4;
|
|
8
|
+
class?: string;
|
|
9
|
+
children?: unknown;
|
|
10
|
+
}
|
|
11
|
+
export declare function AppBar(props: AppBarProps): VNode;
|
|
12
|
+
export interface ToolbarProps {
|
|
13
|
+
dense?: boolean;
|
|
14
|
+
class?: string;
|
|
15
|
+
children?: unknown;
|
|
16
|
+
}
|
|
17
|
+
export declare function Toolbar(props: ToolbarProps): VNode;
|
|
18
|
+
export declare function ToolbarSpacer(): VNode;
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/AppBar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAoCpE,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;AACrF,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;AAErF,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,SAAS,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,CAMhD;AAED,MAAM,WAAW,YAAY;IAAG,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE;AACrF,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,KAAK,CAGlD;AAED,wBAAgB,aAAa,IAAI,KAAK,CAErC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { injectCSS, cn, h } from "../../theme/index.js";
|
|
2
|
+
const CSS = `
|
|
3
|
+
.hu-appbar {
|
|
4
|
+
display: flex; align-items: center; width: 100%; box-sizing: border-box;
|
|
5
|
+
font-family: var(--hu-font-sans); z-index: 100;
|
|
6
|
+
transition: box-shadow var(--hu-duration) var(--hu-ease), background var(--hu-duration) var(--hu-ease);
|
|
7
|
+
}
|
|
8
|
+
.hu-appbar--fixed { position: fixed; top: 0; left: 0; right: 0; }
|
|
9
|
+
.hu-appbar--sticky { position: sticky; top: 0; }
|
|
10
|
+
.hu-appbar--static { position: static; }
|
|
11
|
+
.hu-appbar--absolute { position: absolute; top: 0; left: 0; right: 0; }
|
|
12
|
+
.hu-appbar--relative { position: relative; }
|
|
13
|
+
|
|
14
|
+
.hu-appbar--primary { background: var(--hu-primary); color: var(--hu-primary-text); }
|
|
15
|
+
.hu-appbar--default { background: var(--hu-bg); color: var(--hu-text); border-bottom: 1px solid var(--hu-border); }
|
|
16
|
+
.hu-appbar--dark { background: #111827; color: #f9fafb; }
|
|
17
|
+
.hu-appbar--transparent { background: transparent; box-shadow: none; }
|
|
18
|
+
.hu-appbar--inherit { background: inherit; color: inherit; }
|
|
19
|
+
|
|
20
|
+
.hu-appbar--elevation-0 { box-shadow: none; }
|
|
21
|
+
.hu-appbar--elevation-1 { box-shadow: 0 1px 3px rgba(0,0,0,.12), 0 1px 2px rgba(0,0,0,.08); }
|
|
22
|
+
.hu-appbar--elevation-2 { box-shadow: 0 3px 6px rgba(0,0,0,.15), 0 2px 4px rgba(0,0,0,.1); }
|
|
23
|
+
.hu-appbar--elevation-3 { box-shadow: 0 8px 16px rgba(0,0,0,.18), 0 3px 6px rgba(0,0,0,.12); }
|
|
24
|
+
.hu-appbar--elevation-4 { box-shadow: 0 16px 32px rgba(0,0,0,.2), 0 6px 12px rgba(0,0,0,.14); }
|
|
25
|
+
|
|
26
|
+
.hu-toolbar {
|
|
27
|
+
display: flex; align-items: center; gap: var(--hu-space-2);
|
|
28
|
+
width: 100%; min-height: 56px;
|
|
29
|
+
padding-left: var(--hu-space-4); padding-right: var(--hu-space-4);
|
|
30
|
+
}
|
|
31
|
+
.hu-toolbar--dense { min-height: 48px; }
|
|
32
|
+
.hu-toolbar--spacer { flex: 1; }
|
|
33
|
+
.hu-toolbar__title { font-size: var(--hu-font-size-md); font-weight: var(--hu-font-weight-semibold); flex: 1; }
|
|
34
|
+
`;
|
|
35
|
+
export function AppBar(props) {
|
|
36
|
+
injectCSS("hu-appbar", CSS);
|
|
37
|
+
const { position = "sticky", color = "default", elevation = 1 } = props;
|
|
38
|
+
return h("header", {
|
|
39
|
+
class: cn("hu-appbar", `hu-appbar--${position}`, `hu-appbar--${color}`, `hu-appbar--elevation-${elevation}`, props.class)
|
|
40
|
+
}, props.children);
|
|
41
|
+
}
|
|
42
|
+
export function Toolbar(props) {
|
|
43
|
+
injectCSS("hu-appbar", CSS);
|
|
44
|
+
return h("div", { class: cn("hu-toolbar", props.dense && "hu-toolbar--dense", props.class) }, props.children);
|
|
45
|
+
}
|
|
46
|
+
export function ToolbarSpacer() {
|
|
47
|
+
return h("span", { class: "hu-toolbar__spacer" });
|
|
48
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type VNode } from "../../theme/index.js";
|
|
2
|
+
export interface AspectRatioProps {
|
|
3
|
+
ratio?: number | `${number}/${number}` | `${number} / ${number}`;
|
|
4
|
+
class?: string;
|
|
5
|
+
children?: unknown;
|
|
6
|
+
}
|
|
7
|
+
export declare function AspectRatio(props?: AspectRatioProps): VNode;
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/AspectRatio/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAmBpE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,GAAG,GAAG,MAAM,IAAI,MAAM,EAAE,GAAG,GAAG,MAAM,MAAM,MAAM,EAAE,CAAC;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAQD,wBAAgB,WAAW,CAAC,KAAK,GAAE,gBAAqB,GAAG,KAAK,CAQ/D"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { injectCSS, cn, h } from "../../theme/index.js";
|
|
2
|
+
const ASPECT_RATIO_CSS = `
|
|
3
|
+
.hu-aspect-ratio {
|
|
4
|
+
position: relative;
|
|
5
|
+
width: 100%;
|
|
6
|
+
aspect-ratio: var(--hu-aspect-ratio, 16 / 9);
|
|
7
|
+
overflow: hidden;
|
|
8
|
+
}
|
|
9
|
+
.hu-aspect-ratio > img,
|
|
10
|
+
.hu-aspect-ratio > video,
|
|
11
|
+
.hu-aspect-ratio > iframe,
|
|
12
|
+
.hu-aspect-ratio > canvas {
|
|
13
|
+
width: 100%;
|
|
14
|
+
height: 100%;
|
|
15
|
+
object-fit: cover;
|
|
16
|
+
}
|
|
17
|
+
`;
|
|
18
|
+
function ratioValue(value) {
|
|
19
|
+
if (value === undefined)
|
|
20
|
+
return "16 / 9";
|
|
21
|
+
if (typeof value === "number")
|
|
22
|
+
return String(value);
|
|
23
|
+
return value.replace(/\s+/g, " ");
|
|
24
|
+
}
|
|
25
|
+
export function AspectRatio(props = {}) {
|
|
26
|
+
injectCSS("hu-aspect-ratio", ASPECT_RATIO_CSS);
|
|
27
|
+
const ratio = ratioValue(props.ratio);
|
|
28
|
+
return h("div", {
|
|
29
|
+
class: cn("hu-aspect-ratio", props.class),
|
|
30
|
+
style: `--hu-aspect-ratio:${ratio};aspect-ratio:${ratio}`
|
|
31
|
+
}, props.children);
|
|
32
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type VNode } from "../../theme/index.js";
|
|
2
|
+
export interface AutocompleteOption {
|
|
3
|
+
label: string;
|
|
4
|
+
value: string;
|
|
5
|
+
group?: string;
|
|
6
|
+
disabled?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface AutocompleteProps {
|
|
9
|
+
options: AutocompleteOption[];
|
|
10
|
+
value?: string;
|
|
11
|
+
placeholder?: string;
|
|
12
|
+
label?: string;
|
|
13
|
+
multiple?: boolean;
|
|
14
|
+
clearable?: boolean;
|
|
15
|
+
disabled?: boolean;
|
|
16
|
+
noOptionsText?: string;
|
|
17
|
+
onChange?: (value: string | null) => void;
|
|
18
|
+
class?: string;
|
|
19
|
+
}
|
|
20
|
+
export declare function Autocomplete(props: AutocompleteProps): VNode;
|
|
21
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Autocomplete/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAqDpE,MAAM,WAAW,kBAAkB;IAAG,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE;AAExG,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,KAAK,CA+D5D"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { signal } from "@hyperpackai/hyperion";
|
|
2
|
+
import { injectCSS, cn, h } from "../../theme/index.js";
|
|
3
|
+
const AUTOCOMPLETE_CSS = `
|
|
4
|
+
.hu-autocomplete { position: relative; width: 100%; display: flex; flex-direction: column; gap: 6px; }
|
|
5
|
+
.hu-autocomplete__label { color: var(--hu-text); font-size: var(--hu-font-size-sm); font-weight: var(--hu-font-weight-semibold); line-height: 1.35; }
|
|
6
|
+
.hu-autocomplete__input-wrap { position: relative; }
|
|
7
|
+
.hu-autocomplete__input {
|
|
8
|
+
width: 100%; min-height: 40px; padding: 9px 42px 9px 12px;
|
|
9
|
+
font-size: var(--hu-font-size-sm); font-family: var(--hu-font-sans);
|
|
10
|
+
background: linear-gradient(180deg, var(--hu-bg), var(--hu-bg-2)); color: var(--hu-text);
|
|
11
|
+
border: 1px solid var(--hu-border); border-radius: var(--hu-radius-md);
|
|
12
|
+
outline: none; box-sizing: border-box;
|
|
13
|
+
transition: border-color var(--hu-duration) var(--hu-ease), box-shadow var(--hu-duration) var(--hu-ease), background var(--hu-duration) var(--hu-ease);
|
|
14
|
+
box-shadow: var(--hu-shadow-xs);
|
|
15
|
+
}
|
|
16
|
+
.hu-autocomplete__input::placeholder { color: var(--hu-text-3); }
|
|
17
|
+
.hu-autocomplete__input:hover:not(:disabled) { border-color: color-mix(in srgb, var(--hu-primary) 35%, var(--hu-border-2)); }
|
|
18
|
+
.hu-autocomplete__input:focus { border-color: var(--hu-primary); background: var(--hu-bg); box-shadow: 0 0 0 3px color-mix(in srgb, var(--hu-primary) 18%, transparent), var(--hu-shadow-sm); }
|
|
19
|
+
.hu-autocomplete__input:disabled { opacity: .55; cursor: not-allowed; background: var(--hu-bg-3); }
|
|
20
|
+
.hu-autocomplete__arrow {
|
|
21
|
+
position: absolute; right: 12px; top: 50%; transform: translateY(-50%);
|
|
22
|
+
color: var(--hu-text-3); pointer-events: none; font-size: 12px; transition: transform var(--hu-duration);
|
|
23
|
+
}
|
|
24
|
+
.hu-autocomplete--open .hu-autocomplete__arrow { transform: translateY(-50%) rotate(180deg); }
|
|
25
|
+
.hu-autocomplete__clear {
|
|
26
|
+
position: absolute; right: 32px; top: 50%; transform: translateY(-50%);
|
|
27
|
+
width: 22px; height: 22px; display: inline-grid; place-items: center;
|
|
28
|
+
background: var(--hu-bg-3); border: 1px solid var(--hu-border); border-radius: var(--hu-radius-full);
|
|
29
|
+
cursor: pointer; color: var(--hu-text-2); font-size: 14px; line-height: 1; padding: 0;
|
|
30
|
+
}
|
|
31
|
+
.hu-autocomplete__clear:hover { color: var(--hu-text); border-color: var(--hu-border-2); }
|
|
32
|
+
.hu-autocomplete__input:has(+ .hu-autocomplete__clear) { padding-right: 68px; }
|
|
33
|
+
.hu-autocomplete__listbox-wrap {
|
|
34
|
+
position: absolute; top: calc(100% + 8px); left: 0; right: 0; z-index: var(--hu-z-popover);
|
|
35
|
+
padding: 4px; background: var(--hu-bg); border: 1px solid color-mix(in srgb, var(--hu-border) 82%, var(--hu-primary));
|
|
36
|
+
border-radius: var(--hu-radius-lg); box-shadow: var(--hu-shadow-xl);
|
|
37
|
+
}
|
|
38
|
+
.hu-autocomplete__listbox {
|
|
39
|
+
max-height: 260px; overflow-y: auto; padding: 0; margin: 0; list-style: none; scrollbar-width: thin;
|
|
40
|
+
}
|
|
41
|
+
.hu-autocomplete__option {
|
|
42
|
+
padding: 9px 10px; cursor: pointer; border-radius: var(--hu-radius);
|
|
43
|
+
font-size: var(--hu-font-size-sm); color: var(--hu-text); display: flex; align-items: center; gap: var(--hu-space-2);
|
|
44
|
+
transition: background var(--hu-duration-fast) var(--hu-ease), color var(--hu-duration-fast) var(--hu-ease);
|
|
45
|
+
}
|
|
46
|
+
.hu-autocomplete__option:hover, .hu-autocomplete__option--focused { background: var(--hu-bg-3); }
|
|
47
|
+
.hu-autocomplete__option--selected { background: var(--hu-primary-bg); color: var(--hu-primary); font-weight: var(--hu-font-weight-semibold); }
|
|
48
|
+
.hu-autocomplete__option--disabled { opacity: .5; cursor: not-allowed; }
|
|
49
|
+
.hu-autocomplete__check { margin-inline-start: auto; color: var(--hu-primary); font-size: 12px; }
|
|
50
|
+
.hu-autocomplete__no-options { padding: var(--hu-space-5); font-size: var(--hu-font-size-sm); color: var(--hu-text-2); text-align: center; }
|
|
51
|
+
.hu-autocomplete__group-label { padding: var(--hu-space-2) var(--hu-space-3); font-size: var(--hu-font-size-xs); font-weight: var(--hu-font-weight-semibold); color: var(--hu-text-3); text-transform: uppercase; letter-spacing: .06em; }
|
|
52
|
+
`;
|
|
53
|
+
export function Autocomplete(props) {
|
|
54
|
+
injectCSS("hu-autocomplete", AUTOCOMPLETE_CSS);
|
|
55
|
+
const { options, placeholder, label, clearable, disabled, noOptionsText = "No options", onChange } = props;
|
|
56
|
+
const inputVal = signal(props.value ? (options.find(o => o.value === props.value)?.label ?? "") : "");
|
|
57
|
+
const isOpen = signal(false);
|
|
58
|
+
const selected = signal(props.value ?? "");
|
|
59
|
+
const filtered = () => options.filter(o => !inputVal.value || o.label.toLowerCase().includes(inputVal.value.toLowerCase()));
|
|
60
|
+
return h("div", {
|
|
61
|
+
class: cn("hu-autocomplete", isOpen.value && "hu-autocomplete--open", props.class)
|
|
62
|
+
}, label && h("label", { class: "hu-autocomplete__label" }, label), h("div", { class: "hu-autocomplete__input-wrap" }, h("input", {
|
|
63
|
+
class: "hu-autocomplete__input",
|
|
64
|
+
value: inputVal.value, placeholder, disabled,
|
|
65
|
+
onFocus: () => { isOpen.value = true; },
|
|
66
|
+
onInput: (e) => { inputVal.value = e.target.value; isOpen.value = true; },
|
|
67
|
+
onBlur: () => setTimeout(() => { isOpen.value = false; }, 150)
|
|
68
|
+
}), clearable && selected.value && h("button", {
|
|
69
|
+
class: "hu-autocomplete__clear",
|
|
70
|
+
type: "button",
|
|
71
|
+
onMouseDown: (e) => {
|
|
72
|
+
e.preventDefault();
|
|
73
|
+
selected.value = "";
|
|
74
|
+
inputVal.value = "";
|
|
75
|
+
onChange?.(null);
|
|
76
|
+
}
|
|
77
|
+
}, "×"), h("span", { class: "hu-autocomplete__arrow" }, "▾")), isOpen.value && h("div", { class: "hu-autocomplete__listbox-wrap" }, h("ul", { class: "hu-autocomplete__listbox", role: "listbox" }, filtered().length === 0
|
|
78
|
+
? h("li", { class: "hu-autocomplete__no-options" }, noOptionsText)
|
|
79
|
+
: filtered().map(opt => h("li", {
|
|
80
|
+
class: cn("hu-autocomplete__option", selected.value === opt.value && "hu-autocomplete__option--selected", opt.disabled && "hu-autocomplete__option--disabled"),
|
|
81
|
+
role: "option",
|
|
82
|
+
"aria-selected": selected.value === opt.value,
|
|
83
|
+
"aria-disabled": opt.disabled ? "true" : undefined,
|
|
84
|
+
onMouseDown: (e) => {
|
|
85
|
+
e.preventDefault();
|
|
86
|
+
if (opt.disabled)
|
|
87
|
+
return;
|
|
88
|
+
selected.value = opt.value;
|
|
89
|
+
inputVal.value = opt.label;
|
|
90
|
+
isOpen.value = false;
|
|
91
|
+
onChange?.(opt.value);
|
|
92
|
+
}
|
|
93
|
+
}, opt.label, selected.value === opt.value && h("span", { class: "hu-autocomplete__check", "aria-hidden": "true" }, "✓"))))));
|
|
94
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type VNode } from "../../theme/index.js";
|
|
2
|
+
export interface AvatarProps {
|
|
3
|
+
src?: string;
|
|
4
|
+
alt?: string;
|
|
5
|
+
name?: string;
|
|
6
|
+
size?: "xs" | "sm" | "md" | "lg" | "xl" | "2xl";
|
|
7
|
+
shape?: "circle" | "square";
|
|
8
|
+
color?: string;
|
|
9
|
+
class?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function Avatar(props: AvatarProps): VNode;
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Avatar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAsBpE,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;IAChD,KAAK,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,KAAK,CAehD"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { injectCSS, cn, h } from "../../theme/index.js";
|
|
2
|
+
const AVATAR_CSS = `
|
|
3
|
+
.hu-avatar {
|
|
4
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
5
|
+
border-radius: var(--hu-radius-full); overflow: hidden; flex-shrink: 0;
|
|
6
|
+
background: var(--hu-primary-bg); color: var(--hu-primary);
|
|
7
|
+
font-weight: var(--hu-font-weight-semibold); user-select: none;
|
|
8
|
+
}
|
|
9
|
+
.hu-avatar img { width: 100%; height: 100%; object-fit: cover; }
|
|
10
|
+
.hu-avatar--xs { width: 24px; height: 24px; font-size: 10px; }
|
|
11
|
+
.hu-avatar--sm { width: 32px; height: 32px; font-size: 12px; }
|
|
12
|
+
.hu-avatar--md { width: 40px; height: 40px; font-size: 14px; }
|
|
13
|
+
.hu-avatar--lg { width: 48px; height: 48px; font-size: 16px; }
|
|
14
|
+
.hu-avatar--xl { width: 64px; height: 64px; font-size: 22px; }
|
|
15
|
+
.hu-avatar--2xl { width: 80px; height: 80px; font-size: 28px; }
|
|
16
|
+
.hu-avatar--square { border-radius: var(--hu-radius-md); }
|
|
17
|
+
.hu-avatar-group { display: flex; }
|
|
18
|
+
.hu-avatar-group .hu-avatar { border: 2px solid var(--hu-bg); margin-left: -8px; }
|
|
19
|
+
.hu-avatar-group .hu-avatar:first-child { margin-left: 0; }
|
|
20
|
+
`;
|
|
21
|
+
export function Avatar(props) {
|
|
22
|
+
injectCSS("hu-avatar", AVATAR_CSS);
|
|
23
|
+
const { src, alt, name, size = "md", shape = "circle" } = props;
|
|
24
|
+
const initials = name
|
|
25
|
+
? name.split(" ").slice(0, 2).map((p) => p[0]?.toUpperCase() ?? "").join("")
|
|
26
|
+
: "?";
|
|
27
|
+
return h("span", {
|
|
28
|
+
class: cn("hu-avatar", `hu-avatar--${size}`, shape === "square" && "hu-avatar--square", props.class),
|
|
29
|
+
style: props.color ? `background: ${props.color}20; color: ${props.color}` : undefined,
|
|
30
|
+
"aria-label": alt ?? name
|
|
31
|
+
}, src ? h("img", { src, alt: alt ?? name ?? "", loading: "lazy" }) : initials);
|
|
32
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type VNode } from "../../theme/index.js";
|
|
2
|
+
export interface AvatarGroupProps {
|
|
3
|
+
max?: number;
|
|
4
|
+
size?: "sm" | "md" | "lg" | "xl";
|
|
5
|
+
class?: string;
|
|
6
|
+
children?: unknown[];
|
|
7
|
+
}
|
|
8
|
+
export declare function AvatarGroup(props: AvatarGroupProps): VNode;
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/AvatarGroup/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAcpE,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB;AAID,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,KAAK,CAa1D"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { injectCSS, cn, h } from "../../theme/index.js";
|
|
2
|
+
const AVATAR_GROUP_CSS = `
|
|
3
|
+
.hu-avatar-group { display: flex; flex-direction: row-reverse; }
|
|
4
|
+
.hu-avatar-group .hu-avatar { margin-left: -8px; border: 2px solid var(--hu-bg); ring: none; }
|
|
5
|
+
.hu-avatar-group .hu-avatar:last-child { margin-left: 0; }
|
|
6
|
+
.hu-avatar-group__extra {
|
|
7
|
+
display: flex; align-items: center; justify-content: center;
|
|
8
|
+
border-radius: 50%; background: var(--hu-bg-3); border: 2px solid var(--hu-bg);
|
|
9
|
+
font-size: var(--hu-font-size-xs); font-weight: var(--hu-font-weight-semibold);
|
|
10
|
+
color: var(--hu-text-2); flex-shrink: 0; margin-left: -8px;
|
|
11
|
+
}
|
|
12
|
+
`;
|
|
13
|
+
const AVATAR_SIZES = { sm: "24px", md: "32px", lg: "40px", xl: "48px" };
|
|
14
|
+
export function AvatarGroup(props) {
|
|
15
|
+
injectCSS("hu-avatar-group", AVATAR_GROUP_CSS);
|
|
16
|
+
const { max = 5, size = "md", children = [] } = props;
|
|
17
|
+
const sz = AVATAR_SIZES[size] ?? "32px";
|
|
18
|
+
const visible = children.slice(0, max);
|
|
19
|
+
const extra = children.length - max;
|
|
20
|
+
return h("div", { class: cn("hu-avatar-group", props.class) }, ...visible, extra > 0 && h("div", {
|
|
21
|
+
class: "hu-avatar-group__extra",
|
|
22
|
+
style: `width:${sz};height:${sz};`
|
|
23
|
+
}, `+${extra}`));
|
|
24
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type VNode } from "../../theme/index.js";
|
|
2
|
+
export interface BackdropProps {
|
|
3
|
+
open: boolean;
|
|
4
|
+
invisible?: boolean;
|
|
5
|
+
onClick?: (e: MouseEvent) => void;
|
|
6
|
+
class?: string;
|
|
7
|
+
children?: unknown;
|
|
8
|
+
}
|
|
9
|
+
export declare function Backdrop(props: BackdropProps): VNode | null;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Backdrop/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAiBpE,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,KAAK,GAAG,IAAI,CAQ3D"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { injectCSS, cn, h } from "../../theme/index.js";
|
|
2
|
+
import { renderInPortal } from "../../portal.js";
|
|
3
|
+
const CSS = `
|
|
4
|
+
.hu-backdrop {
|
|
5
|
+
position: fixed; inset: 0; z-index: var(--hu-z-backdrop);
|
|
6
|
+
background: var(--hu-overlay);
|
|
7
|
+
display: flex; align-items: center; justify-content: center;
|
|
8
|
+
transition: opacity var(--hu-duration) var(--hu-ease);
|
|
9
|
+
}
|
|
10
|
+
.hu-backdrop--invisible { background: transparent; }
|
|
11
|
+
.hu-backdrop--enter { opacity: 0; animation: hu-backdrop-in var(--hu-duration) var(--hu-ease) forwards; }
|
|
12
|
+
.hu-backdrop--exit { animation: hu-backdrop-out var(--hu-duration) var(--hu-ease) forwards; }
|
|
13
|
+
@keyframes hu-backdrop-in { from { opacity: 0; } to { opacity: 1; } }
|
|
14
|
+
@keyframes hu-backdrop-out { from { opacity: 1; } to { opacity: 0; } }
|
|
15
|
+
`;
|
|
16
|
+
export function Backdrop(props) {
|
|
17
|
+
injectCSS("hu-backdrop", CSS);
|
|
18
|
+
if (!props.open)
|
|
19
|
+
return null;
|
|
20
|
+
return renderInPortal(h("div", {
|
|
21
|
+
class: cn("hu-backdrop", props.invisible && "hu-backdrop--invisible", props.class),
|
|
22
|
+
onClick: props.onClick,
|
|
23
|
+
"aria-hidden": "true"
|
|
24
|
+
}, props.children), "backdrop");
|
|
25
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type VNode } from "../../theme/index.js";
|
|
2
|
+
export interface BadgeProps {
|
|
3
|
+
variant?: "default" | "primary" | "success" | "warning" | "error" | "info" | "solid-primary" | "solid-success" | "solid-error";
|
|
4
|
+
size?: "xs" | "sm" | "md" | "lg";
|
|
5
|
+
dot?: boolean;
|
|
6
|
+
class?: string;
|
|
7
|
+
children?: unknown;
|
|
8
|
+
}
|
|
9
|
+
export declare function Badge(props: BadgeProps): VNode;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Badge/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAyBpE,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,GAAG,eAAe,GAAG,eAAe,GAAG,aAAa,CAAC;IAC/H,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,KAAK,CAM9C"}
|