Files
zitadel/apps/login/ui/Boundary.tsx

83 lines
2.3 KiB
TypeScript
Raw Normal View History

2023-04-24 09:54:47 +02:00
import clsx from "clsx";
import React from "react";
2023-04-03 13:39:51 +02:00
const Label = ({
children,
animateRerendering,
color,
}: {
children: React.ReactNode;
animateRerendering?: boolean;
2023-04-24 09:54:47 +02:00
color?: "default" | "pink" | "blue" | "violet" | "cyan" | "orange";
2023-04-03 13:39:51 +02:00
}) => {
return (
<div
2023-04-24 09:54:47 +02:00
className={clsx("rounded-full px-1.5 shadow-[0_0_1px_3px_black]", {
"bg-gray-800 text-gray-500": color === "default",
"bg-vercel-pink text-pink-100": color === "pink",
"bg-vercel-blue text-blue-100": color === "blue",
"bg-vercel-cyan text-cyan-100": color === "cyan",
"bg-vercel-violet text-violet-100": color === "violet",
"bg-vercel-orange text-orange-100": color === "orange",
"animate-[highlight_1s_ease-in-out_1]": animateRerendering,
2023-04-03 13:39:51 +02:00
})}
>
{children}
</div>
);
};
export const Boundary = ({
children,
2023-04-24 09:54:47 +02:00
labels = ["children"],
size = "default",
color = "default",
2023-04-03 13:39:51 +02:00
animateRerendering = true,
}: {
children: React.ReactNode;
labels?: string[];
2023-04-24 09:54:47 +02:00
size?: "small" | "default";
color?: "default" | "pink" | "blue" | "violet" | "cyan" | "orange";
2023-04-03 13:39:51 +02:00
animateRerendering?: boolean;
}) => {
return (
<div
2023-04-24 09:54:47 +02:00
className={clsx("relative rounded-lg border border-dashed", {
"p-3 lg:p-5": size === "small",
"p-4 lg:p-9": size === "default",
"border-divider-light dark:border-divider-dark": color === "default",
"border-vercel-pink": color === "pink",
"border-vercel-blue": color === "blue",
"border-vercel-cyan": color === "cyan",
"border-vercel-violet": color === "violet",
"border-vercel-orange": color === "orange",
"animate-[rerender_1s_ease-in-out_1] text-vercel-pink":
2023-04-03 13:39:51 +02:00
animateRerendering,
})}
>
<div
className={clsx(
2023-04-24 09:54:47 +02:00
"absolute -top-2.5 flex space-x-1 text-[9px] uppercase leading-4 tracking-widest",
2023-04-03 13:39:51 +02:00
{
2023-04-24 09:54:47 +02:00
"left-3 lg:left-5": size === "small",
"left-4 lg:left-9": size === "default",
}
2023-04-03 13:39:51 +02:00
)}
>
{labels.map((label) => {
return (
<Label
key={label}
color={color}
animateRerendering={animateRerendering}
>
{label}
</Label>
);
})}
</div>
{children}
</div>
);
};