diff --git a/apps/web/components/apps/SkeletonLoader.tsx b/apps/web/components/apps/SkeletonLoader.tsx
index 8dc31def..a4ee7d04 100644
--- a/apps/web/components/apps/SkeletonLoader.tsx
+++ b/apps/web/components/apps/SkeletonLoader.tsx
@@ -1,5 +1,7 @@
import React from "react";
+import { SkeletonAvatar, SkeletonText } from "@calcom/ui";
+
import { ShellSubHeading } from "@components/Shell";
function SkeletonLoader() {
@@ -22,16 +24,16 @@ function SkeletonItem() {
diff --git a/apps/web/components/availability/SkeletonLoader.tsx b/apps/web/components/availability/SkeletonLoader.tsx
index 2ba945b8..2c12aa37 100644
--- a/apps/web/components/availability/SkeletonLoader.tsx
+++ b/apps/web/components/availability/SkeletonLoader.tsx
@@ -1,5 +1,7 @@
import React from "react";
+import { SkeletonText } from "@calcom/ui";
+
function SkeletonLoader() {
return (
@@ -17,13 +19,13 @@ function SkeletonItem() {
-
diff --git a/apps/web/components/booking/SkeletonLoader.tsx b/apps/web/components/booking/SkeletonLoader.tsx
index e152b4d1..2e50ad0e 100644
--- a/apps/web/components/booking/SkeletonLoader.tsx
+++ b/apps/web/components/booking/SkeletonLoader.tsx
@@ -1,5 +1,7 @@
import React from "react";
+import { SkeletonText } from "@calcom/ui";
+
import BookingsShell from "@components/BookingsShell";
function SkeletonLoader() {
@@ -20,16 +22,16 @@ function SkeletonItem() {
diff --git a/apps/web/components/eventtype/SkeletonLoader.tsx b/apps/web/components/eventtype/SkeletonLoader.tsx
index 8960352b..2397c698 100644
--- a/apps/web/components/eventtype/SkeletonLoader.tsx
+++ b/apps/web/components/eventtype/SkeletonLoader.tsx
@@ -2,22 +2,24 @@ import { LinkIcon } from "@heroicons/react/outline";
import { ClockIcon, DotsHorizontalIcon, ExternalLinkIcon, UserIcon } from "@heroicons/react/solid";
import React from "react";
+import { SkeletonAvatar, SkeletonContainer, SkeletonText } from "@calcom/ui";
+
function SkeletonLoader() {
return (
-
+
);
}
@@ -28,17 +30,17 @@ function SkeletonItem() {
-
-
+
diff --git a/packages/ui/index.tsx b/packages/ui/index.tsx
index 30b1364d..3290c411 100644
--- a/packages/ui/index.tsx
+++ b/packages/ui/index.tsx
@@ -1,3 +1,4 @@
export { default as Button } from "./Button";
export { default as EmptyScreen } from "./EmptyScreen";
export { default as Switch } from "./Switch";
+export * from "./skeleton";
diff --git a/packages/ui/skeleton/index.tsx b/packages/ui/skeleton/index.tsx
new file mode 100644
index 00000000..ddc48712
--- /dev/null
+++ b/packages/ui/skeleton/index.tsx
@@ -0,0 +1,34 @@
+import classNames from "@calcom/lib/classNames";
+
+type SkeletonBaseProps = {
+ width: string;
+ height: string;
+ className?: string;
+};
+
+interface AvatarProps extends SkeletonBaseProps {
+ // Limit this cause we don't use avatars bigger than thi
+ width: "2" | "3" | "4" | "5" | "6" | "8";
+ height: "2" | "3" | "4" | "5" | "6" | "8";
+}
+
+interface SkeletonContainer {
+ as?: keyof JSX.IntrinsicElements;
+}
+
+const SkeletonAvatar: React.FC
= ({ width, height }) => {
+ return (
+
+ );
+};
+
+const SkeletonText: React.FC = ({ width, height }) => {
+ return ;
+};
+
+const SkeletonContainer: React.FC = ({ children, as }) => {
+ const Component = as || "div";
+ return {children};
+};
+
+export { SkeletonAvatar, SkeletonText, SkeletonContainer };