@elizaos/ui 2.0.0-alpha.37

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 (132) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +6 -0
  3. package/dist/components/ui/badge.d.ts +10 -0
  4. package/dist/components/ui/badge.d.ts.map +1 -0
  5. package/dist/components/ui/badge.js +20 -0
  6. package/dist/components/ui/banner.d.ts +18 -0
  7. package/dist/components/ui/banner.d.ts.map +1 -0
  8. package/dist/components/ui/banner.js +27 -0
  9. package/dist/components/ui/button.d.ts +12 -0
  10. package/dist/components/ui/button.d.ts.map +1 -0
  11. package/dist/components/ui/button.js +33 -0
  12. package/dist/components/ui/card.d.ts +9 -0
  13. package/dist/components/ui/card.d.ts.map +1 -0
  14. package/dist/components/ui/card.js +16 -0
  15. package/dist/components/ui/chat-atoms.d.ts +26 -0
  16. package/dist/components/ui/chat-atoms.d.ts.map +1 -0
  17. package/dist/components/ui/chat-atoms.js +17 -0
  18. package/dist/components/ui/checkbox.d.ts +5 -0
  19. package/dist/components/ui/checkbox.d.ts.map +1 -0
  20. package/dist/components/ui/checkbox.js +8 -0
  21. package/dist/components/ui/confirm-delete.d.ts +12 -0
  22. package/dist/components/ui/confirm-delete.d.ts.map +1 -0
  23. package/dist/components/ui/confirm-delete.js +13 -0
  24. package/dist/components/ui/confirm-dialog.d.ts +24 -0
  25. package/dist/components/ui/confirm-dialog.d.ts.map +1 -0
  26. package/dist/components/ui/confirm-dialog.js +55 -0
  27. package/dist/components/ui/connection-status.d.ts +9 -0
  28. package/dist/components/ui/connection-status.d.ts.map +1 -0
  29. package/dist/components/ui/connection-status.js +25 -0
  30. package/dist/components/ui/copy-button.d.ts +13 -0
  31. package/dist/components/ui/copy-button.d.ts.map +1 -0
  32. package/dist/components/ui/copy-button.js +14 -0
  33. package/dist/components/ui/dialog.d.ts +20 -0
  34. package/dist/components/ui/dialog.d.ts.map +1 -0
  35. package/dist/components/ui/dialog.js +22 -0
  36. package/dist/components/ui/dropdown-menu.d.ts +28 -0
  37. package/dist/components/ui/dropdown-menu.d.ts.map +1 -0
  38. package/dist/components/ui/dropdown-menu.js +35 -0
  39. package/dist/components/ui/empty-state.d.ts +13 -0
  40. package/dist/components/ui/empty-state.d.ts.map +1 -0
  41. package/dist/components/ui/empty-state.js +5 -0
  42. package/dist/components/ui/error-boundary.d.ts +18 -0
  43. package/dist/components/ui/error-boundary.d.ts.map +1 -0
  44. package/dist/components/ui/error-boundary.js +27 -0
  45. package/dist/components/ui/grid.d.ts +11 -0
  46. package/dist/components/ui/grid.d.ts.map +1 -0
  47. package/dist/components/ui/grid.js +30 -0
  48. package/dist/components/ui/input.d.ts +6 -0
  49. package/dist/components/ui/input.d.ts.map +1 -0
  50. package/dist/components/ui/input.js +8 -0
  51. package/dist/components/ui/label.d.ts +6 -0
  52. package/dist/components/ui/label.d.ts.map +1 -0
  53. package/dist/components/ui/label.js +9 -0
  54. package/dist/components/ui/popover.d.ts +7 -0
  55. package/dist/components/ui/popover.d.ts.map +1 -0
  56. package/dist/components/ui/popover.js +9 -0
  57. package/dist/components/ui/save-footer.d.ts +13 -0
  58. package/dist/components/ui/save-footer.d.ts.map +1 -0
  59. package/dist/components/ui/save-footer.js +9 -0
  60. package/dist/components/ui/search-bar.d.ts +17 -0
  61. package/dist/components/ui/search-bar.d.ts.map +1 -0
  62. package/dist/components/ui/search-bar.js +19 -0
  63. package/dist/components/ui/search-input.d.ts +11 -0
  64. package/dist/components/ui/search-input.d.ts.map +1 -0
  65. package/dist/components/ui/search-input.js +9 -0
  66. package/dist/components/ui/section-card.d.ts +15 -0
  67. package/dist/components/ui/section-card.d.ts.map +1 -0
  68. package/dist/components/ui/section-card.js +9 -0
  69. package/dist/components/ui/select.d.ts +14 -0
  70. package/dist/components/ui/select.d.ts.map +1 -0
  71. package/dist/components/ui/select.js +26 -0
  72. package/dist/components/ui/separator.d.ts +5 -0
  73. package/dist/components/ui/separator.d.ts.map +1 -0
  74. package/dist/components/ui/separator.js +7 -0
  75. package/dist/components/ui/skeleton.d.ts +17 -0
  76. package/dist/components/ui/skeleton.d.ts.map +1 -0
  77. package/dist/components/ui/skeleton.js +25 -0
  78. package/dist/components/ui/slider.d.ts +5 -0
  79. package/dist/components/ui/slider.d.ts.map +1 -0
  80. package/dist/components/ui/slider.js +7 -0
  81. package/dist/components/ui/sonner.d.ts +5 -0
  82. package/dist/components/ui/sonner.d.ts.map +1 -0
  83. package/dist/components/ui/sonner.js +15 -0
  84. package/dist/components/ui/spinner.d.ts +6 -0
  85. package/dist/components/ui/spinner.d.ts.map +1 -0
  86. package/dist/components/ui/spinner.js +8 -0
  87. package/dist/components/ui/stack.d.ts +13 -0
  88. package/dist/components/ui/stack.d.ts.map +1 -0
  89. package/dist/components/ui/stack.js +39 -0
  90. package/dist/components/ui/status-badge.d.ts +20 -0
  91. package/dist/components/ui/status-badge.d.ts.map +1 -0
  92. package/dist/components/ui/status-badge.js +41 -0
  93. package/dist/components/ui/switch.d.ts +5 -0
  94. package/dist/components/ui/switch.d.ts.map +1 -0
  95. package/dist/components/ui/switch.js +7 -0
  96. package/dist/components/ui/tabs.d.ts +8 -0
  97. package/dist/components/ui/tabs.d.ts.map +1 -0
  98. package/dist/components/ui/tabs.js +12 -0
  99. package/dist/components/ui/tag-editor.d.ts +24 -0
  100. package/dist/components/ui/tag-editor.d.ts.map +1 -0
  101. package/dist/components/ui/tag-editor.js +32 -0
  102. package/dist/components/ui/tag-input.d.ts +19 -0
  103. package/dist/components/ui/tag-input.d.ts.map +1 -0
  104. package/dist/components/ui/tag-input.js +28 -0
  105. package/dist/components/ui/textarea.d.ts +6 -0
  106. package/dist/components/ui/textarea.d.ts.map +1 -0
  107. package/dist/components/ui/textarea.js +8 -0
  108. package/dist/components/ui/themed-select.d.ts +27 -0
  109. package/dist/components/ui/themed-select.d.ts.map +1 -0
  110. package/dist/components/ui/themed-select.js +57 -0
  111. package/dist/components/ui/tooltip-extended.d.ts +76 -0
  112. package/dist/components/ui/tooltip-extended.d.ts.map +1 -0
  113. package/dist/components/ui/tooltip-extended.js +128 -0
  114. package/dist/components/ui/tooltip.d.ts +8 -0
  115. package/dist/components/ui/tooltip.d.ts.map +1 -0
  116. package/dist/components/ui/tooltip.js +10 -0
  117. package/dist/components/ui/typography.d.ts +17 -0
  118. package/dist/components/ui/typography.d.ts.map +1 -0
  119. package/dist/components/ui/typography.js +44 -0
  120. package/dist/index.d.ts +42 -0
  121. package/dist/index.d.ts.map +1 -0
  122. package/dist/index.js +43 -0
  123. package/dist/lib/button-styles.d.ts +12 -0
  124. package/dist/lib/button-styles.d.ts.map +1 -0
  125. package/dist/lib/button-styles.js +11 -0
  126. package/dist/lib/utils.d.ts +6 -0
  127. package/dist/lib/utils.d.ts.map +1 -0
  128. package/dist/lib/utils.js +8 -0
  129. package/dist/package.json +69 -0
  130. package/dist/styles/theme.css +193 -0
  131. package/package.json +94 -0
  132. package/src/styles/theme.css +193 -0
