@labpane/ui 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -12
- package/dist/chunk-NR3PLNO7.js +100 -0
- package/dist/chunk-NR3PLNO7.js.map +7 -0
- package/dist/index.js +6829 -610
- package/dist/index.js.map +4 -4
- package/dist/styles.css +1 -1
- package/dist/terminal.js +1 -1
- package/dist/terminal.js.map +1 -1
- package/dist/ui/alert.d.ts +13 -0
- package/dist/ui/app-menu.d.ts +6 -1
- package/dist/ui/avatar.d.ts +11 -0
- package/dist/ui/badge.d.ts +17 -0
- package/dist/ui/breadcrumb.d.ts +11 -0
- package/dist/ui/browser-layout.d.ts +20 -0
- package/dist/ui/button.d.ts +27 -0
- package/dist/ui/card.d.ts +15 -0
- package/dist/ui/chart-frame.d.ts +4 -0
- package/dist/ui/checkbox.d.ts +4 -0
- package/dist/ui/classes.d.ts +5 -0
- package/dist/ui/command.d.ts +82 -0
- package/dist/ui/confirm-dialog.d.ts +28 -0
- package/dist/ui/copy-button.d.ts +7 -0
- package/dist/ui/dialog.d.ts +8 -17
- package/dist/ui/discard-dialog.d.ts +6 -0
- package/dist/ui/email-thread.d.ts +35 -0
- package/dist/ui/empty.d.ts +14 -0
- package/dist/ui/field.d.ts +26 -0
- package/dist/ui/file-input.d.ts +6 -0
- package/dist/ui/flame-graph-model.d.ts +23 -0
- package/dist/ui/flame-graph.d.ts +15 -0
- package/dist/ui/form-fields.d.ts +1 -1
- package/dist/ui/histogram.d.ts +23 -0
- package/dist/ui/index.d.ts +54 -3
- package/dist/ui/input-group.d.ts +28 -0
- package/dist/ui/input.d.ts +3 -0
- package/dist/ui/kbd.d.ts +4 -0
- package/dist/ui/label.d.ts +3 -0
- package/dist/ui/menu.d.ts +27 -0
- package/dist/ui/native-select.d.ts +7 -0
- package/dist/ui/nav-tabs.d.ts +7 -0
- package/dist/ui/overlay.d.ts +1 -0
- package/dist/ui/page.d.ts +22 -0
- package/dist/ui/rail.d.ts +16 -0
- package/dist/ui/search-input.d.ts +6 -0
- package/dist/ui/select.d.ts +13 -0
- package/dist/ui/separator.d.ts +6 -0
- package/dist/ui/settings.d.ts +14 -0
- package/dist/ui/sheet.d.ts +20 -0
- package/dist/ui/side-panel.d.ts +23 -0
- package/dist/ui/sidebar.d.ts +81 -0
- package/dist/ui/skeleton.d.ts +3 -0
- package/dist/ui/spinner.d.ts +3 -0
- package/dist/ui/stat.d.ts +7 -0
- package/dist/ui/steps.d.ts +7 -0
- package/dist/ui/switch.d.ts +6 -0
- package/dist/ui/tab-state.d.ts +8 -0
- package/dist/ui/table-layout.d.ts +19 -0
- package/dist/ui/table-model.d.ts +42 -0
- package/dist/ui/table-screen.d.ts +9 -0
- package/dist/ui/table.d.ts +33 -22
- package/dist/ui/tabs.d.ts +13 -0
- package/dist/ui/textarea.d.ts +3 -0
- package/dist/ui/theme.d.ts +22 -0
- package/dist/ui/time-series-chart.d.ts +19 -0
- package/dist/ui/time-series-model.d.ts +90 -0
- package/dist/ui/timing-tracks.d.ts +27 -0
- package/dist/ui/toggle.d.ts +22 -0
- package/dist/ui/tooltip.d.ts +7 -0
- package/dist/ui/topbar.d.ts +4 -0
- package/dist/ui/use-chart-width.d.ts +5 -0
- package/dist/ui/use-mobile.d.ts +1 -0
- package/package.json +18 -1
- package/styles.css +123 -0
- package/dist/chunk-3ZY2AVB4.js +0 -434
- package/dist/chunk-3ZY2AVB4.js.map +0 -7
- package/dist/ui/primitives.d.ts +0 -85
package/README.md
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# @labpane/ui
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Pages, forms, dialogs, menus, tables, navigation, charts, and an optional terminal for React, built on Radix. It pairs with [`@labpane/os`](../os) but works on its own.
|
|
4
4
|
|
|
5
5
|
```sh
|
|
6
|
-
npm install @labpane/ui @radix-ui/react-alert-dialog @radix-ui/react-checkbox @radix-ui/react-context-menu @radix-ui/react-dialog @radix-ui/react-dropdown-menu @radix-ui/react-popover @radix-ui/react-select @radix-ui/react-slot
|
|
6
|
+
npm install @labpane/ui @radix-ui/react-alert-dialog @radix-ui/react-avatar @radix-ui/react-checkbox @radix-ui/react-context-menu @radix-ui/react-dialog @radix-ui/react-dropdown-menu @radix-ui/react-popover @radix-ui/react-select @radix-ui/react-slot @radix-ui/react-switch @radix-ui/react-tabs @radix-ui/react-toggle @radix-ui/react-toggle-group @radix-ui/react-tooltip
|
|
7
7
|
```
|
|
8
8
|
|
|
9
9
|
```tsx
|
|
@@ -23,15 +23,18 @@ Radix and React are peer dependencies, so your app keeps one copy of each. The s
|
|
|
23
23
|
|
|
24
24
|
## Components
|
|
25
25
|
|
|
26
|
-
|
|
|
27
|
-
|
|
|
28
|
-
| Pages
|
|
29
|
-
|
|
|
30
|
-
|
|
|
31
|
-
|
|
|
32
|
-
|
|
|
33
|
-
|
|
|
34
|
-
|
|
|
26
|
+
| | |
|
|
27
|
+
| ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
28
|
+
| Pages | `Page`, `PageHeader` and its parts, `PageActions`, `Back`, `Topbar`, `Breadcrumb` and its parts, `TableScreen`, `BrowserLayout` and its parts, `SidePanel`, `SettingsSection`, `SettingsRow`, `SettingsFooter` |
|
|
29
|
+
| Navigation | `Sidebar` and its parts, `Rail`, `RailItem`, `NavTabs`, `NavTab`, `Tabs` and its parts, `Steps`, `Step`, `Command` and its parts |
|
|
30
|
+
| Controls | `Button`, `Badge`, `Input`, `Textarea`, `Checkbox`, `Switch`, `Toggle`, `ToggleGroup`, `Select` and its parts, `NativeSelect`, `SearchInput`, `FileInput`, `InputGroup` and its parts, `CopyButton`, `Kbd` |
|
|
31
|
+
| Forms | `Field`, `FieldLabel`, `FieldDescription`, `FieldError`, `FieldSet`, `FieldGroup`, `Label`, `TextField`, `SelectField`, `AddButton` |
|
|
32
|
+
| Display | `Alert`, `Card` and its parts, `Avatar` and its parts, `Stats`, `Stat`, `Empty` and its parts, `Separator`, `Skeleton`, `Spinner`, `Tooltip`, `EmailThread`, `EmailMessage` |
|
|
33
|
+
| Dialogs | `Dialog` and its parts, `Sheet` and its parts, `ConfirmDialog`, `DiscardDialog` |
|
|
34
|
+
| Menus | `DropdownMenu` and its parts, `OptionMenu`, `ActionMenu`, `MenuContent` |
|
|
35
|
+
| Tables | `Table`, `TableStack`, `column`, `mono`, `num` |
|
|
36
|
+
| Charts | `TimeSeriesChart`, `HistogramChart`, `HistogramSparkline`, `FlameGraph`, `TimingTracks`, `ChartFrame` |
|
|
37
|
+
| Workspace | `AppMenu` with `AppMenuSection`; `useTabActive` and `useTabVisible` read the tab state that `@labpane/os` provides |
|
|
35
38
|
|
|
36
39
|
`cn()` merges class names and lets your own Tailwind classes override the `labui:` defaults they conflict with.
|
|
37
40
|
|
|
@@ -109,7 +112,19 @@ Set these on `:root`, or on any ancestor. Add a `dark` class to an ancestor for
|
|
|
109
112
|
}
|
|
110
113
|
```
|
|
111
114
|
|
|
112
|
-
|
|
115
|
+
A theme can also be an object. `themeCss(theme)` returns the CSS for both packages' tokens and `<ThemeStyle theme={theme} />` renders it; keys left out keep the defaults.
|
|
116
|
+
|
|
117
|
+
```tsx
|
|
118
|
+
<ThemeStyle
|
|
119
|
+
theme={{
|
|
120
|
+
light: { primary: "#a3242f" },
|
|
121
|
+
dark: { primary: "#f0808c" },
|
|
122
|
+
radius: "0.5rem",
|
|
123
|
+
}}
|
|
124
|
+
/>
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Colors: `background`, `foreground`, `card`, `popover`, `primary`, `secondary`, `muted`, `accent`, `destructive`, `success`, and `warning`, each with a `-foreground` pair where it applies, plus `link`, `border`, `input`, `input-background`, `ring`, `overlay`, and `destructive-muted`. Fonts: `font-sans`, `font-mono`, and `font-display`. Sizes: `radius`, `radius-dialog`, `control-height`, `control-height-sm`, `control-px`, and `row-py`. Each is a `--labui-` variable.
|
|
113
128
|
|
|
114
129
|
## License
|
|
115
130
|
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// classes.ts
|
|
2
|
+
import { clsx } from "clsx";
|
|
3
|
+
import { extendTailwindMerge } from "tailwind-merge";
|
|
4
|
+
var twMerge = extendTailwindMerge({
|
|
5
|
+
experimentalParseClassName: ({ className, parseClassName }) => parseClassName(className.replace(/^labui:/, ""))
|
|
6
|
+
});
|
|
7
|
+
function cn(...inputs) {
|
|
8
|
+
return twMerge(clsx(inputs));
|
|
9
|
+
}
|
|
10
|
+
var focusRing = "labui:focus-visible:border-ring labui:focus-visible:ring-[3px] labui:focus-visible:ring-ring/50";
|
|
11
|
+
var invalidRing = "labui:aria-invalid:border-destructive labui:aria-invalid:ring-destructive/20 labui:dark:aria-invalid:ring-destructive/40";
|
|
12
|
+
var overlay = "labui:fixed labui:inset-0 labui:z-50 labui:bg-overlay labui:data-[state=open]:animate-fade-in labui:data-[state=closed]:animate-fade-out";
|
|
13
|
+
var closeButton = [
|
|
14
|
+
"labui:absolute labui:top-4 labui:right-4 labui:inline-flex labui:size-8 labui:items-center labui:justify-center labui:rounded-md",
|
|
15
|
+
"labui:text-muted-foreground labui:transition-colors labui:hover:bg-accent labui:hover:text-foreground",
|
|
16
|
+
"labui:focus-visible:ring-[3px] labui:focus-visible:ring-ring/50 labui:focus-visible:outline-none labui:disabled:pointer-events-none",
|
|
17
|
+
"labui:[&_svg]:pointer-events-none labui:[&_svg]:size-4 labui:[&_svg]:shrink-0"
|
|
18
|
+
].join(" ");
|
|
19
|
+
var inputSurface = [
|
|
20
|
+
"labui:w-full labui:min-w-0 labui:rounded-md labui:border labui:border-input labui:bg-input-background labui:shadow-xs",
|
|
21
|
+
"labui:text-base labui:md:text-sm labui:placeholder:text-muted-foreground labui:transition-[color,box-shadow] labui:outline-none",
|
|
22
|
+
"labui:disabled:cursor-not-allowed labui:disabled:opacity-50",
|
|
23
|
+
focusRing,
|
|
24
|
+
invalidRing
|
|
25
|
+
].join(" ");
|
|
26
|
+
|
|
27
|
+
// button.tsx
|
|
28
|
+
import * as React from "react";
|
|
29
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
30
|
+
import { jsx } from "react/jsx-runtime";
|
|
31
|
+
var raisedButtonSurface = [
|
|
32
|
+
"labui:border labui:border-border labui:border-b-input labui:bg-card labui:bg-linear-to-b labui:from-card labui:to-muted labui:text-foreground",
|
|
33
|
+
"labui:shadow-[inset_0_1px_0_#ffffff,0_1px_1px_#00000014,0_3px_4px_#0000000d]",
|
|
34
|
+
"labui:hover:to-background labui:hover:shadow-[inset_0_1px_0_#ffffff,0_2px_3px_#0000001a,0_4px_6px_#0000000d]",
|
|
35
|
+
"labui:active:translate-y-px labui:active:from-muted labui:active:to-card labui:active:shadow-[inset_0_1px_2px_#0000001a,0_1px_0_#ffffff80]",
|
|
36
|
+
"labui:dark:border-foreground/15 labui:dark:border-b-foreground/10 labui:dark:bg-secondary labui:dark:from-[color-mix(in_srgb,var(--labui-secondary)_88%,var(--labui-foreground))] labui:dark:to-secondary labui:dark:text-popover-foreground",
|
|
37
|
+
"labui:dark:shadow-[inset_0_1px_0_#ffffff14,0_1px_2px_#00000026]",
|
|
38
|
+
"labui:dark:hover:border-foreground/25 labui:dark:hover:from-[color-mix(in_srgb,var(--labui-secondary)_82%,var(--labui-foreground))] labui:dark:hover:to-secondary labui:dark:hover:shadow-[inset_0_1px_0_#ffffff1f,0_2px_4px_#00000033]",
|
|
39
|
+
"labui:dark:active:from-secondary labui:dark:active:to-secondary labui:dark:active:shadow-[inset_0_1px_2px_#00000033,0_1px_0_#ffffff0a]",
|
|
40
|
+
"labui:disabled:bg-secondary labui:disabled:bg-none labui:disabled:shadow-none labui:dark:disabled:shadow-none"
|
|
41
|
+
].join(" ");
|
|
42
|
+
var buttonVariants = {
|
|
43
|
+
default: "labui:border labui:border-transparent labui:bg-primary labui:text-primary-foreground labui:shadow-xs labui:hover:bg-primary/90 labui:active:translate-y-px",
|
|
44
|
+
destructive: "labui:border labui:border-transparent labui:bg-destructive-muted labui:text-destructive labui:hover:border-destructive/20 labui:hover:bg-destructive/15 labui:focus-visible:ring-destructive/20 labui:dark:focus-visible:ring-destructive/40",
|
|
45
|
+
outline: "labui:border labui:bg-background labui:shadow-xs labui:hover:bg-accent labui:hover:text-accent-foreground labui:dark:border-input labui:dark:bg-input/30 labui:dark:hover:bg-input/50",
|
|
46
|
+
secondary: raisedButtonSurface,
|
|
47
|
+
ghost: "labui:hover:bg-accent labui:hover:text-accent-foreground labui:dark:hover:bg-accent/50",
|
|
48
|
+
link: "labui:text-link labui:underline-offset-4 labui:hover:underline"
|
|
49
|
+
};
|
|
50
|
+
var buttonSizes = {
|
|
51
|
+
default: "labui:h-(--labui-control-height) labui:px-4 labui:py-2 labui:has-[>svg]:px-3",
|
|
52
|
+
xs: "labui:h-6 labui:gap-1 labui:rounded-md labui:px-2 labui:text-xs labui:has-[>svg]:px-1.5 labui:[&_svg:not([class*='size-'])]:size-3",
|
|
53
|
+
sm: "labui:h-(--labui-control-height-sm) labui:gap-1.5 labui:rounded-md labui:px-3 labui:has-[>svg]:px-2.5",
|
|
54
|
+
lg: "labui:h-11 labui:rounded-md labui:px-6 labui:has-[>svg]:px-4",
|
|
55
|
+
icon: "labui:size-(--labui-control-height)",
|
|
56
|
+
"icon-xs": "labui:size-6 labui:rounded-md labui:[&_svg:not([class*='size-'])]:size-3",
|
|
57
|
+
"icon-sm": "labui:size-(--labui-control-height-sm)",
|
|
58
|
+
"icon-lg": "labui:size-11"
|
|
59
|
+
};
|
|
60
|
+
var Button = React.forwardRef(function Button2({
|
|
61
|
+
className,
|
|
62
|
+
variant = "default",
|
|
63
|
+
size = "default",
|
|
64
|
+
asChild = false,
|
|
65
|
+
...props
|
|
66
|
+
}, ref) {
|
|
67
|
+
const Comp = asChild ? Slot : "button";
|
|
68
|
+
return /* @__PURE__ */ jsx(
|
|
69
|
+
Comp,
|
|
70
|
+
{
|
|
71
|
+
ref,
|
|
72
|
+
"data-slot": "button",
|
|
73
|
+
"data-variant": variant,
|
|
74
|
+
"data-size": size,
|
|
75
|
+
className: cn(
|
|
76
|
+
"labui:inline-flex labui:shrink-0 labui:items-center labui:justify-center labui:gap-2 labui:rounded-md",
|
|
77
|
+
"labui:text-sm labui:font-medium labui:whitespace-nowrap labui:transition-all labui:outline-none",
|
|
78
|
+
"labui:disabled:pointer-events-none labui:disabled:opacity-50",
|
|
79
|
+
focusRing,
|
|
80
|
+
invalidRing,
|
|
81
|
+
"labui:[&_svg]:pointer-events-none labui:[&_svg]:shrink-0 labui:[&_svg:not([class*='size-'])]:size-4",
|
|
82
|
+
variant && buttonVariants[variant],
|
|
83
|
+
size && buttonSizes[size],
|
|
84
|
+
className
|
|
85
|
+
),
|
|
86
|
+
...props
|
|
87
|
+
}
|
|
88
|
+
);
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
export {
|
|
92
|
+
cn,
|
|
93
|
+
focusRing,
|
|
94
|
+
invalidRing,
|
|
95
|
+
overlay,
|
|
96
|
+
closeButton,
|
|
97
|
+
inputSurface,
|
|
98
|
+
Button
|
|
99
|
+
};
|
|
100
|
+
//# sourceMappingURL=chunk-NR3PLNO7.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../classes.ts", "../button.tsx"],
|
|
4
|
+
"sourcesContent": ["import { type ClassValue, clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n experimentalParseClassName: ({ className, parseClassName }) =>\n parseClassName(className.replace(/^labui:/, \"\")),\n});\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n\nexport const focusRing =\n \"labui:focus-visible:border-ring labui:focus-visible:ring-[3px] labui:focus-visible:ring-ring/50\";\n\nexport const invalidRing =\n \"labui:aria-invalid:border-destructive labui:aria-invalid:ring-destructive/20 labui:dark:aria-invalid:ring-destructive/40\";\n\nexport const overlay =\n \"labui:fixed labui:inset-0 labui:z-50 labui:bg-overlay labui:data-[state=open]:animate-fade-in labui:data-[state=closed]:animate-fade-out\";\n\nexport const closeButton = [\n \"labui:absolute labui:top-4 labui:right-4 labui:inline-flex labui:size-8 labui:items-center labui:justify-center labui:rounded-md\",\n \"labui:text-muted-foreground labui:transition-colors labui:hover:bg-accent labui:hover:text-foreground\",\n \"labui:focus-visible:ring-[3px] labui:focus-visible:ring-ring/50 labui:focus-visible:outline-none labui:disabled:pointer-events-none\",\n \"labui:[&_svg]:pointer-events-none labui:[&_svg]:size-4 labui:[&_svg]:shrink-0\",\n].join(\" \");\n\nexport const inputSurface = [\n \"labui:w-full labui:min-w-0 labui:rounded-md labui:border labui:border-input labui:bg-input-background labui:shadow-xs\",\n \"labui:text-base labui:md:text-sm labui:placeholder:text-muted-foreground labui:transition-[color,box-shadow] labui:outline-none\",\n \"labui:disabled:cursor-not-allowed labui:disabled:opacity-50\",\n focusRing,\n invalidRing,\n].join(\" \");\n", "import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cn, focusRing, invalidRing } from \"./classes.js\";\n\nconst raisedButtonSurface = [\n \"labui:border labui:border-border labui:border-b-input labui:bg-card labui:bg-linear-to-b labui:from-card labui:to-muted labui:text-foreground\",\n \"labui:shadow-[inset_0_1px_0_#ffffff,0_1px_1px_#00000014,0_3px_4px_#0000000d]\",\n \"labui:hover:to-background labui:hover:shadow-[inset_0_1px_0_#ffffff,0_2px_3px_#0000001a,0_4px_6px_#0000000d]\",\n \"labui:active:translate-y-px labui:active:from-muted labui:active:to-card labui:active:shadow-[inset_0_1px_2px_#0000001a,0_1px_0_#ffffff80]\",\n \"labui:dark:border-foreground/15 labui:dark:border-b-foreground/10 labui:dark:bg-secondary labui:dark:from-[color-mix(in_srgb,var(--labui-secondary)_88%,var(--labui-foreground))] labui:dark:to-secondary labui:dark:text-popover-foreground\",\n \"labui:dark:shadow-[inset_0_1px_0_#ffffff14,0_1px_2px_#00000026]\",\n \"labui:dark:hover:border-foreground/25 labui:dark:hover:from-[color-mix(in_srgb,var(--labui-secondary)_82%,var(--labui-foreground))] labui:dark:hover:to-secondary labui:dark:hover:shadow-[inset_0_1px_0_#ffffff1f,0_2px_4px_#00000033]\",\n \"labui:dark:active:from-secondary labui:dark:active:to-secondary labui:dark:active:shadow-[inset_0_1px_2px_#00000033,0_1px_0_#ffffff0a]\",\n \"labui:disabled:bg-secondary labui:disabled:bg-none labui:disabled:shadow-none labui:dark:disabled:shadow-none\",\n].join(\" \");\n\nconst buttonVariants = {\n default:\n \"labui:border labui:border-transparent labui:bg-primary labui:text-primary-foreground labui:shadow-xs labui:hover:bg-primary/90 labui:active:translate-y-px\",\n destructive:\n \"labui:border labui:border-transparent labui:bg-destructive-muted labui:text-destructive labui:hover:border-destructive/20 labui:hover:bg-destructive/15 labui:focus-visible:ring-destructive/20 labui:dark:focus-visible:ring-destructive/40\",\n outline:\n \"labui:border labui:bg-background labui:shadow-xs labui:hover:bg-accent labui:hover:text-accent-foreground labui:dark:border-input labui:dark:bg-input/30 labui:dark:hover:bg-input/50\",\n secondary: raisedButtonSurface,\n ghost:\n \"labui:hover:bg-accent labui:hover:text-accent-foreground labui:dark:hover:bg-accent/50\",\n link: \"labui:text-link labui:underline-offset-4 labui:hover:underline\",\n};\n\nconst buttonSizes = {\n default:\n \"labui:h-(--labui-control-height) labui:px-4 labui:py-2 labui:has-[>svg]:px-3\",\n xs: \"labui:h-6 labui:gap-1 labui:rounded-md labui:px-2 labui:text-xs labui:has-[>svg]:px-1.5 labui:[&_svg:not([class*='size-'])]:size-3\",\n sm: \"labui:h-(--labui-control-height-sm) labui:gap-1.5 labui:rounded-md labui:px-3 labui:has-[>svg]:px-2.5\",\n lg: \"labui:h-11 labui:rounded-md labui:px-6 labui:has-[>svg]:px-4\",\n icon: \"labui:size-(--labui-control-height)\",\n \"icon-xs\":\n \"labui:size-6 labui:rounded-md labui:[&_svg:not([class*='size-'])]:size-3\",\n \"icon-sm\": \"labui:size-(--labui-control-height-sm)\",\n \"icon-lg\": \"labui:size-11\",\n};\n\nexport type ButtonVariant = keyof typeof buttonVariants;\nexport type ButtonSize = keyof typeof buttonSizes;\n\nconst Button = React.forwardRef<\n HTMLButtonElement,\n React.ComponentPropsWithoutRef<\"button\"> & {\n variant?: ButtonVariant | null;\n size?: ButtonSize | null;\n asChild?: boolean;\n }\n>(function Button(\n {\n className,\n variant = \"default\",\n size = \"default\",\n asChild = false,\n ...props\n },\n ref,\n) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n ref={ref}\n data-slot=\"button\"\n data-variant={variant}\n data-size={size}\n className={cn(\n \"labui:inline-flex labui:shrink-0 labui:items-center labui:justify-center labui:gap-2 labui:rounded-md\",\n \"labui:text-sm labui:font-medium labui:whitespace-nowrap labui:transition-all labui:outline-none\",\n \"labui:disabled:pointer-events-none labui:disabled:opacity-50\",\n focusRing,\n invalidRing,\n \"labui:[&_svg]:pointer-events-none labui:[&_svg]:shrink-0 labui:[&_svg:not([class*='size-'])]:size-4\",\n variant && buttonVariants[variant],\n size && buttonSizes[size],\n className,\n )}\n {...props}\n />\n );\n});\n\nexport { Button };\n"],
|
|
5
|
+
"mappings": ";AAAA,SAA0B,YAAY;AACtC,SAAS,2BAA2B;AAEpC,IAAM,UAAU,oBAAoB;AAAA,EAClC,4BAA4B,CAAC,EAAE,WAAW,eAAe,MACvD,eAAe,UAAU,QAAQ,WAAW,EAAE,CAAC;AACnD,CAAC;AAEM,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;AAEO,IAAM,YACX;AAEK,IAAM,cACX;AAEK,IAAM,UACX;AAEK,IAAM,cAAc;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG;AAEH,IAAM,eAAe;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG;;;AClCV,YAAY,WAAW;AACvB,SAAS,YAAY;AAgEjB;AA7DJ,IAAM,sBAAsB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAK,GAAG;AAEV,IAAM,iBAAiB;AAAA,EACrB,SACE;AAAA,EACF,aACE;AAAA,EACF,SACE;AAAA,EACF,WAAW;AAAA,EACX,OACE;AAAA,EACF,MAAM;AACR;AAEA,IAAM,cAAc;AAAA,EAClB,SACE;AAAA,EACF,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,WACE;AAAA,EACF,WAAW;AAAA,EACX,WAAW;AACb;AAKA,IAAM,SAAe,iBAOnB,SAASA,QACT;AAAA,EACE;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP,UAAU;AAAA,EACV,GAAG;AACL,GACA,KACA;AACA,QAAM,OAAO,UAAU,OAAO;AAE9B,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,aAAU;AAAA,MACV,gBAAc;AAAA,MACd,aAAW;AAAA,MACX,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,WAAW,eAAe,OAAO;AAAA,QACjC,QAAQ,YAAY,IAAI;AAAA,QACxB;AAAA,MACF;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ,CAAC;",
|
|
6
|
+
"names": ["Button"]
|
|
7
|
+
}
|