Skills
Teach your AI agent to build with cupertino-ui.
What is a skill?
A skill is a set of instructions an AI coding agent (like Claude Code) loads when it works on a matching task. The cupertino-ui skill teaches the agent how to set up the theme, which tokens and conventions make UIs feel like Apple software, how to compose the components, and which pitfalls to avoid — so you can say “make an Apple-style settings screen” and get idiomatic results.
What the agent learns
- Setup order: shadcn init → theme tokens → components, and why the theme must come first
- The semantic tokens: label hierarchy, fills, grouped backgrounds, SF type scale, materials
- HIG conventions: hairline separators, cursor-default controls, press feedback, dark mode
- Composition patterns: settings lists, NavigationStack push flows, macOS window shells, audio playback
- Known pitfalls, like the tailwind-merge class-collision issue and the top-edge backdrop-filter bug
Install into a project (recommended)
Installs the skill files into .claude/skills/cupertino-ui/ in your repo, so every agent session in the project picks it up:
npx shadcn@latest add https://cupertino-ui.baltoon.jp/r/skill.jsonInstall for your user account
To make the skill available in every project, copy it into your home directory instead:
npx shadcn@latest add https://cupertino-ui.baltoon.jp/r/skill.json
mkdir -p ~/.claude/skills && cp -r .claude/skills/cupertino-ui ~/.claude/skills/What's inside
Two files: SKILL.md (setup, tokens, conventions, patterns, pitfalls) and references/components.md (the full catalog of all components with exports and links). The full source is below.
SKILL.md
---
name: cupertino-ui
description: >
How to install and build UIs with cupertino-ui — the shadcn-style React
component library that reproduces Apple's Human Interface Guidelines
(SwiftUI look-and-feel) on Tailwind CSS v4 + Radix. Use this skill whenever
the user mentions cupertino-ui, wants Apple/iOS/macOS-style UI in React or
Next.js, asks for SwiftUI-like components on the web (switches, segmented
controls, sheets, inset-grouped lists, sidebars, tab bars, navigation
push transitions, Apple Music-style players), or is adding components from
the cupertino-ui registry — even if they just say "make it feel like an
Apple app" without naming the library.
---
# cupertino-ui
cupertino-ui distributes Apple-HIG React components the shadcn way: the CLI
copies the component **source** into the user's project (`components/ui/`),
where it can be edited freely. There is no runtime package to depend on.
Docs and live demos: https://cupertino-ui.baltoon.jp
## Setup (once per project)
Requirements: React 18+/Next.js and **Tailwind CSS v4** (the tokens use
`@theme`/`@utility`, which do not exist in v3).
```bash
# 1. shadcn plumbing, if the project has no components.json yet
npx shadcn@latest init
# 2. theme tokens + cn() helper — REQUIRED before any component
npx shadcn@latest add --overwrite https://cupertino-ui.baltoon.jp/r/theme.json
npm install tw-animate-css
```
Then import the theme in the global stylesheet, after Tailwind:
```css
@import "tailwindcss";
@import "tw-animate-css";
@import "../cupertino-ui-theme.css";
```
Every component looks broken without step 2 — the classes reference tokens
(`bg-blue`, `text-label`, `material-thick`, `text-body`) that only exist once
the theme CSS is loaded.
## Adding components
```bash
npx shadcn@latest add https://cupertino-ui.baltoon.jp/r/<name>.json
# e.g. button, switch, list, navigation-stack, now-playing …
```
```tsx
import { Button } from "@/components/ui/button";
<Button variant="tinted">Continue</Button>
```
For the full catalog (64 components) with exports, key props, and usage
snippets, read [references/components.md](references/components.md). Skim its
table of contents and read only the sections you need.
## Design tokens — use these, not raw hex
Colors follow Apple's semantic system and adapt to dark mode automatically:
| Purpose | Classes |
|---|---|
| Accent / system colors | `bg-blue text-blue` (also `red green orange yellow teal cyan mint indigo purple pink brown`, `gray`–`gray-6`) |
| Text hierarchy | `text-label`, `text-secondary-label`, `text-tertiary-label`, `text-quaternary-label` |
| Fills (controls, platters) | `bg-fill`, `bg-fill-secondary`, `bg-fill-tertiary`, `bg-fill-quaternary` |
| Backgrounds | `bg-background`, `bg-secondary-background`; grouped screens: `bg-grouped`, `bg-grouped-secondary` |
| Materials (blur) | `material-ultrathin` / `-thin` / `-regular` / `-thick` |
Type scale = SF text styles with correct tracking: `text-large-title`,
`text-title-1/2/3`, `text-headline`, `text-body`, `text-callout`,
`text-subheadline`, `text-footnote`, `text-caption-1/2`. Prefer these over
`text-sm`/`text-lg` — they carry HIG size, line-height, and letter-spacing.
Radii tokens (7/10/12/16/20 px): `rounded-[var(--radius-control)]`,
`--radius-field`, `--radius-card`, `--radius-group`, `--radius-sheet`.
Shadows: `shadow-[var(--shadow-card)]`, `--shadow-menu`, `--shadow-window`.
Dark mode is class-based: toggle `dark` on `<html>`. All tokens swap
automatically; never write `dark:` overrides for token-based colors.
To re-tint the whole UI, override one variable:
```css
:root, .dark { --system-blue: var(--system-indigo); } /* or a brand color */
```
## Conventions that make it feel like Apple
- **Hairlines, not borders.** Separators are 0.5px shadows:
`shadow-[0_0.5px_0_0_var(--separator)]` (or inset ring variants). A 1px
`border` immediately looks non-Apple.
- **`cursor-default select-none`** on buttons and controls — macOS controls
don't show a pointer cursor.
- Focus rings: `focus-visible:ring-[3px] focus-visible:ring-blue/40`.
- Press feedback: `active:scale-[0.97]` / `active:opacity-*` rather than
color-only changes.
- Grouped screens (Settings-style) sit on `bg-grouped` with
`bg-grouped-secondary` cards; content screens use `bg-background`.
## Composition patterns
**iOS settings screen** — `List` + rows with controls:
```tsx
<List header="Connectivity" footer="Explanatory footnote.">
<ListItem icon={<Wifi />} detail={<Switch defaultChecked />}>Wi-Fi</ListItem>
<ListItem icon={<Bluetooth />} detail="On" chevron onClick={...}>Bluetooth</ListItem>
</List>
```
**Push navigation without routing** — `NavigationStack` renders SwiftUI-style
slide transitions and a back-button nav bar entirely client-side:
```tsx
<NavigationStack title="Settings">
<List>
<NavigationLink title="Wi-Fi" icon={<Wifi />} destination={<WifiScreen />} />
</List>
</NavigationStack>
```
**macOS window shell** — toolbar + collapsible floating sidebar:
```tsx
<SidebarProvider selected={sel} onSelect={setSel}>
<Toolbar><SidebarToggle /><ToolbarTitle>Files</ToolbarTitle></Toolbar>
<div className="flex min-h-0 flex-1">
<Sidebar><SidebarSection title="Favorites">…</SidebarSection></Sidebar>
<main>…</main>
</div>
</SidebarProvider>
```
**Audio / Apple Music UIs** — wrap once in `AudioPlayerProvider`; every music
component (`MiniPlayer`, `NowPlaying`, `TrackList`, `LyricsView`, `QueueList`)
reads the same `useAudioPlayer()` context. Use `load(queue)` to prepare a
queue and `play(queue, i)` only from a user gesture — **never autoplay**.
**Toasts** — render `<Toaster />` once, then call
`toast({ title, description, icon, iconColor })` from anywhere.
## Motion & feel (fluid-interface rules baked in)
The components follow Apple's fluid-interface guidance; keep these when
extending them:
- **Respond on pointer-down** — press feedback is `:active` (instant), never
click-only. Keep `active:scale-*` on anything tappable.
- **Springs, not fixed easings, for anything touched.** The theme ships
`--spring-smooth` (critically damped) and `--spring-bouncy` (momentum) as
CSS `linear()` easings — default to smooth; use bouncy only after a flick.
- **Anchor overlays to their trigger**: menus/popovers set their
transform-origin from the Radix popper variable (see the origin class in
dropdown-menu.tsx) and "materialize" with a small `blur-in` — copy that
pattern for new overlays.
- **Gestures**: `Sheet` (bottom) drags 1:1 with the pointer, rubber-bands
above rest, and decides commit/cancel from **projected momentum**
(`(v/1000)·d/(1−d)`, d≈0.998) with the release velocity handed to the
exit. `NavigationStack` has the iOS left-edge swipe-back with the same
projection; `Carousel` adds mouse drag that projects the flick but pages
one item per gesture. Reuse the `project`/`rubberband` helpers for new
gestures.
- **Type scale is rem/em-based** — it follows the user's browser text size
(Dynamic Type). Keep new type utilities in rem with em tracking; never
reintroduce px font sizes.
- **Reduced motion/transparency/contrast** are handled in the theme for
materials and animations — never add motion that bypasses them.
## Pitfalls
- `shadcn init` scaffolds a starter `components/ui/button.tsx`; when adding this
registry's `button`, answer yes to the overwrite prompt (or pass
`--overwrite`) so the starter doesn't shadow it. Install the theme with
`--overwrite` too, so its enhanced `lib/utils.ts` replaces the plain one.
- Install `theme.json` **first**; it also ships the project's `cn()` helper,
whose `extendTailwindMerge` config knows the custom type-scale classes.
Replacing it with a plain `twMerge` silently drops color classes when they
meet type classes (e.g. `text-body` deleting `text-blue`).
- Don't apply `material-*` utilities to sticky/fixed bars at the very top of
the viewport — Chrome mis-renders `backdrop-filter: saturate()` at the top
edge. Use `bg-background/80 backdrop-blur-xl` there instead.
- Components assume `tw-animate-css` is imported (enter/exit + accordion
keyframes).
- Prefer platform idiom when choosing components: iOS surfaces use `Sheet`
(bottom) / `ActionSheet` / `Dialog` (alert); macOS surfaces use
`DropdownMenu`, `ContextMenu`, `Popover`, `Toolbar`, `Menubar`.references/components.md
# cupertino-ui component catalog
Install any component with:
```bash
npx shadcn@latest add https://cupertino-ui.baltoon.jp/r/<slug>.json
```
Import from `@/components/ui/<slug>`. Per-component docs with live demos:
`https://cupertino-ui.baltoon.jp/docs/components/<slug>`
## Table of contents
- [Controls](#controls) — button, checkbox, color-picker, control-group, date-picker, input-otp, radio-group, segmented-control, slider, stepper, switch, toggle-group
- [Inputs](#inputs) — combobox, form, input, label, search-field, select, textarea
- [Layout & content](#layout-content) — accordion, alert, avatar, badge, breadcrumb, card, carousel, content-unavailable, disclosure-group, gauge, list, page-control, progress, resizable, scroll-area, separator, skeleton, spinner, table
- [Liquid Glass](#liquid-glass) — glass, glass-button, glass-tab-bar
- [Overlays](#overlays) — action-sheet, command, dialog, hover-card, popover, sheet, toast, tooltip
- [Menus & navigation](#menus-navigation) — context-menu, dropdown-menu, menubar, navigation-stack, sidebar, tab-bar, toolbar
- [Music](#music) — album-grid, album-header, audio-player, lyrics-view, mini-player, now-playing, queue-list, track-list
## Controls
### Button (`button`)
Filled, tinted, gray, plain, and destructive styles. SwiftUI counterpart: `Button + .buttonStyle(.borderedProminent)`.
Exports: `Button`, `buttonVariants`
### Checkbox (`checkbox`)
The macOS checkbox: accent square with a white check. SwiftUI counterpart: `Toggle + .toggleStyle(.checkbox)`.
Exports: `Checkbox`
### Color Picker (`color-picker`)
The rainbow-ring well plus system-color swatches. SwiftUI counterpart: `ColorPicker`.
Exports: `ColorPicker`
### Control Group (`control-group`)
A bordered cluster of buttons on one platter. SwiftUI counterpart: `ControlGroup`.
Exports: `ControlGroup`, `ControlGroupButton`
### Date Picker (`date-picker`)
The inline calendar with month paging. SwiftUI counterpart: `DatePicker + .datePickerStyle(.graphical)`.
Exports: `DatePicker`
### Input OTP (`input-otp`)
Verification-code cells with a blinking caret.
Exports: `InputOTP`, `InputOTPGroup`, `InputOTPSeparator`, `InputOTPSlot`
### Radio Group (`radio-group`)
macOS radio buttons with the accent fill. SwiftUI counterpart: `Picker + .pickerStyle(.radioGroup)`.
Exports: `RadioGroup`, `RadioGroupItem`
### Segmented Control (`segmented-control`)
The selected segment floats on a white platter. SwiftUI counterpart: `Picker + .pickerStyle(.segmented)`.
Exports: `SegmentedControl`, `SegmentedControlList`, `SegmentedControlTrigger`, `SegmentedControlContent`
### Slider (`slider`)
The iOS slider with the 28pt white thumb. SwiftUI counterpart: `Slider`.
Exports: `Slider`
### Stepper (`stepper`)
The iOS − / + control. SwiftUI counterpart: `Stepper`.
Exports: `Stepper`
### Switch (`switch`)
The iOS toggle with the springy knob. SwiftUI counterpart: `Toggle`.
Exports: `Switch`
### Toggle Group (`toggle-group`)
The macOS toggle cluster on one platter. SwiftUI counterpart: `Toggle + ControlGroup`.
Exports: `ToggleGroup`, `ToggleGroupItem`
## Inputs
### Combobox (`combobox`)
Bordered field with a filtered suggestion menu. SwiftUI counterpart: `NSComboBox`.
Exports: `Combobox`
### Form (`form`)
Grouped-inset sections of label/control rows. SwiftUI counterpart: `Form`.
Exports: `Form`, `FormRow`, `FormSection`
### Input (`input`)
iOS inset field or macOS rounded-border text field. SwiftUI counterpart: `TextField`.
Exports: `Input`, `inputVariants`
### Label (`label`)
Form label set in the subheadline style. SwiftUI counterpart: `LabeledContent`.
Exports: `Label`
### Search Field (`search-field`)
The iOS search bar with clear and Cancel. SwiftUI counterpart: `.searchable(text:)`.
Exports: `SearchField`
### Select (`select`)
The macOS pop-up button with the accent chevron capsule. SwiftUI counterpart: `Picker + .pickerStyle(.menu)`.
Exports: `Select`, `SelectContent`, `SelectGroup`, `SelectItem`, `SelectLabel`, `SelectScrollDownButton`, `SelectScrollUpButton`, `SelectSeparator`, `SelectTrigger`, `SelectValue`
### Textarea (`textarea`)
Multiline text on an iOS inset field. SwiftUI counterpart: `TextEditor`.
Exports: `Textarea`
## Layout & content
### Accordion (`accordion`)
Grouped-inset disclosure list with rotating chevrons. SwiftUI counterpart: `DisclosureGroup in a List`.
Exports: `Accordion`, `AccordionContent`, `AccordionItem`, `AccordionTrigger`
### Alert (`alert`)
Inline tinted banner for warnings and status.
Exports: `Alert`, `AlertDescription`, `AlertTitle`
### Avatar (`avatar`)
Contacts-style circular avatar with a monogram fallback. SwiftUI counterpart: `AsyncImage in a Circle clip`.
Exports: `Avatar`, `AvatarFallback`, `AvatarImage`
### Badge (`badge`)
iOS badges and tinted capsules. SwiftUI counterpart: `.badge(_:)`.
Exports: `Badge`, `badgeVariants`
### Breadcrumb (`breadcrumb`)
The Finder path bar with chevron separators.
Exports: `Breadcrumb`, `BreadcrumbEllipsis`, `BreadcrumbItem`, `BreadcrumbLink`, `BreadcrumbList`, `BreadcrumbPage`, `BreadcrumbSeparator`
### Card (`card`)
A grouped-inset card with a hairline shadow. SwiftUI counterpart: `GroupBox`.
Exports: `Card`, `CardHeader`, `CardTitle`, `CardDescription`, `CardContent`, `CardFooter`
### Carousel (`carousel`)
Scroll-snap paging with a dot indicator. SwiftUI counterpart: `TabView + .tabViewStyle(.page)`.
Exports: `Carousel`, `CarouselItem`
### Content Unavailable (`content-unavailable`)
The centered empty state with symbol, title, and actions. SwiftUI counterpart: `ContentUnavailableView`.
Exports: `ContentUnavailable`
### Disclosure Group (`disclosure-group`)
Rotating-chevron rows that reveal indented content. SwiftUI counterpart: `DisclosureGroup`.
Exports: `DisclosureGroup`
### Gauge (`gauge`)
The open-ring dial and the linear capacity bar. SwiftUI counterpart: `Gauge`.
Exports: `Gauge`
### List (`list`)
The iOS Settings list: icon tiles, chevrons, hairline separators. SwiftUI counterpart: `List + .listStyle(.insetGrouped)`.
Exports: `List`, `ListItem`
### Page Control (`page-control`)
Dots for paged content. SwiftUI counterpart: `UIPageControl`.
Exports: `PageControl`
### Progress (`progress`)
The thin linear progress bar. SwiftUI counterpart: `ProgressView(value:)`.
Exports: `Progress`
### Resizable (`resizable`)
Draggable split-view divider. SwiftUI counterpart: `NavigationSplitView divider`.
Exports: `ResizableHandle`, `ResizablePanel`, `ResizablePanelGroup`
### Scroll Area (`scroll-area`)
macOS overlay scrollbars. SwiftUI counterpart: `ScrollView`.
Exports: `ScrollArea`, `ScrollBar`
### Separator (`separator`)
A hairline divider. SwiftUI counterpart: `Divider`.
Exports: `Separator`
### Skeleton (`skeleton`)
Redaction placeholder for loading states. SwiftUI counterpart: `.redacted(reason: .placeholder)`.
Exports: `Skeleton`
### Spinner (`spinner`)
The activity indicator with eight fading spokes. SwiftUI counterpart: `ProgressView()`.
Exports: `Spinner`
### Table (`table`)
The macOS list view with alternating rows. SwiftUI counterpart: `Table`.
Exports: `Table`, `TableBody`, `TableCaption`, `TableCell`, `TableFooter`, `TableHead`, `TableHeader`, `TableRow`
## Liquid Glass
### Glass (`glass`)
Liquid Glass: the light-bending control-layer material, regular and clear. SwiftUI counterpart: `glassEffect(_:in:)`.
Exports: `Glass`, `GlassSheen`, `glassVariants`
### Glass Button (`glass-button`)
Liquid Glass capsule button with springy press and optional tint. SwiftUI counterpart: `.buttonStyle(.glass)`.
Exports: `GlassButton`, `glassButtonVariants`
### Glass Tab Bar (`glass-tab-bar`)
Floating glass capsule with a pill morphing between tabs. SwiftUI counterpart: `TabView (iOS 26)`.
Exports: `GlassTabBar`
## Overlays
### Action Sheet (`action-sheet`)
Stacked action groups rising from the bottom, with a detached Cancel. SwiftUI counterpart: `.confirmationDialog(_:isPresented:)`.
Exports: `ActionSheet`, `ActionSheetAction`, `ActionSheetCancel`, `ActionSheetClose`, `ActionSheetContent`, `ActionSheetGroup`, `ActionSheetHeader`, `ActionSheetTrigger`
### Command (`command`)
Spotlight: the cmd-K command palette.
Exports: `Command`, `CommandDialog`, `CommandEmpty`, `CommandGroup`, `CommandInput`, `CommandItem`, `CommandList`, `CommandSeparator`, `CommandShortcut`
### Dialog (`dialog`)
The iOS alert with hairline-separated actions. SwiftUI counterpart: `.alert(_:isPresented:)`.
Exports: `Dialog`, `DialogAction`, `DialogClose`, `DialogContent`, `DialogDescription`, `DialogFooter`, `DialogHeader`, `DialogOverlay`, `DialogPortal`, `DialogTitle`, `DialogTrigger`
### Hover Card (`hover-card`)
A hover preview panel on thick material.
Exports: `HoverCard`, `HoverCardContent`, `HoverCardTrigger`
### Popover (`popover`)
A blurred material panel anchored to a control. SwiftUI counterpart: `.popover(isPresented:)`.
Exports: `Popover`, `PopoverAnchor`, `PopoverContent`, `PopoverTrigger`
### Sheet (`sheet`)
The iOS bottom sheet with a grabber. SwiftUI counterpart: `.sheet(isPresented:)`.
Exports: `Sheet`, `SheetClose`, `SheetContent`, `SheetDescription`, `SheetFooter`, `SheetHeader`, `SheetOverlay`, `SheetPortal`, `SheetTitle`, `SheetTrigger`
### Toast (`toast`)
iOS notification banners; call toast() from anywhere.
Exports: `toast`, `Toaster`
### Tooltip (`tooltip`)
The macOS help tag. SwiftUI counterpart: `.help(_:)`.
Exports: `Tooltip`, `TooltipContent`, `TooltipProvider`, `TooltipTrigger`
## Menus & navigation
### Context Menu (`context-menu`)
The macOS right-click menu. SwiftUI counterpart: `.contextMenu { ... }`.
Exports: `ContextMenu`, `ContextMenuCheckboxItem`, `ContextMenuContent`, `ContextMenuGroup`, `ContextMenuItem`, `ContextMenuLabel`, `ContextMenuPortal`, `ContextMenuRadioGroup`, `ContextMenuRadioItem`, `ContextMenuSeparator`, `ContextMenuShortcut`, `ContextMenuSub`, `ContextMenuSubContent`, `ContextMenuSubTrigger`, `ContextMenuTrigger`
### Dropdown Menu (`dropdown-menu`)
The macOS pull-down menu on a blurred material. SwiftUI counterpart: `Menu`.
Exports: `DropdownMenu`, `DropdownMenuCheckboxItem`, `DropdownMenuContent`, `DropdownMenuGroup`, `DropdownMenuItem`, `DropdownMenuLabel`, `DropdownMenuPortal`, `DropdownMenuRadioGroup`, `DropdownMenuRadioItem`, `DropdownMenuSeparator`, `DropdownMenuShortcut`, `DropdownMenuSub`, `DropdownMenuSubContent`, `DropdownMenuSubTrigger`, `DropdownMenuTrigger`
### Menubar (`menubar`)
The macOS menu bar with material menus. SwiftUI counterpart: `.commands { CommandMenu(...) }`.
Exports: `Menubar`, `MenubarCheckboxItem`, `MenubarContent`, `MenubarGroup`, `MenubarItem`, `MenubarLabel`, `MenubarMenu`, `MenubarPortal`, `MenubarRadioGroup`, `MenubarRadioItem`, `MenubarSeparator`, `MenubarShortcut`, `MenubarSub`, `MenubarSubContent`, `MenubarSubTrigger`, `MenubarTrigger`
### Navigation Stack (`navigation-stack`)
Push/pop slide transitions with a back-button nav bar. SwiftUI counterpart: `NavigationStack + NavigationLink`.
Exports: `NavigationLink`, `NavigationStack`, `useNavigation`
### Sidebar (`sidebar`)
The macOS/iPadOS source list with accent selection. SwiftUI counterpart: `NavigationSplitView`.
Exports: `Sidebar`, `SidebarItem`, `SidebarProvider`, `SidebarSection`, `SidebarToggle`, `useSidebar`
### Tab Bar (`tab-bar`)
The iOS bottom tab bar on blurred material. SwiftUI counterpart: `TabView`.
Exports: `TabBar`, `TabBarContent`, `TabBarItem`, `TabBarList`
### Toolbar (`toolbar`)
The macOS window toolbar with icon buttons. SwiftUI counterpart: `.toolbar { ToolbarItem(...) }`.
Exports: `Toolbar`, `ToolbarButton`, `ToolbarSeparator`, `ToolbarSpacer`, `ToolbarTitle`
## Music
### Album Grid (`album-grid`)
The Apple Music library grid. SwiftUI counterpart: `LazyVGrid of artwork`.
Exports: `AlbumCard`, `AlbumGrid`
### Album Header (`album-header`)
Album artwork, red artist name, Play / Shuffle.
Exports: `AlbumHeader`
### Audio Player (`audio-player`)
Queue, transport, seek, volume — as a hook. SwiftUI counterpart: `MusicKit player`.
Exports: `AudioPlayerProvider`, `formatTime`, `useAudioPlayer`
### Lyrics View (`lyrics-view`)
Bold synced lyric lines that light up with playback. SwiftUI counterpart: `MusicKit lyrics`.
Exports: `LyricsView`
### Mini Player (`mini-player`)
The floating capsule above the tab bar.
Exports: `MiniPlayer`
### Now Playing (`now-playing`)
The full player with shrinking artwork.
Exports: `NowPlaying`
### Queue List (`queue-list`)
Up Next: current track pinned, upcoming below.
Exports: `QueueList`
### Track List (`track-list`)
Numbered rows with animated equalizer bars.
Exports: `EqualizerBars`, `TrackList`, `TrackRow`