harebear-ui 0.6.0 → 0.8.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.
Files changed (50) hide show
  1. package/AGENTS.md +32 -12
  2. package/README.md +109 -36
  3. package/bin/harebear-ui.mjs +66 -3
  4. package/dist/components/admin/app-nav.d.ts +57 -0
  5. package/dist/components/admin/app-nav.js +172 -0
  6. package/dist/components/admin/focus-layout.d.ts +14 -0
  7. package/dist/components/admin/focus-layout.js +36 -0
  8. package/dist/components/admin/settings.d.ts +31 -0
  9. package/dist/components/admin/settings.js +78 -0
  10. package/dist/components/ai/action-receipt.d.ts +16 -0
  11. package/dist/components/ai/action-receipt.js +47 -0
  12. package/dist/components/ai/ask-box.d.ts +27 -0
  13. package/dist/components/ai/ask-box.js +85 -0
  14. package/dist/components/ai/assistant.d.ts +94 -0
  15. package/dist/components/ai/assistant.js +229 -0
  16. package/dist/components/ai/dictation.d.ts +57 -0
  17. package/dist/components/ai/dictation.js +148 -0
  18. package/dist/components/data/sectioned-list.d.ts +37 -0
  19. package/dist/components/data/sectioned-list.js +139 -0
  20. package/dist/components/data/task-row.d.ts +22 -0
  21. package/dist/components/data/task-row.js +60 -0
  22. package/dist/components/layout/collapse.d.ts +14 -0
  23. package/dist/components/layout/collapse.js +24 -0
  24. package/dist/components/layout/media-item.d.ts +13 -0
  25. package/dist/components/layout/media-item.js +54 -0
  26. package/dist/components/layout/metric.d.ts +15 -0
  27. package/dist/components/layout/metric.js +51 -0
  28. package/dist/components/layout/show-more.d.ts +17 -0
  29. package/dist/components/layout/show-more.js +30 -0
  30. package/dist/components/layout/stack.d.ts +39 -0
  31. package/dist/components/layout/stack.js +114 -0
  32. package/dist/components/layout/text.d.ts +37 -0
  33. package/dist/components/layout/text.js +52 -0
  34. package/dist/components/theme/theme-toggle.d.ts +4 -1
  35. package/dist/components/theme/theme-toggle.js +11 -6
  36. package/dist/components/ui/check-circle.d.ts +16 -0
  37. package/dist/components/ui/check-circle.js +39 -0
  38. package/dist/components/ui/sonner.d.ts +15 -2
  39. package/dist/components/ui/sonner.js +20 -3
  40. package/dist/index.d.ts +18 -2
  41. package/dist/index.js +18 -2
  42. package/dist/styles.css +75 -0
  43. package/docs/COMPONENTS.md +160 -21
  44. package/docs/ROADMAP.md +95 -0
  45. package/docs/guides/agents.md +75 -0
  46. package/docs/guides/getting-started.md +217 -0
  47. package/docs/guides/theming.md +99 -0
  48. package/llms.txt +11 -3
  49. package/package.json +2 -1
  50. package/skills/harebear-ui/SKILL.md +2 -1
