Angular
Use boneyard in any Angular 14+ app. Standalone component — no module needed. Same CLI, same pixel-perfect skeletons.
1. Install
npm install boneyard-js2. Add the component
import { Component } from '@angular/core'
import { SkeletonComponent } from 'boneyard-js/angular'
import './bones/registry'
@Component({
selector: 'app-root',
standalone: true,
imports: [SkeletonComponent],
template: `
<boneyard-skeleton name="blog-card" [loading]="isLoading">
<app-blog-card />
</boneyard-skeleton>
`
})
export class AppComponent {
isLoading = true
}3. Generate bones
npx boneyard-js buildAuto-detects your Angular dev server and captures all named skeletons.
4. Import the registry
// Add once in your app entry (e.g. main.ts)
import './bones/registry'This import is required.Without it, skeletons won't render — the component needs the registry to resolve bone data by name.
| Input | Type | Default | Description |
|---|---|---|---|
| loading | boolean | false | Show skeleton or children |
| name | string | — | Resolve bones from registry by name |
| initialBones | ResponsiveBones | — | Pass bones directly (overrides registry) |
| color | string | rgba(0,0,0,0.08) | Bone color in light mode |
| darkColor | string | rgba(255,255,255,0.06) | Bone color in dark mode |
| animate | 'pulse' | 'shimmer' | 'solid' | pulse | Animation style (also accepts true/false) |
| stagger | number | boolean | false | Stagger delay between bones in ms (true = 80ms) |
| transition | number | boolean | false | Fade out duration in ms when loading ends (true = 300ms) |
| boneClass | string | — | CSS class applied to each bone element |
| cssClass | string | — | CSS class on the container |
| snapshotConfig | SnapshotConfig | — | Controls bone extraction during CLI capture |
| Selector | Description |
|---|---|
| (default) | Your real component — shown when not loading |
| [fallback] | Shown when loading but no bones are available |
| [fixture] | Mock content for CLI capture (dev only) |
<boneyard-skeleton name="dashboard" [loading]="isLoading">
<!-- Default: your real component -->
<app-dashboard [data]="data" />
<!-- Fixture: mock content for CLI bone capture -->
<app-dashboard fixture [data]="mockData" />
<!-- Fallback: shown if no bones generated yet -->
<p fallback>Loading...</p>
</boneyard-skeleton>Auto-detects via .dark class on <html> or any parent element (Tailwind convention), and prefers-color-scheme media query. Uses darkColor when dark mode is active.
| Value | Effect |
|---|---|
| 'pulse' | Fades a lighter overlay in and out (1.8s cycle) |
| 'shimmer' | Sweeps a gradient highlight across each bone (2.4s cycle) |
| 'solid' | Static — no animation |
| true / false | true = pulse, false = solid |
Set defaults for all skeletons with configureBoneyard():
import { configureBoneyard } from 'boneyard-js/angular'
configureBoneyard({
color: '#e5e5e5',
darkColor: 'rgba(255,255,255,0.08)',
animate: 'shimmer',
})Per-component inputs override global defaults.
See Install → Config file for the full boneyard.config.json reference. Works with all frameworks.
Next steps
- See Getting Started for the full web setup walkthrough
- See Output to understand the .bones.json format
- See CLI & Props Reference for all flags and options