@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.cjs CHANGED
@@ -7,9 +7,9 @@ var jsxRuntime = require('react/jsx-runtime');
7
7
  var mergeProps = require('@base-ui/react/merge-props');
8
8
  var useRender = require('@base-ui/react/use-render');
9
9
  var classVarianceAuthority = require('class-variance-authority');
10
+ var lucideReact = require('lucide-react');
10
11
  var button = require('@base-ui/react/button');
11
12
  var checkbox = require('@base-ui/react/checkbox');
12
- var lucideReact = require('lucide-react');
13
13
  var menu = require('@base-ui/react/menu');
14
14
  var input = require('@base-ui/react/input');
15
15
  var popover = require('@base-ui/react/popover');
@@ -175,6 +175,89 @@ function Badge({
175
175
  }
176
176
  });
177
177
  }
178
+ function Breadcrumb({ className, ...props }) {
179
+ return /* @__PURE__ */ jsxRuntime.jsx("nav", { "aria-label": "breadcrumb", "data-slot": "breadcrumb", className: cn(className), ...props });
180
+ }
181
+ function BreadcrumbList({ className, ...props }) {
182
+ return /* @__PURE__ */ jsxRuntime.jsx(
183
+ "ol",
184
+ {
185
+ "data-slot": "breadcrumb-list",
186
+ className: cn(
187
+ "flex flex-wrap items-center gap-1.5 text-sm wrap-break-word text-muted-foreground",
188
+ className
189
+ ),
190
+ ...props
191
+ }
192
+ );
193
+ }
194
+ function BreadcrumbItem({ className, ...props }) {
195
+ return /* @__PURE__ */ jsxRuntime.jsx(
196
+ "li",
197
+ {
198
+ "data-slot": "breadcrumb-item",
199
+ className: cn("inline-flex items-center gap-1", className),
200
+ ...props
201
+ }
202
+ );
203
+ }
204
+ function BreadcrumbLink({ className, render, ...props }) {
205
+ return useRender.useRender({
206
+ defaultTagName: "a",
207
+ props: mergeProps.mergeProps(
208
+ {
209
+ className: cn("transition-colors hover:text-foreground", className)
210
+ },
211
+ props
212
+ ),
213
+ render,
214
+ state: {
215
+ slot: "breadcrumb-link"
216
+ }
217
+ });
218
+ }
219
+ function BreadcrumbPage({ className, ...props }) {
220
+ return /* @__PURE__ */ jsxRuntime.jsx(
221
+ "span",
222
+ {
223
+ "data-slot": "breadcrumb-page",
224
+ role: "link",
225
+ "aria-disabled": "true",
226
+ "aria-current": "page",
227
+ className: cn("font-normal text-foreground", className),
228
+ ...props
229
+ }
230
+ );
231
+ }
232
+ function BreadcrumbSeparator({ children, className, ...props }) {
233
+ return /* @__PURE__ */ jsxRuntime.jsx(
234
+ "li",
235
+ {
236
+ "data-slot": "breadcrumb-separator",
237
+ role: "presentation",
238
+ "aria-hidden": "true",
239
+ className: cn("[&>svg]:size-3.5", className),
240
+ ...props,
241
+ children: children ?? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRightIcon, {})
242
+ }
243
+ );
244
+ }
245
+ function BreadcrumbEllipsis({ className, ...props }) {
246
+ return /* @__PURE__ */ jsxRuntime.jsxs(
247
+ "span",
248
+ {
249
+ "data-slot": "breadcrumb-ellipsis",
250
+ role: "presentation",
251
+ "aria-hidden": "true",
252
+ className: cn("flex size-5 items-center justify-center [&>svg]:size-4", className),
253
+ ...props,
254
+ children: [
255
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.MoreHorizontalIcon, {}),
256
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "More" })
257
+ ]
258
+ }
259
+ );
260
+ }
178
261
  var buttonVariants = classVarianceAuthority.cva(
179
262
  "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",
180
263
  {
@@ -2020,11 +2103,20 @@ function Header({ children, className }) {
2020
2103
  }
2021
2104
  );
2022
2105
  }
2023
- function TitleBlock({ title, description, breadcrumb, className }) {
2024
- if (!title && !description && !breadcrumb) return null;
2106
+ function TitleBlock({
2107
+ title,
2108
+ description,
2109
+ breadcrumb,
2110
+ status,
2111
+ className
2112
+ }) {
2113
+ if (!title && !description && !breadcrumb && !status) return null;
2025
2114
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { "data-slot": "data-page-title-block", className: cn("min-w-0 flex-1", className), children: [
2026
2115
  breadcrumb && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-2 text-xs text-muted-foreground", children: breadcrumb }),
2027
- title && /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "truncate text-xl font-semibold", children: title }),
2116
+ (title || status) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
2117
+ title && /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "min-w-0 truncate text-xl font-semibold", children: title }),
2118
+ status && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0", children: status })
2119
+ ] }),
2028
2120
  description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1.5 text-sm text-muted-foreground", children: description })
2029
2121
  ] });
2030
2122
  }
@@ -2034,14 +2126,24 @@ function Actions({ children, className }) {
2034
2126
  "div",
2035
2127
  {
2036
2128
  "data-slot": "data-page-actions",
2037
- className: cn("flex shrink-0 items-center gap-[calc(var(--designkit-panel-gap)*0.5)]", className),
2129
+ className: cn(
2130
+ "flex shrink-0 items-center gap-[calc(var(--designkit-panel-gap)*0.5)]",
2131
+ className
2132
+ ),
2038
2133
  children
2039
2134
  }
2040
2135
  );
2041
2136
  }
2042
2137
  function Tabs2({ children, className }) {
2043
2138
  if (!children) return null;
2044
- return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-slot": "data-page-tabs", className: cn("shrink-0 border-b px-6", className), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-0 overflow-x-auto", children }) });
2139
+ return /* @__PURE__ */ jsxRuntime.jsx(
2140
+ "div",
2141
+ {
2142
+ "data-slot": "data-page-tabs",
2143
+ className: cn("shrink-0 border-b border-border px-6", className),
2144
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-0 overflow-x-auto", children })
2145
+ }
2146
+ );
2045
2147
  }
