import { Container, Heading, Text, clx } from "@medusajs/ui" import { CSSProperties, ComponentPropsWithoutRef } from "react" type SkeletonProps = { className?: string style?: CSSProperties } export const Skeleton = ({ className, style }: SkeletonProps) => { return (
) } type TextSkeletonProps = { size?: ComponentPropsWithoutRef["size"] leading?: ComponentPropsWithoutRef["leading"] characters?: number } type HeadingSkeletonProps = { level?: ComponentPropsWithoutRef["level"] characters?: number } export const HeadingSkeleton = ({ level = "h1", characters = 10, }: HeadingSkeletonProps) => { let charWidth = 9 switch (level) { case "h1": charWidth = 11 break case "h2": charWidth = 10 break case "h3": charWidth = 9 break } return ( ) } export const TextSkeleton = ({ size = "small", leading = "compact", characters = 10, }: TextSkeletonProps) => { let charWidth = 9 switch (size) { case "xlarge": charWidth = 13 break case "large": charWidth = 11 break case "base": charWidth = 10 break case "small": charWidth = 9 break case "xsmall": charWidth = 8 break } return ( ) } export const IconButtonSkeleton = () => { return } type GeneralSectionSkeletonProps = { rowCount?: number } export const GeneralSectionSkeleton = ({ rowCount, }: GeneralSectionSkeletonProps) => { const rows = Array.from({ length: rowCount ?? 0 }, (_, i) => i) return (
{rows.map((row) => (
))}
) } type TableSkeletonProps = { rowCount?: number search?: boolean filters?: boolean orderBy?: boolean pagination?: boolean layout?: "fit" | "fill" } export const TableSkeleton = ({ rowCount = 10, search = true, filters = true, orderBy = true, pagination = true, layout = "fit", }: TableSkeletonProps) => { // Row count + header row const totalRowCount = rowCount + 1 const rows = Array.from({ length: totalRowCount }, (_, i) => i) const hasToolbar = search || filters || orderBy return (
{hasToolbar && (
{filters && } {(search || orderBy) && (
{search && } {orderBy && }
)}
)}
{rows.map((row) => ( ))}
{pagination && (
)}
) } export const TableSectionSkeleton = (props: TableSkeletonProps) => { return (
) } export const JsonViewSectionSkeleton = () => { return (
) }