@@ -0,0 +1,13 @@
1
+ import * as React from "react";
2
+ export interface EmptyStateProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ /** Icon element rendered above the title */
4
+ icon?: React.ReactNode;
5
+ /** Main heading */
6
+ title: string;
7
+ /** Supporting description text */
8
+ description?: string;
9
+ /** Primary action button or element */
10
+ action?: React.ReactNode;
11
+ }
12
+ export declare const EmptyState: React.ForwardRefExoticComponent<EmptyStateProps & React.RefAttributes<HTMLDivElement>>;
13
+ //# sourceMappingURL=empty-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"empty-state.d.ts","sourceRoot":"","sources":["../../../src/components/ui/empty-state.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,eAAgB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC3E,4CAA4C;IAC5C,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,mBAAmB;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC1B;AAED,eAAO,MAAM,UAAU,wFA0BtB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "../../lib/utils";
4
+ export const EmptyState = React.forwardRef(({ icon, title, description, action, className, children, ...props }, ref) => (_jsxs("div", { ref: ref, className: cn("flex flex-1 flex-col items-center justify-center p-6 text-center", className), ...props, children: [icon && (_jsx("div", { className: "mb-4 flex h-16 w-16 items-center justify-center rounded-2xl bg-accent/10 text-accent", children: icon })), _jsx("h3", { className: "mb-2 text-lg font-semibold", children: title }), description && (_jsx("p", { className: "mb-6 max-w-sm text-sm text-muted", children: description })), action, children] })));
5
+ EmptyState.displayName = "EmptyState";
@@ -0,0 +1,18 @@
1
+ import * as React from "react";
2
+ export interface ErrorBoundaryProps {
3
+ children: React.ReactNode;
4
+ /** Custom fallback UI — receives the error and a reset callback */
5
+ fallback?: (error: Error, resetErrorBoundary: () => void) => React.ReactNode;
6
+ }
7
+ interface ErrorBoundaryState {
8
+ error: Error | null;
9
+ }
10
+ export declare class ErrorBoundary extends React.Component<ErrorBoundaryProps, ErrorBoundaryState> {
11
+ constructor(props: ErrorBoundaryProps);
12
+ static getDerivedStateFromError(error: Error): ErrorBoundaryState;
13
+ componentDidCatch(error: Error, errorInfo: React.ErrorInfo): void;
14
+ resetErrorBoundary: () => void;
15
+ render(): string | number | bigint | boolean | import("react/jsx-runtime").JSX.Element | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | null | undefined;
16
+ }
17
+ export {};
18
+ //# sourceMappingURL=error-boundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-boundary.d.ts","sourceRoot":"","sources":["../../../src/components/ui/error-boundary.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,mEAAmE;IACnE,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,MAAM,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC;CAC9E;AAED,UAAU,kBAAkB;IAC1B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAED,qBAAa,aAAc,SAAQ,KAAK,CAAC,SAAS,CAChD,kBAAkB,EAClB,kBAAkB,CACnB;gBACa,KAAK,EAAE,kBAAkB;IAKrC,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,KAAK,GAAG,kBAAkB;IAIjE,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS;IAI1D,kBAAkB,aAEhB;IAEF,MAAM;CA4BP"}
@@ -0,0 +1,27 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { Button } from "./button";
4
+ export class ErrorBoundary extends React.Component {
5
+ constructor(props) {
6
+ super(props);
7
+ this.state = { error: null };
8
+ }
9
+ static getDerivedStateFromError(error) {
10
+ return { error };
11
+ }
12
+ componentDidCatch(error, errorInfo) {
13
+ console.error("[ErrorBoundary]", error, errorInfo);
14
+ }
15
+ resetErrorBoundary = () => {
16
+ this.setState({ error: null });
17
+ };
18
+ render() {
19
+ if (this.state.error) {
20
+ if (this.props.fallback) {
21
+ return this.props.fallback(this.state.error, this.resetErrorBoundary);
22
+ }
23
+ return (_jsxs("div", { className: "flex flex-col items-center justify-center gap-3 p-6 text-center border border-destructive/30 bg-destructive/5 rounded-md", children: [_jsx("p", { className: "text-sm font-semibold text-destructive", children: "Something went wrong" }), _jsx("p", { className: "text-xs text-muted max-w-sm", children: this.state.error.message }), _jsx(Button, { type: "button", variant: "outline", size: "sm", className: "rounded-md text-xs", onClick: this.resetErrorBoundary, children: "Try Again" })] }));
24
+ }
25
+ return this.props.children;
26
+ }
27
+ }
@@ -0,0 +1,11 @@
1
+ import { type VariantProps } from "class-variance-authority";
2
+ import * as React from "react";
3
+ declare const gridVariants: (props?: ({
4
+ columns?: 1 | 2 | 4 | 3 | 6 | 12 | null | undefined;
5
+ spacing?: "none" | "sm" | "lg" | "md" | null | undefined;
6
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
+ export interface GridProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof gridVariants> {
8
+ }
9
+ export declare const Grid: React.ForwardRefExoticComponent<GridProps & React.RefAttributes<HTMLDivElement>>;
10
+ export {};
11
+ //# sourceMappingURL=grid.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../../src/components/ui/grid.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,QAAA,MAAM,YAAY;;;8EAqBhB,CAAC;AAEH,MAAM,WAAW,SACf,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAC1C,YAAY,CAAC,OAAO,YAAY,CAAC;CAAG;AAExC,eAAO,MAAM,IAAI,kFAUhB,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cva } from "class-variance-authority";
3
+ import * as React from "react";
4
+ import { cn } from "../../lib/utils";
5
+ const gridVariants = cva("grid", {
6
+ variants: {
7
+ columns: {
8
+ 1: "grid-cols-1",
9
+ 2: "grid-cols-2",
10
+ 3: "grid-cols-3",
11
+ 4: "grid-cols-4",
12
+ 6: "grid-cols-6",
13
+ 12: "grid-cols-12",
14
+ },
15
+ spacing: {
16
+ none: "gap-0",
17
+ sm: "gap-2",
18
+ md: "gap-4",
19
+ lg: "gap-6",
20
+ },
21
+ },
22
+ defaultVariants: {
23
+ columns: 1,
24
+ spacing: "md",
25
+ },
26
+ });
27
+ export const Grid = React.forwardRef(({ className, columns, spacing, ...props }, ref) => {
28
+ return (_jsx("div", { ref: ref, className: cn(gridVariants({ columns, spacing }), className), ...props }));
29
+ });
30
+ Grid.displayName = "Grid";
@@ -0,0 +1,6 @@
1
+ import * as React from "react";
2
+ export interface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {
3
+ }
4
+ declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
5
+ export { Input };
6
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../../src/components/ui/input.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,WAAW,UACf,SAAQ,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC;CAAG;AAExD,QAAA,MAAM,KAAK,qFAcV,CAAC;AAGF,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "../../lib/utils";
4
+ const Input = React.forwardRef(({ className, type, ...props }, ref) => {
5
+ return (_jsx("input", { type: type, className: cn("flex h-10 w-full rounded-md border border-input bg-bg px-3 py-2 text-sm ring-offset-bg file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50", className), ref: ref, ...props }));
6
+ });
7
+ Input.displayName = "Input";
8
+ export { Input };
@@ -0,0 +1,6 @@
1
+ import * as LabelPrimitive from "@radix-ui/react-label";
2
+ import { type VariantProps } from "class-variance-authority";
3
+ import * as React from "react";
4
+ declare const Label: React.ForwardRefExoticComponent<Omit<LabelPrimitive.LabelProps & React.RefAttributes<HTMLLabelElement>, "ref"> & VariantProps<(props?: import("class-variance-authority/types").ClassProp | undefined) => string> & React.RefAttributes<HTMLLabelElement>>;
5
+ export { Label };
6
+ //# sourceMappingURL=label.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../../src/components/ui/label.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,QAAA,MAAM,KAAK,4PAUT,CAAC;AAGH,OAAO,EAAE,KAAK,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as LabelPrimitive from "@radix-ui/react-label";
3
+ import { cva } from "class-variance-authority";
4
+ import * as React from "react";
5
+ import { cn } from "../../lib/utils";
6
+ const labelVariants = cva("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70");
7
+ const Label = React.forwardRef(({ className, ...props }, ref) => (_jsx(LabelPrimitive.Root, { ref: ref, className: cn(labelVariants(), className), ...props })));
8
+ Label.displayName = LabelPrimitive.Root.displayName;
9
+ export { Label };
@@ -0,0 +1,7 @@
1
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
2
+ import * as React from "react";
3
+ declare const Popover: React.FC<PopoverPrimitive.PopoverProps>;
4
+ declare const PopoverTrigger: React.ForwardRefExoticComponent<PopoverPrimitive.PopoverTriggerProps & React.RefAttributes<HTMLButtonElement>>;
5
+ declare const PopoverContent: React.ForwardRefExoticComponent<Omit<PopoverPrimitive.PopoverContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
6
+ export { Popover, PopoverTrigger, PopoverContent };
7
+ //# sourceMappingURL=popover.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../../../src/components/ui/popover.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,QAAA,MAAM,OAAO,yCAAwB,CAAC;AAEtC,QAAA,MAAM,cAAc,gHAA2B,CAAC;AAEhD,QAAA,MAAM,cAAc,gKAgBlB,CAAC;AAGH,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as PopoverPrimitive from "@radix-ui/react-popover";
3
+ import * as React from "react";
4
+ import { cn } from "../../lib/utils";
5
+ const Popover = PopoverPrimitive.Root;
6
+ const PopoverTrigger = PopoverPrimitive.Trigger;
7
+ const PopoverContent = React.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => (_jsx(PopoverPrimitive.Portal, { children: _jsx(PopoverPrimitive.Content, { ref: ref, align: align, sideOffset: sideOffset, className: cn("z-50 w-72 rounded-md border border-border bg-card p-4 text-txt shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", className), ...props }) })));
8
+ PopoverContent.displayName = PopoverPrimitive.Content.displayName;
9
+ export { Popover, PopoverTrigger, PopoverContent };
@@ -0,0 +1,13 @@
1
+ import * as React from "react";
2
+ export interface SaveFooterProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ dirty: boolean;
4
+ saving: boolean;
5
+ saveError: string | null;
6
+ saveSuccess: boolean;
7
+ onSave: () => void;
8
+ saveLabel?: string;
9
+ savingLabel?: string;
10
+ savedLabel?: string;
11
+ }
12
+ export declare const SaveFooter: React.ForwardRefExoticComponent<SaveFooterProps & React.RefAttributes<HTMLDivElement>>;
13
+ //# sourceMappingURL=save-footer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"save-footer.d.ts","sourceRoot":"","sources":["../../../src/components/ui/save-footer.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,eAAgB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC3E,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,UAAU,wFA0CtB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "../../lib/utils";
4
+ export const SaveFooter = React.forwardRef(({ dirty, saving, saveError, saveSuccess, onSave, saveLabel = "Save Changes", savingLabel = "Saving…", savedLabel = "Saved", className, ...props }, ref) => {
5
+ if (!dirty)
6
+ return null;
7
+ return (_jsxs("div", { ref: ref, className: cn("flex items-center justify-end gap-3 border-t border-border pt-2", className), ...props, children: [saveError && (_jsx("span", { className: "text-xs text-destructive", children: saveError })), saveSuccess && _jsx("span", { className: "text-xs text-ok", children: savedLabel }), _jsx("button", { type: "button", className: "rounded-md bg-primary px-4 py-1.5 text-xs font-semibold text-primary-fg transition-opacity hover:opacity-90 disabled:opacity-50", disabled: saving, onClick: onSave, children: saving ? savingLabel : saveLabel })] }));
8
+ });
9
+ SaveFooter.displayName = "SaveFooter";
@@ -0,0 +1,17 @@
1
+ /**
2
+ * SearchBar — a self-contained search input with submit button.
3
+ *
4
+ * Fully generic; no app-context dependency. Callers pass the placeholder
5
+ * and loading state directly.
6
+ */
7
+ export interface SearchBarProps {
8
+ onSearch: (query: string) => void;
9
+ searching?: boolean;
10
+ placeholder?: string;
11
+ /** Label for the submit button when idle. Defaults to "Search". */
12
+ searchLabel?: string;
13
+ /** Label for the submit button when busy. Defaults to "Searching...". */
14
+ searchingLabel?: string;
15
+ }
16
+ export declare function SearchBar({ onSearch, searching, placeholder, searchLabel, searchingLabel, }: SearchBarProps): import("react/jsx-runtime").JSX.Element;
17
+ //# sourceMappingURL=search-bar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-bar.d.ts","sourceRoot":"","sources":["../../../src/components/ui/search-bar.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,SAAS,EACT,WAAyB,EACzB,WAAsB,EACtB,cAA+B,GAChC,EAAE,cAAc,2CAiChB"}
@@ -0,0 +1,19 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * SearchBar — a self-contained search input with submit button.
4
+ *
5
+ * Fully generic; no app-context dependency. Callers pass the placeholder
6
+ * and loading state directly.
7
+ */
8
+ import { useCallback, useState } from "react";
9
+ import { Button } from "./button";
10
+ import { Input } from "./input";
11
+ export function SearchBar({ onSearch, searching, placeholder = "Search...", searchLabel = "Search", searchingLabel = "Searching...", }) {
12
+ const [query, setQuery] = useState("");
13
+ const handleSubmit = useCallback(() => {
14
+ if (query.trim()) {
15
+ onSearch(query.trim());
16
+ }
17
+ }, [query, onSearch]);
18
+ return (_jsx("div", { className: "mb-6", children: _jsxs("div", { className: "flex gap-2", children: [_jsx(Input, { type: "text", placeholder: placeholder, value: query, onChange: (e) => setQuery(e.target.value), onKeyDown: (e) => e.key === "Enter" && handleSubmit(), className: "h-9 bg-bg border-border text-sm shadow-sm focus-visible:ring-1 focus-visible:ring-accent", disabled: searching }), _jsx(Button, { variant: "default", size: "sm", className: "h-9 px-4 shadow-sm", onClick: handleSubmit, disabled: !query.trim() || searching, children: searching ? searchingLabel : searchLabel })] }) }));
19
+ }
@@ -0,0 +1,11 @@
1
+ import * as React from "react";
2
+ export interface SearchInputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "type"> {
3
+ /** Called when the clear button is clicked */
4
+ onClear?: () => void;
5
+ /** Show a loading indicator */
6
+ loading?: boolean;
7
+ /** Aria-label for the clear button */
8
+ clearLabel?: string;
9
+ }
10
+ export declare const SearchInput: React.ForwardRefExoticComponent<SearchInputProps & React.RefAttributes<HTMLInputElement>>;
11
+ //# sourceMappingURL=search-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-input.d.ts","sourceRoot":"","sources":["../../../src/components/ui/search-input.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,gBACf,SAAQ,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACjE,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,sCAAsC;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,WAAW,2FAwCvB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Search, X } from "lucide-react";
3
+ import * as React from "react";
4
+ import { cn } from "../../lib/utils";
5
+ export const SearchInput = React.forwardRef(({ className, value, onClear, loading, clearLabel = "Clear search", ...props }, ref) => {
6
+ const hasValue = typeof value === "string" ? value.length > 0 : !!value;
7
+ return (_jsxs("div", { className: cn("relative flex items-center", className), children: [_jsx(Search, { className: "pointer-events-none absolute left-2.5 h-3.5 w-3.5 text-muted" }), _jsx("input", { ref: ref, type: "text", value: value, className: "h-8 w-full rounded-md border border-input bg-bg pl-8 pr-8 text-xs placeholder:text-muted focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50", ...props }), hasValue && onClear && (_jsx("button", { type: "button", onClick: onClear, className: "absolute right-2 rounded-sm p-0.5 text-muted hover:text-txt transition-colors", "aria-label": clearLabel, children: _jsx(X, { className: "h-3 w-3" }) })), loading && (_jsx("div", { className: "absolute right-2 h-3 w-3 animate-spin rounded-full border-2 border-muted border-t-accent" }))] }));
8
+ });
9
+ SearchInput.displayName = "SearchInput";
@@ -0,0 +1,15 @@
1
+ import * as React from "react";
2
+ export interface SectionCardProps extends React.HTMLAttributes<HTMLDivElement> {
3
+ /** Section title shown in the header */
4
+ title?: string;
5
+ /** Optional description below the title */
6
+ description?: string;
7
+ /** Optional actions (buttons, badges) aligned to the right of the header */
8
+ actions?: React.ReactNode;
9
+ /** Whether the section is collapsible */
10
+ collapsible?: boolean;
11
+ /** Default collapsed state (only when collapsible) */
12
+ defaultCollapsed?: boolean;
13
+ }
14
+ export declare const SectionCard: React.ForwardRefExoticComponent<SectionCardProps & React.RefAttributes<HTMLDivElement>>;
15
+ //# sourceMappingURL=section-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"section-card.d.ts","sourceRoot":"","sources":["../../../src/components/ui/section-card.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,gBAAiB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IAC5E,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B,yCAAyC;IACzC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sDAAsD;IACtD,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,eAAO,MAAM,WAAW,yFAiEvB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "../../lib/utils";
4
+ export const SectionCard = React.forwardRef(({ title, description, actions, collapsible = false, defaultCollapsed = false, className, children, ...props }, ref) => {
5
+ const [collapsed, setCollapsed] = React.useState(defaultCollapsed);
6
+ return (_jsxs("div", { ref: ref, className: cn("border border-border bg-card text-card-fg", className), ...props, children: [(title || actions) && (_jsxs("div", { className: "flex items-center justify-between border-b border-border px-4 py-3", children: [_jsxs("div", { className: "flex flex-col gap-0.5", children: [title && (_jsxs("button", { type: "button", className: cn("text-sm font-semibold text-left", collapsible &&
7
+ "cursor-pointer hover:text-accent transition-colors", !collapsible && "cursor-default"), onClick: collapsible ? () => setCollapsed((c) => !c) : undefined, tabIndex: collapsible ? 0 : -1, children: [collapsible && (_jsx("span", { className: cn("mr-1.5 inline-block text-[10px] text-muted transition-transform", !collapsed && "rotate-90"), children: "\u25B6" })), title] })), description && (_jsx("span", { className: "text-[11px] text-muted", children: description }))] }), actions && (_jsx("div", { className: "flex items-center gap-2", children: actions }))] })), (!collapsible || !collapsed) && _jsx("div", { className: "p-4", children: children })] }));
8
+ });
9
+ SectionCard.displayName = "SectionCard";
@@ -0,0 +1,14 @@
1
+ import * as SelectPrimitive from "@radix-ui/react-select";
2
+ import * as React from "react";
3
+ declare const Select: React.FC<SelectPrimitive.SelectProps>;
4
+ declare const SelectGroup: React.ForwardRefExoticComponent<SelectPrimitive.SelectGroupProps & React.RefAttributes<HTMLDivElement>>;
5
+ declare const SelectValue: React.ForwardRefExoticComponent<SelectPrimitive.SelectValueProps & React.RefAttributes<HTMLSpanElement>>;
6
+ declare const SelectTrigger: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectTriggerProps & React.RefAttributes<HTMLButtonElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
7
+ declare const SelectScrollUpButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollUpButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
8
+ declare const SelectScrollDownButton: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectScrollDownButtonProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
9
+ declare const SelectContent: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
10
+ declare const SelectLabel: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectLabelProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
11
+ declare const SelectItem: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
12
+ declare const SelectSeparator: React.ForwardRefExoticComponent<Omit<SelectPrimitive.SelectSeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
13
+ export { Select, SelectGroup, SelectValue, SelectTrigger, SelectContent, SelectLabel, SelectItem, SelectSeparator, SelectScrollUpButton, SelectScrollDownButton, };
14
+ //# sourceMappingURL=select.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../../src/components/ui/select.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAE1D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,QAAA,MAAM,MAAM,uCAAuB,CAAC;AAEpC,QAAA,MAAM,WAAW,yGAAwB,CAAC;AAE1C,QAAA,MAAM,WAAW,0GAAwB,CAAC;AAE1C,QAAA,MAAM,aAAa,oKAiBjB,CAAC;AAGH,QAAA,MAAM,oBAAoB,qKAcxB,CAAC;AAGH,QAAA,MAAM,sBAAsB,uKAc1B,CAAC;AAIH,QAAA,MAAM,aAAa,8JA6BjB,CAAC;AAGH,QAAA,MAAM,WAAW,4JASf,CAAC;AAGH,QAAA,MAAM,UAAU,2JAoBd,CAAC;AAGH,QAAA,MAAM,eAAe,gKASnB,CAAC;AAGH,OAAO,EACL,MAAM,EACN,WAAW,EACX,WAAW,EACX,aAAa,EACb,aAAa,EACb,WAAW,EACX,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,sBAAsB,GACvB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as SelectPrimitive from "@radix-ui/react-select";
3
+ import { Check, ChevronDown, ChevronUp } from "lucide-react";
4
+ import * as React from "react";
5
+ import { cn } from "../../lib/utils";
6
+ const Select = SelectPrimitive.Root;
7
+ const SelectGroup = SelectPrimitive.Group;
8
+ const SelectValue = SelectPrimitive.Value;
9
+ const SelectTrigger = React.forwardRef(({ className, children, ...props }, ref) => (_jsxs(SelectPrimitive.Trigger, { ref: ref, className: cn("flex h-10 w-full items-center justify-between rounded-md border border-input bg-bg px-3 py-2 text-sm ring-offset-bg placeholder:text-muted focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1", className), ...props, children: [children, _jsx(SelectPrimitive.Icon, { asChild: true, children: _jsx(ChevronDown, { className: "h-4 w-4 opacity-50" }) })] })));
10
+ SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
11
+ const SelectScrollUpButton = React.forwardRef(({ className, ...props }, ref) => (_jsx(SelectPrimitive.ScrollUpButton, { ref: ref, className: cn("flex cursor-default items-center justify-center py-1", className), ...props, children: _jsx(ChevronUp, { className: "h-4 w-4" }) })));
12
+ SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
13
+ const SelectScrollDownButton = React.forwardRef(({ className, ...props }, ref) => (_jsx(SelectPrimitive.ScrollDownButton, { ref: ref, className: cn("flex cursor-default items-center justify-center py-1", className), ...props, children: _jsx(ChevronDown, { className: "h-4 w-4" }) })));
14
+ SelectScrollDownButton.displayName =
15
+ SelectPrimitive.ScrollDownButton.displayName;
16
+ const SelectContent = React.forwardRef(({ className, children, position = "popper", ...props }, ref) => (_jsx(SelectPrimitive.Portal, { children: _jsxs(SelectPrimitive.Content, { ref: ref, className: cn("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border border-border bg-card text-txt shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", position === "popper" &&
17
+ "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1", className), position: position, ...props, children: [_jsx(SelectScrollUpButton, {}), _jsx(SelectPrimitive.Viewport, { className: cn("p-1", position === "popper" &&
18
+ "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"), children: children }), _jsx(SelectScrollDownButton, {})] }) })));
19
+ SelectContent.displayName = SelectPrimitive.Content.displayName;
20
+ const SelectLabel = React.forwardRef(({ className, ...props }, ref) => (_jsx(SelectPrimitive.Label, { ref: ref, className: cn("py-1.5 pl-8 pr-2 text-sm font-semibold", className), ...props })));
21
+ SelectLabel.displayName = SelectPrimitive.Label.displayName;
22
+ const SelectItem = React.forwardRef(({ className, children, ...props }, ref) => (_jsxs(SelectPrimitive.Item, { ref: ref, className: cn("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-fg data-[disabled]:pointer-events-none data-[disabled]:opacity-50", className), ...props, children: [_jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: _jsx(SelectPrimitive.ItemIndicator, { children: _jsx(Check, { className: "h-4 w-4" }) }) }), _jsx(SelectPrimitive.ItemText, { children: children })] })));
23
+ SelectItem.displayName = SelectPrimitive.Item.displayName;
24
+ const SelectSeparator = React.forwardRef(({ className, ...props }, ref) => (_jsx(SelectPrimitive.Separator, { ref: ref, className: cn("-mx-1 my-1 h-px bg-muted", className), ...props })));
25
+ SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
26
+ export { Select, SelectGroup, SelectValue, SelectTrigger, SelectContent, SelectLabel, SelectItem, SelectSeparator, SelectScrollUpButton, SelectScrollDownButton, };
@@ -0,0 +1,5 @@
1
+ import * as SeparatorPrimitive from "@radix-ui/react-separator";
2
+ import * as React from "react";
3
+ declare const Separator: React.ForwardRefExoticComponent<Omit<SeparatorPrimitive.SeparatorProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
4
+ export { Separator };
5
+ //# sourceMappingURL=separator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"separator.d.ts","sourceRoot":"","sources":["../../../src/components/ui/separator.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,kBAAkB,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,QAAA,MAAM,SAAS,6JAoBd,CAAC;AAGF,OAAO,EAAE,SAAS,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import * as SeparatorPrimitive from "@radix-ui/react-separator";
3
+ import * as React from "react";
4
+ import { cn } from "../../lib/utils";
5
+ const Separator = React.forwardRef(({ className, orientation = "horizontal", decorative = true, ...props }, ref) => (_jsx(SeparatorPrimitive.Root, { ref: ref, decorative: decorative, orientation: orientation, className: cn("shrink-0 bg-border", orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]", className), ...props })));
6
+ Separator.displayName = SeparatorPrimitive.Root.displayName;
7
+ export { Separator };
@@ -0,0 +1,17 @@
1
+ import * as React from "react";
2
+ declare const Skeleton: React.ForwardRefExoticComponent<React.HTMLAttributes<HTMLDivElement> & React.RefAttributes<HTMLDivElement>>;
3
+ declare function SkeletonLine({ width, className, }: {
4
+ width?: string;
5
+ className?: string;
6
+ }): import("react/jsx-runtime").JSX.Element;
7
+ declare function SkeletonText({ lines }: {
8
+ lines?: number;
9
+ }): import("react/jsx-runtime").JSX.Element;
10
+ declare function SkeletonMessage({ isUser }: {
11
+ isUser?: boolean;
12
+ }): import("react/jsx-runtime").JSX.Element;
13
+ declare function SkeletonCard(): import("react/jsx-runtime").JSX.Element;
14
+ declare function SkeletonSidebar(): import("react/jsx-runtime").JSX.Element;
15
+ declare function SkeletonChat(): import("react/jsx-runtime").JSX.Element;
16
+ export { Skeleton, SkeletonLine, SkeletonText, SkeletonMessage, SkeletonCard, SkeletonSidebar, SkeletonChat, };
17
+ //# sourceMappingURL=skeleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skeleton.d.ts","sourceRoot":"","sources":["../../../src/components/ui/skeleton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,QAAA,MAAM,QAAQ,6GASZ,CAAC;AAKH,iBAAS,YAAY,CAAC,EACpB,KAAc,EACd,SAAc,GACf,EAAE;IACD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,2CAOA;AAED,iBAAS,YAAY,CAAC,EAAE,KAAS,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,2CAWtD;AAED,iBAAS,eAAe,CAAC,EAAE,MAAc,EAAE,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,2CAmBhE;AAED,iBAAS,YAAY,4CAapB;AAED,iBAAS,eAAe,4CAYvB;AAED,iBAAS,YAAY,4CAQpB;AAED,OAAO,EACL,QAAQ,EACR,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,eAAe,EACf,YAAY,GACb,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "../../lib/utils";
4
+ const Skeleton = React.forwardRef(({ className, ...props }, ref) => (_jsx("div", { ref: ref, className: cn("animate-pulse rounded-md bg-secondary", className), ...props })));
5
+ Skeleton.displayName = "Skeleton";
6
+ /* ── Skeleton Variants ───────────────────────────────────────────────── */
7
+ function SkeletonLine({ width = "100%", className = "", }) {
8
+ return (_jsx("div", { className: cn("h-4 animate-pulse rounded bg-bg-accent", className), style: { width } }));
9
+ }
10
+ function SkeletonText({ lines = 3 }) {
11
+ return (_jsx("div", { className: "space-y-2", children: Array.from({ length: lines }, (_, i) => i).map((lineIndex) => (_jsx(SkeletonLine, { width: lineIndex === lines - 1 ? "60%" : "100%" }, lineIndex))) }));
12
+ }
13
+ function SkeletonMessage({ isUser = false }) {
14
+ return (_jsxs("div", { className: cn("flex items-start gap-3 mt-4", isUser ? "justify-end" : "justify-start"), children: [!isUser && (_jsx("div", { className: "h-8 w-8 shrink-0 animate-pulse rounded-full bg-bg-accent" })), _jsxs("div", { className: cn("max-w-[80%] space-y-2", isUser && "items-end"), children: [_jsx("div", { className: "h-3 w-20 animate-pulse rounded bg-bg-accent" }), _jsx("div", { className: "min-w-[200px] animate-pulse rounded-2xl bg-bg-accent px-4 py-3", children: _jsx(SkeletonText, { lines: 2 }) })] })] }));
15
+ }
16
+ function SkeletonCard() {
17
+ return (_jsxs("div", { className: "space-y-4 rounded-lg border border-border bg-card p-4", children: [_jsxs("div", { className: "flex items-center gap-3", children: [_jsx("div", { className: "h-10 w-10 animate-pulse rounded-lg bg-bg-accent" }), _jsxs("div", { className: "flex-1 space-y-2", children: [_jsx(SkeletonLine, { width: "40%" }), _jsx(SkeletonLine, { width: "60%" })] })] }), _jsx(SkeletonText, { lines: 3 })] }));
18
+ }
19
+ function SkeletonSidebar() {
20
+ return (_jsxs("div", { className: "w-64 space-y-2 p-4", children: [_jsx("div", { className: "mb-6 h-8 w-32 animate-pulse rounded bg-bg-accent" }), Array.from({ length: 6 }, (_, idx) => idx).map((i) => (_jsxs("div", { className: "flex items-center gap-3 p-2", children: [_jsx("div", { className: "h-5 w-5 animate-pulse rounded bg-bg-accent" }), _jsx("div", { className: "h-4 flex-1 animate-pulse rounded bg-bg-accent" })] }, i)))] }));
21
+ }
22
+ function SkeletonChat() {
23
+ return (_jsxs("div", { className: "space-y-2 p-4", children: [_jsx(SkeletonMessage, {}), _jsx(SkeletonMessage, { isUser: true }), _jsx(SkeletonMessage, {})] }));
24
+ }
25
+ export { Skeleton, SkeletonLine, SkeletonText, SkeletonMessage, SkeletonCard, SkeletonSidebar, SkeletonChat, };
@@ -0,0 +1,5 @@
1
+ import * as SliderPrimitive from "@radix-ui/react-slider";
2
+ import * as React from "react";
3
+ declare const Slider: React.ForwardRefExoticComponent<Omit<SliderPrimitive.SliderProps & React.RefAttributes<HTMLSpanElement>, "ref"> & React.RefAttributes<HTMLSpanElement>>;
4
+ export { Slider };
5
+ //# sourceMappingURL=slider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slider.d.ts","sourceRoot":"","sources":["../../../src/components/ui/slider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,eAAe,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,QAAA,MAAM,MAAM,yJAiBV,CAAC;AAGH,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import * as SliderPrimitive from "@radix-ui/react-slider";
3
+ import * as React from "react";
4
+ import { cn } from "../../lib/utils";
5
+ const Slider = React.forwardRef(({ className, ...props }, ref) => (_jsxs(SliderPrimitive.Root, { ref: ref, className: cn("relative flex w-full touch-none select-none items-center", className), ...props, children: [_jsx(SliderPrimitive.Track, { className: "relative h-2 w-full grow overflow-hidden rounded-full bg-secondary", children: _jsx(SliderPrimitive.Range, { className: "absolute h-full bg-primary" }) }), _jsx(SliderPrimitive.Thumb, { className: "block h-5 w-5 rounded-full border-2 border-primary bg-bg ring-offset-bg transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50" })] })));
6
+ Slider.displayName = SliderPrimitive.Root.displayName;
7
+ export { Slider };
@@ -0,0 +1,5 @@
1
+ import { Toaster as Sonner } from "sonner";
2
+ type ToasterProps = React.ComponentProps<typeof Sonner>;
3
+ declare const Toaster: ({ ...props }: ToasterProps) => import("react/jsx-runtime").JSX.Element;
4
+ export { Toaster };
5
+ //# sourceMappingURL=sonner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sonner.d.ts","sourceRoot":"","sources":["../../../src/components/ui/sonner.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,QAAQ,CAAC;AAE3C,KAAK,YAAY,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,CAAC;AAExD,QAAA,MAAM,OAAO,GAAI,cAAc,YAAY,4CAoB1C,CAAC;AAEF,OAAO,EAAE,OAAO,EAAE,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useTheme } from "next-themes";
3
+ import { Toaster as Sonner } from "sonner";
4
+ const Toaster = ({ ...props }) => {
5
+ const { theme = "system" } = useTheme();
6
+ return (_jsx(Sonner, { theme: theme, className: "toaster group", toastOptions: {
7
+ classNames: {
8
+ toast: "group toast group-[.toaster]:bg-bg group-[.toaster]:text-txt group-[.toaster]:border-border group-[.toaster]:shadow-lg",
9
+ description: "group-[.toast]:text-muted",
10
+ actionButton: "group-[.toast]:bg-primary group-[.toast]:text-primary-fg",
11
+ cancelButton: "group-[.toast]:bg-muted group-[.toast]:text-muted-fg",
12
+ },
13
+ }, ...props }));
14
+ };
15
+ export { Toaster };
@@ -0,0 +1,6 @@
1
+ import * as React from "react";
2
+ export interface SpinnerProps extends React.SVGAttributes<SVGSVGElement> {
3
+ size?: number | string;
4
+ }
5
+ export declare const Spinner: React.ForwardRefExoticComponent<SpinnerProps & React.RefAttributes<SVGSVGElement>>;
6
+ //# sourceMappingURL=spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../../src/components/ui/spinner.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,YAAa,SAAQ,KAAK,CAAC,aAAa,CAAC,aAAa,CAAC;IACtE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,OAAO,oFAWnB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { Loader2 } from "lucide-react";
3
+ import * as React from "react";
4
+ import { cn } from "../../lib/utils";
5
+ export const Spinner = React.forwardRef(({ className, size = 24, ...props }, ref) => {
6
+ return (_jsx(Loader2, { ref: ref, size: size, className: cn("animate-spin text-muted", className), ...props }));
7
+ });
8
+ Spinner.displayName = "Spinner";
@@ -0,0 +1,13 @@
1
+ import { type VariantProps } from "class-variance-authority";
2
+ import * as React from "react";
3
+ declare const stackVariants: (props?: ({
4
+ direction?: "row" | "col" | null | undefined;
5
+ align?: "center" | "end" | "baseline" | "start" | "stretch" | null | undefined;
6
+ justify?: "center" | "end" | "start" | "between" | null | undefined;
7
+ spacing?: "none" | "sm" | "lg" | "md" | null | undefined;
8
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
9
+ export interface StackProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof stackVariants> {
10
+ }
11
+ export declare const Stack: React.ForwardRefExoticComponent<StackProps & React.RefAttributes<HTMLDivElement>>;
12
+ export {};
13
+ //# sourceMappingURL=stack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stack.d.ts","sourceRoot":"","sources":["../../../src/components/ui/stack.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,QAAA,MAAM,aAAa;;;;;8EA8BjB,CAAC;AAEH,MAAM,WAAW,UACf,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAC1C,YAAY,CAAC,OAAO,aAAa,CAAC;CAAG;AAEzC,eAAO,MAAM,KAAK,mFAajB,CAAC"}
@@ -0,0 +1,39 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { cva } from "class-variance-authority";
3
+ import * as React from "react";
4
+ import { cn } from "../../lib/utils";
5
+ const stackVariants = cva("flex", {
6
+ variants: {
7
+ direction: {
8
+ row: "flex-row",
9
+ col: "flex-col",
10
+ },
11
+ align: {
12
+ start: "items-start",
13
+ center: "items-center",
14
+ end: "items-end",
15
+ stretch: "items-stretch",
16
+ baseline: "items-baseline",
17
+ },
18
+ justify: {
19
+ start: "justify-start",
20
+ center: "justify-center",
21
+ end: "justify-end",
22
+ between: "justify-between",
23
+ },
24
+ spacing: {
25
+ none: "gap-0",
26
+ sm: "gap-2",
27
+ md: "gap-4",
28
+ lg: "gap-6",
29
+ },
30
+ },
31
+ defaultVariants: {
32
+ direction: "col",
33
+ spacing: "md",
34
+ },
35
+ });
36
+ export const Stack = React.forwardRef(({ className, direction, align, justify, spacing, ...props }, ref) => {
37
+ return (_jsx("div", { ref: ref, className: cn(stackVariants({ direction, align, justify, spacing }), className), ...props }));
38
+ });
39
+ Stack.displayName = "Stack";