2046
2148
  function Tab({ active, count, children, onClick, disabled, className }) {
2047
2149
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -2089,8 +2191,8 @@ function Group({ children, className, surface = "none" }) {
2089
2191
  "data-surface": surface,
2090
2192
  className: cn(
2091
2193
  "min-h-0",
2092
- surface === "bordered" && "overflow-hidden rounded-[var(--radius)] border bg-background",
2093
- surface === "card" && "overflow-hidden rounded-[var(--radius)] border bg-card text-card-foreground shadow-sm",
2194
+ surface === "bordered" && "overflow-hidden rounded-[var(--radius)] border border-border bg-background",
2195
+ surface === "card" && "overflow-hidden rounded-[var(--radius)] border border-border bg-card text-card-foreground shadow-sm",
2094
2196
  className
2095
2197
  ),
2096
2198
  children
@@ -2143,7 +2245,14 @@ function GroupBody({ children, className }) {
2143
2245
  }
2144
2246
  function Footer({ children, className }) {
2145
2247
  if (!children) return null;
2146
- return /* @__PURE__ */ jsxRuntime.jsx("footer", { "data-slot": "data-page-footer", className: cn("shrink-0 border-t px-6 py-3", className), children });
2248
+ return /* @__PURE__ */ jsxRuntime.jsx(
2249
+ "footer",
2250
+ {
2251
+ "data-slot": "data-page-footer",
2252
+ className: cn("shrink-0 border-t border-border px-6 py-3", className),
2253
+ children
2254
+ }
2255
+ );
2147
2256
  }
2148
2257
  var DataPage = Object.assign(Root, {
2149
2258
  Header,
@@ -2158,47 +2267,49 @@ var DataPage = Object.assign(Root, {
2158
2267
  GroupBody,
2159
2268
  Footer
2160
2269
  });
2161
- var DashboardPanel = React2.forwardRef(function DashboardPanel2({
2162
- title,
2163
- description,
2164
- loading,
2165
- error,
2166
- transparent,
2167
- editable,
2168
- className,
2169
- style,
2170
- children,
2171
- headerRight
2172
- }, ref) {
2173
- return /* @__PURE__ */ jsxRuntime.jsxs(
2174
- "div",
2175
- {
2176
- ref,
2177
- className: cn(
2178
- "group flex h-full flex-col overflow-hidden",
2179
- transparent ? "" : "rounded-(--radius) border bg-card text-card-foreground",
2180
- editable && "ring-1 ring-border/60 ring-inset",
2181
- className
2182
- ),
2183
- style,
2184
- children: [
2185
- (title || headerRight || editable) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-2 pl-3 pr-1.5 py-2", children: [
2186
- editable && /* @__PURE__ */ jsxRuntime.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__ */ jsxRuntime.jsx(lucideReact.GripHorizontal, { className: "h-3.5 w-3.5" }) }),
2187
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
2188
- title && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-xs font-medium text-card-foreground", children: title }),
2189
- description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-[11px] text-muted-foreground", children: description })
2270
+ var DashboardPanel = React2.forwardRef(
2271
+ function DashboardPanel2({
2272
+ title,
2273
+ description,
2274
+ loading,
2275
+ error,
2276
+ transparent,
2277
+ editable,
2278
+ className,
2279
+ style,
2280
+ children,
2281
+ headerRight
2282
+ }, ref) {
2283
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2284
+ "div",
2285
+ {
2286
+ ref,
2287
+ className: cn(
2288
+ "group flex h-full flex-col overflow-hidden",
2289
+ transparent ? "" : "rounded-(--radius) border border-border bg-card text-card-foreground",
2290
+ editable && "ring-1 ring-border/60 ring-inset",
2291
+ className
2292
+ ),
2293
+ style,
2294
+ children: [
2295
+ (title || headerRight || editable) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-2 pl-3 pr-1.5 py-2", children: [
2296
+ editable && /* @__PURE__ */ jsxRuntime.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__ */ jsxRuntime.jsx(lucideReact.GripHorizontal, { className: "h-3.5 w-3.5" }) }),
2297
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0 flex-1", children: [
2298
+ title && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-xs font-medium text-card-foreground", children: title }),
2299
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "truncate text-[11px] text-muted-foreground", children: description })
2300
+ ] }),
2301
+ headerRight && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity duration-150", children: headerRight })
2190
2302
  ] }),
2191
- headerRight && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity duration-150", children: headerRight })
2192
- ] }),
2193
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex-1 min-h-0 p-3", children: [
2194
- loading && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-card/70 z-10", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 w-4 animate-spin rounded-full border-2 border-primary border-t-transparent" }) }),
2195
- error && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-destructive", children: error }) }),
2196
- !error && children
2197
- ] })
2198
- ]
2199
- }
2200
- );
2201
- });
2303
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex-1 min-h-0 p-3", children: [
2304
+ loading && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-card/70 z-10", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "h-4 w-4 animate-spin rounded-full border-2 border-primary border-t-transparent" }) }),
2305
+ error && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-full items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs text-destructive", children: error }) }),
2306
+ !error && children
2307
+ ] })
2308
+ ]
2309
+ }
2310
+ );
2311
+ }
2312
+ );
2202
2313
  function DashboardBodyTemplate({
2203
2314
  theme,
2204
2315
  className,
@@ -2212,7 +2323,7 @@ function DashboardBodyTemplate({
2212
2323
  }) {
2213
2324
  return /* @__PURE__ */ jsxRuntime.jsxs(DataPage, { className: cn("layout-dashboard", className), style: theme, children: [
2214
2325
  topBar && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: topBar }),
2215
- (title || toolbar) && /* @__PURE__ */ jsxRuntime.jsx("header", { className: "shrink-0 border-b px-(--designkit-page-padding-x) py-(--designkit-page-padding-y)", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3", children: [
2326
+ (title || toolbar) && /* @__PURE__ */ jsxRuntime.jsx("header", { className: "shrink-0 border-b border-border px-(--designkit-page-padding-x) py-(--designkit-page-padding-y)", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3", children: [
2216
2327
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
2217
2328
  title && /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-sm font-semibold truncate", children: title }),
2218
2329
  description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 text-xs text-muted-foreground", children: description })
@@ -2220,7 +2331,16 @@ function DashboardBodyTemplate({
2220
2331
  toolbar && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2 shrink-0", children: toolbar })
2221
2332
  ] }) }),
2222
2333
  variableBar && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 flex flex-wrap items-center gap-2 px-(--designkit-page-padding-x) py-1.5", children: variableBar }),
2223
- /* @__PURE__ */ jsxRuntime.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 })
2334
+ /* @__PURE__ */ jsxRuntime.jsx(
2335
+ "div",
2336
+ {
2337
+ className: cn(
2338
+ "flex-1 min-h-0 overflow-auto px-[calc(var(--designkit-page-padding-x)-0.5rem)] pt-0 pb-(--designkit-page-padding-y)",
2339
+ contentClassName
2340
+ ),
2341
+ children
2342
+ }
2343
+ )
2224
2344
  ] });
2225
2345
  }
