diff --git a/packages/chat/src/components/message.tsx b/packages/chat/src/components/message.tsx
index 8fe2f3c..3c65ec8 100644
--- a/packages/chat/src/components/message.tsx
+++ b/packages/chat/src/components/message.tsx
@@ -4,7 +4,7 @@ import { useChat } from "../context";
import type { RawMessage } from "../values";
import { log } from "@tensamin/shared/log";
import Text from "@tensamin/markdown/text";
-import { AlertTriangle } from "lucide-react";
+import { AlertTriangle, Clock } from "lucide-react";
import {
Tooltip,
@@ -77,7 +77,7 @@ export default function Message(props: {
return (
Failed to send message
-
} />
+
+
+
)}
+ {props.message.message_state === "awaiting" &&
+ !props.message.failed &&
}
{isReady ?
: null}
diff --git a/packages/shared/src/data.ts b/packages/shared/src/data.ts
index e3b4d49..5fd1dcd 100644
--- a/packages/shared/src/data.ts
+++ b/packages/shared/src/data.ts
@@ -19,6 +19,7 @@ const message = z.object({
tint: z.string().length(7).startsWith("#").optional(),
avatar: z.boolean().optional(),
display: z.boolean().optional(),
+ message_state: z.enum(["read", "received", "sent", "sending", "awaiting"]),
});
export const failedUser = {
diff --git a/packages/ttp/src/codec.ts b/packages/ttp/src/codec.ts
index 0d00bfb..04d0a30 100644
--- a/packages/ttp/src/codec.ts
+++ b/packages/ttp/src/codec.ts
@@ -196,7 +196,8 @@ const DATA_TYPES = [
"timeout",
"has_admin",
"last_message_at",
- "height"
+ "height",
+ "sent_by_self"
] as const;
const COMMUNICATION_TYPE_BY_NAME = createIndexMap(COMMUNICATION_TYPES);
@@ -296,6 +297,7 @@ registerDataKinds("bool", [
"accepted",
"has_admin",
"screen_share",
+ "sent_by_self",
]);
registerDataKinds({ array: "string" }, ["user_states"]);
diff --git a/packages/ui/components.json b/packages/ui/components.json
index 4351c1f..1503c2a 100644
--- a/packages/ui/components.json
+++ b/packages/ui/components.json
@@ -1,6 +1,6 @@
{
"$schema": "https://ui.shadcn.com/schema.json",
- "style": "base-nova",
+ "style": "radix-nova",
"rsc": false,
"tsx": true,
"tailwind": {
diff --git a/packages/ui/package.json b/packages/ui/package.json
index c8f16e4..a32474e 100644
--- a/packages/ui/package.json
+++ b/packages/ui/package.json
@@ -10,17 +10,18 @@
"./link": "./src/link.tsx"
},
"scripts": {
+ "patch": "find src -type f \\( -name \"*.ts\" -o -name \"*.tsx\" \\) -print0 | xargs -0 sed -i 's|@/lib/utils|../lib/utils|g; s|@/cmp/|./|g'",
"format": "bunx prettier --write .",
"lint": "eslint src",
"build": "tsc -p tsconfig.json --noEmit"
},
"dependencies": {
- "@base-ui/react": "^1.3.0",
"@radix-ui/react-context-menu": "^2.2.16",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"lucide-react": "^0.564.0",
"next-themes": "^0.4.6",
+ "radix-ui": "^1.4.3",
"react": "^19.2.0",
"react-dom": "^19.2.0",
"sonner": "^2.0.7",
diff --git a/packages/ui/src/cmp/avatar.tsx b/packages/ui/src/cmp/avatar.tsx
index cc32930..e585f7d 100644
--- a/packages/ui/src/cmp/avatar.tsx
+++ b/packages/ui/src/cmp/avatar.tsx
@@ -1,14 +1,14 @@
-import * as React from "react";
-import { Avatar as AvatarPrimitive } from "@base-ui/react/avatar";
+import * as React from "react"
+import { Avatar as AvatarPrimitive } from "radix-ui"
-import { cn } from "../lib/utils";
+import { cn } from "../lib/utils"
function Avatar({
className,
size = "default",
...props
-}: AvatarPrimitive.Root.Props & {
- size?: "default" | "sm" | "lg";
+}: React.ComponentProps
& {
+ size?: "default" | "sm" | "lg"
}) {
return (
- );
+ )
}
-function AvatarImage({ className, ...props }: AvatarPrimitive.Image.Props) {
+function AvatarImage({
+ className,
+ ...props
+}: React.ComponentProps) {
return (
- );
+ )
}
function AvatarFallback({
className,
...props
-}: AvatarPrimitive.Fallback.Props) {
+}: React.ComponentProps) {
return (
- );
+ )
}
function AvatarBadge({ className, ...props }: React.ComponentProps<"span">) {
@@ -61,11 +64,11 @@ function AvatarBadge({ className, ...props }: React.ComponentProps<"span">) {
"group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden",
"group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2",
"group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2",
- className,
+ className
)}
{...props}
/>
- );
+ )
}
function AvatarGroup({ className, ...props }: React.ComponentProps<"div">) {
@@ -74,11 +77,11 @@ function AvatarGroup({ className, ...props }: React.ComponentProps<"div">) {
data-slot="avatar-group"
className={cn(
"group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:ring-background",
- className,
+ className
)}
{...props}
/>
- );
+ )
}
function AvatarGroupCount({
@@ -90,11 +93,11 @@ function AvatarGroupCount({
data-slot="avatar-group-count"
className={cn(
"relative flex size-8 shrink-0 items-center justify-center rounded-full bg-muted text-sm text-muted-foreground ring-2 ring-background group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3",
- className,
+ className
)}
{...props}
/>
- );
+ )
}
export {
@@ -104,4 +107,4 @@ export {
AvatarGroup,
AvatarGroupCount,
AvatarBadge,
-};
+}
diff --git a/packages/ui/src/cmp/button.tsx b/packages/ui/src/cmp/button.tsx
index 27a650a..57240b1 100644
--- a/packages/ui/src/cmp/button.tsx
+++ b/packages/ui/src/cmp/button.tsx
@@ -1,9 +1,8 @@
-"use client";
+import * as React from "react"
+import { cva, type VariantProps } from "class-variance-authority"
+import { Slot } from "radix-ui"
-import { Button as ButtonPrimitive } from "@base-ui/react/button";
-import { cva, type VariantProps } from "class-variance-authority";
-
-import { cn } from "../lib/utils";
+import { cn } from "../lib/utils"
const buttonVariants = cva(
"group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
@@ -26,7 +25,7 @@ const buttonVariants = cva(
"h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
xs: "h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
sm: "h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5",
- lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3",
+ lg: "h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
icon: "size-8",
"icon-xs":
"size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3",
@@ -39,22 +38,30 @@ const buttonVariants = cva(
variant: "default",
size: "default",
},
- },
-);
+ }
+)
function Button({
className,
variant = "default",
size = "default",
+ asChild = false,
...props
-}: ButtonPrimitive.Props & VariantProps) {
+}: React.ComponentProps<"button"> &
+ VariantProps & {
+ asChild?: boolean
+ }) {
+ const Comp = asChild ? Slot.Root : "button"
+
return (
-
- );
+ )
}
-export { Button, buttonVariants };
+export { Button, buttonVariants }
diff --git a/packages/ui/src/cmp/card.tsx b/packages/ui/src/cmp/card.tsx
index 85e5ec7..4e5020e 100644
--- a/packages/ui/src/cmp/card.tsx
+++ b/packages/ui/src/cmp/card.tsx
@@ -1,6 +1,6 @@
-import * as React from "react";
+import * as React from "react"
-import { cn } from "../lib/utils";
+import { cn } from "../lib/utils"
function Card({
className,
@@ -13,11 +13,11 @@ function Card({
data-size={size}
className={cn(
"group/card flex flex-col gap-4 overflow-hidden rounded-xl bg-card py-4 text-sm text-card-foreground ring-1 ring-foreground/10 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl",
- className,
+ className
)}
{...props}
/>
- );
+ )
}
function CardHeader({ className, ...props }: React.ComponentProps<"div">) {
@@ -26,11 +26,11 @@ function CardHeader({ className, ...props }: React.ComponentProps<"div">) {
data-slot="card-header"
className={cn(
"group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3",
- className,
+ className
)}
{...props}
/>
- );
+ )
}
function CardTitle({ className, ...props }: React.ComponentProps<"div">) {
@@ -39,11 +39,11 @@ function CardTitle({ className, ...props }: React.ComponentProps<"div">) {
data-slot="card-title"
className={cn(
"text-base leading-snug font-medium group-data-[size=sm]/card:text-sm",
- className,
+ className
)}
{...props}
/>
- );
+ )
}
function CardDescription({ className, ...props }: React.ComponentProps<"div">) {
@@ -53,7 +53,7 @@ function CardDescription({ className, ...props }: React.ComponentProps<"div">) {
className={cn("text-sm text-muted-foreground", className)}
{...props}
/>
- );
+ )
}
function CardAction({ className, ...props }: React.ComponentProps<"div">) {
@@ -62,11 +62,11 @@ function CardAction({ className, ...props }: React.ComponentProps<"div">) {
data-slot="card-action"
className={cn(
"col-start-2 row-span-2 row-start-1 self-start justify-self-end",
- className,
+ className
)}
{...props}
/>
- );
+ )
}
function CardContent({ className, ...props }: React.ComponentProps<"div">) {
@@ -76,7 +76,7 @@ function CardContent({ className, ...props }: React.ComponentProps<"div">) {
className={cn("px-4 group-data-[size=sm]/card:px-3", className)}
{...props}
/>
- );
+ )
}
function CardFooter({ className, ...props }: React.ComponentProps<"div">) {
@@ -85,11 +85,11 @@ function CardFooter({ className, ...props }: React.ComponentProps<"div">) {
data-slot="card-footer"
className={cn(
"flex items-center rounded-b-xl border-t bg-muted/50 p-4 group-data-[size=sm]/card:p-3",
- className,
+ className
)}
{...props}
/>
- );
+ )
}
export {
@@ -100,4 +100,4 @@ export {
CardAction,
CardDescription,
CardContent,
-};
+}
diff --git a/packages/ui/src/cmp/checkbox.tsx b/packages/ui/src/cmp/checkbox.tsx
index 16e8119..508a63e 100644
--- a/packages/ui/src/cmp/checkbox.tsx
+++ b/packages/ui/src/cmp/checkbox.tsx
@@ -1,15 +1,21 @@
-import { Checkbox as CheckboxPrimitive } from "@base-ui/react/checkbox";
+"use client"
-import { cn } from "../lib/utils";
-import { CheckIcon } from "lucide-react";
+import * as React from "react"
+import { Checkbox as CheckboxPrimitive } from "radix-ui"
-function Checkbox({ className, ...props }: CheckboxPrimitive.Root.Props) {
+import { cn } from "../lib/utils"
+import { CheckIcon } from "lucide-react"
+
+function Checkbox({
+ className,
+ ...props
+}: React.ComponentProps) {
return (
@@ -17,10 +23,11 @@ function Checkbox({ className, ...props }: CheckboxPrimitive.Root.Props) {
data-slot="checkbox-indicator"
className="grid place-content-center text-current transition-none [&>svg]:size-3.5"
>
-
+
- );
+ )
}
-export { Checkbox };
+export { Checkbox }
diff --git a/packages/ui/src/cmp/context-menu.tsx b/packages/ui/src/cmp/context-menu.tsx
index b598dbc..3aebeec 100644
--- a/packages/ui/src/cmp/context-menu.tsx
+++ b/packages/ui/src/cmp/context-menu.tsx
@@ -1,92 +1,76 @@
-"use client";
+import * as React from "react"
+import { ContextMenu as ContextMenuPrimitive } from "radix-ui"
-import * as React from "react";
-import { ContextMenu as ContextMenuPrimitive } from "@base-ui/react/context-menu";
+import { cn } from "../lib/utils"
+import { ChevronRightIcon, CheckIcon } from "lucide-react"
-import { cn } from "../lib/utils";
-import { ChevronRightIcon, CheckIcon } from "lucide-react";
-
-function ContextMenu({ ...props }: ContextMenuPrimitive.Root.Props) {
- return ;
-}
-
-function ContextMenuPortal({ ...props }: ContextMenuPrimitive.Portal.Props) {
- return (
-
- );
+function ContextMenu({
+ ...props
+}: React.ComponentProps) {
+ return
}
function ContextMenuTrigger({
className,
...props
-}: ContextMenuPrimitive.Trigger.Props) {
+}: React.ComponentProps) {
return (
- );
+ )
+}
+
+function ContextMenuGroup({
+ ...props
+}: React.ComponentProps) {
+ return (
+
+ )
+}
+
+function ContextMenuPortal({
+ ...props
+}: React.ComponentProps) {
+ return (
+
+ )
+}
+
+function ContextMenuSub({
+ ...props
+}: React.ComponentProps) {
+ return
+}
+
+function ContextMenuRadioGroup({
+ ...props
+}: React.ComponentProps) {
+ return (
+
+ )
}
function ContextMenuContent({
className,
- align = "start",
- alignOffset = 4,
- side = "right",
- sideOffset = 0,
...props
-}: ContextMenuPrimitive.Popup.Props &
- Pick<
- ContextMenuPrimitive.Positioner.Props,
- "align" | "alignOffset" | "side" | "sideOffset"
- >) {
- return (
-
-
-
-
-
- );
-}
-
-function ContextMenuGroup({ ...props }: ContextMenuPrimitive.Group.Props) {
- return (
-
- );
-}
-
-function ContextMenuLabel({
- className,
- inset,
- ...props
-}: ContextMenuPrimitive.GroupLabel.Props & {
- inset?: boolean;
+}: React.ComponentProps & {
+ side?: "top" | "right" | "bottom" | "left"
}) {
return (
-
- );
+
+
+
+ )
}
function ContextMenuItem({
@@ -94,9 +78,9 @@ function ContextMenuItem({
inset,
variant = "default",
...props
-}: ContextMenuPrimitive.Item.Props & {
- inset?: boolean;
- variant?: "default" | "destructive";
+}: React.ComponentProps & {
+ inset?: boolean
+ variant?: "default" | "destructive"
}) {
return (
- );
-}
-
-function ContextMenuSub({ ...props }: ContextMenuPrimitive.SubmenuRoot.Props) {
- return (
-
- );
+ )
}
function ContextMenuSubTrigger({
@@ -123,36 +101,36 @@ function ContextMenuSubTrigger({
inset,
children,
...props
-}: ContextMenuPrimitive.SubmenuTrigger.Props & {
- inset?: boolean;
+}: React.ComponentProps & {
+ inset?: boolean
}) {
return (
-
{children}
-
- );
+
+ )
}
function ContextMenuSubContent({
+ className,
...props
-}: React.ComponentProps) {
+}: React.ComponentProps) {
return (
-
- );
+ )
}
function ContextMenuCheckboxItem({
@@ -161,8 +139,8 @@ function ContextMenuCheckboxItem({
checked,
inset,
...props
-}: ContextMenuPrimitive.CheckboxItem.Props & {
- inset?: boolean;
+}: React.ComponentProps & {
+ inset?: boolean
}) {
return (
-
-
-
+
+
+
{children}
- );
-}
-
-function ContextMenuRadioGroup({
- ...props
-}: ContextMenuPrimitive.RadioGroup.Props) {
- return (
-
- );
+ )
}
function ContextMenuRadioItem({
@@ -201,8 +169,8 @@ function ContextMenuRadioItem({
children,
inset,
...props
-}: ContextMenuPrimitive.RadioItem.Props & {
- inset?: boolean;
+}: React.ComponentProps & {
+ inset?: boolean
}) {
return (
-
-
-
+
+
+
{children}
- );
+ )
+}
+
+function ContextMenuLabel({
+ className,
+ inset,
+ ...props
+}: React.ComponentProps & {
+ inset?: boolean
+}) {
+ return (
+
+ )
}
function ContextMenuSeparator({
className,
...props
-}: ContextMenuPrimitive.Separator.Props) {
+}: React.ComponentProps) {
return (
- );
+ )
}
function ContextMenuShortcut({
@@ -246,11 +235,11 @@ function ContextMenuShortcut({
data-slot="context-menu-shortcut"
className={cn(
"ml-auto text-xs tracking-widest text-muted-foreground group-focus/context-menu-item:text-accent-foreground",
- className,
+ className
)}
{...props}
/>
- );
+ )
}
export {
@@ -269,4 +258,4 @@ export {
ContextMenuSubContent,
ContextMenuSubTrigger,
ContextMenuRadioGroup,
-};
+}
diff --git a/packages/ui/src/cmp/dialog.tsx b/packages/ui/src/cmp/dialog.tsx
index 3612cb2..1a1fda9 100644
--- a/packages/ui/src/cmp/dialog.tsx
+++ b/packages/ui/src/cmp/dialog.tsx
@@ -1,40 +1,50 @@
-import * as React from "react";
-import { Dialog as DialogPrimitive } from "@base-ui/react/dialog";
+"use client"
-import { cn } from "../lib/utils";
-import { Button } from "./button";
-import { XIcon } from "lucide-react";
+import * as React from "react"
+import { Dialog as DialogPrimitive } from "radix-ui"
-function Dialog({ ...props }: DialogPrimitive.Root.Props) {
- return ;
+import { cn } from "../lib/utils"
+import { Button } from "./button"
+import { XIcon } from "lucide-react"
+
+function Dialog({
+ ...props
+}: React.ComponentProps) {
+ return
}
-function DialogTrigger({ ...props }: DialogPrimitive.Trigger.Props) {
- return ;
+function DialogTrigger({
+ ...props
+}: React.ComponentProps) {
+ return
}
-function DialogPortal({ ...props }: DialogPrimitive.Portal.Props) {
- return ;
+function DialogPortal({
+ ...props
+}: React.ComponentProps) {
+ return
}
-function DialogClose({ ...props }: DialogPrimitive.Close.Props) {
- return ;
+function DialogClose({
+ ...props
+}: React.ComponentProps) {
+ return
}
function DialogOverlay({
className,
...props
-}: DialogPrimitive.Backdrop.Props) {
+}: React.ComponentProps) {
return (
-
- );
+ )
}
function DialogContent({
@@ -42,39 +52,37 @@ function DialogContent({
children,
showCloseButton = true,
...props
-}: DialogPrimitive.Popup.Props & {
- showCloseButton?: boolean;
+}: React.ComponentProps & {
+ showCloseButton?: boolean
}) {
return (
-
{children}
{showCloseButton && (
-
+
)}
-
+
- );
+ )
}
function DialogHeader({ className, ...props }: React.ComponentProps<"div">) {
@@ -84,7 +92,7 @@ function DialogHeader({ className, ...props }: React.ComponentProps<"div">) {
className={cn("flex flex-col gap-2", className)}
{...props}
/>
- );
+ )
}
function DialogFooter({
@@ -93,51 +101,57 @@ function DialogFooter({
children,
...props
}: React.ComponentProps<"div"> & {
- showCloseButton?: boolean;
+ showCloseButton?: boolean
}) {
return (
{children}
{showCloseButton && (
- }>
- Close
+
+
)}
- );
+ )
}
-function DialogTitle({ className, ...props }: DialogPrimitive.Title.Props) {
+function DialogTitle({
+ className,
+ ...props
+}: React.ComponentProps) {
return (
- );
+ )
}
function DialogDescription({
className,
...props
-}: DialogPrimitive.Description.Props) {
+}: React.ComponentProps) {
return (
- );
+ )
}
export {
@@ -151,4 +165,4 @@ export {
DialogPortal,
DialogTitle,
DialogTrigger,
-};
+}
diff --git a/packages/ui/src/cmp/input.tsx b/packages/ui/src/cmp/input.tsx
index ad8e96b..098b3ca 100644
--- a/packages/ui/src/cmp/input.tsx
+++ b/packages/ui/src/cmp/input.tsx
@@ -1,20 +1,19 @@
-import * as React from "react";
-import { Input as InputPrimitive } from "@base-ui/react/input";
+import * as React from "react"
-import { cn } from "../lib/utils";
+import { cn } from "../lib/utils"
function Input({ className, type, ...props }: React.ComponentProps<"input">) {
return (
-
- );
+ )
}
-export { Input };
+export { Input }
diff --git a/packages/ui/src/cmp/label.tsx b/packages/ui/src/cmp/label.tsx
index 95cad06..db0eaee 100644
--- a/packages/ui/src/cmp/label.tsx
+++ b/packages/ui/src/cmp/label.tsx
@@ -1,18 +1,24 @@
-import * as React from "react";
+"use client"
-import { cn } from "../lib/utils";
+import * as React from "react"
+import { Label as LabelPrimitive } from "radix-ui"
-function Label({ className, ...props }: React.ComponentProps<"label">) {
+import { cn } from "../lib/utils"
+
+function Label({
+ className,
+ ...props
+}: React.ComponentProps) {
return (
-
- );
+ )
}
-export { Label };
+export { Label }
diff --git a/packages/ui/src/cmp/select.tsx b/packages/ui/src/cmp/select.tsx
index 154f161..eeb4e02 100644
--- a/packages/ui/src/cmp/select.tsx
+++ b/packages/ui/src/cmp/select.tsx
@@ -1,12 +1,19 @@
import * as React from "react"
-import { Select as SelectPrimitive } from "@base-ui/react/select"
+import { Select as SelectPrimitive } from "radix-ui"
import { cn } from "../lib/utils"
import { ChevronDownIcon, CheckIcon, ChevronUpIcon } from "lucide-react"
-const Select = SelectPrimitive.Root
+function Select({
+ ...props
+}: React.ComponentProps) {
+ return
+}
-function SelectGroup({ className, ...props }: SelectPrimitive.Group.Props) {
+function SelectGroup({
+ className,
+ ...props
+}: React.ComponentProps) {
return (
- )
+function SelectValue({
+ ...props
+}: React.ComponentProps) {
+ return
}
function SelectTrigger({
@@ -31,7 +34,7 @@ function SelectTrigger({
size = "default",
children,
...props
-}: SelectPrimitive.Trigger.Props & {
+}: React.ComponentProps & {
size?: "sm" | "default"
}) {
return (
@@ -45,11 +48,9 @@ function SelectTrigger({
{...props}
>
{children}
-
- }
- />
+
+
+
)
}
@@ -57,38 +58,32 @@ function SelectTrigger({
function SelectContent({
className,
children,
- side = "bottom",
- sideOffset = 4,
+ position = "item-aligned",
align = "center",
- alignOffset = 0,
- alignItemWithTrigger = true,
...props
-}: SelectPrimitive.Popup.Props &
- Pick<
- SelectPrimitive.Positioner.Props,
- "align" | "alignOffset" | "side" | "sideOffset" | "alignItemWithTrigger"
- >) {
+}: React.ComponentProps) {
return (
-
-
+
-
- {children}
-
-
-
+ {children}
+
+
+
)
}
@@ -96,9 +91,9 @@ function SelectContent({
function SelectLabel({
className,
...props
-}: SelectPrimitive.GroupLabel.Props) {
+}: React.ComponentProps) {
return (
- ) {
return (
-
- {children}
-
-
- }
- >
-
-
+
+
+
+
+
+ {children}
)
}
@@ -137,7 +128,7 @@ function SelectItem({
function SelectSeparator({
className,
...props
-}: SelectPrimitive.Separator.Props) {
+}: React.ComponentProps) {
return (
) {
+}: React.ComponentProps) {
return (
-
-
+
)
}
function SelectScrollDownButton({
className,
...props
-}: React.ComponentProps) {
+}: React.ComponentProps) {
return (
-
-
+
)
}
diff --git a/packages/ui/src/cmp/skeleton.tsx b/packages/ui/src/cmp/skeleton.tsx
index 99f46eb..67837b3 100644
--- a/packages/ui/src/cmp/skeleton.tsx
+++ b/packages/ui/src/cmp/skeleton.tsx
@@ -1,4 +1,4 @@
-import { cn } from "../lib/utils";
+import { cn } from "../lib/utils"
function Skeleton({ className, ...props }: React.ComponentProps<"div">) {
return (
@@ -7,7 +7,7 @@ function Skeleton({ className, ...props }: React.ComponentProps<"div">) {
className={cn("animate-pulse rounded-md bg-muted", className)}
{...props}
/>
- );
+ )
}
-export { Skeleton };
+export { Skeleton }
diff --git a/packages/ui/src/cmp/sonner.tsx b/packages/ui/src/cmp/sonner.tsx
index 071e8f2..9280ee5 100644
--- a/packages/ui/src/cmp/sonner.tsx
+++ b/packages/ui/src/cmp/sonner.tsx
@@ -1,34 +1,38 @@
-"use client";
+"use client"
-import { useTheme } from "next-themes";
-import { Toaster as Sonner, type ToasterProps } from "sonner";
-import {
- CircleCheckIcon,
- InfoIcon,
- TriangleAlertIcon,
- OctagonXIcon,
- Loader2Icon,
-} from "lucide-react";
+import { useTheme } from "next-themes"
+import { Toaster as Sonner, type ToasterProps } from "sonner"
+import { CircleCheckIcon, InfoIcon, TriangleAlertIcon, OctagonXIcon, Loader2Icon } from "lucide-react"
const Toaster = ({ ...props }: ToasterProps) => {
- const { theme = "system" } = useTheme();
+ const { theme = "system" } = useTheme()
return (
,
- info: ,
- warning: ,
- error: ,
- loading: ,
+ success: (
+
+ ),
+ info: (
+
+ ),
+ warning: (
+
+ ),
+ error: (
+
+ ),
+ loading: (
+
+ ),
}}
style={
{
- "--normal-bg": "var(--color-popover)",
- "--normal-text": "var(--color-popover-foreground)",
- "--normal-border": "var(--color-border)",
+ "--normal-bg": "var(--popover)",
+ "--normal-text": "var(--popover-foreground)",
+ "--normal-border": "var(--border)",
"--border-radius": "var(--radius)",
} as React.CSSProperties
}
@@ -39,7 +43,7 @@ const Toaster = ({ ...props }: ToasterProps) => {
}}
{...props}
/>
- );
-};
+ )
+}
-export { Toaster };
+export { Toaster }
diff --git a/packages/ui/src/cmp/tooltip.tsx b/packages/ui/src/cmp/tooltip.tsx
index 669e205..3c79ef9 100644
--- a/packages/ui/src/cmp/tooltip.tsx
+++ b/packages/ui/src/cmp/tooltip.tsx
@@ -1,64 +1,55 @@
-import { Tooltip as TooltipPrimitive } from "@base-ui/react/tooltip"
+import * as React from "react"
+import { Tooltip as TooltipPrimitive } from "radix-ui"
import { cn } from "../lib/utils"
function TooltipProvider({
- delay = 0,
+ delayDuration = 0,
...props
-}: TooltipPrimitive.Provider.Props) {
+}: React.ComponentProps) {
return (
)
}
-function Tooltip({ ...props }: TooltipPrimitive.Root.Props) {
+function Tooltip({
+ ...props
+}: React.ComponentProps) {
return
}
-function TooltipTrigger({ ...props }: TooltipPrimitive.Trigger.Props) {
+function TooltipTrigger({
+ ...props
+}: React.ComponentProps) {
return
}
function TooltipContent({
className,
- side = "top",
- sideOffset = 4,
- align = "center",
- alignOffset = 0,
+ sideOffset = 0,
children,
...props
-}: TooltipPrimitive.Popup.Props &
- Pick<
- TooltipPrimitive.Positioner.Props,
- "align" | "alignOffset" | "side" | "sideOffset"
- >) {
+}: React.ComponentProps) {
return (
-
-
- {children}
-
-
-
+ {children}
+
+
)
}
-export { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider }
+export { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger }