@petrarca/sonnet-ui 0.5.0 → 0.7.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 CHANGED
@@ -1,25 +1,29 @@
1
1
  # @petrarca/sonnet-ui
2
2
 
3
- UI primitives and data components for the Petrarca Sonnet component library.
3
+ The component layer of the Petrarca Sonnet component library. It ships three
4
+ kinds of thing: a stylesheet of design tokens, a Tailwind preset that maps
5
+ those tokens onto utility classes, and React components.
4
6
 
5
- ## What's included
7
+ ## What it provides
6
8
 
7
- **UI primitives** — Tailwind + Radix UI components: Button, Badge, Card,
8
- Dialog, Tabs, Input, Textarea, Checkbox, Label, Tooltip, Spinner, Avatar,
9
- Separator, Stepper, ResizeHandle (draggable divider for resizable panes), and
10
- more.
9
+ **Primitives.** Buttons, badges, cards, dialogs, sheets, popovers, dropdowns,
10
+ tabs, selects, tooltips, steppers, scroll areas, resize handles and the rest of
11
+ the building blocks, most of them wrapping Radix.
11
12
 
12
- **Data components** — Higher-level data-driven UI:
13
- - **EntityTable** — Schema-driven table with pagination, row actions, custom cell renderers
14
- - **EntitySelect** — Async searchable select with typeahead, backed by a fetcher API
15
- - **EntityTree** — Hierarchical tree browser with search and edit support
16
- - **TreeView** — Generic accessible tree with keyboard navigation and row selection
17
- - **SearchInput** — Faceted search input with chip-based filters (simple, searchFields, faceted modes)
18
- - **JsonEditor** — CodeMirror JSON editor with validation (subpath: `@petrarca/sonnet-ui/json-editor`)
13
+ **Data components.** `EntityTable` renders a collection from a schema with
14
+ pagination, row actions and pluggable cell renderers. `SearchInput` produces a
15
+ `FilterExpr` in simple, multi-field or faceted mode. `EntitySelect` is an async
16
+ typeahead over an injected fetcher, `EntityTree` and `TreeView` cover
17
+ hierarchies, and `PropertyList` covers read-only display.
19
18
 
20
- **Design tokens** — Shipped as `styles.css` and `tailwind-preset.js`.
19
+ **Date and time inputs.** Locale-aware date, time and datetime controls with a
20
+ calendar, built on the parsing and formatting layer in `sonnet-core`.
21
21
 
22
- ---
22
+ **A JSON editor.** CodeMirror with validation and JSON-Pointer-constrained
23
+ editable regions, on its own subpath so the dependency is opt-in.
24
+
25
+ **Design tokens.** `styles.css` and `tailwind-preset.js`, the two files every
26
+ other `@petrarca/sonnet-*` package renders through.
23
27
 
24
28
  ## Install
25
29
 
@@ -27,44 +31,30 @@ more.
27
31
  pnpm add @petrarca/sonnet-ui @petrarca/sonnet-core
28
32
  ```
29
33
 
30
- Peer dependencies: `react >=19`, `react-dom >=19`, `tailwindcss >=3`,
31
- `tailwindcss-animate`, `@tailwindcss/typography`.
32
-
33
- ---
34
-
35
- ## Setup
36
-
37
- ### CSS
34
+ | Peer | Range | Needed for |
35
+ |---|---|---|
36
+ | `react`, `react-dom` | `>=19` | Everything |
37
+ | `tailwindcss` | `>=3` | The preset and every component class |
38
+ | `tailwindcss-animate` | `>=1` | Enter and exit animations on overlays |
39
+ | `@tailwindcss/typography` | `>=0.5` | Add the plugin to your Tailwind config |
40
+ | `@uiw/react-codemirror` | `>=4` | The `./json-editor` subpath only |
41
+ | `@codemirror/state`, `@codemirror/view`, `@codemirror/lang-json` | `>=6` | The `./json-editor` subpath only |
38
42
 
39
- Import `styles.css` in your app's global CSS. It provides design tokens
40
- (light + dark), base resets, heading utilities, and typography classes.
43
+ You do not declare any `@radix-ui/*` package yourself. Radix is a regular
44
+ dependency and arrives transitively
45
+ ([ADR-0002](../../docs/adr/0002-radix-is-a-dependency-not-a-peer.md)).
41
46
 
42
- ```css
43
- /* index.css */
44
- @import "@petrarca/sonnet-ui/styles.css";
45
-
46
- /* Shell layout — add below the import (app-level, not provided by the library) */
47
- html, body, #root { height: 100%; }
48
- #root { display: flex; flex-direction: column; overflow: hidden; }
49
- body { min-height: 100vh; overflow: hidden; }
50
- ```
47
+ ## Usage
51
48
 
52
- Override any token after the import for white-labeling:
49
+ Import the stylesheet and the preset, then use the components.
53
50
 
54
51
  ```css
