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) => (
))}
) } export const TableFooterSkeleton = ({ layout }: { layout: "fill" | "fit" }) => { return (
) } 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 (
) } type SingleColumnPageSkeletonProps = { sections?: number showJSON?: boolean showMetadata?: boolean } export const SingleColumnPageSkeleton = ({ sections = 2, showJSON = false, showMetadata = false, }: SingleColumnPageSkeletonProps) => { return (
{Array.from({ length: sections }, (_, i) => i).map((section) => { return ( ) })} {showMetadata && } {showJSON && }
) } type TwoColumnPageSkeletonProps = { mainSections?: number sidebarSections?: number showJSON?: boolean showMetadata?: boolean } export const TwoColumnPageSkeleton = ({ mainSections = 2, sidebarSections = 1, showJSON = false, showMetadata = true, }: TwoColumnPageSkeletonProps) => { const showExtraData = showJSON || showMetadata return (
{Array.from({ length: mainSections }, (_, i) => i).map((section) => { return ( ) })} {showExtraData && (
{showMetadata && ( )} {showJSON && }
)}
{Array.from({ length: sidebarSections }, (_, i) => i).map( (section) => { return ( ) } )} {showExtraData && (
{showMetadata && ( )} {showJSON && }
)}
) }