@loykin/designkit 0.0.1-dev.4 → 0.0.1-dev.6

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/dist/index.js CHANGED
@@ -5,9 +5,9 @@ import { jsxs, jsx, Fragment as Fragment$1 } from 'react/jsx-runtime';
5
5
  import { mergeProps } from '@base-ui/react/merge-props';
6
6
  import { useRender } from '@base-ui/react/use-render';
7
7
  import { cva } from 'class-variance-authority';
8
+ import { GripHorizontal, ChevronRightIcon, MoreHorizontalIcon, CheckIcon, ChevronDownIcon, ChevronUpIcon, XIcon, PanelLeftIcon, SlidersHorizontal, ChevronLeft, Check } from 'lucide-react';
8
9
  import { Button as Button$1 } from '@base-ui/react/button';
9
10
  import { Checkbox as Checkbox$1 } from '@base-ui/react/checkbox';
10
- import { GripHorizontal, CheckIcon, ChevronRightIcon, ChevronDownIcon, ChevronUpIcon, XIcon, PanelLeftIcon, SlidersHorizontal, ChevronLeft, Check } from 'lucide-react';
11
11
  import { Menu } from '@base-ui/react/menu';
12
12
  import { Input as Input$1 } from '@base-ui/react/input';
13
13
  import { Popover as Popover$1 } from '@base-ui/react/popover';
@@ -17,7 +17,7 @@ import { Select as Select$1 } from '@base-ui/react/select';
17
17
  import { Separator as Separator$1 } from '@base-ui/react/separator';
18
18
  import { Dialog } from '@base-ui/react/dialog';
19
19
  import * as React2 from 'react';
20
- import React2__default, { forwardRef, useMemo, Children, useState, Fragment, useCallback, useEffect } from 'react';
20
+ import React2__default, { forwardRef, useMemo, Children, useState, Fragment, useEffect, useCallback } from 'react';
21
21
  import { Tooltip as Tooltip$1 } from '@base-ui/react/tooltip';
22
22
  import { Slider as Slider$1 } from '@base-ui/react/slider';
23
23
  import { Switch as Switch$1 } from '@base-ui/react/switch';
@@ -154,6 +154,89 @@ function Badge({
154
154
  }
155
155
  });
156
156
  }
157
+ function Breadcrumb({ className, ...props }) {
158
+ return /* @__PURE__ */ jsx("nav", { "aria-label": "breadcrumb", "data-slot": "breadcrumb", className: cn(className), ...props });
159
+ }
160
+ function BreadcrumbList({ className, ...props }) {
161
+ return /* @__PURE__ */ jsx(
162
+ "ol",
163
+ {
164
+ "data-slot": "breadcrumb-list",
165
+ className: cn(
166
+ "flex flex-wrap items-center gap-1.5 text-sm wrap-break-word text-muted-foreground",
167
+ className
168
+ ),
169
+ ...props
170
+ }
171
+ );
172
+ }
173
+ function BreadcrumbItem({ className, ...props }) {
174
+ return /* @__PURE__ */ jsx(
175
+ "li",
176
+ {
177
+ "data-slot": "breadcrumb-item",
178
+ className: cn("inline-flex items-center gap-1", className),
179
+ ...props
180
+ }
181
+ );
182
+ }
183
+ function BreadcrumbLink({ className, render, ...props }) {
184
+ return useRender({
185
+ defaultTagName: "a",
186
+ props: mergeProps(
187
+ {
188
+ className: cn("transition-colors hover:text-foreground", className)
189
+ },
190
+ props
191
+ ),
192
+ render,
193
+ state: {
194
+ slot: "breadcrumb-link"
195
+ }
196
+ });
197
+ }
198
+ function BreadcrumbPage({ className, ...props }) {
199
+ return /* @__PURE__ */ jsx(
200
+ "span",
201
+ {
202
+ "data-slot": "breadcrumb-page",
203
+ role: "link",
204
+ "aria-disabled": "true",
205
+ "aria-current": "page",
206
+ className: cn("font-normal text-foreground", className),
207
+ ...props
208
+ }
209
+ );
210
+ }
211
+ function BreadcrumbSeparator({ children, className, ...props }) {
212
+ return /* @__PURE__ */ jsx(
213
+ "li",
214
+ {
215
+ "data-slot": "breadcrumb-separator",
216
+ role: "presentation",
217
+ "aria-hidden": "true",
218
+ className: cn("[&>svg]:size-3.5", className),
219
+ ...props,
220
+ children: children ?? /* @__PURE__ */ jsx(ChevronRightIcon, {})
221
+ }
222
+ );
223
+ }
224
+ function BreadcrumbEllipsis({ className, ...props }) {
225
+ return /* @__PURE__ */ jsxs(
226
+ "span",
227
+ {
228
+ "data-slot": "breadcrumb-ellipsis",
229
+ role: "presentation",
230
+ "aria-hidden": "true",
231
+ className: cn("flex size-5 items-center justify-center [&>svg]:size-4", className),
232
+ ...props,
233
+ children: [
234
+ /* @__PURE__ */ jsx(MoreHorizontalIcon, {}),
235
+ /* @__PURE__ */ jsx("span", { className: "sr-only", children: "More" })
236
+ ]
237
+ }
238
+ );
239
+ }
157
240
  var buttonVariants = cva(
158
241
  "group/button inline-flex shrink-0 items-center justify-center rounded-lg border border-transparent bg-clip-padding text-sm font-medium whitespace-nowrap transition-all outline-none select-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 active:not-aria-[haspopup]:translate-y-px disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
159
242
  {
@@ -1999,11 +2082,20 @@ function Header({ children, className }) {
1999
2082
  }
2000
2083
  );
2001
2084
  }
2002
- function TitleBlock({ title, description, breadcrumb, className }) {
2003
- if (!title && !description && !breadcrumb) return null;
2085
+ function TitleBlock({
2086
+ title,
2087
+ description,
2088
+ breadcrumb,
2089
+ status,
2090
+ className
2091
+ }) {
2092
+ if (!title && !description && !breadcrumb && !status) return null;
2004
2093
  return /* @__PURE__ */ jsxs("div", { "data-slot": "data-page-title-block", className: cn("min-w-0 flex-1", className), children: [
2005
2094
  breadcrumb && /* @__PURE__ */ jsx("div", { className: "mb-2 text-xs text-muted-foreground", children: breadcrumb }),
2006
- title && /* @__PURE__ */ jsx("h1", { className: "truncate text-xl font-semibold", children: title }),
2095
+ (title || status) && /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
2096
+ title && /* @__PURE__ */ jsx("h1", { className: "min-w-0 truncate text-xl font-semibold", children: title }),
2097
+ status && /* @__PURE__ */ jsx("span", { className: "shrink-0", children: status })
2098
+ ] }),
2007
2099
  description && /* @__PURE__ */ jsx("p", { className: "mt-1.5 text-sm text-muted-foreground", children: description })
2008
2100
  ] });
2009
2101
  }
@@ -2013,14 +2105,24 @@ function Actions({ children, className }) {
2013
2105
  "div",
2014
2106
  {
2015
2107
  "data-slot": "data-page-actions",
2016
- className: cn("flex shrink-0 items-center gap-[calc(var(--designkit-panel-gap)*0.5)]", className),
2108
+ className: cn(
2109
+ "flex shrink-0 items-center gap-[calc(var(--designkit-panel-gap)*0.5)]",
2110
+ className
2111
+ ),
2017
2112
  children
2018
2113
  }
2019
2114
  );
2020
2115
  }