@@ -0,0 +1,114 @@
1
+ "use client";
2
+ import { cn } from "../../lib/utils.js";
3
+ import { jsx } from "react/jsx-runtime";
4
+ // src/components/layout/stack.tsx
5
+ const gapClass = {
6
+ none: "gap-0",
7
+ xs: "gap-1",
8
+ sm: "gap-2",
9
+ md: "gap-3",
10
+ lg: "gap-4",
11
+ xl: "gap-6"
12
+ };
13
+ const alignClass = {
14
+ start: "items-start",
15
+ center: "items-center",
16
+ end: "items-end",
17
+ stretch: "items-stretch",
18
+ baseline: "items-baseline"
19
+ };
20
+ const justifyClass = {
21
+ start: "justify-start",
22
+ center: "justify-center",
23
+ end: "justify-end",
24
+ between: "justify-between"
25
+ };
26
+ /** Vertical stack with a named gap. */
27
+ function Stack({ gap = "md", align = "stretch", className, ...props }) {
28
+ return /* @__PURE__ */ jsx("div", {
29
+ "data-slot": "stack",
30
+ className: cn("flex min-w-0 flex-col", gapClass[gap], alignClass[align], className),
31
+ ...props
32
+ });
33
+ }
34
+ /** Horizontal row with a named gap. */
35
+ function Row({ gap = "sm", align = "center", justify = "start", wrap, className, ...props }) {
36
+ return /* @__PURE__ */ jsx("div", {
37
+ "data-slot": "row",
38
+ className: cn("flex min-w-0", gapClass[gap], alignClass[align], justifyClass[justify], wrap && "flex-wrap", className),
39
+ ...props
40
+ });
41
+ }
42
+ const cols = {
43
+ base: {
44
+ 1: "grid-cols-1",
45
+ 2: "grid-cols-2",
46
+ 3: "grid-cols-3",
47
+ 4: "grid-cols-4",
48
+ 5: "grid-cols-5",
49
+ 6: "grid-cols-6"
50
+ },
51
+ viewport: {
52
+ sm: {
53
+ 1: "sm:grid-cols-1",
54
+ 2: "sm:grid-cols-2",
55
+ 3: "sm:grid-cols-3",
56
+ 4: "sm:grid-cols-4",
57
+ 5: "sm:grid-cols-5",
58
+ 6: "sm:grid-cols-6"
59
+ },
60
+ md: {
61
+ 1: "md:grid-cols-1",
62
+ 2: "md:grid-cols-2",
63
+ 3: "md:grid-cols-3",
64
+ 4: "md:grid-cols-4",
65
+ 5: "md:grid-cols-5",
66
+ 6: "md:grid-cols-6"
67
+ },
68
+ lg: {
69
+ 1: "lg:grid-cols-1",
70
+ 2: "lg:grid-cols-2",
71
+ 3: "lg:grid-cols-3",
72
+ 4: "lg:grid-cols-4",
73
+ 5: "lg:grid-cols-5",
74
+ 6: "lg:grid-cols-6"
75
+ }
76
+ },
77
+ container: {
78
+ sm: {
79
+ 1: "@md:grid-cols-1",
80
+ 2: "@md:grid-cols-2",
81
+ 3: "@md:grid-cols-3",
82
+ 4: "@md:grid-cols-4",
83
+ 5: "@md:grid-cols-5",
84
+ 6: "@md:grid-cols-6"
85
+ },
86
+ md: {
87
+ 1: "@2xl:grid-cols-1",
88
+ 2: "@2xl:grid-cols-2",
89
+ 3: "@2xl:grid-cols-3",
90
+ 4: "@2xl:grid-cols-4",
91
+ 5: "@2xl:grid-cols-5",
92
+ 6: "@2xl:grid-cols-6"
93
+ },
94
+ lg: {
95
+ 1: "@4xl:grid-cols-1",
96
+ 2: "@4xl:grid-cols-2",
97
+ 3: "@4xl:grid-cols-3",
98
+ 4: "@4xl:grid-cols-4",
99
+ 5: "@4xl:grid-cols-5",
100
+ 6: "@4xl:grid-cols-6"
101
+ }
102
+ }
103
+ };
104
+ /** Grid of equal columns with named gaps and per-breakpoint column counts. */
105
+ function Grid({ cols: c = 2, gap = "md", query = "viewport", className, ...props }) {
106
+ const r = typeof c === "number" ? { base: c } : c;
107
+ const q = cols[query];
108
+ return /* @__PURE__ */ jsx("div", {
109
+ "data-slot": "grid",
110
+ className: cn("grid min-w-0", gapClass[gap], cols.base[r.base ?? 1], r.sm && q.sm[r.sm], r.md && q.md[r.md], r.lg && q.lg[r.lg], className),
111
+ ...props
112
+ });
113
+ }
114
+ export { Grid, Row, Stack };
@@ -0,0 +1,37 @@
1
+ import * as React from "react";
2
+ export type TextTone = "default" | "muted" | "success" | "warning" | "danger" | "info";
3
+ declare const sizeClass: {
4
+ readonly xs: "text-xs";
5
+ readonly sm: "text-[13px]";
6
+ readonly base: "text-sm";
7
+ readonly lg: "text-base";
8
+ readonly xl: "text-xl";
9
+ readonly "2xl": "text-2xl";
10
+ };
11
+ declare const weightClass: {
12
+ readonly normal: "font-normal";
13
+ readonly medium: "font-medium";
14
+ readonly semibold: "font-semibold";
15
+ };
16
+ export interface TextProps extends Omit<React.ComponentProps<"span">, "ref"> {
17
+ size?: keyof typeof sizeClass;
18
+ tone?: TextTone;
19
+ weight?: keyof typeof weightClass;
20
+ mono?: boolean;
21
+ /** One line with an ellipsis. */
22
+ truncate?: boolean;
23
+ /** Clamp to this many lines. */
24
+ lines?: 1 | 2 | 3;
25
+ /** Fixed-width digits for numbers that update. */
26
+ tabular?: boolean;
27
+ as?: "span" | "p" | "div";
28
+ }
29
+ /** Text with props instead of classes: size, tone, weight, mono, truncate, lines. */
30
+ declare function Text({ size, tone, weight, mono, truncate, lines, tabular, as: As, className, ...props }: TextProps): React.JSX.Element;
31
+ export interface HeadingProps extends React.ComponentProps<"h3"> {
32
+ /** 3: a section title in a card. 4: a small uppercase label over a group. */
33
+ level?: 3 | 4;
34
+ }
35
+ /** Section heading inside a card or panel. */
36
+ declare function Heading({ level, className, ...props }: HeadingProps): React.JSX.Element;
37
+ export { Heading, Text };
@@ -0,0 +1,52 @@
1
+ "use client";
2
+ import { cn } from "../../lib/utils.js";
3
+ import { jsx } from "react/jsx-runtime";
4
+ // src/components/layout/text.tsx
5
+ const toneClass = {
6
+ default: "text-foreground",
7
+ muted: "text-muted-foreground",
8
+ success: "text-success",
9
+ warning: "text-warning",
10
+ danger: "text-destructive",
11
+ info: "text-primary"
12
+ };
13
+ const sizeClass = {
14
+ xs: "text-xs",
15
+ sm: "text-[13px]",
16
+ base: "text-sm",
17
+ lg: "text-base",
18
+ xl: "text-xl",
19
+ "2xl": "text-2xl"
20
+ };
21
+ const weightClass = {
22
+ normal: "font-normal",
23
+ medium: "font-medium",
24
+ semibold: "font-semibold"
25
+ };
26
+ const linesClass = {
27
+ 1: "line-clamp-1",
28
+ 2: "line-clamp-2",
29
+ 3: "line-clamp-3"
30
+ };
31
+ /** Text with props instead of classes: size, tone, weight, mono, truncate, lines. */
32
+ function Text({ size = "base", tone = "default", weight = "normal", mono, truncate, lines, tabular, as: As = "span", className, ...props }) {
33
+ return /* @__PURE__ */ jsx(As, {
34
+ "data-slot": "text",
35
+ className: cn("min-w-0", sizeClass[size], toneClass[tone], weightClass[weight], mono && "font-mono", truncate && "block truncate", lines && linesClass[lines], tabular && "tabular-nums", className),
36
+ ...props
37
+ });
38
+ }
39
+ /** Section heading inside a card or panel. */
40
+ function Heading({ level = 3, className, ...props }) {
41
+ if (level === 4) return /* @__PURE__ */ jsx("h4", {
42
+ "data-slot": "heading",
43
+ className: cn("text-xs font-medium tracking-wide text-muted-foreground uppercase", className),
44
+ ...props
45
+ });
46
+ return /* @__PURE__ */ jsx("h3", {
47
+ "data-slot": "heading",
48
+ className: cn("text-sm font-semibold", className),
49
+ ...props
50
+ });
51
+ }
52
+ export { Heading, Text };
@@ -1,5 +1,8 @@
1
1
  import { Button } from "../ui/button.js";
2
2
  import * as React from "react";
3
- /** Icon button that flips between light and dark mode. */
3
+ /**
4
+ * Icon button that flips between light and dark mode. Safe to server render: the icon follows the
5
+ * `.dark` class through CSS, and the label names the target mode only after hydration.
6
+ */
4
7
  declare function ThemeToggle(props: Omit<React.ComponentProps<typeof Button>, "onClick">): React.JSX.Element;
5
8
  export { ThemeToggle };
@@ -1,21 +1,26 @@
1
1
  "use client";
2
2
  import { Button } from "../ui/button.js";
3
3
  import { useTheme } from "./theme-provider.js";
4
- import { jsx } from "react/jsx-runtime";
4
+ import * as React from "react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
5
6
  import { MoonIcon, SunIcon } from "lucide-react";
6
7
  // src/components/theme/theme-toggle.tsx
