@timbal-ai/timbal-react 0.8.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +49 -0
- package/README.md +100 -6
- package/dist/app.cjs +2538 -1262
- package/dist/app.d.cts +11 -6
- package/dist/app.d.ts +11 -6
- package/dist/app.esm.js +43 -6
- package/dist/{button-ClSgD6OF.d.cts → button-BoyX5pM_.d.cts} +1 -1
- package/dist/{button-ClSgD6OF.d.ts → button-BoyX5pM_.d.ts} +1 -1
- package/dist/{chart-artifact-Bl67kre7.d.ts → chart-artifact-BZp7nmaf.d.ts} +430 -14
- package/dist/{chart-artifact-BzcvblDe.d.cts → chart-artifact-CX-rh9nq.d.cts} +430 -14
- package/dist/{chat-Bed4FQSl.d.cts → chat-DCms8pJ_.d.cts} +31 -4
- package/dist/{chat-Bed4FQSl.d.ts → chat-DCms8pJ_.d.ts} +31 -4
- package/dist/chat.cjs +1111 -776
- package/dist/chat.d.cts +1 -1
- package/dist/chat.d.ts +1 -1
- package/dist/chat.esm.js +3 -3
- package/dist/{chunk-QVAUCVQA.esm.js → chunk-4AKJ6FKE.esm.js} +277 -4
- package/dist/chunk-6HWMJNZT.esm.js +3439 -0
- package/dist/{chunk-VWHHKAHN.esm.js → chunk-FRZOEYBO.esm.js} +4 -4
- package/dist/chunk-JEAUF54A.esm.js +52 -0
- package/dist/{chunk-OISVICYF.esm.js → chunk-P3KDAYX6.esm.js} +1 -1
- package/dist/{chunk-6YVKCVEP.esm.js → chunk-TK2AGIME.esm.js} +1106 -298
- package/dist/{chunk-CFU3YDTV.esm.js → chunk-XCM3V6RK.esm.js} +5 -5
- package/dist/{chunk-5ZKLPWVN.esm.js → chunk-YXZ22OJN.esm.js} +849 -667
- package/dist/index.cjs +6070 -1605
- package/dist/index.d.cts +8 -6
- package/dist/index.d.ts +8 -6
- package/dist/index.esm.js +427 -11
- package/dist/pill-segmented-tabs-Ba5q0feL.d.cts +500 -0
- package/dist/pill-segmented-tabs-Ba5q0feL.d.ts +500 -0
- package/dist/studio.cjs +1333 -998
- package/dist/studio.d.cts +2 -2
- package/dist/studio.d.ts +2 -2
- package/dist/studio.esm.js +5 -5
- package/dist/styles.css +220 -0
- package/dist/ui.cjs +3592 -89
- package/dist/ui.d.cts +72 -96
- package/dist/ui.d.ts +72 -96
- package/dist/ui.esm.js +400 -6
- package/dist/{welcome-COOb05a5.d.cts → welcome-CRqOPKMp.d.cts} +1 -1
- package/dist/{welcome-DE08m9ca.d.ts → welcome-DlHUa3OL.d.ts} +1 -1
- package/package.json +9 -3
- package/dist/chunk-P4SN7M67.esm.js +0 -435
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,55 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `@timbal-ai/timbal-react` are documented here.
|
|
4
4
|
|
|
5
|
+
## [Unreleased]
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- **App-kit charts now run on [recharts](https://recharts.org)** (native shadcn chart layer). `LineAreaChart`, `PieChart`, `RadialChart`, and `RadarChart` keep the same public props but render via recharts under the shadcn `ChartContainer` / `ChartTooltipContent` / `ChartLegendContent` chrome — so tooltips, hover states, and animation match shadcn exactly across every chart kind. Series colors still flow from the theme `--chart-1..6` tokens.
|
|
10
|
+
- Fixes from feedback: in-card legends no longer clip outside the card; line/area charts use a thin crosshair cursor (not a wide band); tooltips animate in; and radial/radar charts now have hover tooltips.
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **shadcn chart primitives exported from `/ui`**: `ChartContainer`, `ChartTooltip`, `ChartTooltipContent`, `ChartLegend`, `ChartLegendContent`, `ChartStyle`, `useChart`, and the `ChartConfig` type.
|
|
15
|
+
|
|
16
|
+
### Dependencies
|
|
17
|
+
|
|
18
|
+
- Adds **`recharts`** as a dependency and **`react-is`** as a peer dependency (`react-is` must match your React version).
|
|
19
|
+
|
|
20
|
+
## [1.1.0] — 2026-06-03
|
|
21
|
+
|
|
22
|
+
### Added
|
|
23
|
+
|
|
24
|
+
- **`DataTable` scales to real datasets** — three additive props (all backward-compatible):
|
|
25
|
+
- **`pageSize`** — built-in client-side pagination with a compact footer pager (row range + prev/next). Controlled via `pageIndex` / `onPageChange`, or uncontrolled with `defaultPageIndex`; out-of-range pages snap back after filtering.
|
|
26
|
+
- **`selectable`** + **`selectedKeys`** / **`defaultSelectedKeys`** / **`onSelectionChange`** — a leading checkbox column with header select-all (indeterminate state) for bulk actions (acknowledge/resolve/export). Toggling a checkbox never triggers `onRowClick`.
|
|
27
|
+
- **`loading`** (+ **`loadingRows`**) — shaped skeleton rows that preserve the header/columns so the table doesn't jump when data arrives.
|
|
28
|
+
- **Loading states across the data kit** — `MetricRow`, `MetricChartCard`, and `ChartPanel` accept **`loading`**, rendering skeleton tiles / plot-height skeletons. Every async dashboard gets a consistent pending state without re-inventing one.
|
|
29
|
+
- **`useLiveQuery` / `useInterval`** (root + `/app`) — poll an async source on an interval for live dashboards (alerts, metrics, logs). Handles loading vs. background `refreshing`, drops stale/post-unmount responses, pauses while the tab is hidden + refetches on focus, and exposes `lastUpdated` + a manual `refetch`. Pairs with `authFetch`.
|
|
30
|
+
- **`AppShell` owns the mobile nav** — `AppShell` manages the drawer open-state (`navOpen` / `defaultNavOpen` / `onNavOpenChange`), renders the mobile backdrop automatically, and provides **`useAppShellNav()`** + **`AppShellSidebarTrigger`** (an `md:hidden` hamburger). Wiring a responsive `StudioSidebar` drops from ~30 lines of `isMobile`/resize/backdrop boilerplate to passing `mobileOpen={nav.open}` / `onMobileOpenChange={nav.setOpen}`.
|
|
31
|
+
- **`StatusBadge` `tone="danger"`** — a destructive/red tone for critical severity, so error/critical states aren't forced onto the brand `primary` tone.
|
|
32
|
+
|
|
33
|
+
## [1.0.0] — 2026-06-02
|
|
34
|
+
|
|
35
|
+
First stable release. The `@timbal-ai/timbal-react/ui` primitive layer, the control-surface contract, and the app-kit are now a settled public surface.
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
|
|
39
|
+
- **Built-in motion engine** — Dialog, AlertDialog, Sheet, Popover, DropdownMenu, Select, Tooltip, Toast, NavigationMenu, and Accordion / Collapsible now animate (fade / zoom / slide / height) out of the box. The `animate-in` / `animate-out` / `fade-*` / `zoom-*` / `slide-*` utilities and the `accordion` / `collapsible` / `caret-blink` keyframes are **inlined in `styles.css`** — no `tailwindcss-animate` / `tw-animate-css` dependency and no consumer config. Duration flows from any `duration-*` utility via `--tw-duration` (default 150ms). Compose `overlayAnimationClass` for custom overlays.
|
|
40
|
+
- **Complete vendored primitive catalog** on the control-surface contract: `Form`, `AspectRatio`, `Toolbar`, `Menubar`, `NavigationMenu`, `Breadcrumb`, `Pagination`, `Command` (cmdk), `Calendar` (react-day-picker), `Combobox`, `DatePicker`, `InputOTP`, `Kbd`, `Spinner`, `InputGroup` — alongside the existing `Input`, `Select`, `Dialog`, `Sheet`, `AlertDialog`, `Table`, `Toast`, `Card`, `Badge`, `Slider`, `Progress`, and more.
|
|
41
|
+
- **`overlayListPanelClass`** + **`PopoverContent` `variant="list"`** — one shared listbox/menu chrome so `Select`, `DropdownMenu`, `Combobox`, and `Command` panels are visually identical. `Combobox` uses `ComboboxTrigger` (control skin), not a `Button`.
|
|
42
|
+
- **App-kit organized into two libraries** (example): a **UI primitives** catalog (per-family audit, sidebar) and a **Blocks** library (composed sections — Project settings, Settings form, Metrics, Analytics, Charts, Table, Integrations, Resources, Confirm & destructive, Detail sheet, Empty states, Sign-in). Driven by `primitives-catalog.ts` / `blocks-catalog.ts`.
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
|
|
46
|
+
- `overlayAnimationClass` is now exported from `@timbal-ai/timbal-react/ui` and the root for composing custom overlays.
|
|
47
|
+
|
|
48
|
+
### Removed (breaking)
|
|
49
|
+
|
|
50
|
+
- **`Tabs` / `TabsList` / `TabsTrigger` / `TabsContent` are no longer exported.** Radix/shadcn Tabs are intentionally not part of this package. Use **`PillSegmentedTabs`** (`trackVariant="flush"`) or the app-kit **`SubNav`** for section bars; switch panel content with local state or the router. Use `Accordion` / `Collapsible` for expand-collapse.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
5
54
|
## [0.8.2] — 2026-06-02
|
|
6
55
|
|
|
7
56
|
### Added
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
React components and runtime for building Timbal chat UIs and studio apps. Drop in a single component to get a fully-featured streaming chat interface connected to a Timbal workforce agent, or compose dashboards with the **app kit**.
|
|
4
4
|
|
|
5
|
-
## Package structure (0
|
|
5
|
+
## Package structure (1.0)
|
|
6
6
|
|
|
7
7
|
| Subpath | Use when |
|
|
8
8
|
|---------|----------|
|
|
@@ -35,9 +35,11 @@ bun add @timbal-ai/timbal-react
|
|
|
35
35
|
**Peer dependencies:**
|
|
36
36
|
|
|
37
37
|
```bash
|
|
38
|
-
npm install react react-dom @assistant-ui/react @timbal-ai/timbal-sdk
|
|
38
|
+
npm install react react-dom react-is @assistant-ui/react @timbal-ai/timbal-sdk
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
+
> The app-kit charts are built on [recharts](https://recharts.org) (installed automatically). `react-is` is a recharts peer and **must match your React version** — install it explicitly if your package manager doesn't hoist peers.
|
|
42
|
+
|
|
41
43
|
### Tailwind setup
|
|
42
44
|
|
|
43
45
|
The package ships pre-built Tailwind class names **plus a complete light + dark token set** (`bg-background`, `text-foreground`, `bg-card`, `bg-bubble-user`, `from-elevated-from`, `bg-playground-from/via/to`, etc.). Your app CSS only needs three lines:
|
|
@@ -61,15 +63,51 @@ Every token has a CSS-variable indirection in `styles.css`. Override individual
|
|
|
61
63
|
:root {
|
|
62
64
|
--primary: oklch(0.5 0.12 265);
|
|
63
65
|
--playground-from: oklch(0.95 0.04 265 / 0.6);
|
|
66
|
+
/* Chart series — override any to rebrand every dashboard chart at once */
|
|
67
|
+
--chart-1: var(--primary);
|
|
68
|
+
--chart-2: oklch(0.62 0.13 184);
|
|
64
69
|
}
|
|
65
70
|
|
|
66
71
|
.dark {
|
|
67
72
|
--primary: oklch(0.72 0.14 265);
|
|
68
73
|
--playground-from: oklch(0.27 0.04 265);
|
|
74
|
+
--chart-1: var(--primary);
|
|
69
75
|
}
|
|
70
76
|
```
|
|
71
77
|
|
|
72
|
-
Both light AND dark blocks must
|
|
78
|
+
Both light AND dark blocks must define every overridden token — otherwise toggling dark mode produces an inconsistent UI. The library prints a one-time dev-only console warning when it detects a mismatch.
|
|
79
|
+
|
|
80
|
+
### Charts (app kit + artifacts)
|
|
81
|
+
|
|
82
|
+
Dashboard and in-chat charts use the **native shadcn/recharts layer** — animated tooltips, hover crosshairs, and legends that match shadcn/ui out of the box.
|
|
83
|
+
|
|
84
|
+
| Import from | Components |
|
|
85
|
+
|-------------|------------|
|
|
86
|
+
| `@timbal-ai/timbal-react` or `/app` | `LineAreaChart`, `PieChart`, `RadialChart`, `RadarChart`, `Sparkline`, `ChartPanel`, `MetricChartCard` |
|
|
87
|
+
| `@timbal-ai/timbal-react/ui` | `ChartContainer`, `ChartTooltip`, `ChartTooltipContent`, `ChartLegend`, `ChartLegendContent`, `ChartConfig` |
|
|
88
|
+
|
|
89
|
+
**Dependencies:** `recharts` ships with the package. Install **`react-is`** alongside React (same major version) — it is a recharts peer and must match your React version.
|
|
90
|
+
|
|
91
|
+
**Rebrand:** override `--chart-1` … `--chart-6` in `:root` / `.dark` (series 1 defaults to `--primary`). Per-series overrides: `series[].color` on `LineAreaChart` or `colors` on pie/radial artifacts.
|
|
92
|
+
|
|
93
|
+
**`ChartArtifact` kinds:** `bar`, `horizontalBar`, `line`, `area`, `pie`, `donut`, `radial`, `radar` — see `ChartPanel` + the app-kit **Chart catalog** recipe.
|
|
94
|
+
|
|
95
|
+
**Custom charts** (same pattern as shadcn docs):
|
|
96
|
+
|
|
97
|
+
```tsx
|
|
98
|
+
import { Bar, BarChart, XAxis } from "recharts";
|
|
99
|
+
import { ChartContainer, ChartTooltip, ChartTooltipContent, type ChartConfig } from "@timbal-ai/timbal-react/ui";
|
|
100
|
+
|
|
101
|
+
const config = { revenue: { label: "Revenue", color: "var(--chart-1)" } } satisfies ChartConfig;
|
|
102
|
+
|
|
103
|
+
<ChartContainer config={config} className="h-[240px] w-full">
|
|
104
|
+
<BarChart data={rows} accessibilityLayer>
|
|
105
|
+
<XAxis dataKey="month" hide />
|
|
106
|
+
<ChartTooltip content={<ChartTooltipContent />} />
|
|
107
|
+
<Bar dataKey="revenue" fill="var(--color-revenue)" radius={4} />
|
|
108
|
+
</BarChart>
|
|
109
|
+
</ChartContainer>
|
|
110
|
+
```
|
|
73
111
|
|
|
74
112
|
### Programmatic theming (no hand-authored OKLCH)
|
|
75
113
|
|
|
@@ -120,6 +158,33 @@ import { ThemePresetGallery, applyThemePreset } from "@timbal-ai/timbal-react";
|
|
|
120
158
|
|
|
121
159
|
**For UI-generation agents:** inject `THEME_AGENT_INSTRUCTIONS` into the system prompt so the model themes via these APIs (and never emits raw OKLCH), mirroring `APP_KIT_AGENT_INSTRUCTIONS`.
|
|
122
160
|
|
|
161
|
+
### Anti-slop guardrails for generated UIs
|
|
162
|
+
|
|
163
|
+
When an agent composes app-kit UIs, taste is enforced — not just suggested — through three layers built on one shared vocabulary (`HOUSE_RULES`, `SEMANTIC_COLOR_TOKENS`, `SLOP_BUDGETS`):
|
|
164
|
+
|
|
165
|
+
```ts
|
|
166
|
+
import {
|
|
167
|
+
lintGeneratedUi,
|
|
168
|
+
reviewGeneratedUi,
|
|
169
|
+
UI_REVIEW_AGENT_INSTRUCTIONS,
|
|
170
|
+
} from "@timbal-ai/timbal-react"; // or "/app"
|
|
171
|
+
|
|
172
|
+
// 1. Prompt: APP_KIT_AGENT_INSTRUCTIONS renders its anti-slop checklist from
|
|
173
|
+
// HOUSE_RULES; add UI_REVIEW_AGENT_INSTRUCTIONS so the model self-reviews.
|
|
174
|
+
const systemPrompt = `${basePrompt}\n\n${APP_KIT_AGENT_INSTRUCTIONS}\n\n${UI_REVIEW_AGENT_INSTRUCTIONS}`;
|
|
175
|
+
|
|
176
|
+
// 2. Lint: deterministic checks reject hardcoded palette colors / hex / oklch
|
|
177
|
+
// (errors) and flag icon-spam, bold giant values, per-row dividers, and
|
|
178
|
+
// gradients on data surfaces (warnings).
|
|
179
|
+
const { ok, findings } = lintGeneratedUi(generatedTsx);
|
|
180
|
+
|
|
181
|
+
// 3. Critique loop: review → fix → re-review until it passes clean.
|
|
182
|
+
const review = reviewGeneratedUi(generatedTsx, { strict: true });
|
|
183
|
+
if (!review.passed) regenerate(review.revisionPrompt); // names the exact lines + fixes
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
Color decisions belong to the theme generator and semantic tokens, never to the per-component agent — the linter enforces exactly that.
|
|
187
|
+
|
|
123
188
|
### CSS imports
|
|
124
189
|
|
|
125
190
|
Import these stylesheets once in your app entry:
|
|
@@ -851,6 +916,17 @@ if (res.ok) {
|
|
|
851
916
|
|
|
852
917
|
Radix-backed wrappers pre-styled with the design tokens (`bg-popover`, `border-border`, `shadow-card`, …) — import from `@timbal-ai/timbal-react/ui` or the root. Use these instead of `npx shadcn`; raw shadcn references token names the app doesn't define and renders unstyled.
|
|
853
918
|
|
|
919
|
+
**Control-surface contract.** Every input, select / dropdown trigger, and search field shares **one** skin so they match side by side regardless of origin. Build custom controls by composing it — never hand-roll a `rounded-* border-input bg-…` surface:
|
|
920
|
+
|
|
921
|
+
```tsx
|
|
922
|
+
import { controlClass, overlaySurfaceClass, overlayItemClass } from "@timbal-ai/timbal-react/ui";
|
|
923
|
+
|
|
924
|
+
<input className={controlClass({}, "w-full")} /> {/* field shape, h-10 */}
|
|
925
|
+
<button className={controlClass({ shape: "pill", size: "sm" })} /> {/* chrome pill */}
|
|
926
|
+
```
|
|
927
|
+
|
|
928
|
+
`controlClass({ size, shape })` — `size`: `"sm" | "default"`; `shape`: `"field"` (rounded-lg, default) or `"pill"` (chrome rows). Floating panels (popover, menu, listbox) compose `overlaySurfaceClass` + `overlayItemClass`. Vendoring a new shadcn primitive means swapping its inline surface string for these before shipping.
|
|
929
|
+
|
|
854
930
|
- **Button:** `Button`
|
|
855
931
|
- **Dialog:** `Dialog` · `DialogTrigger` · `DialogContent` · `DialogTitle` · `DialogDescription` · `DialogHeader` · `DialogFooter` · `DialogClose` · `DialogOverlay` · `DialogPortal`
|
|
856
932
|
- **Dropdown menu:** `DropdownMenu` · `DropdownMenuTrigger` · `DropdownMenuContent` · `DropdownMenuItem` · `DropdownMenuCheckboxItem` · `DropdownMenuRadioGroup` · `DropdownMenuRadioItem` · `DropdownMenuLabel` · `DropdownMenuSeparator` · `DropdownMenuShortcut` · `DropdownMenuGroup` · `DropdownMenuSub` · `DropdownMenuSubTrigger` · `DropdownMenuSubContent`
|
|
@@ -858,7 +934,22 @@ Radix-backed wrappers pre-styled with the design tokens (`bg-popover`, `border-b
|
|
|
858
934
|
- **Select:** `Select` · `SelectTrigger` · `SelectValue` · `SelectContent` · `SelectItem` · `SelectGroup` · `SelectLabel` · `SelectSeparator` · `SelectScrollUpButton` · `SelectScrollDownButton`
|
|
859
935
|
- **Tooltip:** `Tooltip` · `TooltipTrigger` · `TooltipContent` · `TooltipProvider`
|
|
860
936
|
- **Avatar:** `Avatar` · `AvatarImage` · `AvatarFallback`
|
|
861
|
-
- **
|
|
937
|
+
- **Form:** `Input` · `Textarea` · `Label` · `Checkbox` · `Switch` · `RadioGroup` · `RadioGroupItem` · `Form` (+ field/item/label/control/message/submit)
|
|
938
|
+
- **Navigation / chrome:** `Breadcrumb` (+ list/item/link/page/separator/ellipsis) · `Pagination` (+ content/item/link/previous/next/ellipsis) · `Menubar` (+ sub-parts) · `NavigationMenu` (+ sub-parts) · `Toolbar` (+ button/separator/toggle/link)
|
|
939
|
+
- **Command & date:** `Command` (+ dialog/input/list/group/item/…) · `Calendar` · `Combobox` (Popover + Command) · `DatePicker` (Popover + Calendar)
|
|
940
|
+
- **Input OTP:** `InputOTP` · `InputOTPGroup` · `InputOTPSlot` · `InputOTPHiddenInput` · `InputOTPSeparator` (Radix OTP field via unified `radix-ui`)
|
|
941
|
+
- **Misc:** `Kbd` · `KbdGroup` · `Shimmer`
|
|
942
|
+
- **Feedback / data:** `Slider` · `Progress` · `Badge`
|
|
943
|
+
- **Overlays:** `Sheet` · `AlertDialog` · `HoverCard` · `ContextMenu` (+ sub-parts) · `Toast` / `Toaster` / `toast()` / `useToast`
|
|
944
|
+
- **Surfaces:** `Card` (+ header/footer/title/description/content) · `Alert` · `Skeleton` · `Table` (+ header/body/row/cell)
|
|
945
|
+
- **Toggles:** `Toggle` · `ToggleGroup` · `Collapsible` · `ScrollArea`
|
|
946
|
+
- **Section navigation (pill switcher):** `PillSegmentedTabs` · `SubNav` (app kit) — **not** shadcn `Tabs`; Radix `Tabs` is not exported
|
|
947
|
+
- **Layout / disclosure:** `Accordion` · `AccordionItem` · `AccordionTrigger` · `AccordionContent` · `Separator` · `AspectRatio`
|
|
948
|
+
- **Input chrome:** `InputGroup` (+ addon/control/text) · `Spinner`
|
|
949
|
+
|
|
950
|
+
**Motion is built in.** Dialog, AlertDialog, Sheet, Popover, DropdownMenu, Select, Tooltip, Toast, NavigationMenu, and Accordion / Collapsible animate out of the box (fade / zoom / slide / height). The animation engine is **inlined in `styles.css`** — no `tailwindcss-animate` / `tw-animate-css` dependency and no consumer config. Duration flows from any `duration-*` utility (`--tw-duration`, default 150ms). When composing a custom overlay, reuse `overlayAnimationClass` rather than adding another animation library.
|
|
951
|
+
|
|
952
|
+
All primitives are Radix-backed (via the unified `radix-ui` package) or thin wrappers (`cmdk` for Command, `react-day-picker` for Calendar) and styled with the design tokens + the control-surface contract, so a new primitive matches the rest on arrival. Browse them live in the app-kit example: the **UI primitives** library (per-family audit) and the **Blocks** library (composed sections — Project settings, Confirm flow, Detail sheet, Empty states, Sign-in).
|
|
862
953
|
|
|
863
954
|
---
|
|
864
955
|
|
|
@@ -972,10 +1063,13 @@ The shell renders a rounded floating panel (bottom-right) and a **text-only** pi
|
|
|
972
1063
|
| `AppCopilotProvider` | Page context via `useAppCopilotContext` (not shown in UI) |
|
|
973
1064
|
| `AppChatPanel` | Full-height floating thread; dismiss via **X** in the corner |
|
|
974
1065
|
| `AppShell` `chat` | Floating overlay — `chatWidth`; optional `chatHeight` (default: stretch top–bottom) |
|
|
975
|
-
| `LineAreaChart`
|
|
1066
|
+
| `LineAreaChart` | Cartesian engine on **recharts** — area/line/bar, stacked, horizontal bars, `monotone`/`linear`/`step` curves, dots, shadcn-style hover tooltip (`dot`/`line`/`dashed` indicators), responsive |
|
|
1067
|
+
| `PieChart` / `RadialChart` / `RadarChart` | Pie & donut (center KPI), concentric progress rings, and spider charts — native shadcn/recharts charts |
|
|
1068
|
+
| `ChartContainer` / `ChartTooltip` / `ChartTooltipContent` / `ChartLegend` / `ChartLegendContent` (`/ui`) | shadcn chart primitives (recharts wrappers); colors flow from `ChartConfig` → `--color-*` |
|
|
1069
|
+
| `Sparkline` | Tiny inline trend for table cells and tiles |
|
|
976
1070
|
| `MetricRow` | Platform KPI strip in one card (overview metrics, no chart) |
|
|
977
1071
|
| `MetricChartCard` | `MetricRow` + selectable flush chart (Analytics / Infrastructure) |
|
|
978
|
-
| `ChartPanel` `artifact` | Chrome around a `ChartArtifact` or any chart |
|
|
1072
|
+
| `ChartPanel` `artifact` | Chrome around a `ChartArtifact` (`chartType`: `bar`/`horizontalBar`/`line`/`area`/`pie`/`donut`/`radial`/`radar`) or any chart |
|
|
979
1073
|
| `SettingsSection` / `FieldRow` / `DangerZone` / `FloatingUnsavedChangesBar` | Two-column settings page building blocks |
|
|
980
1074
|
| `IntegrationCard` / `ConnectionRow` / `PlanBadge` / `IntegrationsEmptyState` | Integration catalog + connected list |
|
|
981
1075
|
| `InfoCard` / `DescriptionList` / `ExpandableSection` / `ResourceCard` / `StatusDot` | Surfaces & detail views |
|