---
name: skeleton
category: feedback
summary: "Loading placeholder with loading→content swap"
subpath: "@42/core/skeleton"
---

Loading placeholder + controller orchestrating the loading→content swap. Shapes via `data-variant="text|circle|rect"`.

```html
<div data-c42-skeleton-region>
  <div data-c42-skeleton-placeholder>
    <span data-c42-skeleton data-variant="text"></span>
    <span data-c42-skeleton data-variant="circle"></span>
  </div>
  <div data-c42-skeleton-content hidden>real content</div>
</div>
```

```ts
import { Skeleton } from '@42/core/skeleton';
const s = new Skeleton(root, { loading: true });
s.setLoading(false);
```

Options: `loading` (default true)
Methods: `setLoading(boolean)`
Events: `skeleton:change` → `{ loading: boolean }`