7
- /** Icon button that flips between light and dark mode. */
8
+ /**
9
+ * Icon button that flips between light and dark mode. Safe to server render: the icon follows the
10
+ * `.dark` class through CSS, and the label names the target mode only after hydration.
11
+ */
8
12
  function ThemeToggle(props) {
9
13
  const { resolvedMode, toggleMode } = useTheme();
10
- const dark = resolvedMode === "dark";
11
- return /* @__PURE__ */ jsx(Button, {
14
+ const [mounted, setMounted] = React.useState(false);
15
+ React.useEffect(() => setMounted(true), []);
16
+ return /* @__PURE__ */ jsxs(Button, {
12
17
  type: "button",
13
18
  variant: "ghost",
14
19
  size: "icon",
15
- "aria-label": dark ? "Switch to light mode" : "Switch to dark mode",
20
+ "aria-label": !mounted ? "Toggle dark mode" : resolvedMode === "dark" ? "Switch to light mode" : "Switch to dark mode",
16
21
  onClick: toggleMode,
17
22
  ...props,
18
- children: dark ? /* @__PURE__ */ jsx(SunIcon, {}) : /* @__PURE__ */ jsx(MoonIcon, {})
23
+ children: [/* @__PURE__ */ jsx(SunIcon, { className: "hidden dark:block" }), /* @__PURE__ */ jsx(MoonIcon, { className: "dark:hidden" })]
19
24
  });
20
25
  }
21
26
  export { ThemeToggle };
@@ -0,0 +1,16 @@
1
+ import * as React from "react";
2
+ import { Checkbox } from "radix-ui";
3
+ export interface CheckCircleProps extends React.ComponentProps<typeof Checkbox.Root> {
4
+ /**
5
+ * "important" tints the unticked ring with the warning color. Color alone is not enough: pair it with a word
6
+ * (for example "Important" in the row's meta line).
7
+ */
8
+ tone?: "default" | "important";
9
+ }
10
+ /**
11
+ * harebear: 24px round checkbox for to-do rows, with a 44px touch target and a short pop when ticked (none under
12
+ * reduced motion). Radix Checkbox underneath: `checked`, `onCheckedChange`, `disabled`. Give it an accessible name
13
+ * (`aria-label` or `aria-labelledby` pointing at the row title). Align it with the first line of text, not the center.
14
+ */
15
+ declare function CheckCircle({ tone, className, onCheckedChange, onAnimationEnd, ...props }: CheckCircleProps): React.JSX.Element;
16
+ export { CheckCircle };
@@ -0,0 +1,39 @@
1
+ "use client";
2
+ import { cn } from "../../lib/utils.js";
3
+ import * as React from "react";
4
+ import { jsx } from "react/jsx-runtime";
5
+ import { CheckIcon } from "lucide-react";
6
+ import { Checkbox } from "radix-ui";
7
+ // src/components/ui/check-circle.tsx
8
+ /**
9
+ * harebear: 24px round checkbox for to-do rows, with a 44px touch target and a short pop when ticked (none under
10
+ * reduced motion). Radix Checkbox underneath: `checked`, `onCheckedChange`, `disabled`. Give it an accessible name
11
+ * (`aria-label` or `aria-labelledby` pointing at the row title). Align it with the first line of text, not the center.
12
+ */
13
+ function CheckCircle({ tone = "default", className, onCheckedChange, onAnimationEnd, ...props }) {
14
+ const [pop, setPop] = React.useState(false);
15
+ return /* @__PURE__ */ jsx(Checkbox.Root, {
16
+ "data-slot": "check-circle",
17
+ "data-tone": tone,
18
+ "data-pop": pop || void 0,
19
+ onCheckedChange: (checked) => {
20
+ if (checked === true) setPop(true);
21
+ onCheckedChange?.(checked);
22
+ },
23
+ onAnimationEnd: (e) => {
24
+ setPop(false);
25
+ onAnimationEnd?.(e);
26
+ },
27
+ className: cn("peer relative grid size-6 shrink-0 place-items-center rounded-full border-2 border-muted-foreground/45 bg-card text-primary-foreground transition-[background-color,border-color,box-shadow] outline-none after:absolute after:-inset-2.5 hover:border-primary focus-visible:border-primary focus-visible:ring-4 focus-visible:ring-primary/20 disabled:cursor-not-allowed disabled:opacity-50 data-[tone=important]:border-warning data-[tone=important]:bg-warning/10 data-checked:border-primary data-checked:bg-primary data-[pop]:animate-check-pop", className),
28
+ ...props,
29
+ children: /* @__PURE__ */ jsx(Checkbox.Indicator, {
30
+ "data-slot": "check-circle-indicator",
31
+ className: "grid place-content-center",
32
+ children: /* @__PURE__ */ jsx(CheckIcon, {
33
+ className: "size-3.5",
34
+ strokeWidth: 3
35
+ })
36
+ })
37
+ });
38
+ }
39
+ export { CheckCircle };
@@ -1,3 +1,16 @@
1
- import { ToasterProps } from "sonner";
1
+ import { ExternalToast, ToasterProps } from "sonner";
2
2
  declare const Toaster: ({ ...props }: ToasterProps) => import("react").JSX.Element;
3
- export { Toaster };
3
+ export interface ToastUndoOptions extends Omit<ExternalToast, "action"> {
4
+ /** Called when Undo is pressed. The toast closes. */
5
+ onUndo: () => void;
6
+ /** Default "Undo". */
7
+ undoLabel?: React.ReactNode;
8
+ /** Milliseconds before it closes. Default 9000. Sonner pauses the timer on hover and while the page is hidden. */
9
+ duration?: number;
10
+ }
11
+ /**
12
+ * harebear: a toast with an Undo action for something that already happened ("Moved 3 to-dos to Done").
13
+ * Uses the mounted <Toaster />. Returns the toast id (pass it to `toast.dismiss` from sonner).
14
+ */
15
+ declare function toastUndo(message: React.ReactNode, { onUndo, undoLabel, duration, ...options }: ToastUndoOptions): string | number;
16
+ export { Toaster, toastUndo };
@@ -2,7 +2,7 @@
2
2
  import { useTheme } from "../theme/theme-provider.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  import { CircleCheckIcon, InfoIcon, Loader2Icon, OctagonXIcon, TriangleAlertIcon } from "lucide-react";
5
- import { Toaster as Toaster$1 } from "sonner";
5
+ import { Toaster as Toaster$1, toast } from "sonner";
6
6
  // src/components/ui/sonner.tsx
7
7
  const Toaster = ({ ...props }) => {
8
8
  const { resolvedMode } = useTheme();
@@ -22,8 +22,25 @@ const Toaster = ({ ...props }) => {
22
22
  "--normal-border": "var(--border)",
23
23
  "--border-radius": "var(--radius)"
24
24
  },
25
- toastOptions: { classNames: { toast: "cn-toast" } },
25
+ toastOptions: { classNames: {
26
+ toast: "cn-toast",
27
+ actionButton: "bg-primary-soft! text-primary! font-medium! h-8! px-3! rounded-md!"
28
+ } },
26
29
  ...props
27
30
  });
28
31
  };
