Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -101,33 +101,34 @@ export function ProfileImage({
/>
<div className="space-y-3">
<div className="flex gap-2">
{!isRemoving && (
<Button
type="button"
variant="gray"
disabled={disabled || isLoading}
size="xs"
onClick={handleUploadClick}
spinner={isUploading}
>
{isUploading ? "Uploading..." : "Upload Image"}
</Button>
)}
<Button
type="button"
variant="gray"
disabled={disabled || isLoading || isRemoving}
size="xs"
onClick={handleUploadClick}
spinner={isUploading}
>
{isUploading ? "Uploading..." : "Upload Image"}
</Button>
{(previewUrl || isRemoving) && (
<Tooltip content="Remove image">
<Button
type="button"
variant="outline"
className="p-0 size-8"
disabled={disabled || isLoading}
disabled={disabled || isLoading || isRemoving}
size="icon"
onClick={handleRemove}
spinnerClassName="mr-0"
spinner={isRemoving}
>
<FontAwesomeIcon
icon={faTrash}
className="size-2.5 text-gray-12"
/>
{isRemoving ? null : (
<FontAwesomeIcon
icon={faTrash}
className="size-2.5 text-gray-12 mx-auto"
/>
)}
</Button>
</Tooltip>
)}
Expand Down
136 changes: 101 additions & 35 deletions apps/web/app/(org)/dashboard/settings/account/loading.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,44 +7,85 @@ export default function Loading() {
<SkeletonPage
customSkeleton={(Skeleton) => (
<form>
<div className="flex flex-col flex-wrap gap-6 w-full md:flex-row">
{/* First card - Name fields */}
<div className="flex-1 p-5 space-y-1 rounded-2xl border bg-gray-3 border-gray-4">
<Skeleton
baseColor="var(--gray-4)"
highlightColor="var(--gray-5)"
className="w-32 h-7"
/>{" "}
{/* Card title */}
<Skeleton
baseColor="var(--gray-4)"
highlightColor="var(--gray-5)"
count={2}
className="mt-1 h-4"
/>{" "}
{/* Card description */}
<div className="flex flex-col flex-wrap gap-5 pt-4 w-full md:flex-row">
<div className="flex-1 space-y-2">
<Skeleton
baseColor="var(--gray-4)"
highlightColor="var(--gray-5)"
className="w-full h-12 rounded-xl"
/>{" "}
{/* First name input */}
</div>
<div className="flex-1 space-y-2">
<Skeleton
baseColor="var(--gray-4)"
highlightColor="var(--gray-5)"
className="w-full h-12 rounded-xl"
/>{" "}
{/* Last name input */}
<div className="grid gap-6 w-full md:grid-cols-2">
{/* Profile image card */}
<div className="flex flex-col p-5 space-y-4 rounded-2xl border bg-gray-3 border-gray-4">
<div className="space-y-1">
<Skeleton
baseColor="var(--gray-4)"
highlightColor="var(--gray-5)"
className="w-32 h-7"
/>{" "}
{/* Card title */}
<Skeleton
baseColor="var(--gray-4)"
highlightColor="var(--gray-5)"
count={1}
className="mt-1 h-4"
/>{" "}
{/* Card description */}
</div>
<div className="flex-1 rounded-xl border border-dashed bg-gray-2 border-gray-4">
<div className="flex gap-5 p-5 h-full">
<div className="flex justify-center items-center rounded-full border border-dashed size-14 bg-gray-3 border-gray-6">
<Skeleton
baseColor="var(--gray-5)"
highlightColor="var(--gray-6)"
className="size-4"
/>{" "}
{/* Icon placeholder */}
</div>
<div className="flex-1 space-y-3">
<Skeleton
baseColor="var(--gray-4)"
highlightColor="var(--gray-5)"
className="w-full h-3 max-w-20"
/>
<Skeleton
baseColor="var(--gray-4)"
highlightColor="var(--gray-5)"
className="w-full h-3 max-w-[120px]"
/>
</div>
</div>
</div>
</div>

{/* Second card - Email field */}
<div className="flex flex-col flex-1 gap-4 justify-between items-stretch p-5 rounded-2xl border bg-gray-3 border-gray-4">
{/* Your name card */}
<div className="p-5 space-y-4 rounded-2xl border bg-gray-3 border-gray-4">
<div className="space-y-1">
<Skeleton
baseColor="var(--gray-4)"
highlightColor="var(--gray-5)"
className="w-24 h-7"
/>{" "}
{/* Card title */}
<Skeleton
baseColor="var(--gray-4)"
highlightColor="var(--gray-5)"
count={2}
className="mt-1 h-4"
/>{" "}
{/* Card description */}
</div>
<div className="flex flex-col flex-wrap gap-3 w-full">
<Skeleton
baseColor="var(--gray-4)"
highlightColor="var(--gray-5)"
className="w-full h-12 rounded-xl"
/>{" "}
{/* First name input */}
<Skeleton
baseColor="var(--gray-4)"
highlightColor="var(--gray-5)"
className="w-full h-12 rounded-xl"
/>{" "}
{/* Last name input */}
</div>
</div>

{/* Contact email card */}
<div className="flex flex-col gap-4 p-5 rounded-2xl border bg-gray-3 border-gray-4">
<div className="space-y-1">
<Skeleton
baseColor="var(--gray-4)"
Expand All @@ -67,14 +108,39 @@ export default function Loading() {
/>{" "}
{/* Email input */}
</div>

{/* Default organization card */}
<div className="flex flex-col gap-4 p-5 rounded-2xl border bg-gray-3 border-gray-4">
<div className="space-y-1">
<Skeleton
baseColor="var(--gray-4)"
highlightColor="var(--gray-5)"
className="w-40 h-7"
/>{" "}
{/* Card title */}
<Skeleton
baseColor="var(--gray-4)"
highlightColor="var(--gray-5)"
count={1}
className="mt-1 h-4"
/>{" "}
{/* Card description */}
</div>
<Skeleton
baseColor="var(--gray-4)"
highlightColor="var(--gray-5)"
className="w-full h-12 rounded-xl"
/>{" "}
{/* Select dropdown */}
</div>
</div>

{/* Save button */}
<div className="mt-6 w-24">
<Skeleton
baseColor="var(--gray-4)"
highlightColor="var(--gray-5)"
className="h-10 rounded-xl"
className="h-9 rounded-lg"
/>{" "}
{/* Button */}
</div>
Expand Down
9 changes: 8 additions & 1 deletion packages/ui/src/components/Button.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ export interface ButtonProps
asChild?: boolean;
spinner?: boolean;
href?: string;
spinnerClassName?: string;
kbd?: string;
icon?: React.ReactNode;
target?: string;
Expand All @@ -62,6 +63,7 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
size,
asChild = false,
spinner = false,
spinnerClassName,
href,
kbd,
icon,
Expand All @@ -79,7 +81,12 @@ const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
href={href || undefined}
{...props}
>
{spinner && <LoadingSpinner className="mr-1" size={16} />}
{spinner && (
<LoadingSpinner
className={classNames("mr-1", spinnerClassName)}
size={16}
/>
)}
{icon && icon}
{props.children}
{kbd && (
Expand Down