2226
2346
  function clamp(value, min, max) {
@@ -2228,20 +2348,31 @@ function clamp(value, min, max) {
2228
2348
  }
2229
2349
  function ResizeHandle({
2230
2350
  axis,
2351
+ label,
2352
+ min,
2353
+ max,
2354
+ value,
2231
2355
  onPointerDown,
2356
+ onKeyDown,
2232
2357
  className
2233
2358
  }) {
2234
2359
  return /* @__PURE__ */ jsxRuntime.jsxs(
2235
2360
  "div",
2236
2361
  {
2237
2362
  role: "separator",
2363
+ tabIndex: 0,
2364
+ "aria-label": label,
2238
2365
  "aria-orientation": axis === "x" ? "vertical" : "horizontal",
2366
+ "aria-valuemin": min,
2367
+ "aria-valuemax": max,
2368
+ "aria-valuenow": value,
2239
2369
  className: cn(
2240
- "group/resize relative z-10 shrink-0 touch-none bg-transparent",
2370
+ "group/resize relative z-10 shrink-0 touch-none bg-transparent outline-none focus-visible:ring-2 focus-visible:ring-ring/50",
2241
2371
  axis === "x" ? "-mx-1 w-2 cursor-col-resize" : "-my-1 h-2 cursor-row-resize",
2242
2372
  className
2243
2373
  ),
2244
2374
  onPointerDown,
2375
+ onKeyDown,
2245
2376
  children: [
2246
2377
  /* @__PURE__ */ jsxRuntime.jsx(
2247
2378
  "div",
@@ -2271,6 +2402,7 @@ function WorkbenchBodyTemplate({
2271
2402
  contentClassName,
2272
2403
  title,
2273
2404
  description,
2405
+ status,
2274
2406
  topBar,
2275
2407
  headerRight,
2276
2408
  toolbar,
@@ -2293,6 +2425,7 @@ function WorkbenchBodyTemplate({
2293
2425
  maxRightPaneWidth = 520,
2294
2426
  minBottomPaneHeight = 120,
2295
2427
  maxBottomPaneHeight = 420,
2428
+ onResize,
2296
2429
  leftPaneClassName,
2297
2430
  mainPaneClassName,
2298
2431
  rightPaneClassName,
@@ -2303,36 +2436,115 @@ function WorkbenchBodyTemplate({
2303
2436
  const [leftWidth, setLeftWidth] = React2.useState(leftPaneWidth);
2304
2437
  const [rightWidth, setRightWidth] = React2.useState(rightPaneWidth);
2305
2438
  const [bottomHeight, setBottomHeight] = React2.useState(bottomPaneHeight);
2306
- const startResize = React2.useCallback((event, axis, applyDelta) => {
2307
- if (!resizable) return;
2308
- const start = axis === "x" ? event.clientX : event.clientY;
2309
- event.currentTarget.setPointerCapture(event.pointerId);
2310
- const previousCursor = document.body.style.cursor;
2311
- const previousUserSelect = document.body.style.userSelect;
2312
- document.body.style.cursor = axis === "x" ? "col-resize" : "row-resize";
2313
- document.body.style.userSelect = "none";
2314
- const onPointerMove = (moveEvent) => {
2315
- applyDelta((axis === "x" ? moveEvent.clientX : moveEvent.clientY) - start);
2316
- };
2317
- const onPointerUp = () => {
2318
- document.body.style.cursor = previousCursor;
2319
- document.body.style.userSelect = previousUserSelect;
2320
- window.removeEventListener("pointermove", onPointerMove);
2321
- window.removeEventListener("pointerup", onPointerUp);
2322
- };
2323
- window.addEventListener("pointermove", onPointerMove);
2324
- window.addEventListener("pointerup", onPointerUp, { once: true });
2325
- }, [resizable]);
2439
+ React2.useEffect(() => {
2440
+ setLeftWidth(leftPaneWidth);
2441
+ }, [leftPaneWidth]);
2442
+ React2.useEffect(() => {
2443
+ setRightWidth(rightPaneWidth);
2444
+ }, [rightPaneWidth]);
2445
+ React2.useEffect(() => {
2446
+ setBottomHeight(bottomPaneHeight);
2447
+ }, [bottomPaneHeight]);
2448
+ const updateResizeState = React2.useCallback(
2449
+ (patch) => {
2450
+ const next = {
2451
+ leftPaneWidth: leftWidth,
2452
+ rightPaneWidth: rightWidth,
2453
+ bottomPaneHeight: bottomHeight,
2454
+ ...patch
2455
+ };
2456
+ if (patch.leftPaneWidth !== void 0) setLeftWidth(patch.leftPaneWidth);
2457
+ if (patch.rightPaneWidth !== void 0) setRightWidth(patch.rightPaneWidth);
2458
+ if (patch.bottomPaneHeight !== void 0) setBottomHeight(patch.bottomPaneHeight);
2459
+ onResize?.(next);
2460
+ },
2461
+ [bottomHeight, leftWidth, onResize, rightWidth]
2462
+ );
2463
+ const updateLeftWidth = React2.useCallback(
2464
+ (next) => {
2465
+ updateResizeState({
2466
+ leftPaneWidth: clamp(next, minLeftPaneWidth, maxLeftPaneWidth)
2467
+ });
2468
+ },
2469
+ [maxLeftPaneWidth, minLeftPaneWidth, updateResizeState]
2470
+ );
2471
+ const updateRightWidth = React2.useCallback(
2472
+ (next) => {
2473
+ updateResizeState({
2474
+ rightPaneWidth: clamp(next, minRightPaneWidth, maxRightPaneWidth)
2475
+ });
2476
+ },
2477
+ [maxRightPaneWidth, minRightPaneWidth, updateResizeState]
2478
+ );
2479
+ const updateBottomHeight = React2.useCallback(
2480
+ (next) => {
2481
+ updateResizeState({
2482
+ bottomPaneHeight: clamp(next, minBottomPaneHeight, maxBottomPaneHeight)
2483
+ });
2484
+ },
2485
+ [maxBottomPaneHeight, minBottomPaneHeight, updateResizeState]
2486
+ );
2487
+ const handleResizeKey = React2.useCallback(
2488
+ (event, options) => {
2489
+ const step = event.shiftKey ? 48 : 12;
2490
+ if (options.decreaseKeys.includes(event.key)) {
2491
+ event.preventDefault();
2492
+ options.update(options.value - step);
2493
+ return;
2494
+ }
2495
+ if (options.increaseKeys.includes(event.key)) {
2496
+ event.preventDefault();
2497
+ options.update(options.value + step);
2498
+ return;
2499
+ }
2500
+ if (event.key === "Home") {
2501
+ event.preventDefault();
2502
+ options.update(options.min);
2503
+ return;
2504
+ }
2505
+ if (event.key === "End") {
2506
+ event.preventDefault();
2507
+ options.update(options.max);
2508
+ }
2509
+ },
2510
+ []
2511
+ );
2512
+ const startResize = React2.useCallback(
2513
+ (event, axis, applyDelta) => {
2514
+ if (!resizable) return;
2515
+ const start = axis === "x" ? event.clientX : event.clientY;
2516
+ event.currentTarget.setPointerCapture(event.pointerId);
2517
+ const previousCursor = document.body.style.cursor;
2518
+ const previousUserSelect = document.body.style.userSelect;
2519
+ document.body.style.cursor = axis === "x" ? "col-resize" : "row-resize";
2520
+ document.body.style.userSelect = "none";
2521
+ const onPointerMove = (moveEvent) => {
2522
+ applyDelta((axis === "x" ? moveEvent.clientX : moveEvent.clientY) - start);
2523
+ };
2524
+ const onPointerUp = () => {
2525
+ document.body.style.cursor = previousCursor;
2526
+ document.body.style.userSelect = previousUserSelect;
2527
+ window.removeEventListener("pointermove", onPointerMove);
2528
+ window.removeEventListener("pointerup", onPointerUp);
2529
+ };
2530
+ window.addEventListener("pointermove", onPointerMove);
2531
+ window.addEventListener("pointerup", onPointerUp, { once: true });
2532
+ },
2533
+ [resizable]
2534
+ );
2326
2535
  const headerRightContent = headerRight ?? toolbar;
2327
- const showHeader = title || description || headerRightContent || actions;
2536
+ const showHeader = title || description || status || headerRightContent || actions;
2328
2537
  const showLeftPane = leftPane && !leftPaneCollapsed;
2329
2538
  const showRightPane = rightPane && !rightPaneCollapsed;
2330
2539
  const showBottomPane = bottomPane && !bottomPaneCollapsed;
2331
2540
  return /* @__PURE__ */ jsxRuntime.jsxs(DataPage, { className: cn("layout-workbench", className), style: theme, children: [
2332
2541
  topBar && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: topBar }),
2333
- showHeader && /* @__PURE__ */ jsxRuntime.jsx("header", { className: "shrink-0 border-b px-(--designkit-page-padding-x) py-[calc(var(--designkit-page-padding-y)*0.75)]", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-[var(--designkit-toolbar-height)] items-center justify-between gap-3", children: [
2542
+ showHeader && /* @__PURE__ */ jsxRuntime.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__ */ jsxRuntime.jsxs("div", { className: "flex min-h-[var(--designkit-toolbar-height)] items-center justify-between gap-3", children: [
2334
2543
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
2335
- title && /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "truncate text-sm font-semibold", children: title }),
2544
+ (title || status) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-2", children: [
2545
+ title && /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "min-w-0 truncate text-sm font-semibold", children: title }),
2546
+ status && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0", children: status })
2547
+ ] }),
2336
2548
  description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 truncate text-xs text-muted-foreground", children: description })
2337
2549
  ] }),
2338
2550
  (headerRightContent || actions) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [
@@ -2340,18 +2552,18 @@ function WorkbenchBodyTemplate({
2340
2552
  actions
2341
2553
  ] })
2342
2554
  ] }) }),
2343
- (showLeftPane || showRightPane) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-1.5 border-b px-2 py-1.5 md:hidden", children: [
2555
+ (showLeftPane || showRightPane) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-1.5 border-b border-border px-2 py-1.5 md:hidden", children: [
2344
2556
  showLeftPane && /* @__PURE__ */ jsxRuntime.jsxs(Sheet, { children: [
2345
2557
  /* @__PURE__ */ jsxRuntime.jsx(SheetTrigger, { render: /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "outline", size: "sm" }), children: leftPaneLabel }),
2346
2558
  /* @__PURE__ */ jsxRuntime.jsxs(SheetContent, { side: "left", className: "flex flex-col gap-0 p-0", children: [
2347
- /* @__PURE__ */ jsxRuntime.jsx(SheetHeader, { className: "shrink-0 border-b px-4 py-3", children: /* @__PURE__ */ jsxRuntime.jsx(SheetTitle, { children: leftPaneLabel }) }),
2559
+ /* @__PURE__ */ jsxRuntime.jsx(SheetHeader, { className: "shrink-0 border-b border-border px-4 py-3", children: /* @__PURE__ */ jsxRuntime.jsx(SheetTitle, { children: leftPaneLabel }) }),
2348
2560
  /* @__PURE__ */ jsxRuntime.jsx(ScrollArea, { className: "flex-1", children: leftPane })
2349
2561
  ] })
2350
2562
  ] }),
2351
2563
  showRightPane && /* @__PURE__ */ jsxRuntime.jsxs(Sheet, { children: [
2352
2564
  /* @__PURE__ */ jsxRuntime.jsx(SheetTrigger, { render: /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "outline", size: "sm" }), children: rightPaneLabel }),
2353
2565
  /* @__PURE__ */ jsxRuntime.jsxs(SheetContent, { side: "right", className: "flex flex-col gap-0 p-0", children: [
2354
- /* @__PURE__ */ jsxRuntime.jsx(SheetHeader, { className: "shrink-0 border-b px-4 py-3", children: /* @__PURE__ */ jsxRuntime.jsx(SheetTitle, { children: rightPaneLabel }) }),
2566
+ /* @__PURE__ */ jsxRuntime.jsx(SheetHeader, { className: "shrink-0 border-b border-border px-4 py-3", children: /* @__PURE__ */ jsxRuntime.jsx(SheetTitle, { children: rightPaneLabel }) }),
2355
2567
  /* @__PURE__ */ jsxRuntime.jsx(ScrollArea, { className: "flex-1", children: rightPane })
2356
2568
  ] })
2357
2569
  ] })
