<!-- source-hash: 8385ab6a043167836b17b6b41deb0581 -->
Storybook stories for the `Toaster` / `ToastCard` component system, covering static previews, interactive playground, command-approval flows, and live Sonner-powered triggers.

## Key Components

| Export | Type | Description |
|--------|------|-------------|
| `AllVariants` | Story | Static grid of every `ToastVariant` (`default`, `success`, `warning`, `error`, `info`) plus edge cases (title-only, description-only, non-dismissible, persistent) |
| `Playground` | Story | Arg-driven interactive card — use Storybook Controls to tweak `variant`, `title`, `description`, `duration`, and `dismissible` |
| `CommandApprovalCollapsed` | Story | `CommandApprovalToast` in its default collapsed state |
| `CommandApprovalExpanded` | Story | `CommandApprovalToast` with `defaultExpanded` showing the command preview and Approve/Reject actions |
| `CommandApprovalPerTool` | Story | One expanded approval toast per supported tool type (`FLEET_MDM`, `TACTICAL_RMM`, `MESHCENTRAL`, `AUTHENTIK`, `OSQUERY`, `OPENFRAME`) to verify icon mapping |
| `CommandApprovalLive` | Story | Fires real Sonner toasts via `showCommandApprovalToast()` with `onApprove`/`onReject` callbacks |
| `LiveTriggers` | Story | Button panel that fires every variant as a live Sonner toast using both `toast()` and `showToast()` |

## Usage Example

```typescript
// Render once near your app root
import { Toaster } from '@/components/ui/toaster';
<Toaster />

// Fire a standard toast from anywhere
import { toast } from '@/hooks/use-toast';
toast({ variant: 'success', title: 'Saved', description: 'All changes committed.' });

// Fire a command-approval toast requiring tech sign-off
import { showCommandApprovalToast } from '@/components/ui/toaster';
showCommandApprovalToast({
  title: 'Tech Required',
  description: 'Approval is required to execute the command.',
  command: 'fleetctl query --hosts mac-* "SELECT * FROM system_info"',
  toolType: ToolTypeValues.FLEET_MDM,
  approvalDescription: 'Queries system info across all macOS endpoints.',
  onApprove: () => toast({ variant: 'success', title: 'Command approved' }),
  onReject:  () => toast({ variant: 'error',   title: 'Command rejected' }),
});
```

> **Note:** `<Toaster />` must be mounted in the render tree for live stories (`CommandApprovalLive`, `LiveTriggers`) — both stories include it inline so the Storybook canvas is self-contained.