@adea-ai/ui 0.12.0 → 0.13.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 (91) hide show
  1. package/LICENSE +201 -0
  2. package/dist/components/account-drawer.d.ts +1 -1
  3. package/dist/components/account-drawer.js +12 -12
  4. package/dist/components/on-screen-controls.js +12 -12
  5. package/dist/components/scene-settings.d.ts +3 -3
  6. package/dist/components/scene-settings.js +11 -11
  7. package/dist/components/theme-provider.d.ts +1 -1
  8. package/dist/components/theme-provider.js +2 -2
  9. package/dist/components/theme-toggle.js +8 -8
  10. package/dist/components/ui/badge.d.ts +3 -3
  11. package/dist/components/ui/badge.js +15 -15
  12. package/dist/components/ui/button.d.ts +2 -2
  13. package/dist/components/ui/button.js +19 -19
  14. package/dist/components/ui/card.d.ts +1 -1
  15. package/dist/components/ui/card.js +3 -3
  16. package/dist/components/ui/dialog.d.ts +4 -4
  17. package/dist/components/ui/dialog.js +10 -10
  18. package/dist/components/ui/drawer.d.ts +5 -5
  19. package/dist/components/ui/drawer.js +26 -26
  20. package/dist/components/ui/dropdown-menu.d.ts +5 -5
  21. package/dist/components/ui/dropdown-menu.js +12 -12
  22. package/dist/components/ui/empty.d.ts +7 -7
  23. package/dist/components/ui/empty.js +11 -11
  24. package/dist/components/ui/field.d.ts +12 -12
  25. package/dist/components/ui/field.js +22 -22
  26. package/dist/components/ui/input.d.ts +2 -2
  27. package/dist/components/ui/input.js +3 -3
  28. package/dist/components/ui/label.d.ts +2 -2
  29. package/dist/components/ui/label.js +3 -3
  30. package/dist/components/ui/radio-group.d.ts +2 -2
  31. package/dist/components/ui/radio-group.js +6 -6
  32. package/dist/components/ui/separator.d.ts +1 -1
  33. package/dist/components/ui/separator.js +5 -5
  34. package/dist/components/ui/skeleton.d.ts +1 -1
  35. package/dist/components/ui/skeleton.js +2 -2
  36. package/dist/components/ui/spinner.d.ts +2 -2
  37. package/dist/components/ui/spinner.js +3 -3
  38. package/dist/components/ui/switch.d.ts +2 -2
  39. package/dist/components/ui/switch.js +5 -5
  40. package/dist/components/ui/tabs.d.ts +2 -2
  41. package/dist/components/ui/tabs.js +13 -13
  42. package/dist/components/ui/toggle-group.d.ts +6 -6
  43. package/dist/components/ui/toggle-group.js +13 -13
  44. package/dist/components/ui/toggle.d.ts +2 -2
  45. package/dist/components/ui/toggle.js +11 -11
  46. package/dist/components/ui/tooltip.d.ts +3 -3
  47. package/dist/components/ui/tooltip.js +5 -5
  48. package/dist/components/version-dialog.d.ts +1 -1
  49. package/dist/components/version-dialog.js +33 -33
  50. package/dist/components/workspace-brand.js +1 -1
  51. package/dist/components/workspace-logo.d.ts +1 -1
  52. package/dist/index.d.ts +19 -19
  53. package/dist/index.js +19 -19
  54. package/dist/lib/utils.d.ts +1 -1
  55. package/dist/lib/utils.js +2 -2
  56. package/dist/lib/version-notes.js +18 -18
  57. package/package.json +24 -9
  58. package/src/components/account-drawer.tsx +27 -27
  59. package/src/components/on-screen-controls.tsx +45 -45
  60. package/src/components/scene-settings.tsx +55 -55
  61. package/src/components/theme-provider.tsx +7 -7
  62. package/src/components/theme-toggle.tsx +20 -20
  63. package/src/components/ui/badge.tsx +20 -20
  64. package/src/components/ui/button.tsx +24 -24
  65. package/src/components/ui/card.tsx +6 -6
  66. package/src/components/ui/dialog.tsx +24 -24
  67. package/src/components/ui/drawer.tsx +55 -55
  68. package/src/components/ui/dropdown-menu.tsx +39 -39
  69. package/src/components/ui/empty.tsx +25 -25
  70. package/src/components/ui/field.tsx +55 -55
  71. package/src/components/ui/input.tsx +7 -7
  72. package/src/components/ui/label.tsx +7 -7
  73. package/src/components/ui/radio-group.tsx +9 -9
  74. package/src/components/ui/separator.tsx +7 -7
  75. package/src/components/ui/skeleton.tsx +5 -5
  76. package/src/components/ui/spinner.tsx +6 -6
  77. package/src/components/ui/switch.tsx +8 -8
  78. package/src/components/ui/tabs.tsx +21 -21
  79. package/src/components/ui/toggle-group.tsx +25 -25
  80. package/src/components/ui/toggle.tsx +15 -15
  81. package/src/components/ui/tooltip.tsx +13 -13
  82. package/src/components/version-dialog.tsx +113 -113
  83. package/src/components/workspace-brand.tsx +4 -4
  84. package/src/components/workspace-logo.tsx +2 -2
  85. package/src/index.tsx +19 -19
  86. package/src/lib/utils.ts +3 -3
  87. package/src/lib/version-notes.ts +23 -23
  88. package/src/styles/conventional-workspace.css +26 -26
  89. package/src/styles/globals.css +2 -2
  90. package/src/styles/theme.css +1 -1
  91. package/src/styles/workspace-shell.css +2 -2
@@ -1,2 +1,2 @@
1
- declare function Skeleton({ className, ...props }: React.ComponentProps<"div">): import("react").JSX.Element;
1
+ declare function Skeleton({ className, ...props }: React.ComponentProps<'div'>): import("react").JSX.Element;
2
2
  export { Skeleton };
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { cn } from "#lib/utils";
2
+ import { cn } from '#lib/utils';
3
3
  function Skeleton({ className, ...props }) {
4
- return (_jsx("div", { "data-slot": "skeleton", className: cn("animate-pulse rounded-md bg-muted", className), ...props }));
4
+ return (_jsx("div", { "data-slot": "skeleton", className: cn('animate-pulse rounded-md bg-muted', className), ...props }));
5
5
  }