2021
2116
  function Tabs2({ children, className }) {
2022
2117
  if (!children) return null;
2023
- return /* @__PURE__ */ jsx("div", { "data-slot": "data-page-tabs", className: cn("shrink-0 border-b px-6", className), children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-0 overflow-x-auto", children }) });
2118
+ return /* @__PURE__ */ jsx(
2119
+ "div",
2120
+ {
2121
+ "data-slot": "data-page-tabs",
2122
+ className: cn("shrink-0 border-b border-border px-6", className),
2123
+ children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-0 overflow-x-auto", children })
2124
+ }
2125
+ );
2024
2126
  }
2025
2127
  function Tab({ active, count, children, onClick, disabled, className }) {
2026
2128
  return /* @__PURE__ */ jsxs(
@@ -2068,8 +2170,8 @@ function Group({ children, className, surface = "none" }) {
2068
2170
  "data-surface": surface,
2069
2171
  className: cn(
2070
2172
  "min-h-0",
2071
- surface === "bordered" && "overflow-hidden rounded-[var(--radius)] border bg-background",
2072
- surface === "card" && "overflow-hidden rounded-[var(--radius)] border bg-card text-card-foreground shadow-sm",
2173
+ surface === "bordered" && "overflow-hidden rounded-[var(--radius)] border border-border bg-background",
2174
+ surface === "card" && "overflow-hidden rounded-[var(--radius)] border border-border bg-card text-card-foreground shadow-sm",
2073
2175
  className
2074
2176
  ),
2075
2177
  children
@@ -2122,7 +2224,14 @@ function GroupBody({ children, className }) {
2122
2224
  }
2123
2225
  function Footer({ children, className }) {
2124
2226
  if (!children) return null;
2125
- return /* @__PURE__ */ jsx("footer", { "data-slot": "data-page-footer", className: cn("shrink-0 border-t px-6 py-3", className), children });
2227
+ return /* @__PURE__ */ jsx(
2228
+ "footer",
2229
+ {
2230
+ "data-slot": "data-page-footer",
2231
+ className: cn("shrink-0 border-t border-border px-6 py-3", className),
2232
+ children
2233
+ }
2234
+ );
2126
2235
  }
2127
2236
  var DataPage = Object.assign(Root, {
2128
2237
  Header,
@@ -2137,47 +2246,49 @@ var DataPage = Object.assign(Root, {
2137
2246
  GroupBody,
2138
2247
  Footer
2139
2248
  });
2140
- var DashboardPanel = forwardRef(function DashboardPanel2({
2141
- title,
2142
- description,
2143
- loading,
2144
- error,
2145
- transparent,
2146
- editable,
2147
- className,
2148
- style,
2149
- children,
2150
- headerRight
2151
- }, ref) {
2152
- return /* @__PURE__ */ jsxs(
2153
- "div",
2154
- {
2155
- ref,
2156
- className: cn(
2157
- "group flex h-full flex-col overflow-hidden",
2158
- transparent ? "" : "rounded-(--radius) border bg-card text-card-foreground",
2159
- editable && "ring-1 ring-border/60 ring-inset",
2160
- className
2161
- ),
2162
- style,
2163
- children: [
2164
- (title || headerRight || editable) && /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2 pl-3 pr-1.5 py-2", children: [
2165
- editable && /* @__PURE__ */ jsx("div", { className: "shrink-0 cursor-grab active:cursor-grabbing select-none text-muted-foreground/40 hover:text-muted-foreground/70 transition-colors -ml-1 px-0.5", children: /* @__PURE__ */ jsx(GripHorizontal, { className: "h-3.5 w-3.5" }) }),
2166
- /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
2167
- title && /* @__PURE__ */ jsx("p", { className: "truncate text-xs font-medium text-card-foreground", children: title }),
2168
- description && /* @__PURE__ */ jsx("p", { className: "truncate text-[11px] text-muted-foreground", children: description })
2249
+ var DashboardPanel = forwardRef(
2250
+ function DashboardPanel2({
2251
+ title,
2252
+ description,
2253
+ loading,
2254
+ error,
2255
+ transparent,
2256
+ editable,
2257
+ className,
2258
+ style,
2259
+ children,
2260
+ headerRight
2261
+ }, ref) {
2262
+ return /* @__PURE__ */ jsxs(
2263
+ "div",
2264
+ {
2265
+ ref,
2266
+ className: cn(
2267
+ "group flex h-full flex-col overflow-hidden",
2268
+ transparent ? "" : "rounded-(--radius) border border-border bg-card text-card-foreground",
2269
+ editable && "ring-1 ring-border/60 ring-inset",
2270
+ className
2271
+ ),
2272
+ style,
2273
+ children: [
2274
+ (title || headerRight || editable) && /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2 pl-3 pr-1.5 py-2", children: [
2275
+ editable && /* @__PURE__ */ jsx("div", { className: "shrink-0 cursor-grab active:cursor-grabbing select-none text-muted-foreground/40 hover:text-muted-foreground/70 transition-colors -ml-1 px-0.5", children: /* @__PURE__ */ jsx(GripHorizontal, { className: "h-3.5 w-3.5" }) }),
2276
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
2277
+ title && /* @__PURE__ */ jsx("p", { className: "truncate text-xs font-medium text-card-foreground", children: title }),
2278
+ description && /* @__PURE__ */ jsx("p", { className: "truncate text-[11px] text-muted-foreground", children: description })
2279
+ ] }),
2280
+ headerRight && /* @__PURE__ */ jsx("div", { className: "shrink-0 flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity duration-150", children: headerRight })
2169
2281
  ] }),
2170
- headerRight && /* @__PURE__ */ jsx("div", { className: "shrink-0 flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity duration-150", children: headerRight })
2171
- ] }),
2172
- /* @__PURE__ */ jsxs("div", { className: "relative flex-1 min-h-0 p-3", children: [
2173
- loading && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-card/70 z-10", children: /* @__PURE__ */ jsx("div", { className: "h-4 w-4 animate-spin rounded-full border-2 border-primary border-t-transparent" }) }),
2174
- error && /* @__PURE__ */ jsx("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsx("p", { className: "text-xs text-destructive", children: error }) }),
2175
- !error && children
2176
- ] })
2177
- ]
2178
- }
2179
- );
2180
- });
2282
+ /* @__PURE__ */ jsxs("div", { className: "relative flex-1 min-h-0 p-3", children: [
2283
+ loading && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-card/70 z-10", children: /* @__PURE__ */ jsx("div", { className: "h-4 w-4 animate-spin rounded-full border-2 border-primary border-t-transparent" }) }),
2284
+ error && /* @__PURE__ */ jsx("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsx("p", { className: "text-xs text-destructive", children: error }) }),
2285
+ !error && children
2286
+ ] })
2287
+ ]
2288
+ }
2289
+ );
2290
+ }
2291
+ );
2181
2292
  function DashboardBodyTemplate({
2182
2293
  theme,
2183
2294
  className,
@@ -2191,7 +2302,7 @@ function DashboardBodyTemplate({
2191
2302
  }) {
2192
2303
  return /* @__PURE__ */ jsxs(DataPage, { className: cn("layout-dashboard", className), style: theme, children: [
2193
2304
  topBar && /* @__PURE__ */ jsx("div", { className: "shrink-0", children: topBar }),
2194
- (title || toolbar) && /* @__PURE__ */ jsx("header", { className: "shrink-0 border-b px-(--designkit-page-padding-x) py-(--designkit-page-padding-y)", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3", children: [
2305
+ (title || toolbar) && /* @__PURE__ */ jsx("header", { className: "shrink-0 border-b border-border px-(--designkit-page-padding-x) py-(--designkit-page-padding-y)", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3", children: [
2195
2306
  /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
2196
2307
  title && /* @__PURE__ */ jsx("h1", { className: "text-sm font-semibold truncate", children: title }),
2197
2308
  description && /* @__PURE__ */ jsx("p", { className: "mt-0.5 text-xs text-muted-foreground", children: description })
@@ -2199,7 +2310,16 @@ function DashboardBodyTemplate({
2199
2310
  toolbar && /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2 shrink-0", children: toolbar })
2200
2311
  ] }) }),
2201
2312
  variableBar && /* @__PURE__ */ jsx("div", { className: "shrink-0 flex flex-wrap items-center gap-2 px-(--designkit-page-padding-x) py-1.5", children: variableBar }),
2202
- /* @__PURE__ */ jsx("div", { className: cn("flex-1 min-h-0 overflow-auto px-[calc(var(--designkit-page-padding-x)-0.5rem)] pt-0 pb-(--designkit-page-padding-y)", contentClassName), children })
2313
+ /* @__PURE__ */ jsx(
2314
+ "div",
2315
+ {
2316
+ className: cn(
2317
+ "flex-1 min-h-0 overflow-auto px-[calc(var(--designkit-page-padding-x)-0.5rem)] pt-0 pb-(--designkit-page-padding-y)",
2318
+ contentClassName
2319
+ ),
2320
+ children
2321
+ }
2322
+ )
2203
2323
  ] });
2204
2324
  }
2205
2325
  function clamp(value, min, max) {
@@ -2207,20 +2327,31 @@ function clamp(value, min, max) {
2207
2327
  }
2208
2328
  function ResizeHandle({
2209
2329
  axis,
2330
+ label,
2331
+ min,
2332
+ max,
2333
+ value,
2210
2334
  onPointerDown,
2335
+ onKeyDown,
2211
2336
  className
2212
2337
  }) {
2213
2338
  return /* @__PURE__ */ jsxs(
2214
2339
  "div",
2215
2340
  {
2216
2341
  role: "separator",
2342
+ tabIndex: 0,
2343
+ "aria-label": label,
2217
2344
  "aria-orientation": axis === "x" ? "vertical" : "horizontal",
2345
+ "aria-valuemin": min,
2346
+ "aria-valuemax": max,
2347
+ "aria-valuenow": value,
2218
2348
  className: cn(
2219
- "group/resize relative z-10 shrink-0 touch-none bg-transparent",
2349
+ "group/resize relative z-10 shrink-0 touch-none bg-transparent outline-none focus-visible:ring-2 focus-visible:ring-ring/50",
2220
2350
  axis === "x" ? "-mx-1 w-2 cursor-col-resize" : "-my-1 h-2 cursor-row-resize",
2221
2351
  className
2222
2352
  ),
2223
2353
  onPointerDown,
2354
+ onKeyDown,
2224
2355
  children: [
2225
2356
  /* @__PURE__ */ jsx(
2226
2357
  "div",
@@ -2250,6 +2381,7 @@ function WorkbenchBodyTemplate({
2250
2381
  contentClassName,
2251
2382
  title,
2252
2383
  description,
2384
+ status,
2253
2385
  topBar,
2254
2386
  headerRight,
2255
2387
  toolbar,
@@ -2272,6 +2404,7 @@ function WorkbenchBodyTemplate({
2272
2404
  maxRightPaneWidth = 520,
2273
2405
  minBottomPaneHeight = 120,
2274
2406
  maxBottomPaneHeight = 420,
2407
+ onResize,
2275
2408
  leftPaneClassName,
2276
2409
  mainPaneClassName,
2277
2410
  rightPaneClassName,
@@ -2282,36 +2415,115 @@ function WorkbenchBodyTemplate({
2282
2415
  const [leftWidth, setLeftWidth] = useState(leftPaneWidth);
2283
2416
  const [rightWidth, setRightWidth] = useState(rightPaneWidth);
2284
2417
  const [bottomHeight, setBottomHeight] = useState(bottomPaneHeight);
2285
- const startResize = useCallback((event, axis, applyDelta) => {
2286
- if (!resizable) return;
2287
- const start = axis === "x" ? event.clientX : event.clientY;
2288
- event.currentTarget.setPointerCapture(event.pointerId);
2289
- const previousCursor = document.body.style.cursor;
2290
- const previousUserSelect = document.body.style.userSelect;
2291
- document.body.style.cursor = axis === "x" ? "col-resize" : "row-resize";
2292
- document.body.style.userSelect = "none";
2293
- const onPointerMove = (moveEvent) => {
2294
- applyDelta((axis === "x" ? moveEvent.clientX : moveEvent.clientY) - start);
2295
- };
2296
- const onPointerUp = () => {
2297
- document.body.style.cursor = previousCursor;
2298
- document.body.style.userSelect = previousUserSelect;
2299
- window.removeEventListener("pointermove", onPointerMove);
2300
- window.removeEventListener("pointerup", onPointerUp);
2301
- };
2302
- window.addEventListener("pointermove", onPointerMove);
2303
- window.addEventListener("pointerup", onPointerUp, { once: true });
2304
- }, [resizable]);
2418
+ useEffect(() => {
2419
+ setLeftWidth(leftPaneWidth);
2420
+ }, [leftPaneWidth]);
2421
+ useEffect(() => {
2422
+ setRightWidth(rightPaneWidth);
2423
+ }, [rightPaneWidth]);
2424
+ useEffect(() => {
2425
+ setBottomHeight(bottomPaneHeight);
2426
+ }, [bottomPaneHeight]);
2427
+ const updateResizeState = useCallback(
2428
+ (patch) => {
2429
+ const next = {
2430
+ leftPaneWidth: leftWidth,
2431
+ rightPaneWidth: rightWidth,
2432
+ bottomPaneHeight: bottomHeight,
2433
+ ...patch
2434
+ };
2435
+ if (patch.leftPaneWidth !== void 0) setLeftWidth(patch.leftPaneWidth);
2436
+ if (patch.rightPaneWidth !== void 0) setRightWidth(patch.rightPaneWidth);
2437
+ if (patch.bottomPaneHeight !== void 0) setBottomHeight(patch.bottomPaneHeight);
2438
+ onResize?.(next);
2439
+ },
2440
+ [bottomHeight, leftWidth, onResize, rightWidth]
2441
+ );
2442
+ const updateLeftWidth = useCallback(
2443
+ (next) => {
2444
+ updateResizeState({
2445
+ leftPaneWidth: clamp(next, minLeftPaneWidth, maxLeftPaneWidth)
2446
+ });
2447
+ },
2448
+ [maxLeftPaneWidth, minLeftPaneWidth, updateResizeState]
2449
+ );
2450
+ const updateRightWidth = useCallback(
2451
+ (next) => {
2452
+ updateResizeState({
2453
+ rightPaneWidth: clamp(next, minRightPaneWidth, maxRightPaneWidth)
2454
+ });
2455
+ },
2456
+ [maxRightPaneWidth, minRightPaneWidth, updateResizeState]
2457
+ );
2458
+ const updateBottomHeight = useCallback(
2459
+ (next) => {
2460
+ updateResizeState({
2461
+ bottomPaneHeight: clamp(next, minBottomPaneHeight, maxBottomPaneHeight)
2462
+ });
2463
+ },
2464
+ [maxBottomPaneHeight, minBottomPaneHeight, updateResizeState]
2465
+ );
2466
+ const handleResizeKey = useCallback(
2467
+ (event, options) => {
2468
+ const step = event.shiftKey ? 48 : 12;
2469
+ if (options.decreaseKeys.includes(event.key)) {
2470
+ event.preventDefault();
2471
+ options.update(options.value - step);
2472
+ return;
2473
+ }
2474
+ if (options.increaseKeys.includes(event.key)) {
2475
+ event.preventDefault();
2476
+ options.update(options.value + step);
2477
+ return;
2478
+ }
2479
+ if (event.key === "Home") {
2480
+ event.preventDefault();
2481
+ options.update(options.min);
2482
+ return;
2483
+ }
2484
+ if (event.key === "End") {
2485
+ event.preventDefault();
2486
+ options.update(options.max);
2487
+ }
2488
+ },
2489
+ []
2490
+ );
2491
+ const startResize = useCallback(
2492
+ (event, axis, applyDelta) => {
2493
+ if (!resizable) return;
2494
+ const start = axis === "x" ? event.clientX : event.clientY;
2495
+ event.currentTarget.setPointerCapture(event.pointerId);
2496
+ const previousCursor = document.body.style.cursor;
2497
+ const previousUserSelect = document.body.style.userSelect;
2498
+ document.body.style.cursor = axis === "x" ? "col-resize" : "row-resize";
2499
+ document.body.style.userSelect = "none";
2500
+ const onPointerMove = (moveEvent) => {
2501
+ applyDelta((axis === "x" ? moveEvent.clientX : moveEvent.clientY) - start);
2502
+ };
2503
+ const onPointerUp = () => {
2504
+ document.body.style.cursor = previousCursor;
2505
+ document.body.style.userSelect = previousUserSelect;
2506
+ window.removeEventListener("pointermove", onPointerMove);
2507
+ window.removeEventListener("pointerup", onPointerUp);
2508
+ };
2509
+ window.addEventListener("pointermove", onPointerMove);
2510
+ window.addEventListener("pointerup", onPointerUp, { once: true });
2511
+ },
2512
+ [resizable]
2513
+ );
2305
2514
  const headerRightContent = headerRight ?? toolbar;
2306
- const showHeader = title || description || headerRightContent || actions;
2515
+ const showHeader = title || description || status || headerRightContent || actions;
2307
2516
  const showLeftPane = leftPane && !leftPaneCollapsed;
2308
2517
  const showRightPane = rightPane && !rightPaneCollapsed;
2309
2518
  const showBottomPane = bottomPane && !bottomPaneCollapsed;
2310
2519
  return /* @__PURE__ */ jsxs(DataPage, { className: cn("layout-workbench", className), style: theme, children: [
2311
2520
  topBar && /* @__PURE__ */ jsx("div", { className: "shrink-0", children: topBar }),
2312
- showHeader && /* @__PURE__ */ jsx("header", { className: "shrink-0 border-b px-(--designkit-page-padding-x) py-[calc(var(--designkit-page-padding-y)*0.75)]", children: /* @__PURE__ */ jsxs("div", { className: "flex min-h-[var(--designkit-toolbar-height)] items-center justify-between gap-3", children: [
2521
+ showHeader && /* @__PURE__ */ jsx("header", { className: "shrink-0 border-b border-border px-(--designkit-page-padding-x) py-[calc(var(--designkit-page-padding-y)*0.75)]", children: /* @__PURE__ */ jsxs("div", { className: "flex min-h-[var(--designkit-toolbar-height)] items-center justify-between gap-3", children: [
2313
2522
  /* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
2314
- title && /* @__PURE__ */ jsx("h1", { className: "truncate text-sm font-semibold", children: title }),
2523
+ (title || status) && /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
2524
+ title && /* @__PURE__ */ jsx("h1", { className: "min-w-0 truncate text-sm font-semibold", children: title }),
2525
+ status && /* @__PURE__ */ jsx("span", { className: "shrink-0", children: status })
2526
+ ] }),
2315
2527
  description && /* @__PURE__ */ jsx("p", { className: "mt-0.5 truncate text-xs text-muted-foreground", children: description })
2316
2528
  ] }),
2317
2529
  (headerRightContent || actions) && /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [
@@ -2319,18 +2531,18 @@ function WorkbenchBodyTemplate({
2319
2531
  actions
2320
2532
  ] })
2321
2533
  ] }) }),
2322
- (showLeftPane || showRightPane) && /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-1.5 border-b px-2 py-1.5 md:hidden", children: [
2534
+ (showLeftPane || showRightPane) && /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-1.5 border-b border-border px-2 py-1.5 md:hidden", children: [
2323
2535
  showLeftPane && /* @__PURE__ */ jsxs(Sheet, { children: [
2324
2536
  /* @__PURE__ */ jsx(SheetTrigger, { render: /* @__PURE__ */ jsx(Button, { variant: "outline", size: "sm" }), children: leftPaneLabel }),
2325
2537
  /* @__PURE__ */ jsxs(SheetContent, { side: "left", className: "flex flex-col gap-0 p-0", children: [
2326
- /* @__PURE__ */ jsx(SheetHeader, { className: "shrink-0 border-b px-4 py-3", children: /* @__PURE__ */ jsx(SheetTitle, { children: leftPaneLabel }) }),
2538
+ /* @__PURE__ */ jsx(SheetHeader, { className: "shrink-0 border-b border-border px-4 py-3", children: /* @__PURE__ */ jsx(SheetTitle, { children: leftPaneLabel }) }),
2327
2539
  /* @__PURE__ */ jsx(ScrollArea, { className: "flex-1", children: leftPane })
2328
2540
  ] })
2329
2541
  ] }),
2330
2542
  showRightPane && /* @__PURE__ */ jsxs(Sheet, { children: [
2331
2543
  /* @__PURE__ */ jsx(SheetTrigger, { render: /* @__PURE__ */ jsx(Button, { variant: "outline", size: "sm" }), children: rightPaneLabel }),
2332
2544
  /* @__PURE__ */ jsxs(SheetContent, { side: "right", className: "flex flex-col gap-0 p-0", children: [
2333
- /* @__PURE__ */ jsx(SheetHeader, { className: "shrink-0 border-b px-4 py-3", children: /* @__PURE__ */ jsx(SheetTitle, { children: rightPaneLabel }) }),
2545
+ /* @__PURE__ */ jsx(SheetHeader, { className: "shrink-0 border-b border-border px-4 py-3", children: /* @__PURE__ */ jsx(SheetTitle, { children: rightPaneLabel }) }),
2334
2546
  /* @__PURE__ */ jsx(ScrollArea, { className: "flex-1", children: rightPane })
2335
2547
  ] })
2336
2548
  ] })
@@ -2340,7 +2552,10 @@ function WorkbenchBodyTemplate({
2340
2552
  /* @__PURE__ */ jsx(
2341
2553
  "aside",
2342
2554
  {
2343
- className: cn("hidden min-h-0 shrink-0 overflow-hidden border-r bg-card/45 md:flex md:flex-col", leftPaneClassName),
2555
+ className: cn(
2556
+ "hidden min-h-0 shrink-0 overflow-hidden border-r border-border bg-card/45 md:flex md:flex-col",
2557
+ leftPaneClassName
2558
+ ),
2344
2559
  style: { width: leftWidth },
2345
2560
  children: leftPane
2346
2561
  }
@@ -2349,13 +2564,25 @@ function WorkbenchBodyTemplate({
2349
2564
  ResizeHandle,
2350
2565
  {
2351
2566
  axis: "x",
2567
+ label: "Resize left pane",
2568
+ min: minLeftPaneWidth,
2569
+ max: maxLeftPaneWidth,
2570
+ value: leftWidth,
2352
2571
  className: "hidden md:flex",
2353
2572
  onPointerDown: (event) => {
2354
2573
  const start = leftWidth;
2355
2574
  startResize(event, "x", (delta) => {
2356
- setLeftWidth(clamp(start + delta, minLeftPaneWidth, maxLeftPaneWidth));
2575
+ updateLeftWidth(start + delta);
2357
2576
  });
2358
- }
2577
+ },
2578
+ onKeyDown: (event) => handleResizeKey(event, {
2579
+ value: leftWidth,
2580
+ min: minLeftPaneWidth,
2581
+ max: maxLeftPaneWidth,
2582
+ decreaseKeys: ["ArrowLeft"],
2583
+ increaseKeys: ["ArrowRight"],
2584
+ update: updateLeftWidth
2585
+ })
2359
2586
  }
2360
2587
  )
2361
2588
  ] }),
@@ -2366,19 +2593,34 @@ function WorkbenchBodyTemplate({
2366
2593
  ResizeHandle,
2367
2594
  {
2368
2595
  axis: "y",
2596
+ label: "Resize bottom pane",
2597
+ min: minBottomPaneHeight,
2598
+ max: maxBottomPaneHeight,
2599
+ value: bottomHeight,
2369
2600
  className: "hidden md:flex",
2370
2601
  onPointerDown: (event) => {
2371
2602
  const start = bottomHeight;
2372
2603
  startResize(event, "y", (delta) => {
2373
- setBottomHeight(clamp(start - delta, minBottomPaneHeight, maxBottomPaneHeight));
2604
+ updateBottomHeight(start - delta);
2374
2605
  });
2375
- }
2606
+ },
2607
+ onKeyDown: (event) => handleResizeKey(event, {
2608
+ value: bottomHeight,
2609
+ min: minBottomPaneHeight,
2610
+ max: maxBottomPaneHeight,
2611
+ decreaseKeys: ["ArrowDown"],
2612
+ increaseKeys: ["ArrowUp"],
2613
+ update: updateBottomHeight
2614
+ })
2376
2615
  }
2377
2616
  ),
2378
2617
  /* @__PURE__ */ jsx(
2379
2618
  "section",
2380
2619
  {
2381
- className: cn("min-h-0 shrink-0 overflow-auto border-t bg-card/40 md:overflow-hidden", bottomPaneClassName),
2620
+ className: cn(
2621
+ "min-h-0 shrink-0 overflow-auto border-t border-border bg-card/40 md:overflow-hidden",
2622
+ bottomPaneClassName
2623
+ ),
2382
2624
  style: { height: bottomHeight },
2383
2625
  children: bottomPane
2384
2626
  }
@@ -2390,19 +2632,34 @@ function WorkbenchBodyTemplate({
2390
2632
  ResizeHandle,
2391
2633
  {
2392
2634
  axis: "x",
2635
+ label: "Resize right pane",
2636
+ min: minRightPaneWidth,
2637
+ max: maxRightPaneWidth,
2638
+ value: rightWidth,
2393
2639
  className: "hidden md:flex",
2394
2640
  onPointerDown: (event) => {
2395
2641
  const start = rightWidth;
2396
2642
  startResize(event, "x", (delta) => {
2397
- setRightWidth(clamp(start - delta, minRightPaneWidth, maxRightPaneWidth));
2643
+ updateRightWidth(start - delta);
2398
2644
  });
2399
- }
2645
+ },
2646
+ onKeyDown: (event) => handleResizeKey(event, {
2647
+ value: rightWidth,
2648
+ min: minRightPaneWidth,
2649
+ max: maxRightPaneWidth,
2650
+ decreaseKeys: ["ArrowRight"],
2651
+ increaseKeys: ["ArrowLeft"],
2652
+ update: updateRightWidth
2653
+ })
2400
2654
  }
2401
2655
  ),
2402
2656
  /* @__PURE__ */ jsx(
2403
2657
  "aside",
2404
2658
  {
2405
- className: cn("hidden min-h-0 shrink-0 overflow-hidden border-l bg-card/45 md:flex md:flex-col", rightPaneClassName),
2659
+ className: cn(
2660
+ "hidden min-h-0 shrink-0 overflow-hidden border-l border-border bg-card/45 md:flex md:flex-col",
2661
+ rightPaneClassName
2662
+ ),
2406
2663
  style: { width: rightWidth },
2407
2664
  children: rightPane
2408
2665
  }
@@ -2461,9 +2718,9 @@ function GroupWrapper({
2461
2718
  }
2462
2719
  if (variant === "bordered") {
2463
2720
  if (layout === "inline") {
2464
- return /* @__PURE__ */ jsx("div", { className: "overflow-hidden rounded-(--radius) border divide-y", children });
2721
+ return /* @__PURE__ */ jsx("div", { className: "overflow-hidden rounded-(--radius) border border-border divide-y", children });
2465
2722
  }
2466
- return /* @__PURE__ */ jsx("div", { className: "rounded-(--radius) border p-(--designkit-panel-gap)", children });
2723
+ return /* @__PURE__ */ jsx("div", { className: "rounded-(--radius) border border-border p-(--designkit-panel-gap)", children });
2467
2724
  }
2468
2725
  return /* @__PURE__ */ jsx(Fragment$1, { children });
2469
2726
  }
@@ -2501,14 +2758,23 @@ function renderGroupProps(props) {
2501
2758
  ] });
2502
2759
  }
2503
2760
  if (layout === "horizontal") {
2504
- return /* @__PURE__ */ jsxs("div", { className: cn("grid grid-cols-1 gap-(--designkit-panel-gap) py-(--designkit-panel-gap) sm:grid-cols-3 sm:gap-[calc(var(--designkit-panel-gap)*2)]", className), children: [
2505
- /* @__PURE__ */ jsxs("div", { children: [
2506
- /* @__PURE__ */ jsx("p", { className: cn("text-sm font-medium", danger && "text-destructive"), children: title }),
2507
- description && /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: description }),
2508
- actions && /* @__PURE__ */ jsx("div", { className: "mt-2", children: actions })
2509
- ] }),
2510
- /* @__PURE__ */ jsx("div", { className: "sm:col-span-2", children: /* @__PURE__ */ jsx(GroupWrapper, { layout, variant, children }) })
2511
- ] });
2761
+ return /* @__PURE__ */ jsxs(
2762
+ "div",
2763
+ {
2764
+ className: cn(
2765
+ "grid grid-cols-1 gap-(--designkit-panel-gap) py-(--designkit-panel-gap) sm:grid-cols-3 sm:gap-[calc(var(--designkit-panel-gap)*2)]",
2766
+ className
2767
+ ),
2768
+ children: [
2769
+ /* @__PURE__ */ jsxs("div", { children: [
2770
+ /* @__PURE__ */ jsx("p", { className: cn("text-sm font-medium", danger && "text-destructive"), children: title }),
2771
+ description && /* @__PURE__ */ jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: description }),
2772
+ actions && /* @__PURE__ */ jsx("div", { className: "mt-2", children: actions })
2773
+ ] }),
2774
+ /* @__PURE__ */ jsx("div", { className: "sm:col-span-2", children: /* @__PURE__ */ jsx(GroupWrapper, { layout, variant, children }) })
2775
+ ]
2776
+ }
2777
+ );
2512
2778
  }
2513
2779
  if (layout === "inline") {
2514
2780
  return /* @__PURE__ */ jsxs("div", { className: cn("py-(--designkit-panel-gap)", className), children: [
@@ -2578,6 +2844,7 @@ function Root2({
2578
2844
  topBar,
2579
2845
  title,
2580
2846
  description,
2847
+ status,
2581
2848
  actions,
2582
2849
  toolbarLeft,
2583
2850
  toolbarRight,
@@ -2611,10 +2878,10 @@ function Root2({
2611
2878
  return /* @__PURE__ */ jsxs(DataPage, { className: cn("layout-databody", className), style: theme, children: [
2612
2879
  /* @__PURE__ */ jsx(TopBarSlot, { topBar }),
2613
2880
  /* @__PURE__ */ jsxs(DataPage.Header, { children: [
2614
- /* @__PURE__ */ jsx(DataPage.TitleBlock, { title, description }),
2881
+ /* @__PURE__ */ jsx(DataPage.TitleBlock, { title, description, status }),
2615
2882
  /* @__PURE__ */ jsx(DataPage.Actions, { children: actions })
2616
2883
  ] }),
2617
- summaryEl && /* @__PURE__ */ jsx("div", { className: "shrink-0 border-b px-(--designkit-page-padding-x) py-(--designkit-panel-gap)", children: summaryEl.props.children }),
2884
+ summaryEl && /* @__PURE__ */ jsx("div", { className: "shrink-0 border-b border-border px-(--designkit-page-padding-x) py-(--designkit-panel-gap)", children: summaryEl.props.children }),
2618
2885
  /* @__PURE__ */ jsx(DataPage.Content, { className: contentClassName, children: /* @__PURE__ */ jsx(DataPage.Group, { className: "h-full", children: /* @__PURE__ */ jsx(DataPage.GroupBody, { className: cn("h-full", bodyEl.props.className), children: bodyEl.props.children }) }) })
2619
2886
  ] });
2620
2887
  }
@@ -2623,10 +2890,10 @@ function Root2({
2623
2890
  return /* @__PURE__ */ jsxs(DataPage, { className: cn("layout-sectioned", className), style: theme, children: [
2624
2891
  /* @__PURE__ */ jsx(TopBarSlot, { topBar }),
2625
2892
  /* @__PURE__ */ jsxs(DataPage.Header, { children: [
2626
- /* @__PURE__ */ jsx(DataPage.TitleBlock, { title, description }),
2893
+ /* @__PURE__ */ jsx(DataPage.TitleBlock, { title, description, status }),
2627
2894
  /* @__PURE__ */ jsx(DataPage.Actions, { children: actions })
2628
2895
  ] }),
2629
- summaryEl && /* @__PURE__ */ jsx("div", { className: "shrink-0 border-b px-(--designkit-page-padding-x) py-(--designkit-panel-gap)", children: summaryEl.props.children }),
2896
+ summaryEl && /* @__PURE__ */ jsx("div", { className: "shrink-0 border-b border-border px-(--designkit-page-padding-x) py-(--designkit-panel-gap)", children: summaryEl.props.children }),
2630
2897
  /* @__PURE__ */ jsx(DataPage.Content, { className: contentClassName, children: /* @__PURE__ */ jsxs("div", { className: "grid gap-(--designkit-panel-gap) lg:grid-cols-[16rem_minmax(0,1fr)]", children: [
2631
2898
  /* @__PURE__ */ jsx("nav", { className: "space-y-1", children: sections.map((section) => {
2632
2899
  const active = section.props.id === activeSection?.props.id;
@@ -2657,10 +2924,10 @@ function Root2({
2657
2924
  return /* @__PURE__ */ jsxs(DataPage, { className: cn("layout-databody", className), style: theme, children: [
2658
2925
  /* @__PURE__ */ jsx(TopBarSlot, { topBar }),
2659
2926
  /* @__PURE__ */ jsxs(DataPage.Header, { children: [
2660
- /* @__PURE__ */ jsx(DataPage.TitleBlock, { title, description }),
2927
+ /* @__PURE__ */ jsx(DataPage.TitleBlock, { title, description, status }),
2661
2928
  /* @__PURE__ */ jsx(DataPage.Actions, { children: actions })
2662
2929
  ] }),
2663
- summaryEl && /* @__PURE__ */ jsx("div", { className: "shrink-0 border-b px-(--designkit-page-padding-x) py-(--designkit-panel-gap)", children: summaryEl.props.children }),
2930
+ summaryEl && /* @__PURE__ */ jsx("div", { className: "shrink-0 border-b border-border px-(--designkit-page-padding-x) py-(--designkit-panel-gap)", children: summaryEl.props.children }),
2664
2931
  hasTabs && /* @__PURE__ */ jsx(DataPage.Tabs, { children: tabs.map((tab) => /* @__PURE__ */ jsx(
2665
2932
  DataPage.Tab,
2666
2933
  {
@@ -2707,6 +2974,7 @@ function BrowseBodyTemplate({
2707
2974
  topBar,
2708
2975
  title,
2709
2976
  description,
2977
+ status,
2710
2978
  actions,
2711
2979
  sidebar,
2712
2980
  sidebarTitle = "Filters",
@@ -2717,15 +2985,15 @@ function BrowseBodyTemplate({
2717
2985
  children
2718
2986
  }) {
2719
2987
  const isNarrow = useIsNarrow();
2720
- const hasHeader = title || description || actions;
2988
+ const hasHeader = title || description || status || actions;
2721
2989
  return /* @__PURE__ */ jsxs(DataPage, { className: cn("layout-browse", className), style: theme, children: [
2722
2990
  topBar && /* @__PURE__ */ jsx("div", { className: "shrink-0", children: topBar }),
2723
2991
  hasHeader && /* @__PURE__ */ jsxs(DataPage.Header, { children: [
2724
- /* @__PURE__ */ jsx(DataPage.TitleBlock, { title, description }),
2992
+ /* @__PURE__ */ jsx(DataPage.TitleBlock, { title, description, status }),
2725
2993
  /* @__PURE__ */ jsx(DataPage.Actions, { children: actions })
2726
2994
  ] }),
2727
2995
  /* @__PURE__ */ jsxs(DataPage.Content, { padding: "none", className: "flex flex-col overflow-hidden", children: [
2728
- (toolbar || isNarrow) && /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2 border-b px-(--designkit-page-padding-x) py-2", children: [
2996
+ (toolbar || isNarrow) && /* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-2 border-b border-border px-(--designkit-page-padding-x) py-2", children: [
2729
2997
  isNarrow && /* @__PURE__ */ jsxs(Sheet, { children: [
2730
2998
  /* @__PURE__ */ jsxs(
2731
2999
  SheetTrigger,
@@ -2738,7 +3006,7 @@ function BrowseBodyTemplate({
2738
3006
  }
2739
3007
  ),
2740
3008
  /* @__PURE__ */ jsxs(SheetContent, { side: "left", className: "flex flex-col gap-0 p-0", children: [
2741
- /* @__PURE__ */ jsx(SheetHeader, { className: "shrink-0 border-b px-4 py-3", children: /* @__PURE__ */ jsx(SheetTitle, { children: sidebarTitle }) }),
3009
+ /* @__PURE__ */ jsx(SheetHeader, { className: "shrink-0 border-b border-border px-4 py-3", children: /* @__PURE__ */ jsx(SheetTitle, { children: sidebarTitle }) }),
2742
3010
  /* @__PURE__ */ jsx(ScrollArea, { className: "flex-1", children: /* @__PURE__ */ jsx("div", { className: "p-4", children: sidebar }) })
2743
3011
  ] })
2744
3012
  ] }),
@@ -2748,7 +3016,7 @@ function BrowseBodyTemplate({
2748
3016
  !isNarrow && /* @__PURE__ */ jsx(
2749
3017
  "aside",
2750
3018
  {
2751
- className: "shrink-0 overflow-hidden border-r",
3019
+ className: "shrink-0 overflow-hidden border-r border-border",
2752
3020
  style: { width: sidebarWidth },
2753
3021
  children: /* @__PURE__ */ jsx(ScrollArea, { className: "h-full", children: /* @__PURE__ */ jsx("div", { className: "px-(--designkit-page-padding-x) py-(--designkit-page-padding-y)", children: sidebar }) })
2754
3022
  }
@@ -2810,8 +3078,8 @@ function DetailBodySection({
2810
3078
  {
2811
3079
  className: cn(
2812
3080
  "min-h-0",
2813
- surface === "card" && "rounded-(--radius) border bg-card p-(--designkit-panel-gap) text-card-foreground shadow-sm",
2814
- surface === "bordered" && "rounded-(--radius) border p-(--designkit-panel-gap)",
3081
+ surface === "card" && "rounded-(--radius) border border-border bg-card p-(--designkit-panel-gap) text-card-foreground shadow-sm",
3082
+ surface === "bordered" && "rounded-(--radius) border border-border p-(--designkit-panel-gap)",
2815
3083
  className
2816
3084
  ),
2817
3085
  children: [
@@ -2856,8 +3124,17 @@ function DetailBodyTemplateRoot({
2856
3124
  const hasTabs = tabs.length > 0;
2857
3125
  const [activeTab, setActiveTab] = useState(() => tabs[0]?.props.id ?? "");
2858
3126
  const selectedTab = tabs.find((tab) => tab.props.id === activeTab) ?? tabs[0];
2859
- const summarySlot = summary ? /* @__PURE__ */ jsx("div", { className: "min-h-0 rounded-(--radius) border bg-card p-(--designkit-panel-gap) text-card-foreground", children: summary }) : null;
2860
- const mediaSlot = media ? /* @__PURE__ */ jsx("div", { className: cn("min-h-0 overflow-hidden rounded-(--radius) border bg-card", mediaClassName), children: media }) : null;
3127
+ const summarySlot = summary ? /* @__PURE__ */ jsx("div", { className: "min-h-0 rounded-(--radius) border border-border bg-card p-(--designkit-panel-gap) text-card-foreground", children: summary }) : null;
3128
+ const mediaSlot = media ? /* @__PURE__ */ jsx(
3129
+ "div",
3130
+ {
3131
+ className: cn(
3132
+ "min-h-0 overflow-hidden rounded-(--radius) border border-border bg-card",
3133
+ mediaClassName
3134
+ ),
3135
+ children: media
3136
+ }
3137
+ ) : null;
2861
3138
  const leadGridClass = variant === "media" ? "xl:grid-cols-[minmax(0,1.35fr)_minmax(18rem,0.65fr)]" : "xl:grid-cols-2";
2862
3139
  const defaultHeader = eyebrow || title || description || status || actions ? /* @__PURE__ */ jsx(
2863
3140
  DetailBodyHeader,
@@ -2920,48 +3197,74 @@ function DetailBodyTemplateRoot({
2920
3197
  ),
2921
3198
  children: [
2922
3199
  leadSlot && /* @__PURE__ */ jsx("div", { className: "space-y-(--designkit-panel-gap)", children: leadSlot }),
2923
- insideAsideSlot && /* @__PURE__ */ jsx("div", { className: cn("min-h-0 rounded-(--radius) border bg-card p-(--designkit-panel-gap)", asideClassName), children: insideAsideSlot })
3200
+ insideAsideSlot && /* @__PURE__ */ jsx(
3201
+ "div",
3202
+ {
3203
+ className: cn(
3204
+ "min-h-0 rounded-(--radius) border border-border bg-card p-(--designkit-panel-gap)",
3205
+ asideClassName
3206
+ ),
3207
+ children: insideAsideSlot
3208
+ }
3209
+ )
2924
3210
  ]
2925
3211
  }
2926
3212
  ),
2927
3213
  body
2928
3214
  ] })
2929
3215
  };
2930
- return /* @__PURE__ */ jsxs(DataPage, { className: cn("layout-detail", className), style: theme, "data-detail-variant": variant, children: [
2931
- topBar && /* @__PURE__ */ jsx("div", { className: "shrink-0", children: topBar }),
2932
- header ?? defaultHeader,
2933
- /* @__PURE__ */ jsx(DataPage.Content, { padding: "none", className: "overflow-hidden", children: /* @__PURE__ */ jsxs(
2934
- "div",
2935
- {
2936
- className: cn(
2937
- "grid h-full min-h-0 grid-cols-1 overflow-hidden",
2938
- outsideAsideSlot && "lg:grid-cols-[minmax(0,1fr)_minmax(18rem,24rem)]"
2939
- ),
2940
- children: [
2941
- /* @__PURE__ */ jsx(
2942
- "main",
2943
- {
2944
- className: cn(
2945
- "min-h-0 overflow-auto px-(--designkit-page-padding-x) py-(--designkit-page-padding-y)",
2946
- contentClassName
2947
- ),
2948
- children: layout[variant]
2949
- }
2950
- ),
2951
- outsideAsideSlot && /* @__PURE__ */ jsx("aside", { className: cn("min-h-0 border-t bg-background lg:border-l lg:border-t-0", asideClassName), children: /* @__PURE__ */ jsx(
2952
- "div",
2953
- {
2954
- className: cn(
2955
- "px-(--designkit-page-padding-x) py-(--designkit-page-padding-y)",
2956
- stickyAside && "lg:sticky lg:top-0"
3216
+ return /* @__PURE__ */ jsxs(
3217
+ DataPage,
3218
+ {
3219
+ className: cn("layout-detail", className),
3220
+ style: theme,
3221
+ "data-detail-variant": variant,
3222
+ children: [
3223
+ topBar && /* @__PURE__ */ jsx("div", { className: "shrink-0", children: topBar }),
3224
+ header ?? defaultHeader,
3225
+ /* @__PURE__ */ jsx(DataPage.Content, { padding: "none", className: "overflow-hidden", children: /* @__PURE__ */ jsxs(
3226
+ "div",
3227
+ {
3228
+ className: cn(
3229
+ "grid h-full min-h-0 grid-cols-1 overflow-hidden",
3230
+ outsideAsideSlot && "lg:grid-cols-[minmax(0,1fr)_minmax(18rem,24rem)]"
3231
+ ),
3232
+ children: [
3233
+ /* @__PURE__ */ jsx(
3234
+ "main",
3235
+ {
3236
+ className: cn(
3237
+ "min-h-0 overflow-auto px-(--designkit-page-padding-x) py-(--designkit-page-padding-y)",
3238
+ contentClassName
3239
+ ),
3240
+ children: layout[variant]
3241
+ }
2957
3242
  ),
2958
- children: outsideAsideSlot
2959
- }
2960
- ) })
2961
- ]
2962
- }
2963
- ) })
2964
- ] });
3243
+ outsideAsideSlot && /* @__PURE__ */ jsx(
3244
+ "aside",
3245
+ {
3246
+ className: cn(
3247
+ "min-h-0 border-t border-border bg-background lg:border-l lg:border-t-0",
3248
+ asideClassName
3249
+ ),
3250
+ children: /* @__PURE__ */ jsx(
3251
+ "div",
3252
+ {
3253
+ className: cn(
3254
+ "px-(--designkit-page-padding-x) py-(--designkit-page-padding-y)",
3255
+ stickyAside && "lg:sticky lg:top-0"
3256
+ ),
3257
+ children: outsideAsideSlot
3258
+ }
3259
+ )
3260
+ }
3261
+ )
3262
+ ]
3263
+ }
3264
+ ) })
3265
+ ]
3266
+ }
3267
+ );
2965
3268
  }
2966
3269
  var DetailBodyTemplate = Object.assign(DetailBodyTemplateRoot, {
2967
3270
  Header: DetailBodyHeader,
@@ -2992,8 +3295,9 @@ function ListDetailBodyTemplate({
2992
3295
  /* @__PURE__ */ jsx(
2993
3296
  "aside",
2994
3297
  {
3298
+ "data-slot": "list-detail-list",
2995
3299
  className: cn(
2996
- "min-h-0 shrink-0 overflow-hidden border-r",
3300
+ "min-h-0 shrink-0 overflow-hidden border-r border-border",
2997
3301
  detail ? "hidden lg:flex lg:w-[var(--ld-list-width)] lg:flex-col" : "flex w-full flex-col lg:w-[var(--ld-list-width)]",
2998
3302
  listClassName
2999
3303
  ),
@@ -3009,7 +3313,7 @@ function ListDetailBodyTemplate({
3009
3313
  detailClassName
3010
3314
  ),
3011
3315
  children: [
3012
- detail && onBack && /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center border-b px-3 py-2 lg:hidden", children: /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "sm", className: "-ml-1 gap-1", onClick: onBack, children: [
3316
+ detail && onBack && /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center border-b border-border px-3 py-2 lg:hidden", children: /* @__PURE__ */ jsxs(Button, { variant: "ghost", size: "sm", className: "-ml-1 gap-1", onClick: onBack, children: [
3013
3317
  /* @__PURE__ */ jsx(ChevronLeft, { className: "h-4 w-4" }),
3014
3318
  backLabel
3015
3319
  ] }) }),
@@ -3043,6 +3347,7 @@ function PanelTemplateSection({
3043
3347
  function PanelTemplateRoot({
3044
3348
  title,
3045
3349
  eyebrow,
3350
+ status,
3046
3351
  actions,
3047
3352
  footer,
3048
3353
  children,
@@ -3053,12 +3358,15 @@ function PanelTemplateRoot({
3053
3358
  (title || eyebrow || actions) && /* @__PURE__ */ jsxs("div", { className: "shrink-0 px-4 py-3", children: [
3054
3359
  eyebrow && /* @__PURE__ */ jsx("p", { className: "mb-0.5 text-[10px] font-medium uppercase tracking-wider text-muted-foreground", children: eyebrow }),
3055
3360
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
3056
- title && /* @__PURE__ */ jsx("h2", { className: "min-w-0 flex-1 truncate text-sm font-semibold", children: title }),
3361
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
3362
+ title && /* @__PURE__ */ jsx("h2", { className: "min-w-0 truncate text-sm font-semibold", children: title }),
3363
+ status && /* @__PURE__ */ jsx("span", { className: "shrink-0", children: status })
3364
+ ] }),
3057
3365
  actions && /* @__PURE__ */ jsx("div", { className: "flex shrink-0 items-center gap-1", children: actions })
3058
3366
  ] })
3059
3367
  ] }),
3060
3368
  /* @__PURE__ */ jsx("div", { className: cn("min-h-0 flex-1 overflow-y-auto px-4 py-4", bodyClassName), children: /* @__PURE__ */ jsx("div", { className: "space-y-5", children }) }),
3061
- footer && /* @__PURE__ */ jsx("div", { className: "shrink-0 border-t px-4 py-3", children: footer })
3369
+ footer && /* @__PURE__ */ jsx("div", { className: "shrink-0 border-t border-border px-4 py-3", children: footer })
3062
3370
  ] });
3063
3371
  }
3064
3372
  var PanelTemplate = Object.assign(PanelTemplateRoot, {
@@ -3067,6 +3375,7 @@ var PanelTemplate = Object.assign(PanelTemplateRoot, {
3067
3375
  function FormWizardBodyTemplate({
3068
3376
  theme,
3069
3377
  title,
3378
+ status,
3070
3379
  topBar,
3071
3380
  variant = "plain",
3072
3381
  steps,
@@ -3084,7 +3393,7 @@ function FormWizardBodyTemplate({
3084
3393
  }
3085
3394
  return /* @__PURE__ */ jsxs(DataPage, { className: "layout-form-wizard", style: theme, children: [
3086
3395
  topBar && /* @__PURE__ */ jsx("div", { className: "shrink-0", children: topBar }),
3087
- /* @__PURE__ */ jsx(DataPage.Header, { children: /* @__PURE__ */ jsx(DataPage.TitleBlock, { title }) }),
3396
+ /* @__PURE__ */ jsx(DataPage.Header, { children: /* @__PURE__ */ jsx(DataPage.TitleBlock, { title, status }) }),
3088
3397
  /* @__PURE__ */ jsx("div", { className: "shrink-0 px-(--designkit-page-padding-x) pb-4", children: /* @__PURE__ */ jsx("div", { className: "flex items-center", children: steps.map((step, i) => /* @__PURE__ */ jsxs(Fragment, { children: [
3089
3398
  i > 0 && /* @__PURE__ */ jsx(
3090
3399
  "div",
@@ -3197,7 +3506,7 @@ function TypographyBodyTemplate({ theme, breadcrumb }) {
3197
3506
  /* @__PURE__ */ jsx("div", { className: "grid gap-2", children: ["API Gateway", "Billing Worker", "Notification Queue"].map((item, index) => /* @__PURE__ */ jsxs(
3198
3507
  "div",
3199
3508
  {
3200
- className: "flex items-center justify-between rounded-lg border px-3 py-2",
3509
+ className: "flex items-center justify-between rounded-lg border border-border px-3 py-2",
3201
3510
  children: [
3202
3511
  /* @__PURE__ */ jsxs("div", { children: [
3203
3512
  /* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: item }),
@@ -3246,13 +3555,13 @@ var useThemeStore = create((set) => ({
3246
3555
  },
3247
3556
  overrides: {},
3248
3557
  activeShell: "sidebar",
3249
- activeTemplate: "table",
3558
+ activeTemplate: "databody",
3250
3559
  setGlobal: (patch) => set((s) => ({ global: { ...s.global, ...patch } })),
3251
3560
  setOverride: (id, patch) => set((s) => ({
3252
3561
  overrides: { ...s.overrides, [id]: { ...s.overrides[id], ...patch } }
3253
3562
  })),
3254
- setShell: (shell) => set({ activeShell: shell }),
3255
- setTemplate: (template) => set({ activeTemplate: template })
3563
+ setShell: () => void 0,
3564
+ setTemplate: () => void 0
3256
3565
  }));
3257
3566
  var tonalTokenDefs = [
3258
3567
  {
@@ -3318,7 +3627,7 @@ function ColorSwatch({
3318
3627
  variable,
3319
3628
  formula
3320
3629
  }) {
3321
- return /* @__PURE__ */ jsxs("div", { className: "overflow-hidden rounded-[var(--radius)] border", children: [
3630
+ return /* @__PURE__ */ jsxs("div", { className: "overflow-hidden rounded-[var(--radius)] border border-border", children: [
3322
3631
  /* @__PURE__ */ jsx("div", { className: `${bg} flex h-14 items-center justify-center`, children: /* @__PURE__ */ jsx("span", { className: `${fg} text-sm font-semibold`, children: "Aa" }) }),
3323
3632
  /* @__PURE__ */ jsxs("div", { className: "bg-card px-3 py-2 space-y-0.5", children: [
3324
3633
  /* @__PURE__ */ jsx("p", { className: "text-xs font-medium", children: name }),
@@ -3415,7 +3724,7 @@ function ColorsBodyTemplate({ theme, breadcrumb }) {
3415
3724
  " \xB7 ",
3416
3725
  "factor = 2\u20136% of primary chroma"
3417
3726
  ] }),
3418
- /* @__PURE__ */ jsxs("div", { className: "overflow-hidden rounded-[var(--radius)] border divide-y text-xs font-mono", children: [
3727
+ /* @__PURE__ */ jsxs("div", { className: "overflow-hidden rounded-[var(--radius)] border border-border divide-y text-xs font-mono", children: [
3419
3728
  /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-[7rem_1fr_1fr] bg-muted/50 px-3 py-1.5 text-muted-foreground", children: [
3420
3729
  /* @__PURE__ */ jsx("span", { children: "token" }),
3421
3730
  /* @__PURE__ */ jsx("span", { children: "light" }),
@@ -3427,7 +3736,7 @@ function ColorsBodyTemplate({ theme, breadcrumb }) {
3427
3736
  className: "grid grid-cols-[7rem_1fr_1fr] items-center gap-x-3 px-3 py-2",
3428
3737
  children: [
3429
3738
  /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
3430
- /* @__PURE__ */ jsx("div", { className: `${t.bg} h-5 w-5 shrink-0 rounded border` }),
3739
+ /* @__PURE__ */ jsx("div", { className: `${t.bg} h-5 w-5 shrink-0 rounded border border-border` }),
3431
3740
  /* @__PURE__ */ jsx("span", { className: "font-medium text-foreground", children: t.name })
3432
3741
  ] }),
3433
3742
  /* @__PURE__ */ jsxs("span", { className: "text-muted-foreground", children: [
@@ -3494,7 +3803,16 @@ function FormCard({
3494
3803
  }) {
3495
3804
  const widthCls = cardWidthClass[cardWidth];
3496
3805
  if (card === "card") {
3497
- return /* @__PURE__ */ jsx("div", { className: cn("w-full rounded-2xl border bg-card px-8 py-10 shadow-lg", widthCls), children });
3806
+ return /* @__PURE__ */ jsx(
3807
+ "div",
3808
+ {
3809
+ className: cn(
3810
+ "w-full rounded-2xl border border-border bg-card px-8 py-10 shadow-lg",
3811
+ widthCls
3812
+ ),
3813
+ children
3814
+ }
3815
+ );
3498
3816
  }
3499
3817
  return /* @__PURE__ */ jsx("div", { className: cn("w-full", widthCls), children });
3500
3818
  }
@@ -3537,89 +3855,6 @@ function LoginBodyTemplate({
3537
3855
  }
3538
3856
  );
3539
3857
  }
3540
- function Breadcrumb({ className, ...props }) {
3541
- return /* @__PURE__ */ jsx(
3542
- "nav",
3543
- {
3544
- "aria-label": "breadcrumb",
3545
- "data-slot": "breadcrumb",
3546
- className: cn(className),
3547
- ...props
3548
- }
3549
- );
3550
- }
3551
- function BreadcrumbList({ className, ...props }) {
3552
- return /* @__PURE__ */ jsx(
3553
- "ol",
3554
- {
3555
- "data-slot": "breadcrumb-list",
3556
- className: cn(
3557
- "flex flex-wrap items-center gap-1.5 text-sm wrap-break-word text-muted-foreground",
3558
- className
3559
- ),
3560
- ...props
3561
- }
3562
- );
3563
- }
3564
- function BreadcrumbItem({ className, ...props }) {
3565
- return /* @__PURE__ */ jsx(
3566
- "li",
3567
- {
3568
- "data-slot": "breadcrumb-item",
3569
- className: cn("inline-flex items-center gap-1", className),
3570
- ...props
3571
- }
3572
- );
3573
- }
3574
- function BreadcrumbLink({
3575
- className,
3576
- render,
3577
- ...props
3578
- }) {
3579
- return useRender({
3580
- defaultTagName: "a",
3581
- props: mergeProps(
3582
- {
3583
- className: cn("transition-colors hover:text-foreground", className)
3584
- },
3585
- props
3586
- ),
3587
- render,
3588
- state: {
3589
- slot: "breadcrumb-link"
3590
- }
3591
- });
3592
- }
3593
- function BreadcrumbPage({ className, ...props }) {
3594
- return /* @__PURE__ */ jsx(
3595
- "span",
3596
- {
3597
- "data-slot": "breadcrumb-page",
3598
- role: "link",
3599
- "aria-disabled": "true",
3600
- "aria-current": "page",
3601
- className: cn("font-normal text-foreground", className),
3602
- ...props
3603
- }
3604
- );
3605
- }
3606
- function BreadcrumbSeparator({
3607
- children,
3608
- className,
3609
- ...props
3610
- }) {
3611
- return /* @__PURE__ */ jsx(
3612
- "li",
3613
- {
3614
- "data-slot": "breadcrumb-separator",
3615
- role: "presentation",
3616
- "aria-hidden": "true",
3617
- className: cn("[&>svg]:size-3.5", className),
3618
- ...props,
3619
- children: children ?? /* @__PURE__ */ jsx(ChevronRightIcon, {})
3620
- }
3621
- );
3622
- }
3623
3858
  function PageBreadcrumb({ items }) {
3624
3859
  return /* @__PURE__ */ jsx(Breadcrumb, { children: /* @__PURE__ */ jsx(BreadcrumbList, { className: "text-xs gap-1", children: items.map((item, i) => {
3625
3860
  const isLast = i === items.length - 1;
@@ -3665,6 +3900,7 @@ function PageTopBar({
3665
3900
  right,
3666
3901
  variant = "ghost",
3667
3902
  height = "var(--designkit-toolbar-height)",
3903
+ minHeight,
3668
3904
  className,
3669
3905
  style,
3670
3906
  children,
@@ -3675,11 +3911,11 @@ function PageTopBar({
3675
3911
  "div",
3676
3912
  {
3677
3913
  className: cn(
3678
- "flex shrink-0 items-center justify-between gap-4 px-(--designkit-page-padding-x)",
3679
- variant === "default" && "border-b",
3914
+ "flex shrink-0 items-center justify-between gap-4 overflow-visible px-(--designkit-page-padding-x)",
3915
+ variant === "default" && "border-b border-border",
3680
3916
  className
3681
3917
  ),
3682
- style: { height, ...style },
3918
+ style: { height, minHeight, ...style },
3683
3919
  children: [
3684
3920
  /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 items-center gap-2 text-xs text-muted-foreground", children: [
3685
3921
  trigger,
@@ -3806,9 +4042,22 @@ function buildDarkTonalTokens(primaryHue, primaryChroma) {
3806
4042
  function tokenMapToCss(tokens) {
3807
4043
  return Object.entries(tokens).map(([key, value]) => ` ${key}: ${value};`).join("\n");
3808
4044
  }
3809
- function useStyleInjector() {
4045
+ function getScopedTarget(scopeSelector) {
4046
+ if (scopeSelector === ":root") return document.documentElement;
4047
+ return document.querySelector(scopeSelector);
4048
+ }
4049
+ function getDarkSelector(scopeSelector) {
4050
+ if (scopeSelector === ":root") return ".dark";
4051
+ return `${scopeSelector}.dark, .dark ${scopeSelector}`;
4052
+ }
4053
+ function getLayoutSelector(scopeSelector, layoutClassName) {
4054
+ if (scopeSelector === ":root") return `.${layoutClassName}`;
4055
+ return `${scopeSelector}.${layoutClassName}, ${scopeSelector} .${layoutClassName}`;
4056
+ }
4057
+ function useStyleInjector(options = {}) {
3810
4058
  const g = useThemeStore((s) => s.global);
3811
4059
  const ov = useThemeStore((s) => s.overrides);
4060
+ const scopeSelector = options.scope?.trim() || ":root";
3812
4061
  useEffect(() => {
3813
4062
  let el = document.getElementById(STYLE_ID);
3814
4063
  if (!el) {
@@ -3816,10 +4065,10 @@ function useStyleInjector() {
3816
4065
  el.id = STYLE_ID;
3817
4066
  document.head.appendChild(el);
3818
4067
  }
3819
- const rootBlock = `:root {
4068
+ const rootBlock = `${scopeSelector} {
3820
4069
  ${tokenMapToCss(buildTokenMap(g))}
3821
4070
  }`;
3822
- const darkTonalBlock = `.dark {
4071
+ const darkTonalBlock = `${getDarkSelector(scopeSelector)} {
3823
4072
  ${tokenMapToCss(buildDarkTonalTokens(g.primaryHue, g.primaryChroma))}
3824
4073
  }`;
3825
4074
  const tmplBlocks = Object.entries(ov).map(([id, o]) => {
@@ -3835,22 +4084,27 @@ ${tokenMapToCss(buildDarkTonalTokens(g.primaryHue, g.primaryChroma))}
3835
4084
  toolbarHeight: o.toolbarHeight
3836
4085
  });
3837
4086
  const layoutClassName = `layout-${id}`;
3838
- return `.${layoutClassName} {
4087
+ return `${getLayoutSelector(scopeSelector, layoutClassName)} {
3839
4088
  ${tokenMapToCss(tokens)}
3840
4089
  }`;
3841
4090
  }).filter(Boolean);
3842
- el.textContent = [rootBlock, darkTonalBlock, ...tmplBlocks].join("\n\n");
3843
- }, [g, ov]);
4091
+ const layerBody = [rootBlock, darkTonalBlock, ...tmplBlocks].join("\n\n");
4092
+ el.textContent = `@layer designkit {
4093
+ ${layerBody}
4094
+ }`;
4095
+ }, [g, ov, scopeSelector]);
3844
4096
  useEffect(() => {
3845
- document.documentElement.classList.toggle("dark", g.darkMode);
3846
- }, [g.darkMode]);
4097
+ getScopedTarget(scopeSelector)?.classList.toggle("dark", g.darkMode);
4098
+ }, [g.darkMode, scopeSelector]);
3847
4099
  useEffect(() => {
4100
+ const target = getScopedTarget(scopeSelector);
4101
+ if (!target) return;
3848
4102
  if (g.density === "default") {
3849
- document.documentElement.removeAttribute("data-designkit-density");
4103
+ target.removeAttribute("data-designkit-density");
3850
4104
  return;
3851
4105
  }
3852
- document.documentElement.dataset.designkitDensity = g.density;
3853
- }, [g.density]);
4106
+ target.dataset.designkitDensity = g.density;
4107
+ }, [g.density, scopeSelector]);
3854
4108
  }
3855
4109
  function buildTemplateTheme(g, ov = {}) {
3856
4110
  const tokens = buildTokenMap({
@@ -3870,6 +4124,6 @@ function buildTemplateTheme(g, ov = {}) {
3870
4124
  return tokens;
3871
4125
  }
3872
4126
 
3873
- export { Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, BrowseBodyTemplate, Button, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, ColorsBodyTemplate, DashboardBodyTemplate, DashboardPanel, DataBodyTemplate, DataPage, DetailBodyTemplate, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, FormWizardBodyTemplate, Input, Label, ListDetailBodyTemplate, LoginBodyTemplate, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuPositioner, NavigationMenuTrigger, PageBreadcrumb, PageTopBar, PanelTemplate, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TypographyBodyTemplate, WorkbenchBodyTemplate, badgeVariants, buildTemplateTheme, buildTopBar, buttonVariants, cn, navigationMenuTriggerStyle, tabsListVariants, useIsMobile, useSidebar, useSidebarOptional, useStyleInjector, useThemeStore };
4127
+ export { Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, BrowseBodyTemplate, Button, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, ColorsBodyTemplate, DashboardBodyTemplate, DashboardPanel, DataBodyTemplate, DataPage, DetailBodyTemplate, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, FormWizardBodyTemplate, Input, Label, ListDetailBodyTemplate, LoginBodyTemplate, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuPositioner, NavigationMenuTrigger, PageBreadcrumb, PageTopBar, PanelTemplate, Popover, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, Slider, Switch, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TypographyBodyTemplate, WorkbenchBodyTemplate, badgeVariants, buildTemplateTheme, buildTopBar, buttonVariants, cn, navigationMenuTriggerStyle, tabsListVariants, useIsMobile, useSidebar, useSidebarOptional, useStyleInjector, useThemeStore };
3874
4128
  //# sourceMappingURL=index.js.map
3875
4129
  //# sourceMappingURL=index.js.map