@@ -2361,7 +2573,10 @@ function WorkbenchBodyTemplate({
2361
2573
  /* @__PURE__ */ jsxRuntime.jsx(
2362
2574
  "aside",
2363
2575
  {
2364
- className: cn("hidden min-h-0 shrink-0 overflow-hidden border-r bg-card/45 md:flex md:flex-col", leftPaneClassName),
2576
+ className: cn(
2577
+ "hidden min-h-0 shrink-0 overflow-hidden border-r border-border bg-card/45 md:flex md:flex-col",
2578
+ leftPaneClassName
2579
+ ),
2365
2580
  style: { width: leftWidth },
2366
2581
  children: leftPane
2367
2582
  }
@@ -2370,13 +2585,25 @@ function WorkbenchBodyTemplate({
2370
2585
  ResizeHandle,
2371
2586
  {
2372
2587
  axis: "x",
2588
+ label: "Resize left pane",
2589
+ min: minLeftPaneWidth,
2590
+ max: maxLeftPaneWidth,
2591
+ value: leftWidth,
2373
2592
  className: "hidden md:flex",
2374
2593
  onPointerDown: (event) => {
2375
2594
  const start = leftWidth;
2376
2595
  startResize(event, "x", (delta) => {
2377
- setLeftWidth(clamp(start + delta, minLeftPaneWidth, maxLeftPaneWidth));
2596
+ updateLeftWidth(start + delta);
2378
2597
  });
2379
- }
2598
+ },
2599
+ onKeyDown: (event) => handleResizeKey(event, {
2600
+ value: leftWidth,
2601
+ min: minLeftPaneWidth,
2602
+ max: maxLeftPaneWidth,
2603
+ decreaseKeys: ["ArrowLeft"],
2604
+ increaseKeys: ["ArrowRight"],
2605
+ update: updateLeftWidth
2606
+ })
2380
2607
  }
2381
2608
  )
2382
2609
  ] }),
@@ -2387,19 +2614,34 @@ function WorkbenchBodyTemplate({
2387
2614
  ResizeHandle,
2388
2615
  {
2389
2616
  axis: "y",
2617
+ label: "Resize bottom pane",
2618
+ min: minBottomPaneHeight,
2619
+ max: maxBottomPaneHeight,
2620
+ value: bottomHeight,
2390
2621
  className: "hidden md:flex",
2391
2622
  onPointerDown: (event) => {
2392
2623
  const start = bottomHeight;
2393
2624
  startResize(event, "y", (delta) => {
2394
- setBottomHeight(clamp(start - delta, minBottomPaneHeight, maxBottomPaneHeight));
2625
+ updateBottomHeight(start - delta);
2395
2626
  });
2396
- }
2627
+ },
2628
+ onKeyDown: (event) => handleResizeKey(event, {
2629
+ value: bottomHeight,
2630
+ min: minBottomPaneHeight,
2631
+ max: maxBottomPaneHeight,
2632
+ decreaseKeys: ["ArrowDown"],
2633
+ increaseKeys: ["ArrowUp"],
2634
+ update: updateBottomHeight
2635
+ })
2397
2636
  }
2398
2637
  ),
2399
2638
  /* @__PURE__ */ jsxRuntime.jsx(
2400
2639
  "section",
2401
2640
  {
2402
- className: cn("min-h-0 shrink-0 overflow-auto border-t bg-card/40 md:overflow-hidden", bottomPaneClassName),
2641
+ className: cn(
2642
+ "min-h-0 shrink-0 overflow-auto border-t border-border bg-card/40 md:overflow-hidden",
2643
+ bottomPaneClassName
2644
+ ),
2403
2645
  style: { height: bottomHeight },
2404
2646
  children: bottomPane
2405
2647
  }
@@ -2411,19 +2653,34 @@ function WorkbenchBodyTemplate({
2411
2653
  ResizeHandle,
2412
2654
  {
2413
2655
  axis: "x",
2656
+ label: "Resize right pane",
2657
+ min: minRightPaneWidth,
2658
+ max: maxRightPaneWidth,
2659
+ value: rightWidth,
2414
2660
  className: "hidden md:flex",
2415
2661
  onPointerDown: (event) => {
2416
2662
  const start = rightWidth;
2417
2663
  startResize(event, "x", (delta) => {
2418
- setRightWidth(clamp(start - delta, minRightPaneWidth, maxRightPaneWidth));
2664
+ updateRightWidth(start - delta);
2419
2665
  });
2420
- }
2666
+ },
2667
+ onKeyDown: (event) => handleResizeKey(event, {
2668
+ value: rightWidth,
2669
+ min: minRightPaneWidth,
2670
+ max: maxRightPaneWidth,
2671
+ decreaseKeys: ["ArrowRight"],
2672
+ increaseKeys: ["ArrowLeft"],
2673
+ update: updateRightWidth
2674
+ })
2421
2675
  }
2422
2676
  ),
2423
2677
  /* @__PURE__ */ jsxRuntime.jsx(
2424
2678
  "aside",
2425
2679
  {
2426
- className: cn("hidden min-h-0 shrink-0 overflow-hidden border-l bg-card/45 md:flex md:flex-col", rightPaneClassName),
2680
+ className: cn(
2681
+ "hidden min-h-0 shrink-0 overflow-hidden border-l border-border bg-card/45 md:flex md:flex-col",
2682
+ rightPaneClassName
2683
+ ),
2427
2684
  style: { width: rightWidth },
2428
2685
  children: rightPane
2429
2686
  }
@@ -2482,9 +2739,9 @@ function GroupWrapper({
2482
2739
  }
2483
2740
  if (variant === "bordered") {
2484
2741
  if (layout === "inline") {
2485
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden rounded-(--radius) border divide-y", children });
2742
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden rounded-(--radius) border border-border divide-y", children });
2486
2743
  }
2487
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-(--radius) border p-(--designkit-panel-gap)", children });
2744
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-(--radius) border border-border p-(--designkit-panel-gap)", children });
2488
2745
  }
2489
2746
  return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children });
2490
2747
  }
@@ -2522,14 +2779,23 @@ function renderGroupProps(props) {
2522
2779
  ] });
2523
2780
  }
2524
2781
  if (layout === "horizontal") {
2525
- return /* @__PURE__ */ jsxRuntime.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: [
2526
- /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2527
- /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm font-medium", danger && "text-destructive"), children: title }),
2528
- description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: description }),
2529
- actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2", children: actions })
2530
- ] }),
2531
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sm:col-span-2", children: /* @__PURE__ */ jsxRuntime.jsx(GroupWrapper, { layout, variant, children }) })
2532
- ] });
2782
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2783
+ "div",
2784
+ {
2785
+ className: cn(
2786
+ "grid grid-cols-1 gap-(--designkit-panel-gap) py-(--designkit-panel-gap) sm:grid-cols-3 sm:gap-[calc(var(--designkit-panel-gap)*2)]",
2787
+ className
2788
+ ),
2789
+ children: [
2790
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2791
+ /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm font-medium", danger && "text-destructive"), children: title }),
2792
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: description }),
2793
+ actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2", children: actions })
2794
+ ] }),
2795
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sm:col-span-2", children: /* @__PURE__ */ jsxRuntime.jsx(GroupWrapper, { layout, variant, children }) })
2796
+ ]
2797
+ }
2798
+ );
2533
2799
  }