29
- export { Toaster };
32
+ /**
33
+ * harebear: a toast with an Undo action for something that already happened ("Moved 3 to-dos to Done").
34
+ * Uses the mounted <Toaster />. Returns the toast id (pass it to `toast.dismiss` from sonner).
35
+ */
36
+ function toastUndo(message, { onUndo, undoLabel = "Undo", duration = 9e3, ...options }) {
37
+ return toast(message, {
38
+ duration,
39
+ ...options,
40
+ action: {
41
+ label: undoLabel,
42
+ onClick: () => onUndo()
43
+ }
44
+ });
45
+ }
46
+ export { Toaster, toastUndo };
package/dist/index.d.ts CHANGED
@@ -15,6 +15,7 @@ import { Calendar, CalendarDayButton } from "./components/ui/calendar.js";
15
15
  import { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "./components/ui/card.js";
16
16
  import { Carousel, CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, useCarousel } from "./components/ui/carousel.js";
17
17
  import { ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent } from "./components/ui/chart.js";
18
+ import { CheckCircle, CheckCircleProps } from "./components/ui/check-circle.js";
18
19
  import { Checkbox } from "./components/ui/checkbox.js";
19
20
  import { CodeBlock, CodeBlockActions, CodeBlockContent, CodeBlockCopyButton, CodeBlockFooter, CodeBlockHeader, CodeBlockLine, CodeBlockTitle } from "./components/ui/code-block.js";
20
21
  import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "./components/ui/collapsible.js";
@@ -53,7 +54,7 @@ import { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHe
53
54
  import { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, useSidebar, useSidebarOptional } from "./components/ui/sidebar.js";
54
55
  import { Skeleton } from "./components/ui/skeleton.js";
55
56
  import { Slider } from "./components/ui/slider.js";
56
- import { Toaster } from "./components/ui/sonner.js";
57
+ import { ToastUndoOptions, Toaster, toastUndo } from "./components/ui/sonner.js";
57
58
  import { Spinner } from "./components/ui/spinner.js";
58
59
  import { Switch } from "./components/ui/switch.js";
59
60
  import { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from "./components/ui/table.js";
@@ -64,14 +65,17 @@ import { Toggle, toggleVariants } from "./components/ui/toggle.js";
64
65
  import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./components/ui/tooltip.js";
65
66
  import { Trace, TraceCollapsible, TraceCollapsibleContent, TraceCollapsibleTrigger, TraceDescription, TraceIcon, TraceLine, TraceTitle } from "./components/ui/trace.js";
66
67
  import { ActivityFeed, ActivityItem } from "./components/admin/activity-feed.js";
68
+ import { AppNav, AppNavAction, AppNavGroup, AppNavPlace, AppNavProps } from "./components/admin/app-nav.js";
67
69
  import { AppBrand, AppBrandProps, AppNavItem, AppNavSection, AppShell, AppShellProps } from "./components/admin/app-shell.js";
68
70
  import { Callout } from "./components/admin/callout.js";
69
71
  import { ConfirmDialog, ConfirmDialogProps } from "./components/admin/confirm-dialog.js";
70
72
  import { CopyField, CopyFieldProps } from "./components/admin/copy-field.js";
73
+ import { FocusLayout, FocusLayoutProps } from "./components/admin/focus-layout.js";
71
74
  import { KeyValueGrid, KeyValueItem } from "./components/admin/key-value-grid.js";
72
75
  import { LinkTile, LinkTileProps } from "./components/admin/link-tile.js";
73
76
  import { PageHeader, PageHeaderProps } from "./components/admin/page-header.js";
74
77
  import { SearchInput, SearchInputProps } from "./components/admin/search-input.js";
78
+ import { SettingsRow, SettingsRowProps, SettingsSection, SettingsSectionProps } from "./components/admin/settings.js";
75
79
  import { SidebarCollapseButton, SidebarLayout, SidebarLayoutProps } from "./components/admin/sidebar-layout.js";
76
80
  import { StatCard, StatCardProps } from "./components/admin/stat-card.js";
77
81
  import { StatusBadge, StatusBadgeProps, StatusDot, StatusDotProps, StatusTone } from "./components/admin/status.js";
@@ -79,16 +83,28 @@ import { Timeline, TimelineItem } from "./components/admin/timeline.js";
79
83
  import { UsageMeter, UsageMeterProps } from "./components/admin/usage-meter.js";
80
84
  import { UserChip, UserChipProps, initials } from "./components/admin/user-chip.js";
81
85
  import { UserMenu, UserMenuProps } from "./components/admin/user-menu.js";
86
+ import { Collapse, CollapseProps } from "./components/layout/collapse.js";
87
+ import { MediaItem, MediaItemProps } from "./components/layout/media-item.js";
88
+ import { Metric, MetricGroup, MetricProps } from "./components/layout/metric.js";
89
+ import { ShowMore, ShowMoreProps } from "./components/layout/show-more.js";
90
+ import { Grid, GridCols, GridProps, ResponsiveGridCols, Row, RowProps, Stack, StackAlign, StackJustify, StackProps, StackSpace } from "./components/layout/stack.js";
91
+ import { Heading, HeadingProps, Text, TextProps, TextTone } from "./components/layout/text.js";
82
92
  import { BarList, BarListItem } from "./components/data/bar-list.js";
83
93
  import { DataTable, DataTableColumnDef, DataTableFeatures, DataTableProps, createDataTableColumnHelper, dataTableFeatures } from "./components/data/data-table.js";
94
+ import { SectionedList, SectionedListItem, SectionedListProps, SectionedListSection } from "./components/data/sectioned-list.js";
84
95
  import { Sparkline, SparklineProps, smoothPath } from "./components/data/sparkline.js";
85
96
  import { StatusBarDatum, StatusBars, StatusBarsProps } from "./components/data/status-bars.js";
97
+ import { TaskRow, TaskRowAssignee, TaskRowProps } from "./components/data/task-row.js";
86
98
  import { TrendChart, TrendChartProps, TrendLegend, TrendSeries } from "./components/data/trend-chart.js";
99
+ import { ActionReceipt, ActionReceiptProps } from "./components/ai/action-receipt.js";
87
100
  import { ApprovalCard, ApprovalCardProps, ApprovalResult, ApprovalResultProps } from "./components/ai/approval.js";
101
+ import { AskBox, AskBoxProps } from "./components/ai/ask-box.js";
102
+ import { AssistantContextValue, AssistantDock, AssistantDockProps, AssistantMessage, AssistantPage, AssistantProvider, AssistantProviderProps, AssistantSendContext, useAssistant, useAssistantPage } from "./components/ai/assistant.js";
88
103
  import { ChatPanel, ChatPanelProps, ChatShell, ChatShellProps } from "./components/ai/chat-shell.js";
89
104
  import { AssistantAvatar, ChatMessage, ChatMessageProps, ChatThread, ChatThreadProps, MessageActions, MessageActionsProps, ToolCall, ToolCallProps, TypingIndicator, TypingIndicatorProps } from "./components/ai/chat.js";
90
105
  import { CodeSnippet, CodeSnippetProps, InlineCode, InlineCodeProps, Prose } from "./components/ai/code-block.js";
91
106
  import { Conversation, ConversationGroup, ConversationList, ConversationListProps, NewConversationButton, NewConversationButtonProps, formatWhen, groupByDate } from "./components/ai/conversation-list.js";
107
+ import { DictationButton, DictationButtonProps, SpeechSource, SpeechSourceHandlers, UseDictationOptions, browserSpeechSource, useDictation } from "./components/ai/dictation.js";
92
108
  import { ModelOption, ModelPicker, ModelPickerProps } from "./components/ai/model-picker.js";
93
109
  import { PromptInput, PromptInputChip, PromptInputChipProps, PromptInputProps, PromptInputSelect, PromptInputSelectOption, PromptInputSelectProps } from "./components/ai/prompt-input.js";
94
110
  import { ToolGroup, ToolGroupProps, ToolStatus, ToolStatusIcon, ToolStep, ToolStepProps } from "./components/ai/tool-steps.js";
@@ -99,4 +115,4 @@ import { useMediaQuery } from "./hooks/use-media-query.js";
99
115
  import { useIsMobile } from "./hooks/use-mobile.js";
100
116
  import { highlightCode, loadHighlighter } from "./lib/highlighter.js";
101
117
  import { cn } from "./lib/utils.js";
102
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActivityFeed, type ActivityItem, Alert, AlertAction, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AppBrand, type AppBrandProps, type AppNavItem, type AppNavSection, AppShell, type AppShellProps, AppleIcon, ApprovalCard, type ApprovalCardProps, ApprovalResult, type ApprovalResultProps, AspectRatio, AssistantAvatar, Attachment, AttachmentAction, AttachmentActions, AttachmentContent, AttachmentDescription, AttachmentGroup, AttachmentMedia, AttachmentTitle, AttachmentTrigger, AuthLayout, type AuthLayoutProps, type AuthProvider, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, BarList, type BarListItem, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Bubble, BubbleContent, BubbleGroup, BubbleReactions, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarDayButton, Callout, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, ChatMessage, type ChatMessageProps, ChatPanel, type ChatPanelProps, ChatShell, type ChatShellProps, ChatThread, type ChatThreadProps, Checkbox, CodeBlock, CodeBlockActions, CodeBlockContent, CodeBlockCopyButton, CodeBlockFooter, CodeBlockHeader, CodeBlockLine, CodeBlockTitle, CodeSnippet, type CodeSnippetProps, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxSeparator, ComboboxTrigger, ComboboxValue, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ConfirmDialog, type ConfirmDialogProps, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, type Conversation, type ConversationGroup, ConversationList, type ConversationListProps, CopyField, type CopyFieldProps, DataTable, type DataTableColumnDef, type DataTableFeatures, type DataTableProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DirectionProvider, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, GitHubIcon, GoogleIcon, HoverCard, HoverCardContent, HoverCardTrigger, InlineCode, type InlineCodeProps, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, KeyValueGrid, type KeyValueItem, Label, LinkTile, type LinkTileProps, LoginForm, type LoginFormProps, type LoginValues, Marker, MarkerContent, MarkerIcon, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, Message, MessageActions, type MessageActionsProps, MessageAvatar, MessageContent, MessageFooter, MessageGroup, MessageHeader, MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport, type ModelOption, ModelPicker, type ModelPickerProps, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, NewConversationButton, type NewConversationButtonProps, PageHeader, type PageHeaderProps, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverAnchor, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Progress, PromptInput, PromptInputChip, type PromptInputChipProps, type PromptInputProps, PromptInputSelect, type PromptInputSelectOption, type PromptInputSelectProps, Prose, Questionnaire, QuestionnaireActions, QuestionnaireChoice, QuestionnaireChoiceDescription, QuestionnaireChoices, QuestionnaireDescription, QuestionnaireError, QuestionnaireInput, QuestionnaireItem, QuestionnaireNext, QuestionnairePrevious, QuestionnaireProgress, QuestionnaireSkip, QuestionnaireSubmit, QuestionnaireTitle, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, type ResolvedThemeMode, ScrollArea, ScrollBar, SearchInput, type SearchInputProps, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarCollapseButton, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarLayout, type SidebarLayoutProps, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, SignupForm, type SignupFormProps, type SignupValues, Skeleton, Slider, Sparkline, type SparklineProps, Spinner, StatCard, type StatCardProps, StatusBadge, type StatusBadgeProps, type StatusBarDatum, StatusBars, type StatusBarsProps, StatusDot, type StatusDotProps, type StatusTone, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, type ThemeContextValue, type ThemeMode, ThemeProvider, type ThemeProviderProps, ThemeScript, ThemeToggle, Timeline, type TimelineItem, Toaster, Toggle, ToggleGroup, ToggleGroupItem, ToolCall, type ToolCallProps, ToolGroup, type ToolGroupProps, type ToolStatus, ToolStatusIcon, ToolStep, type ToolStepProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, Trace, TraceCollapsible, TraceCollapsibleContent, TraceCollapsibleTrigger, TraceDescription, TraceIcon, TraceLine, TraceTitle, TrendChart, type TrendChartProps, TrendLegend, type TrendSeries, TypingIndicator, type TypingIndicatorProps, UsageMeter, type UsageMeterProps, UserChip, type UserChipProps, UserMenu, type UserMenuProps, badgeVariants, buttonGroupVariants, buttonVariants, cn, createDataTableColumnHelper, dataTableFeatures, formatWhen, groupByDate, highlightCode, initials, loadHighlighter, markerVariants, navigationMenuTriggerStyle, smoothPath, tabsListVariants, toggleVariants, useCarousel, useComboboxAnchor, useCopyToClipboard, useDirection, useHighlightedCode, useIsMobile, useMediaQuery, useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility, useSidebar, useSidebarOptional, useTheme };
118
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActionReceipt, type ActionReceiptProps, ActivityFeed, type ActivityItem, Alert, AlertAction, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AppBrand, type AppBrandProps, AppNav, type AppNavAction, type AppNavGroup, type AppNavItem, type AppNavPlace, type AppNavProps, type AppNavSection, AppShell, type AppShellProps, AppleIcon, ApprovalCard, type ApprovalCardProps, ApprovalResult, type ApprovalResultProps, AskBox, type AskBoxProps, AspectRatio, AssistantAvatar, type AssistantContextValue, AssistantDock, type AssistantDockProps, type AssistantMessage, type AssistantPage, AssistantProvider, type AssistantProviderProps, type AssistantSendContext, Attachment, AttachmentAction, AttachmentActions, AttachmentContent, AttachmentDescription, AttachmentGroup, AttachmentMedia, AttachmentTitle, AttachmentTrigger, AuthLayout, type AuthLayoutProps, type AuthProvider, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, BarList, type BarListItem, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Bubble, BubbleContent, BubbleGroup, BubbleReactions, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarDayButton, Callout, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, type CarouselApi, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, type ChartConfig, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, ChatMessage, type ChatMessageProps, ChatPanel, type ChatPanelProps, ChatShell, type ChatShellProps, ChatThread, type ChatThreadProps, CheckCircle, type CheckCircleProps, Checkbox, CodeBlock, CodeBlockActions, CodeBlockContent, CodeBlockCopyButton, CodeBlockFooter, CodeBlockHeader, CodeBlockLine, CodeBlockTitle, CodeSnippet, type CodeSnippetProps, Collapse, type CollapseProps, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxSeparator, ComboboxTrigger, ComboboxValue, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ConfirmDialog, type ConfirmDialogProps, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, type Conversation, type ConversationGroup, ConversationList, type ConversationListProps, CopyField, type CopyFieldProps, DataTable, type DataTableColumnDef, type DataTableFeatures, type DataTableProps, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DictationButton, type DictationButtonProps, DirectionProvider, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, FocusLayout, type FocusLayoutProps, GitHubIcon, GoogleIcon, Grid, type GridCols, type GridProps, Heading, type HeadingProps, HoverCard, HoverCardContent, HoverCardTrigger, InlineCode, type InlineCodeProps, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, KeyValueGrid, type KeyValueItem, Label, LinkTile, type LinkTileProps, LoginForm, type LoginFormProps, type LoginValues, Marker, MarkerContent, MarkerIcon, MediaItem, type MediaItemProps, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, Message, MessageActions, type MessageActionsProps, MessageAvatar, MessageContent, MessageFooter, MessageGroup, MessageHeader, MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport, Metric, MetricGroup, type MetricProps, type ModelOption, ModelPicker, type ModelPickerProps, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, NewConversationButton, type NewConversationButtonProps, PageHeader, type PageHeaderProps, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverAnchor, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Progress, PromptInput, PromptInputChip, type PromptInputChipProps, type PromptInputProps, PromptInputSelect, type PromptInputSelectOption, type PromptInputSelectProps, Prose, Questionnaire, QuestionnaireActions, QuestionnaireChoice, QuestionnaireChoiceDescription, QuestionnaireChoices, QuestionnaireDescription, QuestionnaireError, QuestionnaireInput, QuestionnaireItem, QuestionnaireNext, QuestionnairePrevious, QuestionnaireProgress, QuestionnaireSkip, QuestionnaireSubmit, QuestionnaireTitle, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, type ResolvedThemeMode, type ResponsiveGridCols, Row, type RowProps, ScrollArea, ScrollBar, SearchInput, type SearchInputProps, SectionedList, type SectionedListItem, type SectionedListProps, type SectionedListSection, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, SettingsRow, type SettingsRowProps, SettingsSection, type SettingsSectionProps, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, ShowMore, type ShowMoreProps, Sidebar, SidebarCollapseButton, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarLayout, type SidebarLayoutProps, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, SignupForm, type SignupFormProps, type SignupValues, Skeleton, Slider, Sparkline, type SparklineProps, type SpeechSource, type SpeechSourceHandlers, Spinner, Stack, type StackAlign, type StackJustify, type StackProps, type StackSpace, StatCard, type StatCardProps, StatusBadge, type StatusBadgeProps, type StatusBarDatum, StatusBars, type StatusBarsProps, StatusDot, type StatusDotProps, type StatusTone, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TaskRow, type TaskRowAssignee, type TaskRowProps, Text, type TextProps, type TextTone, Textarea, type ThemeContextValue, type ThemeMode, ThemeProvider, type ThemeProviderProps, ThemeScript, ThemeToggle, Timeline, type TimelineItem, type ToastUndoOptions, Toaster, Toggle, ToggleGroup, ToggleGroupItem, ToolCall, type ToolCallProps, ToolGroup, type ToolGroupProps, type ToolStatus, ToolStatusIcon, ToolStep, type ToolStepProps, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, Trace, TraceCollapsible, TraceCollapsibleContent, TraceCollapsibleTrigger, TraceDescription, TraceIcon, TraceLine, TraceTitle, TrendChart, type TrendChartProps, TrendLegend, type TrendSeries, TypingIndicator, type TypingIndicatorProps, UsageMeter, type UsageMeterProps, type UseDictationOptions, UserChip, type UserChipProps, UserMenu, type UserMenuProps, badgeVariants, browserSpeechSource, buttonGroupVariants, buttonVariants, cn, createDataTableColumnHelper, dataTableFeatures, formatWhen, groupByDate, highlightCode, initials, loadHighlighter, markerVariants, navigationMenuTriggerStyle, smoothPath, tabsListVariants, toastUndo, toggleVariants, useAssistant, useAssistantPage, useCarousel, useComboboxAnchor, useCopyToClipboard, useDictation, useDirection, useHighlightedCode, useIsMobile, useMediaQuery, useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility, useSidebar, useSidebarOptional, useTheme };
package/dist/index.js CHANGED
@@ -15,6 +15,7 @@ import { Calendar, CalendarDayButton } from "./components/ui/calendar.js";
15
15
  import { Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "./components/ui/card.js";
16
16
  import { Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, useCarousel } from "./components/ui/carousel.js";
17
17
  import { ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent } from "./components/ui/chart.js";
18
+ import { CheckCircle } from "./components/ui/check-circle.js";
18
19
  import { Checkbox } from "./components/ui/checkbox.js";
19
20
  import { CodeBlock, CodeBlockActions, CodeBlockContent, CodeBlockCopyButton, CodeBlockFooter, CodeBlockHeader, CodeBlockLine, CodeBlockTitle } from "./components/ui/code-block.js";
20
21
  import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "./components/ui/collapsible.js";
@@ -53,7 +54,7 @@ import { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHe
53
54
  import { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, useSidebar, useSidebarOptional } from "./components/ui/sidebar.js";
54
55
  import { Skeleton } from "./components/ui/skeleton.js";
55
56
  import { Slider } from "./components/ui/slider.js";
56
- import { Toaster } from "./components/ui/sonner.js";
57
+ import { Toaster, toastUndo } from "./components/ui/sonner.js";
57
58
  import { Spinner } from "./components/ui/spinner.js";
58
59
  import { Switch } from "./components/ui/switch.js";
59
60
  import { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from "./components/ui/table.js";
@@ -64,14 +65,17 @@ import { Toggle, toggleVariants } from "./components/ui/toggle.js";
64
65
  import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./components/ui/tooltip.js";
65
66
  import { Trace, TraceCollapsible, TraceCollapsibleContent, TraceCollapsibleTrigger, TraceDescription, TraceIcon, TraceLine, TraceTitle } from "./components/ui/trace.js";
66
67
  import { ActivityFeed } from "./components/admin/activity-feed.js";
68
+ import { AppNav } from "./components/admin/app-nav.js";
67
69
  import { AppBrand, AppShell } from "./components/admin/app-shell.js";
68
70
  import { Callout } from "./components/admin/callout.js";
69
71
  import { ConfirmDialog } from "./components/admin/confirm-dialog.js";
70
72
  import { CopyField } from "./components/admin/copy-field.js";
73
+ import { FocusLayout } from "./components/admin/focus-layout.js";
71
74
  import { KeyValueGrid } from "./components/admin/key-value-grid.js";
72
75
  import { LinkTile } from "./components/admin/link-tile.js";
73
76
  import { PageHeader } from "./components/admin/page-header.js";
74
77
  import { SearchInput } from "./components/admin/search-input.js";
78
+ import { SettingsRow, SettingsSection } from "./components/admin/settings.js";
75
79
  import { SidebarCollapseButton, SidebarLayout } from "./components/admin/sidebar-layout.js";
76
80
  import { StatCard } from "./components/admin/stat-card.js";
77
81
  import { StatusBadge, StatusDot } from "./components/admin/status.js";
@@ -79,16 +83,28 @@ import { Timeline } from "./components/admin/timeline.js";
79
83
  import { UsageMeter } from "./components/admin/usage-meter.js";
80
84
  import { UserChip, initials } from "./components/admin/user-chip.js";
81
85
  import { UserMenu } from "./components/admin/user-menu.js";
86
+ import { Collapse } from "./components/layout/collapse.js";
87
+ import { MediaItem } from "./components/layout/media-item.js";
88
+ import { Metric, MetricGroup } from "./components/layout/metric.js";
89
+ import { ShowMore } from "./components/layout/show-more.js";
90
+ import { Grid, Row, Stack } from "./components/layout/stack.js";
91
+ import { Heading, Text } from "./components/layout/text.js";
82
92
  import { BarList } from "./components/data/bar-list.js";
83
93
  import { DataTable, createDataTableColumnHelper, dataTableFeatures } from "./components/data/data-table.js";
94
+ import { SectionedList } from "./components/data/sectioned-list.js";
84
95
  import { Sparkline, smoothPath } from "./components/data/sparkline.js";
85
96
  import { StatusBars } from "./components/data/status-bars.js";
97
+ import { TaskRow } from "./components/data/task-row.js";
86
98
  import { TrendChart, TrendLegend } from "./components/data/trend-chart.js";
99
+ import { ActionReceipt } from "./components/ai/action-receipt.js";
87
100
  import { ApprovalCard, ApprovalResult } from "./components/ai/approval.js";
101
+ import { AskBox } from "./components/ai/ask-box.js";
102
+ import { AssistantDock, AssistantProvider, useAssistant, useAssistantPage } from "./components/ai/assistant.js";
88
103
  import { ChatPanel, ChatShell } from "./components/ai/chat-shell.js";
89
104
  import { AssistantAvatar, ChatMessage, ChatThread, MessageActions, ToolCall, TypingIndicator } from "./components/ai/chat.js";
90
105
  import { CodeSnippet, InlineCode, Prose } from "./components/ai/code-block.js";
91
106
  import { ConversationList, NewConversationButton, formatWhen, groupByDate } from "./components/ai/conversation-list.js";
107
+ import { DictationButton, browserSpeechSource, useDictation } from "./components/ai/dictation.js";
92
108
  import { ModelPicker } from "./components/ai/model-picker.js";
93
109
  import { PromptInput, PromptInputChip, PromptInputSelect } from "./components/ai/prompt-input.js";
94
110
  import { ToolGroup, ToolStatusIcon, ToolStep } from "./components/ai/tool-steps.js";
@@ -99,4 +115,4 @@ import { useMediaQuery } from "./hooks/use-media-query.js";
99
115
  import { useIsMobile } from "./hooks/use-mobile.js";
100
116
  import { highlightCode, loadHighlighter } from "./lib/highlighter.js";
101
117
  import { cn } from "./lib/utils.js";
102
- export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActivityFeed, Alert, AlertAction, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AppBrand, AppShell, AppleIcon, ApprovalCard, ApprovalResult, AspectRatio, AssistantAvatar, Attachment, AttachmentAction, AttachmentActions, AttachmentContent, AttachmentDescription, AttachmentGroup, AttachmentMedia, AttachmentTitle, AttachmentTrigger, AuthLayout, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, BarList, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Bubble, BubbleContent, BubbleGroup, BubbleReactions, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarDayButton, Callout, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, ChatMessage, ChatPanel, ChatShell, ChatThread, Checkbox, CodeBlock, CodeBlockActions, CodeBlockContent, CodeBlockCopyButton, CodeBlockFooter, CodeBlockHeader, CodeBlockLine, CodeBlockTitle, CodeSnippet, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxSeparator, ComboboxTrigger, ComboboxValue, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ConfirmDialog, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, ConversationList, CopyField, DataTable, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DirectionProvider, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, GitHubIcon, GoogleIcon, HoverCard, HoverCardContent, HoverCardTrigger, InlineCode, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, KeyValueGrid, Label, LinkTile, LoginForm, Marker, MarkerContent, MarkerIcon, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, Message, MessageActions, MessageAvatar, MessageContent, MessageFooter, MessageGroup, MessageHeader, MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport, ModelPicker, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, NewConversationButton, PageHeader, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverAnchor, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Progress, PromptInput, PromptInputChip, PromptInputSelect, Prose, Questionnaire, QuestionnaireActions, QuestionnaireChoice, QuestionnaireChoiceDescription, QuestionnaireChoices, QuestionnaireDescription, QuestionnaireError, QuestionnaireInput, QuestionnaireItem, QuestionnaireNext, QuestionnairePrevious, QuestionnaireProgress, QuestionnaireSkip, QuestionnaireSubmit, QuestionnaireTitle, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, ScrollArea, ScrollBar, SearchInput, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarCollapseButton, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarLayout, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, SignupForm, Skeleton, Slider, Sparkline, Spinner, StatCard, StatusBadge, StatusBars, StatusDot, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeProvider, ThemeScript, ThemeToggle, Timeline, Toaster, Toggle, ToggleGroup, ToggleGroupItem, ToolCall, ToolGroup, ToolStatusIcon, ToolStep, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, Trace, TraceCollapsible, TraceCollapsibleContent, TraceCollapsibleTrigger, TraceDescription, TraceIcon, TraceLine, TraceTitle, TrendChart, TrendLegend, TypingIndicator, UsageMeter, UserChip, UserMenu, badgeVariants, buttonGroupVariants, buttonVariants, cn, createDataTableColumnHelper, dataTableFeatures, formatWhen, groupByDate, highlightCode, initials, loadHighlighter, markerVariants, navigationMenuTriggerStyle, smoothPath, tabsListVariants, toggleVariants, useCarousel, useComboboxAnchor, useCopyToClipboard, useDirection, useHighlightedCode, useIsMobile, useMediaQuery, useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility, useSidebar, useSidebarOptional, useTheme };
118
+ export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, ActionReceipt, ActivityFeed, Alert, AlertAction, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AppBrand, AppNav, AppShell, AppleIcon, ApprovalCard, ApprovalResult, AskBox, AspectRatio, AssistantAvatar, AssistantDock, AssistantProvider, Attachment, AttachmentAction, AttachmentActions, AttachmentContent, AttachmentDescription, AttachmentGroup, AttachmentMedia, AttachmentTitle, AttachmentTrigger, AuthLayout, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, BarList, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Bubble, BubbleContent, BubbleGroup, BubbleReactions, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarDayButton, Callout, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, ChatMessage, ChatPanel, ChatShell, ChatThread, CheckCircle, Checkbox, CodeBlock, CodeBlockActions, CodeBlockContent, CodeBlockCopyButton, CodeBlockFooter, CodeBlockHeader, CodeBlockLine, CodeBlockTitle, CodeSnippet, Collapse, Collapsible, CollapsibleContent, CollapsibleTrigger, Combobox, ComboboxChip, ComboboxChips, ComboboxChipsInput, ComboboxCollection, ComboboxContent, ComboboxEmpty, ComboboxGroup, ComboboxInput, ComboboxItem, ComboboxLabel, ComboboxList, ComboboxSeparator, ComboboxTrigger, ComboboxValue, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ConfirmDialog, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, ConversationList, CopyField, DataTable, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, DictationButton, DirectionProvider, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, FocusLayout, GitHubIcon, GoogleIcon, Grid, Heading, HoverCard, HoverCardContent, HoverCardTrigger, InlineCode, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, KeyValueGrid, Label, LinkTile, LoginForm, Marker, MarkerContent, MarkerIcon, MediaItem, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, Message, MessageActions, MessageAvatar, MessageContent, MessageFooter, MessageGroup, MessageHeader, MessageScroller, MessageScrollerButton, MessageScrollerContent, MessageScrollerItem, MessageScrollerProvider, MessageScrollerViewport, Metric, MetricGroup, ModelPicker, NativeSelect, NativeSelectOptGroup, NativeSelectOption, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, NewConversationButton, PageHeader, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverAnchor, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Progress, PromptInput, PromptInputChip, PromptInputSelect, Prose, Questionnaire, QuestionnaireActions, QuestionnaireChoice, QuestionnaireChoiceDescription, QuestionnaireChoices, QuestionnaireDescription, QuestionnaireError, QuestionnaireInput, QuestionnaireItem, QuestionnaireNext, QuestionnairePrevious, QuestionnaireProgress, QuestionnaireSkip, QuestionnaireSubmit, QuestionnaireTitle, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, Row, ScrollArea, ScrollBar, SearchInput, SectionedList, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, SettingsRow, SettingsSection, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, ShowMore, Sidebar, SidebarCollapseButton, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarLayout, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, SignupForm, Skeleton, Slider, Sparkline, Spinner, Stack, StatCard, StatusBadge, StatusBars, StatusDot, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, TaskRow, Text, Textarea, ThemeProvider, ThemeScript, ThemeToggle, Timeline, Toaster, Toggle, ToggleGroup, ToggleGroupItem, ToolCall, ToolGroup, ToolStatusIcon, ToolStep, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, Trace, TraceCollapsible, TraceCollapsibleContent, TraceCollapsibleTrigger, TraceDescription, TraceIcon, TraceLine, TraceTitle, TrendChart, TrendLegend, TypingIndicator, UsageMeter, UserChip, UserMenu, badgeVariants, browserSpeechSource, buttonGroupVariants, buttonVariants, cn, createDataTableColumnHelper, dataTableFeatures, formatWhen, groupByDate, highlightCode, initials, loadHighlighter, markerVariants, navigationMenuTriggerStyle, smoothPath, tabsListVariants, toastUndo, toggleVariants, useAssistant, useAssistantPage, useCarousel, useComboboxAnchor, useCopyToClipboard, useDictation, useDirection, useHighlightedCode, useIsMobile, useMediaQuery, useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility, useSidebar, useSidebarOptional, useTheme };