52
+ /* src/index.css */
55
53
  @import "@petrarca/sonnet-ui/styles.css";
56
-
57
- :root {
58
- --primary: 210 80% 40%; /* custom brand color */
59
- }
60
54
  ```
61
55
 
62
- ### Tailwind
63
-
64
- Use the preset in `tailwind.config.js`. It maps all design tokens to Tailwind
65
- utility classes (`bg-primary`, `text-muted-foreground`, `border-border`, etc.):
66
-
67
56
  ```js
57
+ // tailwind.config.js
68
58
  module.exports = {
69
59
  presets: [require("@petrarca/sonnet-ui/tailwind-preset")],
70
60
  content: [
@@ -75,30 +65,39 @@ module.exports = {
75
65
  };
76
66
  ```
77
67
 
78
- ---
79
-
80
- ## Design tokens
81
-
82
- All tokens are CSS custom properties (HSL triplets). Key semantic tokens:
68
+ ```tsx
69
+ import { Badge, Button, Card, CardContent } from "@petrarca/sonnet-ui";
70
+
71
+ export function WidgetCard() {
72
+ return (
73
+ <Card>
74
+ <CardContent className="flex items-center gap-2">
75
+ <Badge badgeColor="green">active</Badge>
76
+ <Button size="sm">Create</Button>
77
+ </CardContent>
78
+ </Card>
79
+ );
80
+ }
81
+ ```
83
82
 
84
- | Token | Role |
85
- |---|---|
86
- | `--background` / `--foreground` | Page surface / primary text |
87
- | `--card` / `--card-foreground` | Card surface / text |
88
- | `--primary` / `--primary-foreground` | Brand action color |
89
- | `--destructive` | Error / danger |
90
- | `--muted` / `--muted-foreground` | Quiet surface / secondary text |
91
- | `--tertiary-foreground` | Tertiary text (timestamps, helpers) |
92
- | `--faint-foreground` | Ghost text (annotations, disabled) |
93
- | `--border` / `--border-subtle` / `--border-strong` | 3-tier border system |
94
- | `--state-hover` / `--state-selected` | Interaction state backgrounds |
95
- | `--ring` | Focus ring |
96
- | `--radius` | Base border radius |
83
+ The second content glob and the app-level layout CSS are the two steps most
84
+ often missed. [Getting started](docs/usage/getting-started.md) covers both, and
85
+ the token reference is in [theming](docs/usage/theming.md).
97
86
 
98
- See `DESIGN.md` at the repo root for the full token reference.
87
+ ## Documentation
99
88
 
100
- ---
89
+ - [Usage guides](docs/usage/index.md) -- setup, theming,
90
+ [primitives](docs/usage/primitives.md),
91
+ [EntityTable](docs/usage/entity-table.md),
92
+ [SearchInput](docs/usage/search-input.md),
93
+ [trees and selects](docs/usage/trees-and-selects.md),
94
+ [date and time inputs](docs/usage/date-and-time-inputs.md) and the
95
+ [JSON editor](docs/usage/json-editor.md).
96
+ - [Design docs](docs/design/index.md) -- the token architecture and the
97
+ reasoning behind the data components.
98
+ - [Workspace documentation](../../docs/README.md) -- the design language, the
99
+ design system and the architecture decision records.
101
100
 
102
101
  ## License
103
102
 
104
- See [LICENSE.md](../../LICENSE.md).
103
+ Apache 2.0. See [LICENSE.md](../../LICENSE.md).
package/dist/index.d.ts CHANGED
@@ -9,6 +9,8 @@ import * as CollapsiblePrimitive from '@radix-ui/react-collapsible';
9
9
  import * as DialogPrimitive from '@radix-ui/react-dialog';
10
10
  import { DialogProps } from '@radix-ui/react-dialog';
11
11
  import * as DropdownMenuPrimitive from '@radix-ui/react-dropdown-menu';
12
+ import { DatePrecision, TimeGranularity, PageResult } from '@petrarca/sonnet-core';
13
+ import * as SelectPrimitive from '@radix-ui/react-select';
12
14
  import * as LabelPrimitive from '@radix-ui/react-label';
13
15
  import * as PopoverPrimitive from '@radix-ui/react-popover';
14
16
  import * as ScrollAreaPrimitive from '@radix-ui/react-scroll-area';
@@ -17,7 +19,6 @@ import * as TabsPrimitive from '@radix-ui/react-tabs';
17
19
  import * as TooltipPrimitive from '@radix-ui/react-tooltip';
18
20
  import { RowData, PaginationState, OnChangeFn } from '@tanstack/react-table';
19
21
  export { PaginationState } from '@tanstack/react-table';
20
- import { PageResult } from '@petrarca/sonnet-core';
21
22
  import { UISchema, JsonSchemaProperty, JsonSchema } from '@petrarca/sonnet-core/schema';
22
23
  import { EntitySelectMode } from '@petrarca/sonnet-core/hooks';
23
24
  import { EntityOptionFetcher, EntityOption } from '@petrarca/sonnet-core/entityOptions';
@@ -228,6 +229,144 @@ declare const DropdownMenuShortcut: {
228
229
 
229
230
  declare const Input: React$1.ForwardRefExoticComponent<Omit<React$1.DetailedHTMLProps<React$1.InputHTMLAttributes<HTMLInputElement>, HTMLInputElement>, "ref"> & React$1.RefAttributes<HTMLInputElement>>;
230
231
 
232
+ /** Renders a field-level error message below an input. */
233
+ declare function InputError({ error, }: {
234
+ error: string | undefined;
235
+ }): React$1.ReactElement | null;
236
+
237
+ /**
238
+ * DateInput -- text input with a calendar popover for a single date.
239
+ *
240
+ * The value is a partial ISO 8601 date string -- `"YYYY"`, `"YYYY-MM"`, or
241
+ * `"YYYY-MM-DD"` depending on `precision`. Typed entry is parsed leniently
242
+ * (see {@link parseDate}); `"t"`, `"today"`, or `"."` enter the current date;
243
+ * calendar selection drills down to the terminal precision. Empty value emits "".
244
+ */
245
+
246
+ interface DateInputProps {
247
+ /** Partial ISO date string (`YYYY`, `YYYY-MM`, or `YYYY-MM-DD`), or "". */
248
+ value?: string;
249
+ /** Called with the new partial ISO date string, or "" when cleared. */
250
+ onChange: (value: string) => void;
251
+ /** Selection precision. Default `"day"`. */
252
+ precision?: DatePrecision;
253
+ /** BCP-47 locale override for display/parsing. Defaults to the app locale. */
254
+ locale?: string;
255
+ id?: string;
256
+ name?: string;
257
+ placeholder?: string;
258
+ required?: boolean;
259
+ disabled?: boolean;
260
+ error?: string;
261
+ className?: string;
262
+ onBlur?: () => void;
263
+ }
264
+ declare function DateInput({ value, onChange, precision, locale, id, name, placeholder, required, disabled, error, className, onBlur, }: DateInputProps): React$1.ReactElement;
265
+
266
+ /**
267
+ * Calendar -- month/year/decade grid for selecting a single day.
268
+ *
269
+ * A controlled, dependency-light calendar operating on native `Date`. Renders
270
+ * three drill-down views (days, months, years) with header navigation. Styling
271
+ * uses semantic design tokens only.
272
+ */
273
+
274
+ interface CalendarProps {
275
+ /** Currently selected day, or null. */
276
+ value: Date | null;
277
+ /** Called when the user picks a date at the terminal precision. */
278
+ onSelect: (date: Date) => void;
279
+ /** Month shown when no value is selected. Defaults to today. */
280
+ defaultViewDate?: Date;
281
+ /**
282
+ * Precision at which selection completes: `"year"` stops on the years view,
283
+ * `"month"` on the months view, `"day"` on the days view (default).
284
+ */
285
+ precision?: DatePrecision;
286
+ /** BCP-47 locale for month/weekday labels and week-start. */
287
+ locale?: string;
288
+ }
289
+ declare function Calendar({ value, onSelect, defaultViewDate, precision, locale, }: CalendarProps): React$1.ReactElement;
290
+
291
+ /**
292
+ * TimeInput -- text input for a zone-free time of day.
293
+ *
294
+ * The value is a normalized ISO time string -- `"HH:mm"` (minute granularity,
295
+ * default) or `"HH:mm:ss"` (second granularity). A time of day carries no date
296
+ * and no timezone (Temporal.PlainTime); consumers that need an instant combine
297
+ * it with a date and zone at persistence time. Typed entry is parsed leniently
298
+ * (see {@link parseTime}); `"n"`, `"now"`, or `"."` enter the current time.
299
+ * Empty value emits "".
300
+ */
301
+
302
+ interface TimeInputProps {
303
+ /** Normalized ISO time string (`"HH:mm"` or `"HH:mm:ss"`), or "". */
304
+ value?: string;
305
+ /** Called with the new normalized ISO time string, or "" when cleared. */
306
+ onChange: (value: string) => void;
307
+ /** Time granularity. Default `"minute"`. */
308
+ granularity?: TimeGranularity;
309
+ id?: string;
310
+ name?: string;
311
+ placeholder?: string;
312
+ required?: boolean;
313
+ disabled?: boolean;
314
+ error?: string;
315
+ className?: string;
316
+ onBlur?: () => void;
317
+ }
318
+ declare function TimeInput({ value, onChange, granularity, id, name, placeholder, required, disabled, error, className, onBlur, }: TimeInputProps): React$1.ReactElement;
319
+
320
+ /**
321
+ * DateTimeInput -- combined date + time entry for a plain wall-clock datetime.
322
+ *
323
+ * The value is a plain wall-clock ISO string `"YYYY-MM-DDTHH:mm[:ss]"` with no
324
+ * timezone (Temporal.PlainDateTime). Timezone is intentionally not part of the
325
+ * input: a wall-clock datetime means "this local time", and resolving it to an
326
+ * absolute instant (UTC) is the consumer's responsibility at persistence time.
327
+ *
328
+ * The optional `timeZone` prop is a pass-through context value (e.g. a clinic's
329
+ * zone supplied programmatically) shown as a hint -- it is never applied to the
330
+ * value and is never entered by the user. Cross-zone apps that need an explicit
331
+ * zone picker should compose one separately.
332
+ *
333
+ * Composes {@link DateInput} (day precision) and {@link TimeInput}.
334
+ */
335
+
336
+ interface DateTimeInputProps {
337
+ /** Plain wall-clock ISO datetime `"YYYY-MM-DDTHH:mm[:ss]"`, or "". */
338
+ value?: string;
339
+ /** Called with the new plain wall-clock ISO datetime, or "" when cleared. */
340
+ onChange: (value: string) => void;
341
+ /** Time granularity. Default `"minute"`. */
342
+ granularity?: TimeGranularity;
343
+ /**
344
+ * Optional timezone context (IANA id, e.g. `"Europe/Berlin"`). Shown as a
345
+ * hint only; never applied to the value and never user-entered.
346
+ */
347
+ timeZone?: string;
348
+ /** BCP-47 locale override for the date part. Defaults to the app locale. */
349
+ locale?: string;
350
+ idPrefix?: string;
351
+ required?: boolean;
352
+ disabled?: boolean;
353
+ error?: string;
354
+ className?: string;
355
+ onBlur?: () => void;
356
+ }
357
+ declare function DateTimeInput({ value, onChange, granularity, timeZone, locale, idPrefix, required, disabled, error, className, onBlur, }: DateTimeInputProps): React$1.ReactElement;
358
+
359
+ declare const Select: React$1.FC<SelectPrimitive.SelectProps>;
360
+ declare const SelectGroup: React$1.ForwardRefExoticComponent<SelectPrimitive.SelectGroupProps & React$1.RefAttributes<HTMLDivElement>>;
361
+ declare const SelectValue: React$1.ForwardRefExoticComponent<SelectPrimitive.SelectValueProps & React$1.RefAttributes<HTMLSpanElement>>;
362
+ declare const SelectTrigger: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectTriggerProps & React$1.RefAttributes<HTMLButtonElement>, "ref"> & React$1.RefAttributes<HTMLButtonElement>>;
363
+ declare const SelectScrollUpButton: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollUpButtonProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
364
+ declare const SelectScrollDownButton: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollDownButtonProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
365
+ declare const SelectContent: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectContentProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
366
+ declare const SelectLabel: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectLabelProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
367
+ declare const SelectItem: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectItemProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
368
+ declare const SelectSeparator: React$1.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectSeparatorProps & React$1.RefAttributes<HTMLDivElement>, "ref"> & React$1.RefAttributes<HTMLDivElement>>;
369
+
231
370
  declare function InputGroup({ className, ...props }: React$1.ComponentProps<"div">): react_jsx_runtime.JSX.Element;
232
371
  declare const inputGroupAddonVariants: (props?: ({
233
372
  align?: "inline-start" | "inline-end" | "block-start" | "block-end" | null | undefined;
@@ -568,8 +707,19 @@ type TableUiSchema = Record<string, UISchema & {
568
707
  label?: string;
569
708
  };
570
709
  }> & {
710
+ /**
711
+ * Table-level options. Reserved for sorting and a sticky header; **neither is
712
+ * implemented yet**, so setting these has no effect today. Kept declared
713
+ * because both are intended features -- see the design doc.
714
+ *
715
+ * Note this key is unrelated to the `x-ui-globalOptions` of a form UISchema,
716
+ * which carries `UISchemaOptions` and does work. The two share a name and
717
+ * nothing else.
718
+ */
571
719
  "x-ui-globalOptions"?: {
720
+ /** Planned. Sorting is not wired up in EntityTable yet; this has no effect. */
572
721
  sortable?: boolean;
722
+ /** Planned. No sticky positioning is applied yet; this has no effect. */
573
723
  stickyHeader?: boolean;
574
724
  };
575
725
  };
@@ -738,6 +888,16 @@ interface EntityTableProps<TRow extends RowData> {
738
888
  showChevron?: boolean;
739
889
  selectionMode?: boolean;
740
890
  onSelectionChange?: (selectedRows: TRow[]) => void;
891
+ /**
892
+ * Stable identity for a row, used to key the selection.
893
+ *
894
+ * Without it the selection is keyed by row position, so it means "the rows
895
+ * currently in these slots" and cannot survive paging or refiltering -- the
896
+ * table clears it whenever `data` changes to keep that safe. Supply this and
897
+ * the selection is keyed by identity instead: it survives a page change, and
898
+ * a bulk action can span pages.
899
+ */
900
+ getRowId?: (row: TRow) => string;
741
901
  pagination?: PaginationState;
742
902
  onPaginationChange?: OnChangeFn<PaginationState>;
743
903
  rowActions?: RowAction<TRow>[];
@@ -1086,6 +1246,9 @@ type SearchWidget = React.ComponentType<SearchWidgetProps>;
1086
1246
  /** Registry mapping widget names to their implementations. */
1087
1247
  type SearchWidgetRegistry = Record<string, SearchWidget>;
1088
1248
 
1249
+ /** Default search widget registry. Consumers extend this via the widgets prop. */
1250
+ declare const DEFAULT_SEARCH_WIDGETS: SearchWidgetRegistry;
1251
+
1089
1252
  /**
1090
1253
  * SearchInput -- controlled search and filter input with chip display.
1091
1254
  *
@@ -1190,4 +1353,4 @@ type Props = {
1190
1353
  */
1191
1354
  declare function ClipboardMenu({ onAddItem }: Props): react_jsx_runtime.JSX.Element;
1192
1355
 
1193
- export { Alert, AlertDescription, AlertTitle, Avatar, AvatarFallback, AvatarImage, Badge, type BadgeProps, Button, CELL_RENDERERS, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, type CellRenderer, type CellRendererProps, Checkbox, ClipboardButton, ClipboardItemComponent as ClipboardItem, ClipboardMenu, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EntitySelect, type EntitySelectProps, EntityTable, type EntityTableProps, EntityTree, type EntityTreeHandle, type EntityTreeProps, IconButton, type IconButtonProps, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, Label, Popover, PopoverContent, PopoverTrigger, PropertyList, type PropertyListLayout, type PropertyListProps, PropertyValue, type PropertyValueProps, ResizeHandle, type ResizeHandleProps, type ResolvedColumn, type RowAction, ScrollArea, ScrollBar, SearchInput, type SearchMode, Separator, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetTitle, SheetTrigger, SimpleGroup, SimpleStack, SimpleTooltip, Skeleton, Spinner, Stepper, StepperContent, StepperDescription, StepperIndicator, StepperItem, StepperList, StepperNext, StepperPrev, type StepperProps, StepperSeparator, StepperTitle, StepperTrigger, type TableUiSchema, Tabs, TabsContent, TabsList, TabsSeparator, TabsTrigger, Textarea, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, type TreeNode, TreeView, type TreeViewHandle, type TreeViewProps, badgeVariants, buttonVariants, createRenderer, useStore as useStepper };
1356
+ export { Alert, AlertDescription, AlertTitle, Avatar, AvatarFallback, AvatarImage, Badge, type BadgeProps, Button, CELL_RENDERERS, Calendar, type CalendarProps, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, type CellRenderer, type CellRendererProps, Checkbox, ClipboardButton, ClipboardItemComponent as ClipboardItem, ClipboardMenu, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, DEFAULT_SEARCH_WIDGETS, DateInput, type DateInputProps, DateTimeInput, type DateTimeInputProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EntitySelect, type EntitySelectProps, EntityTable, type EntityTableProps, EntityTree, type EntityTreeHandle, type EntityTreeProps, IconButton, type IconButtonProps, Input, InputError, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, Label, Popover, PopoverContent, PopoverTrigger, PropertyList, type PropertyListLayout, type PropertyListProps, PropertyValue, type PropertyValueProps, ResizeHandle, type ResizeHandleProps, type ResolvedColumn, type RowAction, ScrollArea, ScrollBar, SearchInput, type SearchInputProps, type SearchMode, type SearchWidget, type SearchWidgetProps, type SearchWidgetRegistry, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetTitle, SheetTrigger, SimpleGroup, SimpleStack, SimpleTooltip, Skeleton, Spinner, Stepper, StepperContent, StepperDescription, StepperIndicator, StepperItem, StepperList, StepperNext, StepperPrev, type StepperProps, StepperSeparator, StepperTitle, StepperTrigger, type TableUiSchema, Tabs, TabsContent, TabsList, TabsSeparator, TabsTrigger, Textarea, TimeInput, type TimeInputProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, type TreeNode, TreeView, type TreeViewHandle, type TreeViewProps, badgeVariants, buttonVariants, createRenderer, useStore as useStepper };