@hachej/boring-ui-kit 0.1.12 → 0.1.14

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 CHANGED
@@ -1,65 +1,302 @@
1
- # @boring/ui
1
+ # @hachej/boring-ui-kit
2
2
 
3
- Shared UI primitives for boring-ui packages and plugins.
3
+ <div align="center">
4
4
 
5
- ```bash
6
- pnpm add @boring/ui
7
- ```
5
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
+ [![npm](https://img.shields.io/npm/v/@hachej/boring-ui-kit.svg)](https://www.npmjs.com/package/@hachej/boring-ui-kit)
8
7
 
9
- ---
8
+ </div>
10
9
 
11
- ## What it provides
10
+ Shared shadcn-style UI primitives for boring-ui packages and plugins. Buttons, dialogs, panes, inputs, feedback states, settings panels — everything a panel needs to look consistent. Zero global CSS dependencies.
12
11
 
13
- shadcn-style React components with no global CSS — styles come from the host package CSS (`@boring/workspace/globals.css`).
14
-
15
- **Layout & surfaces** — `Pane`, `PaneHeader`, `PaneBody`, `PaneToolbar`, `FloatingPanel`
12
+ ```bash
13
+ pnpm add @hachej/boring-ui-kit
14
+ ```
16
15
 
17
- **Actions** — `Button`, `IconButton`, `ButtonGroup`, `Toolbar`, `ToolbarButton`
16
+ ---
18
17
 
19
- **Forms** — `Input`, `Textarea`, `Select`, `Field`, `FieldLabel`, `InputGroup`
18
+ ## TL;DR
20
19
 
21
- **Feedback**`Notice`, `EmptyState`, `ErrorState`, `Spinner`, `Skeleton`, `StatusBadge`, `toast`
20
+ **The Problem**: Building panel-based plugins means re-implementing basic UI buttons, dialogs, form fields, loading states, empty states — over and over. Without a shared design system, every panel looks different and maintenance is a nightmare.
22
21
 
23
- **Display** `Badge`, `Chip`, `InlineCode`, `Kbd`, `Avatar`, `List`, `DetailList`
22
+ **The Solution**: `@hachej/boring-ui-kit` provides ~40 reusable components designed for IDE-style surfaces (panes, toolbars, sidebars). No global CSS — styles inherit from the host app's CSS variables. Drop it in any boring-ui plugin or app and panels look native from day one.
24
23
 
25
- **Overlays** `Dialog`, `DropdownMenu`, `Tooltip`, `HoverCard`, `Tabs`, `Command`
24
+ ### Why Use @hachej/boring-ui-kit?
26
25
 
27
- **Settings** `SettingsPanel`, `SettingsNav`, `SettingsActionRow`
26
+ | Feature | What It Does |
27
+ |---------|--------------|
28
+ | **Pane primitives** | `Pane`, `PaneHeader`, `PaneBody`, `PaneToolbar`, `FloatingPanel` — built for Dockview panels |
29
+ | **~40 components** | Buttons, inputs, dialogs, tooltips, badges, spinners, empty states, settings panels, and more |
30
+ | **Zero global CSS** | Styles use CSS custom properties from the host; no conflicting style sheets |
31
+ | **shadcn-style** | Composable, headless-compatible, restylable via `className` / `class-variance-authority` |
32
+ | **TypeScript-first** | Every component is typed; props are explicit; no implicit `any` |
33
+ | **Works anywhere** | Plugin panels, standalone apps, storybook — no framework lock-in |
28
34
 
29
35
  ---
30
36
 
31
- ## Usage
37
+ ## Quick Example
32
38
 
33
39
  ```tsx
34
- import { Button, EmptyState, Pane, PaneHeader, PaneBody } from "@boring/ui"
40
+ import {
41
+ Pane, PaneHeader, PaneBody,
42
+ Button, ButtonGroup,
43
+ EmptyState, Spinner,
44
+ Input, Field, FieldLabel
45
+ } from "@hachej/boring-ui-kit"
35
46
 
36
- export function MyPanel() {
47
+ export function SearchPane() {
37
48
  return (
38
49
  <Pane>
39
- <PaneHeader>My Panel</PaneHeader>
50
+ <PaneHeader>Search</PaneHeader>
40
51
  <PaneBody>
41
- <EmptyState title="Nothing here" />
42
- <Button>Action</Button>
52
+ <Field>
53
+ <FieldLabel>Query</FieldLabel>
54
+ <Input placeholder="Search files…" />
55
+ </Field>
56
+ <EmptyState
57
+ title="No results"
58
+ description="Try a different search term"
59
+ icon="search"
60
+ />
61
+ <ButtonGroup>
62
+ <Button variant="secondary">Cancel</Button>
63
+ <Button>Search</Button>
64
+ </ButtonGroup>
43
65
  </PaneBody>
44
66
  </Pane>
45
67
  )
46
68
  }
47
69
  ```
48
70
 
49
- Styles are provided by the host — no separate CSS import needed in plugins:
71
+ ---
72
+
73
+ ## Installation
74
+
75
+ ```bash
76
+ # pnpm
77
+ pnpm add @hachej/boring-ui-kit
78
+
79
+ # npm
80
+ npm install @hachej/boring-ui-kit
81
+
82
+ # from source
83
+ git clone https://github.com/hachej/boring-ui.git
84
+ cd boring-ui && pnpm install
85
+ pnpm --filter @hachej/boring-ui-kit build
86
+ ```
87
+
88
+ ---
89
+
90
+ ## Architecture
91
+
92
+ `@hachej/boring-ui-kit` is the shared design system at the bottom of every boring-ui package:
93
+
94
+ ```
95
+ ┌──────────────────────────────────────────┐
96
+ │ @hachej/boring-workspace │
97
+ │ (Dockview chrome, panels, plugins) │
98
+ ├──────────────────────────────────────────┤
99
+ │ @hachej/boring-ui-kit ◄── YOU ARE HERE │
100
+ │ │
101
+ │ ┌────────┐ ┌────────┐ ┌────────┐ │
102
+ │ │ Layout │ │ Form │ │Overlay │ │
103
+ │ │Pane, … │ │Input, …│ │Dialog, │ │
104
+ │ └────────┘ └────────┘ └────────┘ │
105
+ │ │
106
+ │ Styled by CSS vars from host: │
107
+ │ – @boring-core/theme.css │
108
+ │ – @boring-workspace/globals.css │
109
+ │ (or your own --boring-* vars) │
110
+ └──────────────────────────────────────────┘
111
+ ```
112
+
113
+ The kit imports **no global CSS**. Styles come from CSS custom properties set by the host app. In a full app, you import the workspace globals once:
50
114
 
51
115
  ```ts
52
116
  // In your app shell (once)
53
- import "@boring/workspace/globals.css"
117
+ import "@hachej/boring-workspace/globals.css"
118
+ ```
119
+
120
+ Then every UI kit component picks up those variables automatically.
121
+
122
+ ### Styling Contract
123
+
124
+ Override any CSS variable at any scope:
125
+
126
+ ```css
127
+ /* Use :root for normal React apps, :host for Shadow DOM */
128
+ :root {
129
+ --boring-border: 1px solid rgba(255, 255, 255, 0.1);
130
+ --boring-radius: 6px;
131
+ --boring-color-bg: #1a1a1a;
132
+ --boring-color-text: #e0e0e0;
133
+ /* ... more vars set by @hachej/boring-workspace/globals.css */
134
+ }
54
135
  ```
55
136
 
137
+ ### Theming
138
+
139
+ ```css
140
+ .my-green-panel {
141
+ --boring-color-accent: #22c55e;
142
+ --boring-color-accent-hover: #16a34a;
143
+ }
144
+ ```
145
+
146
+ The kit uses class-variance-authority (CVA) for consistent variant patterns:
147
+
148
+ ```tsx
149
+ <Button variant="destructive" size="sm">Delete</Button>
150
+ {/* variants: default | destructive | secondary | ghost */}
151
+ {/* sizes: sm | md | lg */}
152
+ ```
153
+
154
+ ---
155
+
156
+ ## Component Index
157
+
158
+ ### Layout & Surfaces
159
+
160
+ | Component | Purpose |
161
+ |-----------|---------|
162
+ | `Pane` | Container for panel surfaces (bordered, rounded, sized for Dockview) |
163
+ | `PaneHeader` | Title bar for panes (title + optional actions) |
164
+ | `PaneBody` | Scrollable content area with proper padding |
165
+ | `PaneToolbar` | Horizontal toolbar for panes (actions, filters, etc.) |
166
+ | `FloatingPanel` | Overlay panel (popovers, contextual menus, inline editors) |
167
+
168
+ ### Actions
169
+
170
+ | Component | Purpose |
171
+ |-----------|---------|
172
+ | `Button` | Primary action button with variant + size props |
173
+ | `IconButton` | Icon-only button (tooltips built in) |
174
+ | `ButtonGroup` | Grouped buttons with merged borders |
175
+ | `Toolbar` | Horizontal container for toolbar buttons |
176
+ | `ToolbarButton` | Icon button for toolbar context |
177
+
178
+ ### Forms
179
+
180
+ | Component | Purpose |
181
+ |-----------|---------|
182
+ | `Input` | Text input with validation states |
183
+ | `Textarea` | Multi-line text input |
184
+ | `Select` | Dropdown selection (Radix-backed) |
185
+ | `Field` | Form field wrapper (label + input + error) |
186
+ | `FieldLabel` | Accessible form label |
187
+ | `InputGroup` | Input with prepended/appended elements |
188
+
189
+ ### Feedback
190
+
191
+ | Component | Purpose |
192
+ |-----------|---------|
193
+ | `Notice` | Banner alerts (info, warning, error, success) |
194
+ | `EmptyState` | Placeholder for empty content areas |
195
+ | `ErrorState` | Error display with retry action |
196
+ | `Spinner` | Loading indicator |
197
+ | `Skeleton` | Loading placeholder shapes |
198
+ | `StatusBadge` | Colored status indicators |
199
+ | `toast` | Programmatic toast notifications |
200
+
201
+ ### Display
202
+
203
+ | Component | Purpose |
204
+ |-----------|---------|
205
+ | `Badge` | Small inline labels |
206
+ | `Chip` | Selectable/removable tags |
207
+ | `InlineCode` | Monospaced inline text |
208
+ | `Kbd` | Keyboard shortcut display |
209
+ | `Avatar` | User/profile image with fallback |
210
+ | `List` | Vertical list with row actions |
211
+ | `DetailList` | Key-value display (label + value pairs) |
212
+
213
+ ### Overlays
214
+
215
+ | Component | Purpose |
216
+ |-----------|---------|
217
+ | `Dialog` | Modal dialog with title, body, footer |
218
+ | `DropdownMenu` | Context menu (Radix `@radix-ui/react-dropdown-menu`) |
219
+ | `Tooltip` | Hover tooltips (Radix `@radix-ui/react-tooltip`) |
220
+ | `HoverCard` | Hover-reveal cards |
221
+ | `Tabs` | Tabbed navigation (Radix `@radix-ui/react-tabs`) |
222
+ | `Command` | Command palette input (cmdk-based) |
223
+
224
+ ### Settings
225
+
226
+ | Component | Purpose |
227
+ |-----------|---------|
228
+ | `SettingsPanel` | Full-page settings layout |
229
+ | `SettingsNav` | Vertical navigation for settings sections |
230
+ | `SettingsActionRow` | Row with label, description, and action control |
231
+
232
+ ---
233
+
234
+ ## How @hachej/boring-ui-kit Compares
235
+
236
+ | Feature | @hachej/boring-ui-kit | shadcn/ui | Radix UI | @mui/material |
237
+ |---------|------------------------|-----------|----------|---------------|
238
+ | IDE-optimized primitives | ✅ `Pane`, `PaneHeader`, `PaneToolbar` | ❌ None | ❌ None | ❌ None |
239
+ | Zero global CSS | ✅ Host-inherited | ⚠️ Tailwind classes | ✅ Headless | ❌ CSS-in-JS |
240
+ | Ready-made components | ✅ ~40, opinionated | ⚠️ Copy-paste source | ❌ Headless only | ✅ 100+ |
241
+ | Plugin-safe bundle | ✅ Tree-shaked, small | ⚠️ You pick files | ⚠️ Many packages | ❌ Heavy |
242
+ | Settings panels | ✅ `SettingsPanel`, `SettingsNav` | ❌ DIY | ❌ DIY | ❌ DIY |
243
+ | Command palette | ✅ `Command` (cmdk) | ⚠️ Copy-paste | ❌ DIY | ❌ DIY |
244
+
245
+ **When to use @hachej/boring-ui-kit:**
246
+ - Building plugin panels for boring-ui workspace apps
247
+ - You want consistent, IDE-style UI without a heavy material library
248
+ - You need pane-specific primitives (`Pane`, `PaneToolbar`)
249
+
250
+ **When it might not fit:**
251
+ - You need a full design system with charts, maps, and data grids (use MUI)
252
+ - You want complete source-level customization (use shadcn/ui directly)
253
+ - You're building a consumer-facing marketing site (use Tailwind components)
254
+
255
+ ---
256
+
257
+ ## Troubleshooting
258
+
259
+ | Error | Cause | Fix |
260
+ |-------|-------|-----|
261
+ | Unstyled components | Host CSS variables not set | Import `@hachej/boring-workspace/globals.css` or `@hachej/boring-ui-kit/styles.css` |
262
+ | `Cannot find module` | Package not built | Run `pnpm --filter @hachej/boring-ui-kit build` |
263
+ | Dialog not showing | Portal container missing | Ensure `<div id="overlay-root">` exists in your DOM |
264
+ | Theme looks wrong | CSS vars overridden elsewhere | Check specificity — your vars should be at `:root` or `html` scope |
265
+
266
+ ---
267
+
268
+ ## Limitations
269
+
270
+ - **Not a standalone design system** — Designed as a shared dependency for boring-ui packages and plugins. Standalone use is supported but you'll need to provide CSS variables.
271
+ - **No data-heavy components** — No charts, data grids, calendar pickers, or Kanban boards. Use `@hachej/boring-workspace/charts` (recharts wrappers) or external libs for those.
272
+ - **No i18n built-in** — All text content (button labels, empty state messages) is plain strings. Wrap externally for localization.
273
+ - **No SSR testing** – Components are client-rendered and rely on browser APIs for portal rendering.
274
+
275
+ ---
276
+
277
+ ## FAQ
278
+
279
+ **Q: Do I need to import CSS separately in my plugins?**
280
+ A: No. If your app already imports `@hachej/boring-workspace/globals.css`, the UI kit inherits those variables. Only import `@hachej/boring-ui-kit/styles.css` if you're using the kit outside of a boring-ui workspace.
281
+
282
+ **Q: Can I override component styles?**
283
+ A: Yes. Every component accepts `className` and uses `clsx`/`tailwind-merge` so your Tailwind classes compose correctly. For deeper customization, override CSS variables.
284
+
285
+ **Q: Is this just re-exported shadcn?**
286
+ A: No. While the kit uses Radix UI primitives (like shadcn does), it adds IDE-specific components (`Pane`, `PaneToolbar`, `SettingsPanel`) that shadcn doesn't ship. The kit is authored and maintained, not copied.
287
+
288
+ **Q: Can I use this without the rest of boring-ui?**
289
+ A: Yes. The kit is a standalone npm package with no internal boring-ui dependencies. You'll need to provide CSS variables for theming.
290
+
291
+ **Q: What about code editors and rich text?**
292
+ A: Not in this package. The kit focuses on UI chrome. Code editing (CodeMirror) and rich text (TipTap) are handled by `@hachej/boring-workspace` and its plugins.
293
+
294
+ ---
295
+
296
+ *About Contributions:* Please don't take this the wrong way, but I do not accept outside contributions for any of my projects. I simply don't have the mental bandwidth to review anything, and it's my name on the thing, so I'm responsible for any problems it causes; thus, the risk-reward is highly asymmetric from my perspective. I'd also have to worry about other "stakeholders," which seems unwise for tools I mostly make for myself for free. Feel free to submit issues, and even PRs if you want to illustrate a proposed fix, but know I won't merge them directly. Instead, I'll have Claude or Codex review submissions via `gh` and independently decide whether and how to address them. Bug reports in particular are welcome. Sorry if this offends, but I want to avoid wasted time and hurt feelings. I understand this isn't in sync with the prevailing open-source ethos that seeks community contributions, but it's the only way I can move at this velocity and keep my sanity.
297
+
56
298
  ---
57
299
 
58
- ## Part of [boring-ui](https://github.com/hachej/boring-ui)
300
+ ## License
59
301
 
60
- | Package | Role |
61
- |---|---|
62
- | `@boring/core` | DB, auth, app factory |
63
- | `@boring/workspace` | Plugin system, layouts |
64
- | `@boring/agent` | Agent runtime + tools |
65
- | `@boring/ui` | Shared UI primitives |
302
+ MIT
package/dist/index.d.ts CHANGED
@@ -356,6 +356,9 @@ declare function Label({ className, ...props }: React.ComponentProps<typeof Labe
356
356
 
357
357
  declare function Checkbox({ className, ...props }: React.ComponentProps<typeof CheckboxPrimitive.Root>): react_jsx_runtime.JSX.Element;
358
358
 
359
+ type RadioProps = Omit<React.ComponentProps<'input'>, 'type'>;
360
+ declare const Radio: React.ForwardRefExoticComponent<Omit<RadioProps, "ref"> & React.RefAttributes<HTMLInputElement>>;
361
+
359
362
  declare function AlertDialog({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Root>): react_jsx_runtime.JSX.Element;
360
363
  declare function AlertDialogTrigger({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Trigger>): react_jsx_runtime.JSX.Element;
361
364
  declare function AlertDialogPortal({ ...props }: React.ComponentProps<typeof AlertDialogPrimitive.Portal>): react_jsx_runtime.JSX.Element;
@@ -435,4 +438,11 @@ declare function InputGroupText({ className, ...props }: React.ComponentProps<'s
435
438
  declare function InputGroupInput({ className, ...props }: React.ComponentProps<'input'>): react_jsx_runtime.JSX.Element;
436
439
  declare function InputGroupTextarea({ className, ...props }: React.ComponentProps<'textarea'>): react_jsx_runtime.JSX.Element;
437
440
 
438
- export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, Avatar, AvatarFallback, type AvatarFallbackProps, type AvatarProps, Badge, type BadgeProps, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, type ButtonProps, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Chip, ChipButton, type ChipButtonProps, type ChipProps, ChipRemove, type ChipRemoveProps, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, DetailLine, type DetailLineProps, DetailList, type DetailListProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Disclosure, DisclosureChevron, DisclosureContent, DisclosureTrigger, type DisclosureTriggerProps, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, type EmptyStateProps, ErrorState, type ErrorStateProps, Field, FieldDescription, FieldError, FieldLabel, FloatingPanel, FloatingPanelBody, type FloatingPanelBodyProps, FloatingPanelHeader, type FloatingPanelHeaderProps, type FloatingPanelProps, HoverCard, HoverCardContent, HoverCardTrigger, IconButton, type IconButtonProps, InitialsAvatar, type InitialsAvatarProps, InlineCode, type InlineCodeProps, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, type InputProps, Kbd, type KbdProps, Label, List, type ListProps, ListRow, ListRowActions, type ListRowActionsProps, ListRowDescription, type ListRowDescriptionProps, ListRowMain, type ListRowMainProps, ListRowMeta, type ListRowMetaProps, type ListRowProps, ListRowTitle, type ListRowTitleProps, LoadingState, type LoadingStateProps, Notice, type NoticeProps, type NoticeTone, Pane, PaneBody, PaneDescription, PaneFooter, PaneHeader, PaneTitle, PaneToolbar, Popover, PopoverAnchor, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, ResizeHandle, type ResizeHandleOrientation, type ResizeHandleProps, ScrollArea, ScrollBar, SegmentedControl, SegmentedControlItem, type SegmentedControlItemProps, type SegmentedControlProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, type SeparatorProps, SettingsActionRow, type SettingsActionRowProps, SettingsNav, type SettingsNavItem, type SettingsNavProps, SettingsPageHeader, type SettingsPageHeaderProps, SettingsPanel, type SettingsPanelProps, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Skeleton, type SkeletonProps, Spinner, type SpinnerProps, StatusBadge, type StatusBadgeProps, type StatusBadgeTone, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type TextareaProps, type ToastApi$1 as ToastApi, type ToastApi as ToastEventApi, type ToastInput as ToastEventInput, type ToastVariant as ToastEventVariant, type ToastInput$1 as ToastInput, type ToastRecord, type ToastVariant$1 as ToastVariant, Toaster, type ToasterProps, Toolbar, ToolbarButton, type ToolbarButtonProps, ToolbarGroup, type ToolbarGroupProps, type ToolbarProps, ToolbarSeparator, type ToolbarSeparatorProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, badgeVariants, buttonGroupVariants, buttonVariants, clearToasts, cn, dismissToast, getActiveToasts, subscribeToasts, tabsListVariants, toast, useToast };
441
+ declare function ChoiceGroup({ className, ...props }: React.ComponentProps<'fieldset'>): react_jsx_runtime.JSX.Element;
442
+ declare function ChoiceGroupLegend({ className, ...props }: React.ComponentProps<'legend'>): react_jsx_runtime.JSX.Element;
443
+ declare function ChoiceItem({ className, ...props }: React.ComponentProps<'label'>): react_jsx_runtime.JSX.Element;
444
+ declare function ChoiceItemBody({ className, ...props }: React.ComponentProps<'span'>): react_jsx_runtime.JSX.Element;
445
+ declare function ChoiceItemTitle({ className, ...props }: React.ComponentProps<'span'>): react_jsx_runtime.JSX.Element;
446
+ declare function ChoiceItemDescription({ className, ...props }: React.ComponentProps<'small'>): react_jsx_runtime.JSX.Element;
447
+
448
+ export { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, Avatar, AvatarFallback, type AvatarFallbackProps, type AvatarProps, Badge, type BadgeProps, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, type ButtonProps, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, Chip, ChipButton, type ChipButtonProps, type ChipProps, ChipRemove, type ChipRemoveProps, ChoiceGroup, ChoiceGroupLegend, ChoiceItem, ChoiceItemBody, ChoiceItemDescription, ChoiceItemTitle, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, DetailLine, type DetailLineProps, DetailList, type DetailListProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Disclosure, DisclosureChevron, DisclosureContent, DisclosureTrigger, type DisclosureTriggerProps, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, type EmptyStateProps, ErrorState, type ErrorStateProps, Field, FieldDescription, FieldError, FieldLabel, FloatingPanel, FloatingPanelBody, type FloatingPanelBodyProps, FloatingPanelHeader, type FloatingPanelHeaderProps, type FloatingPanelProps, HoverCard, HoverCardContent, HoverCardTrigger, IconButton, type IconButtonProps, InitialsAvatar, type InitialsAvatarProps, InlineCode, type InlineCodeProps, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, type InputProps, Kbd, type KbdProps, Label, List, type ListProps, ListRow, ListRowActions, type ListRowActionsProps, ListRowDescription, type ListRowDescriptionProps, ListRowMain, type ListRowMainProps, ListRowMeta, type ListRowMetaProps, type ListRowProps, ListRowTitle, type ListRowTitleProps, LoadingState, type LoadingStateProps, Notice, type NoticeProps, type NoticeTone, Pane, PaneBody, PaneDescription, PaneFooter, PaneHeader, PaneTitle, PaneToolbar, Popover, PopoverAnchor, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Radio, type RadioProps, ResizeHandle, type ResizeHandleOrientation, type ResizeHandleProps, ScrollArea, ScrollBar, SegmentedControl, SegmentedControlItem, type SegmentedControlItemProps, type SegmentedControlProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, type SeparatorProps, SettingsActionRow, type SettingsActionRowProps, SettingsNav, type SettingsNavItem, type SettingsNavProps, SettingsPageHeader, type SettingsPageHeaderProps, SettingsPanel, type SettingsPanelProps, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Skeleton, type SkeletonProps, Spinner, type SpinnerProps, StatusBadge, type StatusBadgeProps, type StatusBadgeTone, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type TextareaProps, type ToastApi$1 as ToastApi, type ToastApi as ToastEventApi, type ToastInput as ToastEventInput, type ToastVariant as ToastEventVariant, type ToastInput$1 as ToastInput, type ToastRecord, type ToastVariant$1 as ToastVariant, Toaster, type ToasterProps, Toolbar, ToolbarButton, type ToolbarButtonProps, ToolbarGroup, type ToolbarGroupProps, type ToolbarProps, ToolbarSeparator, type ToolbarSeparatorProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, badgeVariants, buttonGroupVariants, buttonVariants, clearToasts, cn, dismissToast, getActiveToasts, subscribeToasts, tabsListVariants, toast, useToast };