2534
2800
  if (layout === "inline") {
2535
2801
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("py-(--designkit-panel-gap)", className), children: [
@@ -2599,6 +2865,7 @@ function Root2({
2599
2865
  topBar,
2600
2866
  title,
2601
2867
  description,
2868
+ status,
2602
2869
  actions,
2603
2870
  toolbarLeft,
2604
2871
  toolbarRight,
@@ -2632,10 +2899,10 @@ function Root2({
2632
2899
  return /* @__PURE__ */ jsxRuntime.jsxs(DataPage, { className: cn("layout-databody", className), style: theme, children: [
2633
2900
  /* @__PURE__ */ jsxRuntime.jsx(TopBarSlot, { topBar }),
2634
2901
  /* @__PURE__ */ jsxRuntime.jsxs(DataPage.Header, { children: [
2635
- /* @__PURE__ */ jsxRuntime.jsx(DataPage.TitleBlock, { title, description }),
2902
+ /* @__PURE__ */ jsxRuntime.jsx(DataPage.TitleBlock, { title, description, status }),
2636
2903
  /* @__PURE__ */ jsxRuntime.jsx(DataPage.Actions, { children: actions })
2637
2904
  ] }),
2638
- summaryEl && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 border-b px-(--designkit-page-padding-x) py-(--designkit-panel-gap)", children: summaryEl.props.children }),
2905
+ summaryEl && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 border-b border-border px-(--designkit-page-padding-x) py-(--designkit-panel-gap)", children: summaryEl.props.children }),
2639
2906
  /* @__PURE__ */ jsxRuntime.jsx(DataPage.Content, { className: contentClassName, children: /* @__PURE__ */ jsxRuntime.jsx(DataPage.Group, { className: "h-full", children: /* @__PURE__ */ jsxRuntime.jsx(DataPage.GroupBody, { className: cn("h-full", bodyEl.props.className), children: bodyEl.props.children }) }) })
2640
2907
  ] });
2641
2908
  }
@@ -2644,10 +2911,10 @@ function Root2({
2644
2911
  return /* @__PURE__ */ jsxRuntime.jsxs(DataPage, { className: cn("layout-sectioned", className), style: theme, children: [
2645
2912
  /* @__PURE__ */ jsxRuntime.jsx(TopBarSlot, { topBar }),
2646
2913
  /* @__PURE__ */ jsxRuntime.jsxs(DataPage.Header, { children: [
2647
- /* @__PURE__ */ jsxRuntime.jsx(DataPage.TitleBlock, { title, description }),
2914
+ /* @__PURE__ */ jsxRuntime.jsx(DataPage.TitleBlock, { title, description, status }),
2648
2915
  /* @__PURE__ */ jsxRuntime.jsx(DataPage.Actions, { children: actions })
2649
2916
  ] }),
2650
- summaryEl && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 border-b px-(--designkit-page-padding-x) py-(--designkit-panel-gap)", children: summaryEl.props.children }),
2917
+ summaryEl && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 border-b border-border px-(--designkit-page-padding-x) py-(--designkit-panel-gap)", children: summaryEl.props.children }),
2651
2918
  /* @__PURE__ */ jsxRuntime.jsx(DataPage.Content, { className: contentClassName, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-(--designkit-panel-gap) lg:grid-cols-[16rem_minmax(0,1fr)]", children: [
2652
2919
  /* @__PURE__ */ jsxRuntime.jsx("nav", { className: "space-y-1", children: sections.map((section) => {
2653
2920
  const active = section.props.id === activeSection?.props.id;
@@ -2678,10 +2945,10 @@ function Root2({
2678
2945
  return /* @__PURE__ */ jsxRuntime.jsxs(DataPage, { className: cn("layout-databody", className), style: theme, children: [
2679
2946
  /* @__PURE__ */ jsxRuntime.jsx(TopBarSlot, { topBar }),
2680
2947
  /* @__PURE__ */ jsxRuntime.jsxs(DataPage.Header, { children: [
2681
- /* @__PURE__ */ jsxRuntime.jsx(DataPage.TitleBlock, { title, description }),
2948
+ /* @__PURE__ */ jsxRuntime.jsx(DataPage.TitleBlock, { title, description, status }),
2682
2949
  /* @__PURE__ */ jsxRuntime.jsx(DataPage.Actions, { children: actions })
2683
2950
  ] }),
2684
- summaryEl && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 border-b px-(--designkit-page-padding-x) py-(--designkit-panel-gap)", children: summaryEl.props.children }),
2951
+ summaryEl && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 border-b border-border px-(--designkit-page-padding-x) py-(--designkit-panel-gap)", children: summaryEl.props.children }),
2685
2952
  hasTabs && /* @__PURE__ */ jsxRuntime.jsx(DataPage.Tabs, { children: tabs.map((tab) => /* @__PURE__ */ jsxRuntime.jsx(
2686
2953
  DataPage.Tab,
2687
2954
  {
@@ -2728,6 +2995,7 @@ function BrowseBodyTemplate({
2728
2995
  topBar,
2729
2996
  title,
2730
2997
  description,
2998
+ status,
2731
2999
  actions,
2732
3000
  sidebar,
2733
3001
  sidebarTitle = "Filters",
@@ -2738,15 +3006,15 @@ function BrowseBodyTemplate({
2738
3006
  children
2739
3007
  }) {
2740
3008
  const isNarrow = useIsNarrow();
2741
- const hasHeader = title || description || actions;
3009
+ const hasHeader = title || description || status || actions;
2742
3010
  return /* @__PURE__ */ jsxRuntime.jsxs(DataPage, { className: cn("layout-browse", className), style: theme, children: [
2743
3011
  topBar && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: topBar }),
2744
3012
  hasHeader && /* @__PURE__ */ jsxRuntime.jsxs(DataPage.Header, { children: [
2745
- /* @__PURE__ */ jsxRuntime.jsx(DataPage.TitleBlock, { title, description }),
3013
+ /* @__PURE__ */ jsxRuntime.jsx(DataPage.TitleBlock, { title, description, status }),
2746
3014
  /* @__PURE__ */ jsxRuntime.jsx(DataPage.Actions, { children: actions })
2747
3015
  ] }),
2748
3016
  /* @__PURE__ */ jsxRuntime.jsxs(DataPage.Content, { padding: "none", className: "flex flex-col overflow-hidden", children: [
2749
- (toolbar || isNarrow) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-2 border-b px-(--designkit-page-padding-x) py-2", children: [
3017
+ (toolbar || isNarrow) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-2 border-b border-border px-(--designkit-page-padding-x) py-2", children: [
2750
3018
  isNarrow && /* @__PURE__ */ jsxRuntime.jsxs(Sheet, { children: [
2751
3019
  /* @__PURE__ */ jsxRuntime.jsxs(
2752
3020
  SheetTrigger,
@@ -2759,7 +3027,7 @@ function BrowseBodyTemplate({
2759
3027
  }
2760
3028
  ),
2761
3029
  /* @__PURE__ */ jsxRuntime.jsxs(SheetContent, { side: "left", className: "flex flex-col gap-0 p-0", children: [
2762
- /* @__PURE__ */ jsxRuntime.jsx(SheetHeader, { className: "shrink-0 border-b px-4 py-3", children: /* @__PURE__ */ jsxRuntime.jsx(SheetTitle, { children: sidebarTitle }) }),
3030
+ /* @__PURE__ */ jsxRuntime.jsx(SheetHeader, { className: "shrink-0 border-b border-border px-4 py-3", children: /* @__PURE__ */ jsxRuntime.jsx(SheetTitle, { children: sidebarTitle }) }),
2763
3031
  /* @__PURE__ */ jsxRuntime.jsx(ScrollArea, { className: "flex-1", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "p-4", children: sidebar }) })
2764
3032
  ] })
2765
3033
  ] }),
@@ -2769,7 +3037,7 @@ function BrowseBodyTemplate({
2769
3037
  !isNarrow && /* @__PURE__ */ jsxRuntime.jsx(
2770
3038
  "aside",
2771
3039
  {
2772
- className: "shrink-0 overflow-hidden border-r",
3040
+ className: "shrink-0 overflow-hidden border-r border-border",
2773
3041
  style: { width: sidebarWidth },
2774
3042
  children: /* @__PURE__ */ jsxRuntime.jsx(ScrollArea, { className: "h-full", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-(--designkit-page-padding-x) py-(--designkit-page-padding-y)", children: sidebar }) })
2775
3043
  }
@@ -2831,8 +3099,8 @@ function DetailBodySection({
2831
3099
  {
2832
3100
  className: cn(
2833
3101
  "min-h-0",
2834
- surface === "card" && "rounded-(--radius) border bg-card p-(--designkit-panel-gap) text-card-foreground shadow-sm",
2835
- surface === "bordered" && "rounded-(--radius) border p-(--designkit-panel-gap)",
3102
+ surface === "card" && "rounded-(--radius) border border-border bg-card p-(--designkit-panel-gap) text-card-foreground shadow-sm",
3103
+ surface === "bordered" && "rounded-(--radius) border border-border p-(--designkit-panel-gap)",
2836
3104
  className
2837
3105
  ),
2838
3106
  children: [
@@ -2877,8 +3145,17 @@ function DetailBodyTemplateRoot({
2877
3145
  const hasTabs = tabs.length > 0;
2878
3146
  const [activeTab, setActiveTab] = React2.useState(() => tabs[0]?.props.id ?? "");
2879
3147
  const selectedTab = tabs.find((tab) => tab.props.id === activeTab) ?? tabs[0];
2880
- const summarySlot = summary ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 rounded-(--radius) border bg-card p-(--designkit-panel-gap) text-card-foreground", children: summary }) : null;
2881
- const mediaSlot = media ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("min-h-0 overflow-hidden rounded-(--radius) border bg-card", mediaClassName), children: media }) : null;
3148
+ const summarySlot = summary ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 rounded-(--radius) border border-border bg-card p-(--designkit-panel-gap) text-card-foreground", children: summary }) : null;
3149
+ const mediaSlot = media ? /* @__PURE__ */ jsxRuntime.jsx(
3150
+ "div",
3151
+ {
3152
+ className: cn(
3153
+ "min-h-0 overflow-hidden rounded-(--radius) border border-border bg-card",
3154
+ mediaClassName
3155
+ ),
3156
+ children: media
3157
+ }
3158
+ ) : null;
2882
3159
  const leadGridClass = variant === "media" ? "xl:grid-cols-[minmax(0,1.35fr)_minmax(18rem,0.65fr)]" : "xl:grid-cols-2";
2883
3160
  const defaultHeader = eyebrow || title || description || status || actions ? /* @__PURE__ */ jsxRuntime.jsx(
2884
3161
  DetailBodyHeader,
@@ -2941,48 +3218,74 @@ function DetailBodyTemplateRoot({
2941
3218
  ),
2942
3219
  children: [
2943
3220
  leadSlot && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-(--designkit-panel-gap)", children: leadSlot }),
2944
- insideAsideSlot && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("min-h-0 rounded-(--radius) border bg-card p-(--designkit-panel-gap)", asideClassName), children: insideAsideSlot })
3221
+ insideAsideSlot && /* @__PURE__ */ jsxRuntime.jsx(
3222
+ "div",
3223
+ {
3224
+ className: cn(
3225
+ "min-h-0 rounded-(--radius) border border-border bg-card p-(--designkit-panel-gap)",
3226
+ asideClassName
3227
+ ),
3228
+ children: insideAsideSlot
3229
+ }
3230
+ )
2945
3231
  ]
2946
3232
  }
2947
3233
  ),
2948
3234
  body
2949
3235
  ] })
2950
3236
  };
2951
- return /* @__PURE__ */ jsxRuntime.jsxs(DataPage, { className: cn("layout-detail", className), style: theme, "data-detail-variant": variant, children: [
2952
- topBar && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: topBar }),
2953
- header ?? defaultHeader,
2954
- /* @__PURE__ */ jsxRuntime.jsx(DataPage.Content, { padding: "none", className: "overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsxs(
2955
- "div",
2956
- {
2957
- className: cn(
2958
- "grid h-full min-h-0 grid-cols-1 overflow-hidden",
2959
- outsideAsideSlot && "lg:grid-cols-[minmax(0,1fr)_minmax(18rem,24rem)]"
2960
- ),
2961
- children: [
2962
- /* @__PURE__ */ jsxRuntime.jsx(
2963
- "main",
2964
- {
2965
- className: cn(
2966
- "min-h-0 overflow-auto px-(--designkit-page-padding-x) py-(--designkit-page-padding-y)",
2967
- contentClassName
2968
- ),
2969
- children: layout[variant]
2970
- }
2971
- ),
2972
- outsideAsideSlot && /* @__PURE__ */ jsxRuntime.jsx("aside", { className: cn("min-h-0 border-t bg-background lg:border-l lg:border-t-0", asideClassName), children: /* @__PURE__ */ jsxRuntime.jsx(
2973
- "div",
2974
- {
2975
- className: cn(
2976
- "px-(--designkit-page-padding-x) py-(--designkit-page-padding-y)",
2977
- stickyAside && "lg:sticky lg:top-0"
3237
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3238
+ DataPage,
3239
+ {
3240
+ className: cn("layout-detail", className),
3241
+ style: theme,
3242
+ "data-detail-variant": variant,
3243
+ children: [
3244
+ topBar && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: topBar }),
3245
+ header ?? defaultHeader,
3246
+ /* @__PURE__ */ jsxRuntime.jsx(DataPage.Content, { padding: "none", className: "overflow-hidden", children: /* @__PURE__ */ jsxRuntime.jsxs(
3247
+ "div",
3248
+ {
3249
+ className: cn(
3250
+ "grid h-full min-h-0 grid-cols-1 overflow-hidden",
3251
+ outsideAsideSlot && "lg:grid-cols-[minmax(0,1fr)_minmax(18rem,24rem)]"
3252
+ ),
3253
+ children: [
3254
+ /* @__PURE__ */ jsxRuntime.jsx(
3255
+ "main",
3256
+ {
3257
+ className: cn(
3258
+ "min-h-0 overflow-auto px-(--designkit-page-padding-x) py-(--designkit-page-padding-y)",
3259
+ contentClassName
3260
+ ),
3261
+ children: layout[variant]
3262
+ }
2978
3263
  ),
2979
- children: outsideAsideSlot
2980
- }
2981
- ) })
2982
- ]
2983
- }
2984
- ) })
2985
- ] });
3264
+ outsideAsideSlot && /* @__PURE__ */ jsxRuntime.jsx(
3265
+ "aside",
3266
+ {
3267
+ className: cn(
3268
+ "min-h-0 border-t border-border bg-background lg:border-l lg:border-t-0",
3269
+ asideClassName
3270
+ ),
3271
+ children: /* @__PURE__ */ jsxRuntime.jsx(
3272
+ "div",
3273
+ {
3274
+ className: cn(
3275
+ "px-(--designkit-page-padding-x) py-(--designkit-page-padding-y)",
3276
+ stickyAside && "lg:sticky lg:top-0"
3277
+ ),
3278
+ children: outsideAsideSlot
3279
+ }
3280
+ )
3281
+ }
3282
+ )
3283
+ ]
3284
+ }
3285
+ ) })
3286
+ ]
3287
+ }
3288
+ );
2986
3289
  }
2987
3290
  var DetailBodyTemplate = Object.assign(DetailBodyTemplateRoot, {
2988
3291
  Header: DetailBodyHeader,
@@ -3013,8 +3316,9 @@ function ListDetailBodyTemplate({
3013
3316
  /* @__PURE__ */ jsxRuntime.jsx(
3014
3317
  "aside",
3015
3318
  {
3319
+ "data-slot": "list-detail-list",
3016
3320
  className: cn(
3017
- "min-h-0 shrink-0 overflow-hidden border-r",
3321
+ "min-h-0 shrink-0 overflow-hidden border-r border-border",
3018
3322
  detail ? "hidden lg:flex lg:w-[var(--ld-list-width)] lg:flex-col" : "flex w-full flex-col lg:w-[var(--ld-list-width)]",
3019
3323
  listClassName
3020
3324
  ),
@@ -3030,7 +3334,7 @@ function ListDetailBodyTemplate({
3030
3334
  detailClassName
3031
3335
  ),
3032
3336
  children: [
3033
- detail && onBack && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex shrink-0 items-center border-b px-3 py-2 lg:hidden", children: /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "ghost", size: "sm", className: "-ml-1 gap-1", onClick: onBack, children: [
3337
+ detail && onBack && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex shrink-0 items-center border-b border-border px-3 py-2 lg:hidden", children: /* @__PURE__ */ jsxRuntime.jsxs(Button, { variant: "ghost", size: "sm", className: "-ml-1 gap-1", onClick: onBack, children: [
3034
3338
  /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeft, { className: "h-4 w-4" }),
3035
3339
  backLabel
3036
3340
  ] }) }),
@@ -3064,6 +3368,7 @@ function PanelTemplateSection({
3064
3368
  function PanelTemplateRoot({
3065
3369
  title,
3066
3370
  eyebrow,
3371
+ status,
3067
3372
  actions,
3068
3373
  footer,
3069
3374
  children,
@@ -3074,12 +3379,15 @@ function PanelTemplateRoot({
3074
3379
  (title || eyebrow || actions) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "shrink-0 px-4 py-3", children: [
3075
3380
  eyebrow && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-0.5 text-[10px] font-medium uppercase tracking-wider text-muted-foreground", children: eyebrow }),
3076
3381
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
3077
- title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "min-w-0 flex-1 truncate text-sm font-semibold", children: title }),
3382
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
3383
+ title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "min-w-0 truncate text-sm font-semibold", children: title }),
3384
+ status && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0", children: status })
3385
+ ] }),
3078
3386
  actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex shrink-0 items-center gap-1", children: actions })
3079
3387
  ] })
3080
3388
  ] }),
3081
3389
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("min-h-0 flex-1 overflow-y-auto px-4 py-4", bodyClassName), children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-5", children }) }),
3082
- footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 border-t px-4 py-3", children: footer })
3390
+ footer && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 border-t border-border px-4 py-3", children: footer })
3083
3391
  ] });
3084
3392
  }
3085
3393
  var PanelTemplate = Object.assign(PanelTemplateRoot, {
@@ -3088,6 +3396,7 @@ var PanelTemplate = Object.assign(PanelTemplateRoot, {
3088
3396
  function FormWizardBodyTemplate({
3089
3397
  theme,
3090
3398
  title,
3399
+ status,
3091
3400
  topBar,
3092
3401
  variant = "plain",
3093
3402
  steps,
@@ -3105,7 +3414,7 @@ function FormWizardBodyTemplate({
3105
3414
  }
3106
3415
  return /* @__PURE__ */ jsxRuntime.jsxs(DataPage, { className: "layout-form-wizard", style: theme, children: [
3107
3416
  topBar && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: topBar }),
3108
- /* @__PURE__ */ jsxRuntime.jsx(DataPage.Header, { children: /* @__PURE__ */ jsxRuntime.jsx(DataPage.TitleBlock, { title }) }),
3417
+ /* @__PURE__ */ jsxRuntime.jsx(DataPage.Header, { children: /* @__PURE__ */ jsxRuntime.jsx(DataPage.TitleBlock, { title, status }) }),
3109
3418
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 px-(--designkit-page-padding-x) pb-4", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center", children: steps.map((step, i) => /* @__PURE__ */ jsxRuntime.jsxs(React2.Fragment, { children: [
3110
3419
  i > 0 && /* @__PURE__ */ jsxRuntime.jsx(
3111
3420
  "div",
@@ -3218,7 +3527,7 @@ function TypographyBodyTemplate({ theme, breadcrumb }) {
3218
3527
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid gap-2", children: ["API Gateway", "Billing Worker", "Notification Queue"].map((item, index) => /* @__PURE__ */ jsxRuntime.jsxs(
3219
3528
  "div",
3220
3529
  {
3221
- className: "flex items-center justify-between rounded-lg border px-3 py-2",
3530
+ className: "flex items-center justify-between rounded-lg border border-border px-3 py-2",
3222
3531
  children: [
3223
3532
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
3224
3533
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm font-medium", children: item }),
@@ -3267,13 +3576,13 @@ var useThemeStore = zustand.create((set) => ({
3267
3576
  },
3268
3577
  overrides: {},
3269
3578
  activeShell: "sidebar",
3270
- activeTemplate: "table",
3579
+ activeTemplate: "databody",
3271
3580
  setGlobal: (patch) => set((s) => ({ global: { ...s.global, ...patch } })),
3272
3581
  setOverride: (id, patch) => set((s) => ({
3273
3582
  overrides: { ...s.overrides, [id]: { ...s.overrides[id], ...patch } }
3274
3583
  })),
3275
- setShell: (shell) => set({ activeShell: shell }),
3276
- setTemplate: (template) => set({ activeTemplate: template })
3584
+ setShell: () => void 0,
3585
+ setTemplate: () => void 0
3277
3586
  }));
3278
3587
  var tonalTokenDefs = [
3279
3588
  {
@@ -3339,7 +3648,7 @@ function ColorSwatch({
3339
3648
  variable,
3340
3649
  formula
3341
3650
  }) {
3342
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "overflow-hidden rounded-[var(--radius)] border", children: [
3651
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "overflow-hidden rounded-[var(--radius)] border border-border", children: [
3343
3652
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${bg} flex h-14 items-center justify-center`, children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${fg} text-sm font-semibold`, children: "Aa" }) }),
3344
3653
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "bg-card px-3 py-2 space-y-0.5", children: [
3345
3654
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-xs font-medium", children: name }),
@@ -3436,7 +3745,7 @@ function ColorsBodyTemplate({ theme, breadcrumb }) {
3436
3745
  " \xB7 ",
3437
3746
  "factor = 2\u20136% of primary chroma"
3438
3747
  ] }),
3439
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "overflow-hidden rounded-[var(--radius)] border divide-y text-xs font-mono", children: [
3748
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "overflow-hidden rounded-[var(--radius)] border border-border divide-y text-xs font-mono", children: [
3440
3749
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[7rem_1fr_1fr] bg-muted/50 px-3 py-1.5 text-muted-foreground", children: [
3441
3750
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "token" }),
3442
3751
  /* @__PURE__ */ jsxRuntime.jsx("span", { children: "light" }),
@@ -3448,7 +3757,7 @@ function ColorsBodyTemplate({ theme, breadcrumb }) {
3448
3757
  className: "grid grid-cols-[7rem_1fr_1fr] items-center gap-x-3 px-3 py-2",
3449
3758
  children: [
3450
3759
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
3451
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${t.bg} h-5 w-5 shrink-0 rounded border` }),
3760
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: `${t.bg} h-5 w-5 shrink-0 rounded border border-border` }),
3452
3761
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-foreground", children: t.name })
3453
3762
  ] }),
3454
3763
  /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-muted-foreground", children: [
@@ -3515,7 +3824,16 @@ function FormCard({
3515
3824
  }) {
3516
3825
  const widthCls = cardWidthClass[cardWidth];
3517
3826
  if (card === "card") {
3518
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-full rounded-2xl border bg-card px-8 py-10 shadow-lg", widthCls), children });
3827
+ return /* @__PURE__ */ jsxRuntime.jsx(
3828
+ "div",
3829
+ {
3830
+ className: cn(
3831
+ "w-full rounded-2xl border border-border bg-card px-8 py-10 shadow-lg",
3832
+ widthCls
3833
+ ),
3834
+ children
3835
+ }
3836
+ );
3519
3837
  }
3520
3838
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("w-full", widthCls), children });
3521
3839
  }
@@ -3558,89 +3876,6 @@ function LoginBodyTemplate({
3558
3876
  }
3559
3877
  );
3560
3878
  }
3561
- function Breadcrumb({ className, ...props }) {
3562
- return /* @__PURE__ */ jsxRuntime.jsx(
3563
- "nav",
3564
- {
3565
- "aria-label": "breadcrumb",
3566
- "data-slot": "breadcrumb",
3567
- className: cn(className),
3568
- ...props
3569
- }
3570
- );
3571
- }
3572
- function BreadcrumbList({ className, ...props }) {
3573
- return /* @__PURE__ */ jsxRuntime.jsx(
3574
- "ol",
3575
- {
3576
- "data-slot": "breadcrumb-list",
3577
- className: cn(
3578
- "flex flex-wrap items-center gap-1.5 text-sm wrap-break-word text-muted-foreground",
3579
- className
3580
- ),
3581
- ...props
3582
- }
3583
- );
3584
- }
3585
- function BreadcrumbItem({ className, ...props }) {
3586
- return /* @__PURE__ */ jsxRuntime.jsx(
3587
- "li",
3588
- {
3589
- "data-slot": "breadcrumb-item",
3590
- className: cn("inline-flex items-center gap-1", className),
3591
- ...props
3592
- }
3593
- );
3594
- }
3595
- function BreadcrumbLink({
3596
- className,
3597
- render,
3598
- ...props
3599
- }) {
3600
- return useRender.useRender({
3601
- defaultTagName: "a",
3602
- props: mergeProps.mergeProps(
3603
- {
3604
- className: cn("transition-colors hover:text-foreground", className)
3605
- },
3606
- props
3607
- ),
3608
- render,
3609
- state: {
3610
- slot: "breadcrumb-link"
3611
- }
3612
- });
3613
- }
3614
- function BreadcrumbPage({ className, ...props }) {
3615
- return /* @__PURE__ */ jsxRuntime.jsx(
3616
- "span",
3617
- {
3618
- "data-slot": "breadcrumb-page",
3619
- role: "link",
3620
- "aria-disabled": "true",
3621
- "aria-current": "page",
3622
- className: cn("font-normal text-foreground", className),
3623
- ...props
3624
- }
3625
- );
3626
- }
3627
- function BreadcrumbSeparator({
3628
- children,
3629
- className,
3630
- ...props
3631
- }) {
3632
- return /* @__PURE__ */ jsxRuntime.jsx(
3633
- "li",
3634
- {
3635
- "data-slot": "breadcrumb-separator",
3636
- role: "presentation",
3637
- "aria-hidden": "true",
3638
- className: cn("[&>svg]:size-3.5", className),
3639
- ...props,
3640
- children: children ?? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronRightIcon, {})
3641
- }
3642
- );
3643
- }
3644
3879
  function PageBreadcrumb({ items }) {
3645
3880
  return /* @__PURE__ */ jsxRuntime.jsx(Breadcrumb, { children: /* @__PURE__ */ jsxRuntime.jsx(BreadcrumbList, { className: "text-xs gap-1", children: items.map((item, i) => {
3646
3881
  const isLast = i === items.length - 1;
@@ -3686,6 +3921,7 @@ function PageTopBar({
3686
3921
  right,
3687
3922
  variant = "ghost",
3688
3923
  height = "var(--designkit-toolbar-height)",
3924
+ minHeight,
3689
3925
  className,
3690
3926
  style,
3691
3927
  children,
@@ -3696,11 +3932,11 @@ function PageTopBar({
3696
3932
  "div",
3697
3933
  {
3698
3934
  className: cn(
3699
- "flex shrink-0 items-center justify-between gap-4 px-(--designkit-page-padding-x)",
3700
- variant === "default" && "border-b",
3935
+ "flex shrink-0 items-center justify-between gap-4 overflow-visible px-(--designkit-page-padding-x)",
3936
+ variant === "default" && "border-b border-border",
3701
3937
  className
3702
3938
  ),
3703
- style: { height, ...style },
3939
+ style: { height, minHeight, ...style },
3704
3940
  children: [
3705
3941
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-2 text-xs text-muted-foreground", children: [
3706
3942
  trigger,
@@ -3827,9 +4063,22 @@ function buildDarkTonalTokens(primaryHue, primaryChroma) {
3827
4063
  function tokenMapToCss(tokens) {
3828
4064
  return Object.entries(tokens).map(([key, value]) => ` ${key}: ${value};`).join("\n");
3829
4065
  }
3830
- function useStyleInjector() {
4066
+ function getScopedTarget(scopeSelector) {
4067
+ if (scopeSelector === ":root") return document.documentElement;
4068
+ return document.querySelector(scopeSelector);
4069
+ }
4070
+ function getDarkSelector(scopeSelector) {
4071
+ if (scopeSelector === ":root") return ".dark";
4072
+ return `${scopeSelector}.dark, .dark ${scopeSelector}`;
4073
+ }
4074
+ function getLayoutSelector(scopeSelector, layoutClassName) {
4075
+ if (scopeSelector === ":root") return `.${layoutClassName}`;
4076
+ return `${scopeSelector}.${layoutClassName}, ${scopeSelector} .${layoutClassName}`;
4077
+ }
4078
+ function useStyleInjector(options = {}) {
3831
4079
  const g = useThemeStore((s) => s.global);
3832
4080
  const ov = useThemeStore((s) => s.overrides);
4081
+ const scopeSelector = options.scope?.trim() || ":root";
3833
4082
  React2.useEffect(() => {
3834
4083
  let el = document.getElementById(STYLE_ID);
3835
4084
  if (!el) {
@@ -3837,10 +4086,10 @@ function useStyleInjector() {
3837
4086
  el.id = STYLE_ID;
3838
4087
  document.head.appendChild(el);
3839
4088
  }
3840
- const rootBlock = `:root {
4089
+ const rootBlock = `${scopeSelector} {
3841
4090
  ${tokenMapToCss(buildTokenMap(g))}
3842
4091
  }`;
3843
- const darkTonalBlock = `.dark {
4092
+ const darkTonalBlock = `${getDarkSelector(scopeSelector)} {
3844
4093
  ${tokenMapToCss(buildDarkTonalTokens(g.primaryHue, g.primaryChroma))}
3845
4094
  }`;
3846
4095
  const tmplBlocks = Object.entries(ov).map(([id, o]) => {
@@ -3856,22 +4105,27 @@ ${tokenMapToCss(buildDarkTonalTokens(g.primaryHue, g.primaryChroma))}
3856
4105
  toolbarHeight: o.toolbarHeight
3857
4106
  });
3858
4107
  const layoutClassName = `layout-${id}`;
3859
- return `.${layoutClassName} {
4108
+ return `${getLayoutSelector(scopeSelector, layoutClassName)} {
3860
4109
  ${tokenMapToCss(tokens)}
3861
4110
  }`;
3862
4111
  }).filter(Boolean);
3863
- el.textContent = [rootBlock, darkTonalBlock, ...tmplBlocks].join("\n\n");
3864
- }, [g, ov]);
4112
+ const layerBody = [rootBlock, darkTonalBlock, ...tmplBlocks].join("\n\n");
4113
+ el.textContent = `@layer designkit {
4114
+ ${layerBody}
4115
+ }`;
4116
+ }, [g, ov, scopeSelector]);
3865
4117
  React2.useEffect(() => {
3866
- document.documentElement.classList.toggle("dark", g.darkMode);
3867
- }, [g.darkMode]);
4118
+ getScopedTarget(scopeSelector)?.classList.toggle("dark", g.darkMode);
4119
+ }, [g.darkMode, scopeSelector]);
3868
4120
  React2.useEffect(() => {
4121
+ const target = getScopedTarget(scopeSelector);
4122
+ if (!target) return;
3869
4123
  if (g.density === "default") {
3870
- document.documentElement.removeAttribute("data-designkit-density");
4124
+ target.removeAttribute("data-designkit-density");
3871
4125
  return;
3872
4126
  }
3873
- document.documentElement.dataset.designkitDensity = g.density;
3874
- }, [g.density]);
4127
+ target.dataset.designkitDensity = g.density;
4128
+ }, [g.density, scopeSelector]);
3875
4129
  }
3876
4130
  function buildTemplateTheme(g, ov = {}) {
3877
4131
  const tokens = buildTokenMap({
@@ -3898,6 +4152,13 @@ exports.AvatarGroup = AvatarGroup;
3898
4152
  exports.AvatarGroupCount = AvatarGroupCount;
3899
4153
  exports.AvatarImage = AvatarImage;
3900
4154
  exports.Badge = Badge;
4155
+ exports.Breadcrumb = Breadcrumb;
4156
+ exports.BreadcrumbEllipsis = BreadcrumbEllipsis;
4157
+ exports.BreadcrumbItem = BreadcrumbItem;
4158
+ exports.BreadcrumbLink = BreadcrumbLink;
4159
+ exports.BreadcrumbList = BreadcrumbList;
4160
+ exports.BreadcrumbPage = BreadcrumbPage;
4161
+ exports.BreadcrumbSeparator = BreadcrumbSeparator;
3901
4162
  exports.BrowseBodyTemplate = BrowseBodyTemplate;
3902
4163
  exports.Button = Button;
3903
4164
  exports.Card = Card;