6
6
  export { Skeleton };
@@ -1,4 +1,4 @@
1
- import { LoaderCircle } from "lucide-react";
2
- import type { ComponentProps } from "react";
1
+ import { LoaderCircle } from 'lucide-react';
2
+ import type { ComponentProps } from 'react';
3
3
  declare function Spinner({ className, ...props }: ComponentProps<typeof LoaderCircle>): import("react").JSX.Element;
4
4
  export { Spinner };
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { LoaderCircle } from "lucide-react";
3
- import { cn } from "#lib/utils";
2
+ import { LoaderCircle } from 'lucide-react';
3
+ import { cn } from '#lib/utils';
4
4
  function Spinner({ className, ...props }) {
5
- return (_jsx(LoaderCircle, { role: "status", "aria-label": "Loading", className: cn("animate-spin", className), ...props }));
5
+ return (_jsx(LoaderCircle, { role: "status", "aria-label": "Loading", className: cn('animate-spin', className), ...props }));
6
6
  }
7
7
  export { Spinner };
@@ -1,5 +1,5 @@
1
- import { Switch as SwitchPrimitive } from "@base-ui/react/switch";
1
+ import { Switch as SwitchPrimitive } from '@base-ui/react/switch';
2
2
  declare function Switch({ className, size, ...props }: SwitchPrimitive.Root.Props & {
3
- size?: "sm" | "default";
3
+ size?: 'sm' | 'default';
4
4
  }): import("react").JSX.Element;
5
5
  export { Switch };
