@timbal-ai/timbal-react 1.3.0 → 1.5.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 +32 -0
- package/README.md +28 -4
- package/dist/app.cjs +3610 -1489
- package/dist/app.d.cts +75 -30
- package/dist/app.d.ts +75 -30
- package/dist/app.esm.js +29 -7
- package/dist/{chart-artifact-Q5QgMtbj.d.ts → chart-artifact-2OTDTRwM.d.ts} +212 -41
- package/dist/{chart-artifact-WDEW9dHT.d.cts → chart-artifact-CS3qyGIY.d.cts} +212 -41
- package/dist/chat.cjs +264 -107
- package/dist/chat.d.cts +2 -2
- package/dist/chat.d.ts +2 -2
- package/dist/chat.esm.js +4 -3
- package/dist/chunk-5ECRZ5O7.esm.js +899 -0
- package/dist/{chunk-QU7ET55D.esm.js → chunk-AZL2WANO.esm.js} +320 -177
- package/dist/{chunk-OH23AX2V.esm.js → chunk-B4XAC4G7.esm.js} +430 -780
- package/dist/chunk-EDEKQYSU.esm.js +10 -0
- package/dist/{chunk-GQBYZRD7.esm.js → chunk-IGHBLJV3.esm.js} +38 -27
- package/dist/{chunk-OFWC4MIY.esm.js → chunk-JYDJRGDE.esm.js} +5 -3
- package/dist/{chunk-YCXN67SD.esm.js → chunk-SZDYIRMB.esm.js} +1639 -490
- package/dist/chunk-TZI3ID3C.esm.js +232 -0
- package/dist/{chunk-THBA27QY.esm.js → chunk-WMKPT5BV.esm.js} +242 -123
- package/dist/{chunk-VXMM2HX7.esm.js → chunk-ZNYAETFD.esm.js} +1 -1
- package/dist/{circular-progress-Ci8L-Hfa.d.cts → circular-progress-CDsJwIPF.d.cts} +19 -77
- package/dist/{circular-progress-Ci8L-Hfa.d.ts → circular-progress-CDsJwIPF.d.ts} +19 -77
- package/dist/index.cjs +5564 -3612
- package/dist/index.d.cts +7 -6
- package/dist/index.d.ts +7 -6
- package/dist/index.esm.js +45 -33
- package/dist/kanban-U5xNe9py.d.cts +212 -0
- package/dist/kanban-U5xNe9py.d.ts +212 -0
- package/dist/{layout-BTJyU8wd.d.ts → layout-B8r6Jbat.d.ts} +1 -1
- package/dist/{layout-C2G-FcER.d.cts → layout-Cu7Ijn04.d.cts} +1 -1
- package/dist/site.cjs +358 -0
- package/dist/site.d.cts +184 -0
- package/dist/site.d.ts +184 -0
- package/dist/site.esm.js +322 -0
- package/dist/studio.cjs +702 -343
- package/dist/studio.d.cts +1 -1
- package/dist/studio.d.ts +1 -1
- package/dist/studio.esm.js +7 -5
- package/dist/styles.css +56 -0
- package/dist/{timbal-v2-button-CNfdwGq4.d.cts → timbal-v2-button-B7vPs7gg.d.cts} +2 -2
- package/dist/{timbal-v2-button-CNfdwGq4.d.ts → timbal-v2-button-B7vPs7gg.d.ts} +2 -2
- package/dist/ui.cjs +1504 -659
- package/dist/ui.d.cts +11 -4
- package/dist/ui.d.ts +11 -4
- package/dist/ui.esm.js +35 -26
- package/dist/{welcome-DXqsGTwH.d.ts → welcome-DduQAC4K.d.ts} +4 -0
- package/dist/{welcome-BFGRoNfK.d.cts → welcome-NXZlcihe.d.cts} +4 -0
- package/package.json +9 -1
- package/dist/button-BoyX5pM_.d.cts +0 -18
- package/dist/button-BoyX5pM_.d.ts +0 -18
- package/dist/chunk-UCGVL7ZY.esm.js +0 -52
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,38 @@ All notable changes to `@timbal-ai/timbal-react` are documented here.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [1.5.0] — 2026-06-26
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- **`Kanban` board primitive** (`src/ui/kanban.tsx`) — A fully-featured, highly accessible Kanban board with column customization, drag-and-drop capabilities powered by `@dnd-kit`, and a read-only mode for static board rendering.
|
|
12
|
+
- **App density system** (`src/app/layout/app-density-context.tsx`, `src/design/app-density.ts`) — Context-driven density controls supporting "standard" and "compact" layouts. Compact mode cascades tighter padding, smaller text, and lower default heights to descendant components (pages, charts, tables).
|
|
13
|
+
- **Advanced filtering** (`src/app/data/FilterDropdown.tsx`, `src/app/data/FilterField.tsx`) — Rich multi-level filter dropdowns with searchable sub-menus and filter fields for complex data querying.
|
|
14
|
+
- **Site/Marketing primitives** (`src/site/`) — A brand new `./site` subpath export containing five high-quality interactive and marketing-grade components:
|
|
15
|
+
- **`Magnetic`** — magnetic hover effect that pulls elements toward the cursor.
|
|
16
|
+
- **`Marquee`** — high-performance, infinite scrolling marquee.
|
|
17
|
+
- **`Parallax`** — scroll-driven parallax container with custom speed factors.
|
|
18
|
+
- **`Reveal`** — scroll or entrance fade-in reveal with custom directions and delays.
|
|
19
|
+
- **`TextReveal`** — character-by-character or word-by-word scroll-reveal animations.
|
|
20
|
+
|
|
21
|
+
## [1.4.0] — 2026-06-05
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
|
|
25
|
+
- **`AppShell contentFill`** — makes the content region a bounded, non-scrolling flex column instead of the default padded scroll area. For full-bleed pages that own their own scroll (a full-page chat, a canvas, an editor, a split master–detail view): a `h-full` / `flex-1 min-h-0` child now fills exactly and a pinned footer (the chat composer) stays put instead of riding down on scroll. No `mainClassName` surgery and no `h-[calc(100dvh-…)]` guesses required.
|
|
26
|
+
- **`Page fill`** — makes a `Page` a `min-h-0 flex-1` flex column (pair with `AppShell contentFill` for full-height content). Give the fill child `min-h-0 flex-1`.
|
|
27
|
+
- **Headerless `Page`** — `Page.title` (and `PageHeader.title`) is now optional. Omit it to render a page with no `<h1>` header row (and no header padding), instead of dropping `Page` entirely to lose a heading.
|
|
28
|
+
- **New layout recipes** (`examples/app-kit/src/recipes/`): **full-page chat** (`contentFill` + headerless `fill` + `TimbalChat`), **split view** (master–detail two-pane), and **bento dashboard** (asymmetric `SurfaceCard`/`ChartPanel`/`StatTile` grid) — surfaced in the Blocks gallery and `APP_KIT_AGENT_INSTRUCTIONS` as distinct layout archetypes so generated UIs vary beyond the single sidebar+topbar+MetricRow+table shape.
|
|
29
|
+
|
|
30
|
+
### Changed
|
|
31
|
+
|
|
32
|
+
- **`AppShell` `main` is now a bounded flex column by default** (`flex min-h-0 flex-col`, keeping `pb-8 md:pb-10`). Previously the content `main` was content-sized, so every full-height child had to pass `mainClassName="flex min-h-0 flex-col"` to undo a layout deficiency; `h-full` / `flex-1` children now resolve a height out of the box. Scrolling `Page` content is unaffected (the outer scroll region still scrolls).
|
|
33
|
+
- **`APP_KIT_AGENT_INSTRUCTIONS`** documents a **Layout archetypes** menu (sidebar dashboard, focused, bento overview, split master–detail, full-page chat/canvas, copilot overlay, section-switcher) and the full-height contract (`contentFill` / `fill` / headerless `Page`), steering codegen away from shipping the same layout every time and away from `h-[calc(100dvh-…)]` / `min-h-[…]` sizing hacks.
|
|
34
|
+
|
|
35
|
+
### Fixed
|
|
36
|
+
|
|
37
|
+
- **`FieldSwitch` / `FieldSelect` id collision** — these derived their input id from `id ?? name ?? "switch"`, so multiple unlabeled instances all rendered `id="switch"` and toggling one flipped the others (and labels mis-associated). They now fall back to a `useId()`-generated id, so every instance is unique by default. `FieldInput` / `FieldTextarea` get the same `useId()` fallback (fixes silent label/control mis-association when no `name` is set).
|
|
38
|
+
|
|
7
39
|
## [1.3.0] — 2026-06-04
|
|
8
40
|
|
|
9
41
|
### Added
|
package/README.md
CHANGED
|
@@ -342,12 +342,26 @@ function MyShell() {
|
|
|
342
342
|
To inset a main column that follows the sidebar as it collapses, use `AppShell`, which wires the tracking automatically:
|
|
343
343
|
|
|
344
344
|
```tsx
|
|
345
|
-
import { AppShell, StudioSidebar } from "@timbal-ai/timbal-react";
|
|
345
|
+
import { AppShell, StudioSidebar, useAppShellNav } from "@timbal-ai/timbal-react";
|
|
346
|
+
|
|
347
|
+
// Rendered inside AppShell, so it can read the shell's mobile-nav controls and
|
|
348
|
+
// wire the drawer. The sidebar already closes itself on selection (mobile).
|
|
349
|
+
function Sidebar({ agent, onSelect }: { agent: string; onSelect: (id: string) => void }) {
|
|
350
|
+
const nav = useAppShellNav();
|
|
351
|
+
return (
|
|
352
|
+
<StudioSidebar
|
|
353
|
+
selectedId={agent}
|
|
354
|
+
onSelect={onSelect}
|
|
355
|
+
mobileOpen={nav.open}
|
|
356
|
+
onMobileOpenChange={nav.setOpen}
|
|
357
|
+
/>
|
|
358
|
+
);
|
|
359
|
+
}
|
|
346
360
|
|
|
347
361
|
function MyShell() {
|
|
348
362
|
const [agent, setAgent] = useState("agent-a");
|
|
349
363
|
return (
|
|
350
|
-
<AppShell sidebar={<
|
|
364
|
+
<AppShell sidebar={<Sidebar agent={agent} onSelect={setAgent} />}>
|
|
351
365
|
{/* main content insets + animates with the sidebar */}
|
|
352
366
|
</AppShell>
|
|
353
367
|
);
|
|
@@ -356,6 +370,16 @@ function MyShell() {
|
|
|
356
370
|
|
|
357
371
|
For a fully custom shell, drive your own offset from `StudioSidebar`'s `onInsetChange` callback, which fires with the live inset width (px) whenever the collapse state changes.
|
|
358
372
|
|
|
373
|
+
The `AppShell` content region is a padded scroll area by default. For a **full-bleed page that fills the viewport** (a full-page chat, a canvas, an editor, a split master–detail view), pass `contentFill` to `AppShell` and `fill` to `Page` (omit `Page.title` for a headerless page), then give the filling child `min-h-0 flex-1` — the composer / footer stays pinned and you avoid `h-[calc(100dvh-…)]` guesses:
|
|
374
|
+
|
|
375
|
+
```tsx
|
|
376
|
+
<AppShell contentFill>
|
|
377
|
+
<Page fill>
|
|
378
|
+
<TimbalChat workforceId="…" className="min-h-0 flex-1" />
|
|
379
|
+
</Page>
|
|
380
|
+
</AppShell>
|
|
381
|
+
```
|
|
382
|
+
|
|
359
383
|
### Drop-in shell (header + agent picker)
|
|
360
384
|
|
|
361
385
|
`TimbalChatShell` wraps the common blueprint layout: brand area, workforce selector, optional header actions, and a full-height chat. When `workforceId` is omitted, it fetches `{baseUrl}/workforce` and selects the first agent automatically:
|
|
@@ -951,6 +975,7 @@ import { controlClass, overlaySurfaceClass, overlayItemClass } from "@timbal-ai/
|
|
|
951
975
|
- **Layout / disclosure:** `Accordion` · `AccordionItem` · `AccordionTrigger` · `AccordionContent` · `Separator` · `AspectRatio`
|
|
952
976
|
- **Input chrome:** `InputGroup` (+ addon/control/text) · `Spinner`
|
|
953
977
|
- **More primitives:** `AvatarGroup` (overflow stack) · `Stepper` (wizard progress) · `Timeline` (event rail) · `Rating` (stars) · `NumberField` (stepper input) · `TagInput` (chips) · `Banner` (page notice) · `CopyButton` · `Snippet` (code + copy) · `CircularProgress` (SVG ring) — all dependency-free, on the shared tokens / control surface
|
|
978
|
+
- **`Kanban`** (drag-and-drop board) — accessible columns + cards on `@dnd-kit` (pointer **and** keyboard sensors, cross-column moves, empty-column drop zones, drag overlay). Controlled (`columns` + `onColumnsChange`) or uncontrolled (`defaultColumns`); `onMove` reports `{ card, from, to }`. Variants: `density`, column `tone`, `cardVariant`. Requires the peer deps `@dnd-kit/core`, `@dnd-kit/sortable`, `@dnd-kit/utilities`.
|
|
954
979
|
|
|
955
980
|
**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.
|
|
956
981
|
|
|
@@ -1035,7 +1060,6 @@ Compose a data UI with a **floating** copilot — main content stays full width:
|
|
|
1035
1060
|
```tsx
|
|
1036
1061
|
import {
|
|
1037
1062
|
AppShell,
|
|
1038
|
-
AppShellTopbar,
|
|
1039
1063
|
AppCopilotProvider,
|
|
1040
1064
|
AppChatPanel,
|
|
1041
1065
|
Page,
|
|
@@ -1047,7 +1071,7 @@ export function OperationsApp() {
|
|
|
1047
1071
|
<AppCopilotProvider value={{ page: "Operations", tab: "overview" }}>
|
|
1048
1072
|
<AppShell
|
|
1049
1073
|
sidebar={<StudioSidebar /* … */ />}
|
|
1050
|
-
topbar={<
|
|
1074
|
+
topbar={<div className="flex justify-end p-4"><ModeToggle /></div>}
|
|
1051
1075
|
chat={
|
|
1052
1076
|
<AppChatPanel workforceId="your-workforce-id" />
|
|
1053
1077
|
}
|