Getting Started
App Providerglobal.d.tsThemesTypes
cn(...args)Text ParserUnits Converters
AnchorAvatarBreadcrumbBurgerButtonCardCarouselCheckerCodeColor PickerCommandConfettiCopyButtonDouble Helix WordsFloating IndicatorGroupHighlight TextIndicatorInputKbdLabelLoaderPaginationPassword RequirementPolymorphic SlotProgressProseRatingRunning AreaScroll AreaSheetsSkeletonSliderStackSvgTableTabsTextareaTimelineTimesToasterTooltipTyping WordsTypography
useClickOutsideuseClipboarduseDeviceInfouseDialoguseDidUpdateuseDirectionuseDisclosureuseDocumentTitleuseDocumentVisibilityuseElementInfouseEyeDropperuseFetchuseFullscreenuseGeoLocationuseHotkeysuseHoveruseIduseImagePopupuseInputStateuseIntersectionuseIntervaluseIsomorphicEffectuseListStateuseLocalStorageuseMeasureScrollbaruseMediaQueryuseMergedRefuseMouseuseMoveuseMutationObserveruseNetworkuseOpenStateuseOrientationuseOSusePaginationusePWAInstalleruseRandomColorsuseReducedMotionuseReloaduseResizeObserveruseScrollIntoViewuseStateHistoryuseTimeoutuseTouchuseTriggeruseUncontrolleduseValidatedStateuseViewportSizeuseWindowEventuseWindowScroll
Docs
Web
Components
Skeleton
Sheets

A flexible system for creating dialogs, dropdowns, drawers, and accordions, including nested support.

Slider

A draggable control for selecting numeric values within a defined range.


Edit this page on GitHub
  • Started
  • Utilities
  • Configuration
  • Components
  • Hooks
  • Examples
  • Github
  • Contributing
⌘+J

© 2025 oeri rights MIT


Designed in Earth-616

Built by oeri

Skeleton

A loading placeholder component that mimics the shape of content while data is being fetched or processed.

Usage

Basic usage example to quickly see how the Skeleton works.

Lorem ipsum dolor sit amet...
Lorem, ipsum dolor sit amet consectetur adipisicing elit. Placeat adipisci, iste ducimus quasi ipsa autem tenetur! Exercitationem perferendis mollitia omnis.
Lorem ipsum dolor sit amet consectetur adipisicing elit. Porro unde itaque ea corrupti maxime perferendis deserunt praesentium iure nemo, consequatur obcaecati eaque, ipsum et alias saepe, ab placeat quo reiciendis.
"use client";
import { useState } from "react";
import { Button } from "@/ui/button";
import { Skeleton } from "@/ui/skeleton";

export function SkeletonDemo() {
  const [loading, setLoading] = useState(true);
  return (
    <div className="m-auto flex size-full flex-col items-center justify-center px-4">
      <div className="mb-6 flex items-start gap-4 max-md:flex-col md:flex-row">
        <Skeleton asChild circle visible={loading} size={120}>
          <button type="button" className="border font-heading">
            B
          </button>
        </Skeleton>
        <div className="flex flex-col items-center justify-center gap-1">
          <Skeleton visible={loading} round={8}>
            Lorem ipsum dolor sit amet...
          </Skeleton>
          <Skeleton visible={loading} round={8}>
            Lorem, ipsum dolor sit amet consectetur adipisicing elit. Placeat adipisci, iste ducimus quasi ipsa autem tenetur! Exercitationem perferendis
            mollitia omnis.
          </Skeleton>
          <Skeleton visible={loading} round={8}>
            Lorem ipsum dolor sit amet consectetur adipisicing elit. Porro unde itaque ea corrupti maxime perferendis deserunt praesentium iure nemo,
            consequatur obcaecati eaque, ipsum et alias saepe, ab placeat quo reiciendis.
          </Skeleton>
        </div>
      </div>

      <Button onClick={() => setLoading(l => !l)}>Toggle Skeleton</Button>
    </div>
  );
}

Properties

Interactive configurator to explore customization options for the Skeleton component.

XY
Size
Round
Color
import { Skeleton } from "@/ui/skeleton";
import { Avatar } from "@/ui/avatar";

export function SkeletonDemo() {
  return (
    <Skeleton size={120} visible asChild>
      <Avatar fallback="el khoeri" className="border" />
    </Skeleton>
  );
}

API References

Styles API

Styles APITypeDefaultAnnotation
unstyled?booleanfalseif true, all default styles will be removed

Props API

type Size = ((string & {}) | number) | { h?: CSSProperties["height"]; w?: CSSProperties["width"] };
Props APITypeDefaultAnnotation
visible?booleantrueDetermines whether Skeleton overlay should be displayed.
size?Size{h: auto, w:100%}Skeleton height, numbers are converted to rem.
circle?booleanfalseIf set, Skeleton width and border-radius are equal to its height
round?CSSProperties["borderRadius"]16Key of theme.radius or any valid CSS value to set border-radius. Numbers are converted to rem.
animate?booleantrueDetermines whether Skeleton should be animated.

Source Codes

Full working code example, including necessary markup and styles. You can copy and paste this code directly to start using the component immediately.

skeleton.tsx