@@ -1,8 +1,8 @@
1
- "use client";
1
+ 'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { Switch as SwitchPrimitive } from "@base-ui/react/switch";
4
- import { cn } from "#lib/utils";
5
- function Switch({ className, size = "default", ...props }) {
6
- return (_jsx(SwitchPrimitive.Root, { "data-slot": "switch", "data-size": size, className: cn("peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50", className), ...props, children: _jsx(SwitchPrimitive.Thumb, { "data-slot": "switch-thumb", className: "pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground" }) }));
3
+ import { Switch as SwitchPrimitive } from '@base-ui/react/switch';
4
+ import { cn } from '#lib/utils';
5
+ function Switch({ className, size = 'default', ...props }) {
6
+ return (_jsx(SwitchPrimitive.Root, { "data-slot": "switch", "data-size": size, className: cn('peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80 data-disabled:cursor-not-allowed data-disabled:opacity-50', className), ...props, children: _jsx(SwitchPrimitive.Thumb, { "data-slot": "switch-thumb", className: "pointer-events-none block rounded-full bg-background ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0 dark:data-unchecked:bg-foreground" }) }));
7
7
  }
8
8
  export { Switch };
@@ -1,5 +1,5 @@
1
- import { Tabs as TabsPrimitive } from "@base-ui/react/tabs";
2
- import { type VariantProps } from "class-variance-authority";
1
+ import { Tabs as TabsPrimitive } from '@base-ui/react/tabs';
2
+ import { type VariantProps } from 'class-variance-authority';
3
3
  declare function Tabs({ className, orientation, ...props }: TabsPrimitive.Root.Props): import("react").JSX.Element;
4
4
  declare const tabsListVariants: (props?: ({
5
5
  variant?: "default" | "line" | null | undefined;
@@ -1,29 +1,29 @@
1
- "use client";
1
+ 'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { Tabs as TabsPrimitive } from "@base-ui/react/tabs";
4
- import { cva } from "class-variance-authority";
5
- import { cn } from "#lib/utils";
6
- function Tabs({ className, orientation = "horizontal", ...props }) {
7
- return (_jsx(TabsPrimitive.Root, { "data-slot": "tabs", "data-orientation": orientation, className: cn("group/tabs flex gap-2 data-horizontal:flex-col", className), ...props }));
3
+ import { Tabs as TabsPrimitive } from '@base-ui/react/tabs';
4
+ import { cva } from 'class-variance-authority';
5
+ import { cn } from '#lib/utils';
6
+ function Tabs({ className, orientation = 'horizontal', ...props }) {
7
+ return (_jsx(TabsPrimitive.Root, { "data-slot": "tabs", "data-orientation": orientation, className: cn('group/tabs flex gap-2 data-horizontal:flex-col', className), ...props }));
8
8
  }
9
- const tabsListVariants = cva("group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-horizontal/tabs:h-8 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none", {
9
+ const tabsListVariants = cva('group/tabs-list inline-flex w-fit items-center justify-center rounded-lg p-[3px] text-muted-foreground group-data-horizontal/tabs:h-8 group-data-vertical/tabs:h-fit group-data-vertical/tabs:flex-col data-[variant=line]:rounded-none', {
10
10
  variants: {
11
11
  variant: {
12
- default: "bg-muted",
13
- line: "gap-1 bg-transparent",
12
+ default: 'bg-muted',
13
+ line: 'gap-1 bg-transparent',
14
14
  },
15
15
  },
16
16
  defaultVariants: {
17
- variant: "default",
17
+ variant: 'default',
18
18
  },
19
19
  });
20
- function TabsList({ className, variant = "default", ...props }) {
20
+ function TabsList({ className, variant = 'default', ...props }) {
21
21
  return (_jsx(TabsPrimitive.List, { "data-slot": "tabs-list", "data-variant": variant, className: cn(tabsListVariants({ variant }), className), ...props }));
22
22
  }
23
23
  function TabsTrigger({ className, ...props }) {
24
- return (_jsx(TabsPrimitive.Tab, { "data-slot": "tabs-trigger", className: cn("relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 aria-disabled:pointer-events-none aria-disabled:opacity-50 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", "group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent", "data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground", "after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100", className), ...props }));
24
+ return (_jsx(TabsPrimitive.Tab, { "data-slot": "tabs-trigger", className: cn("relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium whitespace-nowrap text-foreground/60 transition-all group-data-vertical/tabs:w-full group-data-vertical/tabs:justify-start hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 focus-visible:outline-1 focus-visible:outline-ring disabled:pointer-events-none disabled:opacity-50 has-data-[icon=inline-end]:pr-1 has-data-[icon=inline-start]:pl-1 aria-disabled:pointer-events-none aria-disabled:opacity-50 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", 'group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent', 'data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground', 'after:absolute after:bg-foreground after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100', className), ...props }));
25
25
  }
26
26
  function TabsContent({ className, ...props }) {
27
- return (_jsx(TabsPrimitive.Panel, { "data-slot": "tabs-content", className: cn("flex-1 text-sm outline-none", className), ...props }));
27
+ return (_jsx(TabsPrimitive.Panel, { "data-slot": "tabs-content", className: cn('flex-1 text-sm outline-none', className), ...props }));
28
28
  }
29
29
  export { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants };
@@ -1,11 +1,11 @@
1
- import * as React from "react";
2
- import { Toggle as TogglePrimitive } from "@base-ui/react/toggle";
3
- import { ToggleGroup as ToggleGroupPrimitive } from "@base-ui/react/toggle-group";
4
- import { type VariantProps } from "class-variance-authority";
5
- import { toggleVariants } from "#components/ui/toggle";
1
+ import * as React from 'react';
2
+ import { Toggle as TogglePrimitive } from '@base-ui/react/toggle';
3
+ import { ToggleGroup as ToggleGroupPrimitive } from '@base-ui/react/toggle-group';
4
+ import { type VariantProps } from 'class-variance-authority';
5
+ import { toggleVariants } from '#components/ui/toggle';
6
6
  declare function ToggleGroup({ className, variant, size, spacing, orientation, children, ...props }: ToggleGroupPrimitive.Props & VariantProps<typeof toggleVariants> & {
7
7
  spacing?: number;
8
- orientation?: "horizontal" | "vertical";
8
+ orientation?: 'horizontal' | 'vertical';
9
9
  }): React.JSX.Element;
10
10
  declare function ToggleGroupItem({ className, children, variant, size, ...props }: TogglePrimitive.Props & VariantProps<typeof toggleVariants>): React.JSX.Element;
11
11
  export { ToggleGroup, ToggleGroupItem };
@@ -1,22 +1,22 @@
1
- "use client";
1
+ 'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import * as React from "react";
4
- import { Toggle as TogglePrimitive } from "@base-ui/react/toggle";
5
- import { ToggleGroup as ToggleGroupPrimitive } from "@base-ui/react/toggle-group";
6
- import { cn } from "#lib/utils";
7
- import { toggleVariants } from "#components/ui/toggle";
3
+ import * as React from 'react';
4
+ import { Toggle as TogglePrimitive } from '@base-ui/react/toggle';
5
+ import { ToggleGroup as ToggleGroupPrimitive } from '@base-ui/react/toggle-group';
6
+ import { cn } from '#lib/utils';
7
+ import { toggleVariants } from '#components/ui/toggle';
8
8
  const ToggleGroupContext = React.createContext({
9
- size: "default",
10
- variant: "default",
9
+ size: 'default',
10
+ variant: 'default',
11
11
  spacing: 2,
12
- orientation: "horizontal",
12
+ orientation: 'horizontal',
13
13
  });
14
- function ToggleGroup({ className, variant, size, spacing = 2, orientation = "horizontal", children, ...props }) {
15
- return (_jsx(ToggleGroupPrimitive, { "data-slot": "toggle-group", "data-variant": variant, "data-size": size, "data-spacing": spacing, "data-orientation": orientation, style: { "--gap": spacing }, className: cn("group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] rounded-lg data-[size=sm]:rounded-[min(var(--radius-md),10px)] data-vertical:flex-col data-vertical:items-stretch", className), ...props, children: _jsx(ToggleGroupContext.Provider, { value: { variant, size, spacing, orientation }, children: children }) }));
14
+ function ToggleGroup({ className, variant, size, spacing = 2, orientation = 'horizontal', children, ...props }) {
15
+ return (_jsx(ToggleGroupPrimitive, { "data-slot": "toggle-group", "data-variant": variant, "data-size": size, "data-spacing": spacing, "data-orientation": orientation, style: { '--gap': spacing }, className: cn('group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] rounded-lg data-[size=sm]:rounded-[min(var(--radius-md),10px)] data-vertical:flex-col data-vertical:items-stretch', className), ...props, children: _jsx(ToggleGroupContext.Provider, { value: { variant, size, spacing, orientation }, children: children }) }));
16
16
  }
17
- function ToggleGroupItem({ className, children, variant = "default", size = "default", ...props }) {
17
+ function ToggleGroupItem({ className, children, variant = 'default', size = 'default', ...props }) {
18
18
  const context = React.useContext(ToggleGroupContext);
19
- return (_jsx(TogglePrimitive, { "data-slot": "toggle-group-item", "data-variant": context.variant || variant, "data-size": context.size || size, "data-spacing": context.spacing, className: cn("shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 focus:z-10 focus-visible:z-10 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-end]:pr-1.5 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-start]:pl-1.5 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-lg group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-lg group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-lg group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-lg group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t", toggleVariants({
19
+ return (_jsx(TogglePrimitive, { "data-slot": "toggle-group-item", "data-variant": context.variant || variant, "data-size": context.size || size, "data-spacing": context.spacing, className: cn('shrink-0 group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 focus:z-10 focus-visible:z-10 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-end]:pr-1.5 group-data-[spacing=0]/toggle-group:has-data-[icon=inline-start]:pl-1.5 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-lg group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-lg group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-lg group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-lg group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t', toggleVariants({
20
20
  variant: context.variant || variant,
21
21
  size: context.size || size,
22
22
  }), className), ...props, children: children }));
@@ -1,5 +1,5 @@
1
- import { Toggle as TogglePrimitive } from "@base-ui/react/toggle";
2
- import { type VariantProps } from "class-variance-authority";
1
+ import { Toggle as TogglePrimitive } from '@base-ui/react/toggle';
2
+ import { type VariantProps } from 'class-variance-authority';
3
3
  declare const toggleVariants: (props?: ({
4
4
  variant?: "default" | "outline" | null | undefined;
5
5
  size?: "default" | "sm" | "lg" | null | undefined;
@@ -1,26 +1,26 @@
1
- "use client";
1
+ 'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { Toggle as TogglePrimitive } from "@base-ui/react/toggle";
4
- import { cva } from "class-variance-authority";
5
- import { cn } from "#lib/utils";
3
+ import { Toggle as TogglePrimitive } from '@base-ui/react/toggle';
4
+ import { cva } from 'class-variance-authority';
5
+ import { cn } from '#lib/utils';
6
6
  const toggleVariants = cva("group/toggle inline-flex items-center justify-center gap-1 rounded-lg text-sm font-medium whitespace-nowrap transition-all outline-none hover:bg-muted hover:text-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 aria-pressed:bg-muted data-[state=on]:bg-muted dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
7
7
  variants: {
8
8
  variant: {
9
- default: "bg-transparent",
10
- outline: "border border-input bg-transparent hover:bg-muted",
9
+ default: 'bg-transparent',
10
+ outline: 'border border-input bg-transparent hover:bg-muted',
11
11
  },
12
12
  size: {
13
- default: "h-8 min-w-8 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
13
+ default: 'h-8 min-w-8 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',
14
14
  sm: "h-7 min-w-7 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
15
- lg: "h-9 min-w-9 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
15
+ lg: 'h-9 min-w-9 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2',
16
16
  },
17
17
  },
18
18
  defaultVariants: {
19
- variant: "default",
20
- size: "default",
19
+ variant: 'default',
20
+ size: 'default',
21
21
  },
22
22
  });
23
- function Toggle({ className, variant = "default", size = "default", ...props }) {
23
+ function Toggle({ className, variant = 'default', size = 'default', ...props }) {
24
24
  return (_jsx(TogglePrimitive, { "data-slot": "toggle", className: cn(toggleVariants({ variant, size, className })), ...props }));
25
25
  }
26
26
  export { Toggle, toggleVariants };
@@ -1,8 +1,8 @@
1
- import * as React from "react";
2
- import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip";
1
+ import * as React from 'react';
2
+ import { Tooltip as TooltipPrimitive } from '@base-ui/react/tooltip';
3
3
  declare const TOOLTIP_DELAY = 200;
4
4
  declare function TooltipProvider({ delay, ...props }: TooltipPrimitive.Provider.Props): React.JSX.Element;
5
5
  declare function Tooltip({ ...props }: TooltipPrimitive.Root.Props): React.JSX.Element;
6
6
  declare function TooltipTrigger({ ...props }: TooltipPrimitive.Trigger.Props): React.JSX.Element;
7
- declare function TooltipContent({ className, side, sideOffset, align, alignOffset, children, ...props }: TooltipPrimitive.Popup.Props & Pick<TooltipPrimitive.Positioner.Props, "align" | "alignOffset" | "side" | "sideOffset">): React.JSX.Element;
7
+ declare function TooltipContent({ className, side, sideOffset, align, alignOffset, children, ...props }: TooltipPrimitive.Popup.Props & Pick<TooltipPrimitive.Positioner.Props, 'align' | 'alignOffset' | 'side' | 'sideOffset'>): React.JSX.Element;
8
8
  export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider, TOOLTIP_DELAY };
@@ -1,7 +1,7 @@
1
- "use client";
1
+ 'use client';
2
2
  import { jsx as _jsx } from "react/jsx-runtime";
3
- import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip";
4
- import { cn } from "#lib/utils";
3
+ import { Tooltip as TooltipPrimitive } from '@base-ui/react/tooltip';
4
+ import { cn } from '#lib/utils';
5
5
  const TOOLTIP_DELAY = 200;
6
6
  function TooltipProvider({ delay = TOOLTIP_DELAY, ...props }) {
7
7
  return _jsx(TooltipPrimitive.Provider, { "data-slot": "tooltip-provider", delay: delay, ...props });
@@ -12,7 +12,7 @@ function Tooltip({ ...props }) {
12
12
  function TooltipTrigger({ ...props }) {
13
13
  return _jsx(TooltipPrimitive.Trigger, { "data-slot": "tooltip-trigger", ...props });
14
14
  }
15
- function TooltipContent({ className, side = "top", sideOffset = 4, align, alignOffset, children, ...props }) {
16
- return (_jsx(TooltipPrimitive.Portal, { children: _jsx(TooltipPrimitive.Positioner, { className: "isolate z-[160] outline-none", align: align, alignOffset: alignOffset, side: side, sideOffset: sideOffset, children: _jsx(TooltipPrimitive.Popup, { "data-slot": "tooltip-content", className: cn("max-w-72 rounded-md bg-popover px-2.5 py-1.5 text-sm leading-5 text-popover-foreground shadow-md ring-1 ring-foreground/10", className), ...props, children: children }) }) }));
15
+ function TooltipContent({ className, side = 'top', sideOffset = 4, align, alignOffset, children, ...props }) {
16
+ return (_jsx(TooltipPrimitive.Portal, { children: _jsx(TooltipPrimitive.Positioner, { className: "isolate z-[160] outline-none", align: align, alignOffset: alignOffset, side: side, sideOffset: sideOffset, children: _jsx(TooltipPrimitive.Popup, { "data-slot": "tooltip-content", className: cn('max-w-72 rounded-md bg-popover px-2.5 py-1.5 text-sm leading-5 text-popover-foreground shadow-md ring-1 ring-foreground/10', className), ...props, children: children }) }) }));
17
17
  }
18
18
  export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider, TOOLTIP_DELAY };
@@ -5,7 +5,7 @@ export type SharedDesktopUpdate = Readonly<{
5
5
  downloaded_bytes: number;
6
6
  error: string | null;
7
7
  github_url: string;
8
- phase: "idle" | "checking" | "current" | "available" | "downloading" | "installing" | "installed" | "failed";
8
+ phase: 'idle' | 'checking' | 'current' | 'available' | 'downloading' | 'installing' | 'installed' | 'failed';
9
9
  release_date: string | null;
10
10
  release_notes: string | null;
11
11
  restart_required: boolean;
@@ -1,38 +1,38 @@
1
- "use client";
1
+ 'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- import { useCallback, useEffect, useMemo, useState } from "react";
4
- import { Check, Download, ExternalLink, FileText, LoaderCircle, RefreshCw, Sparkles, } from "lucide-react";
5
- import { formatReleaseDate, plainTextFromMarkdown } from "#lib/version-notes";
6
- import { Button } from "#components/ui/button";
7
- import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "#components/ui/dialog";
3
+ import { useCallback, useEffect, useMemo, useState } from 'react';
4
+ import { Check, Download, ExternalLink, FileText, LoaderCircle, RefreshCw, Sparkles, } from 'lucide-react';
5
+ import { formatReleaseDate, plainTextFromMarkdown } from '#lib/version-notes';
6
+ import { Button } from '#components/ui/button';
7
+ import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from '#components/ui/dialog';
8
8
  function errorMessage(caught, fallback) {
9
9
  if (caught instanceof Error && caught.message)
10
10
  return caught.message;
11
- if (typeof caught === "string" && caught)
11
+ if (typeof caught === 'string' && caught)
12
12
  return caught;
13
13
  return fallback;
14
14
  }
15
15
  function phaseLabel(update, fallbackVersion) {
16
16
  if (!update)
17
17
  return `Adea v${fallbackVersion}`;
18
- if (update.phase === "checking")
19
- return "Checking for updates…";
20
- if (update.phase === "available" && update.available_version) {
18
+ if (update.phase === 'checking')
19
+ return 'Checking for updates…';
20
+ if (update.phase === 'available' && update.available_version) {
21
21
  return `Update v${update.available_version} available`;
22
22
  }
23
- if (update.phase === "downloading" || update.phase === "installing") {
24
- return "Installing update…";
23
+ if (update.phase === 'downloading' || update.phase === 'installing') {
24
+ return 'Installing update…';
25
25
  }
26
- if (update.phase === "failed")
26
+ if (update.phase === 'failed')
27
27
  return `Version ${update.current_version} · Retry`;
28
28
  return `Adea v${update.current_version || fallbackVersion}`;
29
29
  }
30
30
  function isUpdateBusy(update) {
31
- return (update?.phase === "checking" ||
32
- update?.phase === "downloading" ||
33
- update?.phase === "installing");
31
+ return (update?.phase === 'checking' ||
32
+ update?.phase === 'downloading' ||
33
+ update?.phase === 'installing');
34
34
  }
35
- export function VersionDialog({ adapter, fallbackVersion = "0.1.0", onOpenChange, open: controlledOpen, }) {
35
+ export function VersionDialog({ adapter, fallbackVersion = '0.1.0', onOpenChange, open: controlledOpen, }) {
36
36
  const [uncontrolledOpen, setUncontrolledOpen] = useState(false);
37
37
  const open = controlledOpen ?? uncontrolledOpen;
38
38
  const setOpen = useCallback((nextOpen) => {
@@ -43,7 +43,7 @@ export function VersionDialog({ adapter, fallbackVersion = "0.1.0", onOpenChange
43
43
  const [desktopRuntime, setDesktopRuntime] = useState(false);
44
44
  const [update, setUpdate] = useState(null);
45
45
  const [busy, setBusy] = useState(false);
46
- const [error, setError] = useState("");
46
+ const [error, setError] = useState('');
47
47
  useEffect(() => setDesktopRuntime(adapter.isDesktopRuntime()), [adapter]);
48
48
  const loadCurrentStatus = useCallback(async () => {
49
49
  if (!desktopRuntime)
@@ -52,7 +52,7 @@ export function VersionDialog({ adapter, fallbackVersion = "0.1.0", onOpenChange
52
52
  setUpdate(await adapter.getStatus());
53
53
  }
54
54
  catch (caught) {
55
- setError(errorMessage(caught, "Version status is unavailable"));
55
+ setError(errorMessage(caught, 'Version status is unavailable'));
56
56
  }
57
57
  }, [adapter, desktopRuntime]);
58
58
  useEffect(() => {
@@ -61,16 +61,16 @@ export function VersionDialog({ adapter, fallbackVersion = "0.1.0", onOpenChange
61
61
  }, [desktopRuntime, loadCurrentStatus]);
62
62
  const checkForUpdates = useCallback(async () => {
63
63
  if (!desktopRuntime) {
64
- setError("Update checks are available from the desktop app.");
64
+ setError('Update checks are available from the desktop app.');
65
65
  return;
66
66
  }
67
67
  setBusy(true);
68
- setError("");
68
+ setError('');
69
69
  try {
70
70
  setUpdate(await adapter.check());
71
71
  }
72
72
  catch (caught) {
73
- setError(errorMessage(caught, "Could not check for updates"));
73
+ setError(errorMessage(caught, 'Could not check for updates'));
74
74
  await loadCurrentStatus();
75
75
  }
76
76
  finally {
@@ -81,7 +81,7 @@ export function VersionDialog({ adapter, fallbackVersion = "0.1.0", onOpenChange
81
81
  if (!open || !desktopRuntime)
82
82
  return;
83
83
  let active = true;
84
- setError("");
84
+ setError('');
85
85
  setBusy(true);
86
86
  void (async () => {
87
87
  try {
@@ -95,7 +95,7 @@ export function VersionDialog({ adapter, fallbackVersion = "0.1.0", onOpenChange
95
95
  }
96
96
  catch (caught) {
97
97
  if (active)
98
- setError(errorMessage(caught, "Could not check for updates"));
98
+ setError(errorMessage(caught, 'Could not check for updates'));
99
99
  }
100
100
  finally {
101
101
  if (active)
@@ -111,26 +111,26 @@ export function VersionDialog({ adapter, fallbackVersion = "0.1.0", onOpenChange
111
111
  if (!version)
112
112
  return;
113
113
  setBusy(true);
114
- setError("");
114
+ setError('');
115
115
  try {
116
116
  setUpdate(await adapter.install(version));
117
117
  }
118
118
  catch (caught) {
119
- setError(errorMessage(caught, "Update installation failed"));
119
+ setError(errorMessage(caught, 'Update installation failed'));
120
120
  await loadCurrentStatus();
121
121
  }
122
122
  finally {
123
123
  setBusy(false);
124
124
  }
125
125
  };
126
- const currentChangelog = useMemo(() => plainTextFromMarkdown(update?.changelog || "Changelog is loading…"), [update?.changelog]);
127
- const releaseNotes = update?.release_notes ? plainTextFromMarkdown(update.release_notes) : "";
126
+ const currentChangelog = useMemo(() => plainTextFromMarkdown(update?.changelog || 'Changelog is loading…'), [update?.changelog]);
127
+ const releaseNotes = update?.release_notes ? plainTextFromMarkdown(update.release_notes) : '';
128
128
  const busyFromSnapshot = isUpdateBusy(update);
129
- return (_jsxs(Dialog, { open: open, onOpenChange: setOpen, children: [controlledOpen === undefined ? (_jsxs(DialogTrigger, { render: _jsx(Button, { type: "button", variant: "ghost", size: "sm", "aria-label": "Open version and updates dialog", "aria-haspopup": "dialog", onClick: () => setOpen(true) }), children: [update?.phase === "available" ? (_jsx(Sparkles, { "aria-hidden": "true" })) : (_jsx(FileText, { "aria-hidden": "true" })), phaseLabel(update, fallbackVersion)] })) : null, _jsxs(DialogContent, { className: "max-w-3xl", children: [_jsx(DialogHeader, { children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("span", { className: "flex size-10 items-center justify-center rounded-xl bg-primary text-primary-foreground", children: _jsx(Sparkles, { className: "size-5", "aria-hidden": "true" }) }), _jsxs("div", { children: [_jsx(DialogTitle, { children: "Version & updates" }), _jsx(DialogDescription, { children: "Keep Adea current and review what changed in each release." })] })] }) }), _jsxs("div", { className: "min-h-0 space-y-5 overflow-y-auto p-6", children: [_jsx("section", { className: "rounded-xl border bg-background/45 p-4", "aria-label": "Version status", children: _jsxs("div", { className: "flex flex-wrap items-start justify-between gap-4", children: [_jsxs("div", { className: "space-y-1", children: [_jsx("p", { className: "text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground", children: "Installed version" }), _jsxs("p", { className: "text-xl font-semibold tracking-tight", children: ["v", update?.current_version || fallbackVersion] }), _jsx("p", { className: "text-sm text-muted-foreground", children: update?.phase === "current"
130
- ? "You are running the latest desktop release."
131
- : update?.phase === "available" && update.available_version
129
+ return (_jsxs(Dialog, { open: open, onOpenChange: setOpen, children: [controlledOpen === undefined ? (_jsxs(DialogTrigger, { render: _jsx(Button, { type: "button", variant: "ghost", size: "sm", "aria-label": "Open version and updates dialog", "aria-haspopup": "dialog", onClick: () => setOpen(true) }), children: [update?.phase === 'available' ? (_jsx(Sparkles, { "aria-hidden": "true" })) : (_jsx(FileText, { "aria-hidden": "true" })), phaseLabel(update, fallbackVersion)] })) : null, _jsxs(DialogContent, { className: "max-w-3xl", children: [_jsx(DialogHeader, { children: _jsxs("div", { className: "flex items-center gap-3", children: [_jsx("span", { className: "flex size-10 items-center justify-center rounded-xl bg-primary text-primary-foreground", children: _jsx(Sparkles, { className: "size-5", "aria-hidden": "true" }) }), _jsxs("div", { children: [_jsx(DialogTitle, { children: "Version & updates" }), _jsx(DialogDescription, { children: "Keep Adea current and review what changed in each release." })] })] }) }), _jsxs("div", { className: "min-h-0 space-y-5 overflow-y-auto p-6", children: [_jsx("section", { className: "rounded-xl border bg-background/45 p-4", "aria-label": "Version status", children: _jsxs("div", { className: "flex flex-wrap items-start justify-between gap-4", children: [_jsxs("div", { className: "space-y-1", children: [_jsx("p", { className: "text-xs font-semibold uppercase tracking-[0.14em] text-muted-foreground", children: "Installed version" }), _jsxs("p", { className: "text-xl font-semibold tracking-tight", children: ["v", update?.current_version || fallbackVersion] }), _jsx("p", { className: "text-sm text-muted-foreground", children: update?.phase === 'current'
130
+ ? 'You are running the latest desktop release.'
131
+ : update?.phase === 'available' && update.available_version
132
132
  ? `A newer desktop release, v${update.available_version}, is ready.`
133
133
  : desktopRuntime
134
- ? "Check the release channel for the latest signed build."
135
- : "Open this dialog inside the desktop app to check for updates." })] }), _jsxs(Button, { type: "button", variant: "outline", size: "sm", disabled: !desktopRuntime || busy || busyFromSnapshot, onClick: () => void checkForUpdates(), children: [busy || busyFromSnapshot ? (_jsx(LoaderCircle, { className: "animate-spin", "aria-hidden": "true" })) : (_jsx(RefreshCw, { "aria-hidden": "true" })), "Check latest version"] })] }) }), update?.phase === "available" && update.available_version ? (_jsx("section", { className: "rounded-xl border border-primary/35 bg-primary/8 p-4", "aria-label": "Available update", children: _jsxs("div", { className: "flex flex-wrap items-start justify-between gap-4", children: [_jsxs("div", { className: "space-y-1", children: [_jsxs("p", { className: "flex items-center gap-2 text-sm font-semibold", children: [_jsx(Sparkles, { className: "size-4 text-primary", "aria-hidden": "true" }), "Version ", update.available_version, " is ready"] }), _jsx("p", { className: "text-sm text-muted-foreground", children: "The signed installer will be verified before Adea restarts." }), formatReleaseDate(update.release_date) ? (_jsxs("p", { className: "text-xs text-muted-foreground", children: ["Released ", formatReleaseDate(update.release_date)] })) : null] }), _jsxs(Button, { type: "button", size: "sm", disabled: busy || busyFromSnapshot, onClick: () => void install(), children: [busy || busyFromSnapshot ? (_jsx(LoaderCircle, { className: "animate-spin", "aria-hidden": "true" })) : (_jsx(Download, { "aria-hidden": "true" })), "Install and restart"] })] }) })) : null, update?.phase === "current" ? (_jsxs("p", { className: "flex items-center gap-2 text-sm text-emerald-700 dark:text-emerald-300", role: "status", children: [_jsx(Check, { className: "size-4", "aria-hidden": "true" }), "Adea is up to date."] })) : null, error ? (_jsx("p", { className: "rounded-lg border border-destructive/35 bg-destructive/8 px-3 py-2 text-sm text-destructive", role: "alert", children: error })) : null, releaseNotes ? (_jsxs("section", { className: "space-y-2", "aria-labelledby": "adea-release-notes", children: [_jsxs("div", { children: [_jsx("h2", { id: "adea-release-notes", className: "text-sm font-semibold", children: "What changed in this release" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Release notes are shown as readable text." })] }), _jsx("div", { className: "max-h-52 overflow-y-auto whitespace-pre-wrap rounded-xl border bg-background/45 p-4 font-mono text-xs leading-5 text-muted-foreground", children: releaseNotes })] })) : null, _jsxs("section", { className: "space-y-2", "aria-labelledby": "agent-hq-changelog", children: [_jsxs("div", { children: [_jsx("h2", { id: "agent-hq-changelog", className: "text-sm font-semibold", children: "Installed changelog" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "A plain-text history of the installed channel." })] }), _jsx("div", { className: "max-h-72 overflow-y-auto whitespace-pre-wrap rounded-xl border bg-background/45 p-4 font-mono text-xs leading-5 text-muted-foreground", children: currentChangelog })] })] }), _jsxs(DialogFooter, { children: [update?.github_url ? (_jsxs(Button, { type: "button", variant: "ghost", size: "sm", onClick: () => window.open(update.github_url, "_blank", "noopener,noreferrer"), children: [_jsx(ExternalLink, { "aria-hidden": "true" }), "View releases"] })) : null, _jsx(DialogClose, { render: _jsx(Button, { type: "button", variant: "outline", size: "sm" }), children: "Close" })] })] })] }));
134
+ ? 'Check the release channel for the latest signed build.'
135
+ : 'Open this dialog inside the desktop app to check for updates.' })] }), _jsxs(Button, { type: "button", variant: "outline", size: "sm", disabled: !desktopRuntime || busy || busyFromSnapshot, onClick: () => void checkForUpdates(), children: [busy || busyFromSnapshot ? (_jsx(LoaderCircle, { className: "animate-spin", "aria-hidden": "true" })) : (_jsx(RefreshCw, { "aria-hidden": "true" })), "Check latest version"] })] }) }), update?.phase === 'available' && update.available_version ? (_jsx("section", { className: "rounded-xl border border-primary/35 bg-primary/8 p-4", "aria-label": "Available update", children: _jsxs("div", { className: "flex flex-wrap items-start justify-between gap-4", children: [_jsxs("div", { className: "space-y-1", children: [_jsxs("p", { className: "flex items-center gap-2 text-sm font-semibold", children: [_jsx(Sparkles, { className: "size-4 text-primary", "aria-hidden": "true" }), "Version ", update.available_version, " is ready"] }), _jsx("p", { className: "text-sm text-muted-foreground", children: "The signed installer will be verified before Adea restarts." }), formatReleaseDate(update.release_date) ? (_jsxs("p", { className: "text-xs text-muted-foreground", children: ["Released ", formatReleaseDate(update.release_date)] })) : null] }), _jsxs(Button, { type: "button", size: "sm", disabled: busy || busyFromSnapshot, onClick: () => void install(), children: [busy || busyFromSnapshot ? (_jsx(LoaderCircle, { className: "animate-spin", "aria-hidden": "true" })) : (_jsx(Download, { "aria-hidden": "true" })), "Install and restart"] })] }) })) : null, update?.phase === 'current' ? (_jsxs("p", { className: "flex items-center gap-2 text-sm text-emerald-700 dark:text-emerald-300", role: "status", children: [_jsx(Check, { className: "size-4", "aria-hidden": "true" }), "Adea is up to date."] })) : null, error ? (_jsx("p", { className: "rounded-lg border border-destructive/35 bg-destructive/8 px-3 py-2 text-sm text-destructive", role: "alert", children: error })) : null, releaseNotes ? (_jsxs("section", { className: "space-y-2", "aria-labelledby": "adea-release-notes", children: [_jsxs("div", { children: [_jsx("h2", { id: "adea-release-notes", className: "text-sm font-semibold", children: "What changed in this release" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "Release notes are shown as readable text." })] }), _jsx("div", { className: "max-h-52 overflow-y-auto whitespace-pre-wrap rounded-xl border bg-background/45 p-4 font-mono text-xs leading-5 text-muted-foreground", children: releaseNotes })] })) : null, _jsxs("section", { className: "space-y-2", "aria-labelledby": "agent-hq-changelog", children: [_jsxs("div", { children: [_jsx("h2", { id: "agent-hq-changelog", className: "text-sm font-semibold", children: "Installed changelog" }), _jsx("p", { className: "text-xs text-muted-foreground", children: "A plain-text history of the installed channel." })] }), _jsx("div", { className: "max-h-72 overflow-y-auto whitespace-pre-wrap rounded-xl border bg-background/45 p-4 font-mono text-xs leading-5 text-muted-foreground", children: currentChangelog })] })] }), _jsxs(DialogFooter, { children: [update?.github_url ? (_jsxs(Button, { type: "button", variant: "ghost", size: "sm", onClick: () => window.open(update.github_url, '_blank', 'noopener,noreferrer'), children: [_jsx(ExternalLink, { "aria-hidden": "true" }), "View releases"] })) : null, _jsx(DialogClose, { render: _jsx(Button, { type: "button", variant: "outline", size: "sm" }), children: "Close" })] })] })] }));
136
136
  }
@@ -1,4 +1,4 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- export function WorkspaceBrand({ title, eyebrow = "AGENT OPERATIONS" }) {
2
+ export function WorkspaceBrand({ title, eyebrow = 'AGENT OPERATIONS' }) {
3
3
  return (_jsxs("div", { className: "workspace-brand", children: [_jsx("div", { className: "workspace-brand__mark", "aria-hidden": "true", children: _jsx("span", { children: "HQ" }) }), _jsxs("div", { children: [_jsx("p", { className: "workspace-eyebrow", children: eyebrow }), _jsx("h1", { children: title })] })] }));
4
4
  }
@@ -1,3 +1,3 @@
1
- import type { SVGProps } from "react";
1
+ import type { SVGProps } from 'react';
2
2
  /** The canonical Adea mark used by web, desktop, and dialogs. */
3
3
  export declare function WorkspaceLogo(props: SVGProps<SVGSVGElement>): import("react").JSX.Element;
package/dist/index.d.ts CHANGED
@@ -1,19 +1,19 @@
1
- export { Button, buttonVariants } from "./components/ui/button";
2
- export { Switch } from "./components/ui/switch";
3
- export { Toggle } from "./components/ui/toggle";
4
- export { ToggleGroup, ToggleGroupItem } from "./components/ui/toggle-group";
5
- export { RadioGroup, RadioGroupItem } from "./components/ui/radio-group";
6
- export { ThemeToggle } from "./components/theme-toggle";
7
- export { ThemeProvider } from "./components/theme-provider";
8
- export { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerSwipeHandle, DrawerTitle, DrawerTrigger, } from "./components/ui/drawer";
9
- export { AccountDrawer, type AccountDrawerProps } from "./components/account-drawer";
10
- export { WorkspaceBrand, type WorkspaceBrandProps } from "./components/workspace-brand";
11
- export { WorkspaceLogo } from "./components/workspace-logo";
12
- export { OnScreenControls } from "./components/on-screen-controls";
13
- export { SceneSettings, type SceneSettingsProps } from "./components/scene-settings";
14
- export { VersionDialog, type SharedDesktopUpdate, type VersionDialogAdapter, } from "./components/version-dialog";
15
- export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./components/ui/tooltip";
16
- export { Card, CardContent } from "./components/ui/card";
17
- export { Spinner } from "./components/ui/spinner";
18
- export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, } from "./components/ui/dialog";
19
- export { cn } from "./lib/utils";
1
+ export { Button, buttonVariants } from './components/ui/button';
2
+ export { Switch } from './components/ui/switch';
3
+ export { Toggle } from './components/ui/toggle';
4
+ export { ToggleGroup, ToggleGroupItem } from './components/ui/toggle-group';
5
+ export { RadioGroup, RadioGroupItem } from './components/ui/radio-group';
6
+ export { ThemeToggle } from './components/theme-toggle';
7
+ export { ThemeProvider } from './components/theme-provider';
8
+ export { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerSwipeHandle, DrawerTitle, DrawerTrigger, } from './components/ui/drawer';
9
+ export { AccountDrawer, type AccountDrawerProps } from './components/account-drawer';
10
+ export { WorkspaceBrand, type WorkspaceBrandProps } from './components/workspace-brand';
11
+ export { WorkspaceLogo } from './components/workspace-logo';
12
+ export { OnScreenControls } from './components/on-screen-controls';
13
+ export { SceneSettings, type SceneSettingsProps } from './components/scene-settings';
14
+ export { VersionDialog, type SharedDesktopUpdate, type VersionDialogAdapter, } from './components/version-dialog';
15
+ export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './components/ui/tooltip';
16
+ export { Card, CardContent } from './components/ui/card';
17
+ export { Spinner } from './components/ui/spinner';
18
+ export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, } from './components/ui/dialog';
19
+ export { cn } from './lib/utils';
package/dist/index.js CHANGED
@@ -1,19 +1,19 @@
1
- export { Button, buttonVariants } from "./components/ui/button";
2
- export { Switch } from "./components/ui/switch";
3
- export { Toggle } from "./components/ui/toggle";
4
- export { ToggleGroup, ToggleGroupItem } from "./components/ui/toggle-group";
5
- export { RadioGroup, RadioGroupItem } from "./components/ui/radio-group";
6
- export { ThemeToggle } from "./components/theme-toggle";
7
- export { ThemeProvider } from "./components/theme-provider";
8
- export { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerSwipeHandle, DrawerTitle, DrawerTrigger, } from "./components/ui/drawer";
9
- export { AccountDrawer } from "./components/account-drawer";
10
- export { WorkspaceBrand } from "./components/workspace-brand";
11
- export { WorkspaceLogo } from "./components/workspace-logo";
12
- export { OnScreenControls } from "./components/on-screen-controls";
13
- export { SceneSettings } from "./components/scene-settings";
14
- export { VersionDialog, } from "./components/version-dialog";
15
- export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./components/ui/tooltip";
16
- export { Card, CardContent } from "./components/ui/card";
17
- export { Spinner } from "./components/ui/spinner";
18
- export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, } from "./components/ui/dialog";
19
- export { cn } from "./lib/utils";
1
+ export { Button, buttonVariants } from './components/ui/button';
2
+ export { Switch } from './components/ui/switch';
3
+ export { Toggle } from './components/ui/toggle';
4
+ export { ToggleGroup, ToggleGroupItem } from './components/ui/toggle-group';
5
+ export { RadioGroup, RadioGroupItem } from './components/ui/radio-group';
6
+ export { ThemeToggle } from './components/theme-toggle';
7
+ export { ThemeProvider } from './components/theme-provider';
8
+ export { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerSwipeHandle, DrawerTitle, DrawerTrigger, } from './components/ui/drawer';
9
+ export { AccountDrawer } from './components/account-drawer';
10
+ export { WorkspaceBrand } from './components/workspace-brand';
11
+ export { WorkspaceLogo } from './components/workspace-logo';
12
+ export { OnScreenControls } from './components/on-screen-controls';
13
+ export { SceneSettings } from './components/scene-settings';
14
+ export { VersionDialog, } from './components/version-dialog';
15
+ export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from './components/ui/tooltip';
16
+ export { Card, CardContent } from './components/ui/card';
17
+ export { Spinner } from './components/ui/spinner';
18
+ export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, } from './components/ui/dialog';
19
+ export { cn } from './lib/utils';
@@ -1,2 +1,2 @@
1
- import { type ClassValue } from "clsx";
1
+ import { type ClassValue } from 'clsx';
2
2
  export declare function cn(...inputs: ClassValue[]): string;
package/dist/lib/utils.js CHANGED
@@ -1,5 +1,5 @@
1
- import { clsx } from "clsx";
2
- import { twMerge } from "tailwind-merge";
1
+ import { clsx } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
3
  export function cn(...inputs) {
4
4
  return twMerge(clsx(inputs));
5
5
  }