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

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
@@ -133,7 +133,11 @@ function AvatarGroupCount({ className, ...props }) {
133
133
  );
134
134
  }
135
135
  var badgeVariants = classVarianceAuthority.cva(
136
- "group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-all focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",
136
+ // transition-all is replaced with an explicit list to prevent width animation
137
+ // on font swap (e.g. font-display:swap triggering a layout recalc). Inside
138
+ // overflow:clip containers like DataGrid cells, an animated width change makes
139
+ // the pill appear to grow from a clipped state. Color transitions are preserved.
140
+ "group/badge inline-flex h-5 w-fit shrink-0 items-center justify-center gap-1 overflow-hidden rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium whitespace-nowrap transition-[color,background-color,border-color,box-shadow,opacity] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:pointer-events-none [&>svg]:size-3!",
137
141
  {
138
142
  variants: {
139
143
  variant: {
@@ -1752,6 +1756,9 @@ function SidebarMenuSubButton({
1752
1756
  }
1753
1757
  });
1754
1758
  }
1759
+ function useSidebarOptional() {
1760
+ return React2__namespace.useContext(SidebarContext);
1761
+ }
1755
1762
  function EmptyState({ icon: Icon, title, description, action, className }) {
1756
1763
  return /* @__PURE__ */ jsxRuntime.jsxs(
1757
1764
  "div",
@@ -2006,10 +2013,10 @@ function Header({ children, className }) {
2006
2013
  {
2007
2014
  "data-slot": "data-page-header",
2008
2015
  className: cn(
2009
- "shrink-0 px-[var(--dk-page-padding-x)] pt-[var(--dk-page-padding-y)]",
2016
+ "shrink-0 px-[var(--designkit-page-padding-x)] pt-[var(--designkit-page-padding-y)]",
2010
2017
  className
2011
2018
  ),
2012
- children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-between gap-[var(--dk-panel-gap)]", children })
2019
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-wrap items-center justify-between gap-[var(--designkit-panel-gap)]", children })
2013
2020
  }
2014
2021
  );
2015
2022
  }
@@ -2027,7 +2034,7 @@ function Actions({ children, className }) {
2027
2034
  "div",
2028
2035
  {
2029
2036
  "data-slot": "data-page-actions",
2030
- className: cn("flex shrink-0 items-center gap-[calc(var(--dk-panel-gap)*0.5)]", className),
2037
+ className: cn("flex shrink-0 items-center gap-[calc(var(--designkit-panel-gap)*0.5)]", className),
2031
2038
  children
2032
2039
  }
2033
2040
  );
@@ -2065,8 +2072,8 @@ function Content({ children, className, padding = "default" }) {
2065
2072
  "data-slot": "data-page-content",
2066
2073
  className: cn(
2067
2074
  "min-h-0 flex-1 overflow-auto",
2068
- padding === "default" && "px-[var(--dk-page-padding-x)] pb-[var(--dk-page-padding-y)] pt-[var(--dk-page-padding-y)]",
2069
- padding === "compact" && "p-[calc(var(--dk-page-padding-y)*0.875)]",
2075
+ padding === "default" && "px-[var(--designkit-page-padding-x)] pb-[var(--designkit-page-padding-y)] pt-[var(--designkit-page-padding-y)]",
2076
+ padding === "compact" && "p-[calc(var(--designkit-page-padding-y)*0.875)]",
2070
2077
  padding === "none" && "p-0",
2071
2078
  className
2072
2079
  ),
@@ -2103,7 +2110,7 @@ function GroupHeader({
2103
2110
  {
2104
2111
  "data-slot": "data-page-group-header",
2105
2112
  className: cn(
2106
- "flex items-start justify-between gap-4 px-0 pb-[calc(var(--dk-panel-gap)*0.75)]",
2113
+ "flex items-start justify-between gap-4 px-0 pb-[calc(var(--designkit-panel-gap)*0.75)]",
2107
2114
  className
2108
2115
  ),
2109
2116
  children: [
@@ -2124,7 +2131,7 @@ function GroupToolbar({ children, className }) {
2124
2131
  {
2125
2132
  "data-slot": "data-page-group-toolbar",
2126
2133
  className: cn(
2127
- "flex min-h-[var(--dk-toolbar-height)] items-center justify-between gap-[calc(var(--dk-panel-gap)*0.75)] pb-[calc(var(--dk-panel-gap)*0.75)]",
2134
+ "flex min-h-[var(--designkit-toolbar-height)] items-center justify-between gap-[calc(var(--designkit-panel-gap)*0.75)] pb-[calc(var(--designkit-panel-gap)*0.75)]",
2128
2135
  className
2129
2136
  ),
2130
2137
  children
@@ -2205,15 +2212,224 @@ function DashboardBodyTemplate({
2205
2212
  }) {
2206
2213
  return /* @__PURE__ */ jsxRuntime.jsxs(DataPage, { className: cn("layout-dashboard", className), style: theme, children: [
2207
2214
  topBar && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: topBar }),
2208
- (title || toolbar) && /* @__PURE__ */ jsxRuntime.jsx("header", { className: "shrink-0 border-b px-(--dk-page-padding-x) py-(--dk-page-padding-y)", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3", children: [
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: [
2209
2216
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
2210
2217
  title && /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "text-sm font-semibold truncate", children: title }),
2211
2218
  description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 text-xs text-muted-foreground", children: description })
2212
2219
  ] }),
2213
2220
  toolbar && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-2 shrink-0", children: toolbar })
2214
2221
  ] }) }),
2215
- variableBar && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 flex flex-wrap items-center gap-2 px-(--dk-page-padding-x) py-1.5", children: variableBar }),
2216
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("flex-1 min-h-0 overflow-auto px-[calc(var(--dk-page-padding-x)-0.5rem)] pt-0 pb-(--dk-page-padding-y)", contentClassName), children })
2222
+ 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 })
2224
+ ] });
2225
+ }
2226
+ function clamp(value, min, max) {
2227
+ return Math.min(Math.max(value, min), max);
2228
+ }
2229
+ function ResizeHandle({
2230
+ axis,
2231
+ onPointerDown,
2232
+ className
2233
+ }) {
2234
+ return /* @__PURE__ */ jsxRuntime.jsxs(
2235
+ "div",
2236
+ {
2237
+ role: "separator",
2238
+ "aria-orientation": axis === "x" ? "vertical" : "horizontal",
2239
+ className: cn(
2240
+ "group/resize relative z-10 shrink-0 touch-none bg-transparent",
2241
+ axis === "x" ? "-mx-1 w-2 cursor-col-resize" : "-my-1 h-2 cursor-row-resize",
2242
+ className
2243
+ ),
2244
+ onPointerDown,
2245
+ children: [
2246
+ /* @__PURE__ */ jsxRuntime.jsx(
2247
+ "div",
2248
+ {
2249
+ className: cn(
2250
+ "absolute bg-border transition-colors group-hover/resize:bg-muted-foreground/40",
2251
+ axis === "x" ? "left-1/2 top-0 h-full w-px -translate-x-1/2" : "left-0 top-1/2 h-px w-full -translate-y-1/2"
2252
+ )
2253
+ }
2254
+ ),
2255
+ /* @__PURE__ */ jsxRuntime.jsx(
2256
+ "div",
2257
+ {
2258
+ className: cn(
2259
+ "absolute rounded-full bg-muted-foreground/35 opacity-0 transition-opacity group-hover/resize:opacity-100",
2260
+ axis === "x" ? "left-1/2 top-1/2 h-10 w-1 -translate-x-1/2 -translate-y-1/2" : "left-1/2 top-1/2 h-1 w-10 -translate-x-1/2 -translate-y-1/2"
2261
+ )
2262
+ }
2263
+ )
2264
+ ]
2265
+ }
2266
+ );
2267
+ }
2268
+ function WorkbenchBodyTemplate({
2269
+ theme,
2270
+ className,
2271
+ contentClassName,
2272
+ title,
2273
+ description,
2274
+ topBar,
2275
+ headerRight,
2276
+ toolbar,
2277
+ actions,
2278
+ leftPane,
2279
+ mainPane,
2280
+ rightPane,
2281
+ bottomPane,
2282
+ children,
2283
+ resizable = true,
2284
+ leftPaneCollapsed,
2285
+ rightPaneCollapsed,
2286
+ bottomPaneCollapsed,
2287
+ leftPaneWidth = 260,
2288
+ rightPaneWidth = 320,
2289
+ bottomPaneHeight = 240,
2290
+ minLeftPaneWidth = 180,
2291
+ maxLeftPaneWidth = 440,
2292
+ minRightPaneWidth = 240,
2293
+ maxRightPaneWidth = 520,
2294
+ minBottomPaneHeight = 120,
2295
+ maxBottomPaneHeight = 420,
2296
+ leftPaneClassName,
2297
+ mainPaneClassName,
2298
+ rightPaneClassName,
2299
+ bottomPaneClassName,
2300
+ leftPaneLabel = "Panel",
2301
+ rightPaneLabel = "Inspector"
2302
+ }) {
2303
+ const [leftWidth, setLeftWidth] = React2.useState(leftPaneWidth);
2304
+ const [rightWidth, setRightWidth] = React2.useState(rightPaneWidth);
2305
+ 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]);
2326
+ const headerRightContent = headerRight ?? toolbar;
2327
+ const showHeader = title || description || headerRightContent || actions;
2328
+ const showLeftPane = leftPane && !leftPaneCollapsed;
2329
+ const showRightPane = rightPane && !rightPaneCollapsed;
2330
+ const showBottomPane = bottomPane && !bottomPaneCollapsed;
2331
+ return /* @__PURE__ */ jsxRuntime.jsxs(DataPage, { className: cn("layout-workbench", className), style: theme, children: [
2332
+ 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: [
2334
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
2335
+ title && /* @__PURE__ */ jsxRuntime.jsx("h1", { className: "truncate text-sm font-semibold", children: title }),
2336
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 truncate text-xs text-muted-foreground", children: description })
2337
+ ] }),
2338
+ (headerRightContent || actions) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [
2339
+ headerRightContent,
2340
+ actions
2341
+ ] })
2342
+ ] }) }),
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: [
2344
+ showLeftPane && /* @__PURE__ */ jsxRuntime.jsxs(Sheet, { children: [
2345
+ /* @__PURE__ */ jsxRuntime.jsx(SheetTrigger, { render: /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "outline", size: "sm" }), children: leftPaneLabel }),
2346
+ /* @__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 }) }),
2348
+ /* @__PURE__ */ jsxRuntime.jsx(ScrollArea, { className: "flex-1", children: leftPane })
2349
+ ] })
2350
+ ] }),
2351
+ showRightPane && /* @__PURE__ */ jsxRuntime.jsxs(Sheet, { children: [
2352
+ /* @__PURE__ */ jsxRuntime.jsx(SheetTrigger, { render: /* @__PURE__ */ jsxRuntime.jsx(Button, { variant: "outline", size: "sm" }), children: rightPaneLabel }),
2353
+ /* @__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 }) }),
2355
+ /* @__PURE__ */ jsxRuntime.jsx(ScrollArea, { className: "flex-1", children: rightPane })
2356
+ ] })
2357
+ ] })
2358
+ ] }),
2359
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex min-h-0 flex-1 overflow-hidden", contentClassName), children: [
2360
+ showLeftPane && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2361
+ /* @__PURE__ */ jsxRuntime.jsx(
2362
+ "aside",
2363
+ {
2364
+ className: cn("hidden min-h-0 shrink-0 overflow-hidden border-r bg-card/45 md:flex md:flex-col", leftPaneClassName),
2365
+ style: { width: leftWidth },
2366
+ children: leftPane
2367
+ }
2368
+ ),
2369
+ resizable && /* @__PURE__ */ jsxRuntime.jsx(
2370
+ ResizeHandle,
2371
+ {
2372
+ axis: "x",
2373
+ className: "hidden md:flex",
2374
+ onPointerDown: (event) => {
2375
+ const start = leftWidth;
2376
+ startResize(event, "x", (delta) => {
2377
+ setLeftWidth(clamp(start + delta, minLeftPaneWidth, maxLeftPaneWidth));
2378
+ });
2379
+ }
2380
+ }
2381
+ )
2382
+ ] }),
2383
+ /* @__PURE__ */ jsxRuntime.jsxs("main", { className: cn("flex min-w-0 flex-1 flex-col overflow-hidden", mainPaneClassName), children: [
2384
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-hidden", children: mainPane ?? children }),
2385
+ showBottomPane && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2386
+ resizable && /* @__PURE__ */ jsxRuntime.jsx(
2387
+ ResizeHandle,
2388
+ {
2389
+ axis: "y",
2390
+ className: "hidden md:flex",
2391
+ onPointerDown: (event) => {
2392
+ const start = bottomHeight;
2393
+ startResize(event, "y", (delta) => {
2394
+ setBottomHeight(clamp(start - delta, minBottomPaneHeight, maxBottomPaneHeight));
2395
+ });
2396
+ }
2397
+ }
2398
+ ),
2399
+ /* @__PURE__ */ jsxRuntime.jsx(
2400
+ "section",
2401
+ {
2402
+ className: cn("min-h-0 shrink-0 overflow-auto border-t bg-card/40 md:overflow-hidden", bottomPaneClassName),
2403
+ style: { height: bottomHeight },
2404
+ children: bottomPane
2405
+ }
2406
+ )
2407
+ ] })
2408
+ ] }),
2409
+ showRightPane && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2410
+ resizable && /* @__PURE__ */ jsxRuntime.jsx(
2411
+ ResizeHandle,
2412
+ {
2413
+ axis: "x",
2414
+ className: "hidden md:flex",
2415
+ onPointerDown: (event) => {
2416
+ const start = rightWidth;
2417
+ startResize(event, "x", (delta) => {
2418
+ setRightWidth(clamp(start - delta, minRightPaneWidth, maxRightPaneWidth));
2419
+ });
2420
+ }
2421
+ }
2422
+ ),
2423
+ /* @__PURE__ */ jsxRuntime.jsx(
2424
+ "aside",
2425
+ {
2426
+ className: cn("hidden min-h-0 shrink-0 overflow-hidden border-l bg-card/45 md:flex md:flex-col", rightPaneClassName),
2427
+ style: { width: rightWidth },
2428
+ children: rightPane
2429
+ }
2430
+ )
2431
+ ] })
2432
+ ] })
2217
2433
  ] });
2218
2434
  }
2219
2435
  function DataBodyTab(_props) {
@@ -2262,13 +2478,13 @@ function GroupWrapper({
2262
2478
  children
2263
2479
  }) {
2264
2480
  if (variant === "card") {
2265
- return /* @__PURE__ */ jsxRuntime.jsx(Card, { children: /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: "p-(--dk-panel-gap)", children }) });
2481
+ return /* @__PURE__ */ jsxRuntime.jsx(Card, { children: /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: "p-(--designkit-panel-gap)", children }) });
2266
2482
  }
2267
2483
  if (variant === "bordered") {
2268
2484
  if (layout === "inline") {
2269
2485
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "overflow-hidden rounded-(--radius) border divide-y", children });
2270
2486
  }
2271
- return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-(--radius) border p-(--dk-panel-gap)", children });
2487
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-(--radius) border p-(--designkit-panel-gap)", children });
2272
2488
  }
2273
2489
  return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children });
2274
2490
  }
@@ -2288,12 +2504,13 @@ function renderGroupProps(props) {
2288
2504
  description,
2289
2505
  actions,
2290
2506
  danger,
2507
+ className,
2291
2508
  children
2292
2509
  } = props;
2293
2510
  const variant = variantProp ?? layoutDefaultVariant[layout];
2294
2511
  if (layout === "split") {
2295
2512
  const panes = React2.Children.toArray(children);
2296
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "py-(--dk-panel-gap)", children: [
2513
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("py-(--designkit-panel-gap)", className), children: [
2297
2514
  (title || description || actions) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-3 flex items-start justify-between", children: [
2298
2515
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2299
2516
  title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: cn("text-sm font-semibold", danger && "text-destructive"), children: title }),
@@ -2301,21 +2518,21 @@ function renderGroupProps(props) {
2301
2518
  ] }),
2302
2519
  actions && /* @__PURE__ */ jsxRuntime.jsx("div", { children: actions })
2303
2520
  ] }),
2304
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid min-h-104 gap-(--dk-panel-gap) lg:grid-cols-[20rem_minmax(0,1fr)]", children: panes.map((pane, i) => /* @__PURE__ */ jsxRuntime.jsx(GroupWrapper, { layout, variant, children: pane }, i)) })
2521
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid min-h-104 gap-(--designkit-panel-gap) lg:grid-cols-[20rem_minmax(0,1fr)]", children: panes.map((pane, i) => /* @__PURE__ */ jsxRuntime.jsx(GroupWrapper, { layout, variant, children: pane }, i)) })
2305
2522
  ] });
2306
2523
  }
2307
2524
  if (layout === "horizontal") {
2308
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-3 gap-[calc(var(--dk-panel-gap)*2)] py-(--dk-panel-gap)", children: [
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: [
2309
2526
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2310
2527
  /* @__PURE__ */ jsxRuntime.jsx("p", { className: cn("text-sm font-medium", danger && "text-destructive"), children: title }),
2311
2528
  description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: description }),
2312
2529
  actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-2", children: actions })
2313
2530
  ] }),
2314
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-2", children: /* @__PURE__ */ jsxRuntime.jsx(GroupWrapper, { layout, variant, children }) })
2531
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sm:col-span-2", children: /* @__PURE__ */ jsxRuntime.jsx(GroupWrapper, { layout, variant, children }) })
2315
2532
  ] });
2316
2533
  }
2317
2534
  if (layout === "inline") {
2318
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "py-(--dk-panel-gap)", children: [
2535
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("py-(--designkit-panel-gap)", className), children: [
2319
2536
  (title || description) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-2 flex items-start justify-between", children: [
2320
2537
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2321
2538
  title && /* @__PURE__ */ jsxRuntime.jsx("h2", { className: cn("text-sm font-semibold", danger && "text-destructive"), children: title }),
@@ -2326,7 +2543,7 @@ function renderGroupProps(props) {
2326
2543
  /* @__PURE__ */ jsxRuntime.jsx(GroupWrapper, { layout, variant, children })
2327
2544
  ] });
2328
2545
  }
2329
- return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "py-(--dk-panel-gap)", children: [
2546
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("py-(--designkit-panel-gap)", className), children: [
2330
2547
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between", children: [
2331
2548
  /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
2332
2549
  /* @__PURE__ */ jsxRuntime.jsx("h2", { className: cn("text-sm font-semibold", danger && "text-destructive"), children: title }),
@@ -2341,8 +2558,8 @@ function DataBodyField({ label, description, children }) {
2341
2558
  return /* @__PURE__ */ jsxRuntime.jsxs(
2342
2559
  "div",
2343
2560
  {
2344
- className: "grid items-start gap-x-4 px-4 py-3",
2345
- style: { gridTemplateColumns: "var(--dk-form-label-w, 11rem) 1fr" },
2561
+ className: "flex flex-col gap-y-1 px-4 py-3 sm:grid sm:items-start sm:gap-x-4 sm:gap-y-0",
2562
+ style: { gridTemplateColumns: "var(--designkit-form-label-w, 11rem) 1fr" },
2346
2563
  children: [
2347
2564
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pt-0.5", children: [
2348
2565
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-muted-foreground", children: label }),
@@ -2357,8 +2574,8 @@ function DataBodyRow({ label, description, required, children }) {
2357
2574
  return /* @__PURE__ */ jsxRuntime.jsxs(
2358
2575
  "div",
2359
2576
  {
2360
- className: "grid items-start gap-x-4 px-4 py-3",
2361
- style: { gridTemplateColumns: "var(--dk-form-label-w, 11rem) 1fr" },
2577
+ className: "flex flex-col gap-y-1.5 px-4 py-3 sm:grid sm:items-start sm:gap-x-4 sm:gap-y-0",
2578
+ style: { gridTemplateColumns: "var(--designkit-form-label-w, 11rem) 1fr" },
2362
2579
  children: [
2363
2580
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "pt-1", children: [
2364
2581
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-1", children: [
@@ -2418,7 +2635,7 @@ function Root2({
2418
2635
  /* @__PURE__ */ jsxRuntime.jsx(DataPage.TitleBlock, { title, description }),
2419
2636
  /* @__PURE__ */ jsxRuntime.jsx(DataPage.Actions, { children: actions })
2420
2637
  ] }),
2421
- summaryEl && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 border-b px-(--dk-page-padding-x) py-(--dk-panel-gap)", children: summaryEl.props.children }),
2638
+ summaryEl && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 border-b px-(--designkit-page-padding-x) py-(--designkit-panel-gap)", children: summaryEl.props.children }),
2422
2639
  /* @__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 }) }) })
2423
2640
  ] });
2424
2641
  }
@@ -2430,8 +2647,8 @@ function Root2({
2430
2647
  /* @__PURE__ */ jsxRuntime.jsx(DataPage.TitleBlock, { title, description }),
2431
2648
  /* @__PURE__ */ jsxRuntime.jsx(DataPage.Actions, { children: actions })
2432
2649
  ] }),
2433
- summaryEl && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 border-b px-(--dk-page-padding-x) py-(--dk-panel-gap)", children: summaryEl.props.children }),
2434
- /* @__PURE__ */ jsxRuntime.jsx(DataPage.Content, { className: contentClassName, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid gap-(--dk-panel-gap) lg:grid-cols-[16rem_minmax(0,1fr)]", children: [
2650
+ summaryEl && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 border-b px-(--designkit-page-padding-x) py-(--designkit-panel-gap)", children: summaryEl.props.children }),
2651
+ /* @__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: [
2435
2652
  /* @__PURE__ */ jsxRuntime.jsx("nav", { className: "space-y-1", children: sections.map((section) => {
2436
2653
  const active = section.props.id === activeSection?.props.id;
2437
2654
  return /* @__PURE__ */ jsxRuntime.jsxs(
@@ -2453,7 +2670,7 @@ function Root2({
2453
2670
  section.props.id
2454
2671
  );
2455
2672
  }) }),
2456
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 space-y-(--dk-panel-gap)", children: renderGroups(activeSection?.props.children) })
2673
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0 space-y-(--designkit-panel-gap)", children: renderGroups(activeSection?.props.children) })
2457
2674
  ] }) })
2458
2675
  ] });
2459
2676
  }
@@ -2464,7 +2681,7 @@ function Root2({
2464
2681
  /* @__PURE__ */ jsxRuntime.jsx(DataPage.TitleBlock, { title, description }),
2465
2682
  /* @__PURE__ */ jsxRuntime.jsx(DataPage.Actions, { children: actions })
2466
2683
  ] }),
2467
- summaryEl && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 border-b px-(--dk-page-padding-x) py-(--dk-panel-gap)", children: summaryEl.props.children }),
2684
+ summaryEl && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 border-b px-(--designkit-page-padding-x) py-(--designkit-panel-gap)", children: summaryEl.props.children }),
2468
2685
  hasTabs && /* @__PURE__ */ jsxRuntime.jsx(DataPage.Tabs, { children: tabs.map((tab) => /* @__PURE__ */ jsxRuntime.jsx(
2469
2686
  DataPage.Tab,
2470
2687
  {
@@ -2529,7 +2746,7 @@ function BrowseBodyTemplate({
2529
2746
  /* @__PURE__ */ jsxRuntime.jsx(DataPage.Actions, { children: actions })
2530
2747
  ] }),
2531
2748
  /* @__PURE__ */ jsxRuntime.jsxs(DataPage.Content, { padding: "none", className: "flex flex-col overflow-hidden", children: [
2532
- (toolbar || isNarrow) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex shrink-0 items-center gap-2 border-b px-(--dk-page-padding-x) py-2", 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: [
2533
2750
  isNarrow && /* @__PURE__ */ jsxRuntime.jsxs(Sheet, { children: [
2534
2751
  /* @__PURE__ */ jsxRuntime.jsxs(
2535
2752
  SheetTrigger,
@@ -2554,16 +2771,16 @@ function BrowseBodyTemplate({
2554
2771
  {
2555
2772
  className: "shrink-0 overflow-hidden border-r",
2556
2773
  style: { width: sidebarWidth },
2557
- children: /* @__PURE__ */ jsxRuntime.jsx(ScrollArea, { className: "h-full", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "px-(--dk-page-padding-x) py-(--dk-page-padding-y)", children: sidebar }) })
2774
+ 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 }) })
2558
2775
  }
2559
2776
  ),
2560
2777
  /* @__PURE__ */ jsxRuntime.jsx(
2561
2778
  "div",
2562
2779
  {
2563
2780
  className: cn(
2564
- "min-w-0 flex-1 overflow-hidden px-(--dk-page-padding-x) py-(--dk-page-padding-y)",
2565
- "[&_.dg-shell]:h-full [&_.dg-table-stack]:flex-1 [&_.dg-table-stack]:min-h-0",
2566
- "[&_.dg-card-container]:flex-1 [&_.dg-card-container]:min-h-0 [&_.dg-card-container]:overflow-auto",
2781
+ "min-w-0 flex-1 overflow-hidden px-(--designkit-page-padding-x) py-(--designkit-page-padding-y)",
2782
+ "[&_.gridkit-shell]:h-full [&_.gridkit-table-stack]:flex-1 [&_.gridkit-table-stack]:min-h-0",
2783
+ "[&_.gridkit-frame]:flex-1 [&_.gridkit-frame]:min-h-0 [&_.gridkit-frame]:overflow-auto",
2567
2784
  contentClassName
2568
2785
  ),
2569
2786
  children
@@ -2614,8 +2831,8 @@ function DetailBodySection({
2614
2831
  {
2615
2832
  className: cn(
2616
2833
  "min-h-0",
2617
- surface === "card" && "rounded-(--radius) border bg-card p-(--dk-panel-gap) text-card-foreground shadow-sm",
2618
- surface === "bordered" && "rounded-(--radius) border p-(--dk-panel-gap)",
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)",
2619
2836
  className
2620
2837
  ),
2621
2838
  children: [
@@ -2660,7 +2877,7 @@ function DetailBodyTemplateRoot({
2660
2877
  const hasTabs = tabs.length > 0;
2661
2878
  const [activeTab, setActiveTab] = React2.useState(() => tabs[0]?.props.id ?? "");
2662
2879
  const selectedTab = tabs.find((tab) => tab.props.id === activeTab) ?? tabs[0];
2663
- const summarySlot = summary ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 rounded-(--radius) border bg-card p-(--dk-panel-gap) text-card-foreground", children: summary }) : null;
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;
2664
2881
  const mediaSlot = media ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("min-h-0 overflow-hidden rounded-(--radius) border bg-card", mediaClassName), children: media }) : null;
2665
2882
  const leadGridClass = variant === "media" ? "xl:grid-cols-[minmax(0,1.35fr)_minmax(18rem,0.65fr)]" : "xl:grid-cols-2";
2666
2883
  const defaultHeader = eyebrow || title || description || status || actions ? /* @__PURE__ */ jsxRuntime.jsx(
@@ -2673,7 +2890,7 @@ function DetailBodyTemplateRoot({
2673
2890
  actions
2674
2891
  }
2675
2892
  ) : null;
2676
- const defaultLead = media || summary ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("grid gap-(--dk-panel-gap)", leadGridClass), children: [
2893
+ const defaultLead = media || summary ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("grid gap-(--designkit-panel-gap)", leadGridClass), children: [
2677
2894
  mediaSlot,
2678
2895
  summarySlot
2679
2896
  ] }) : null;
@@ -2689,8 +2906,8 @@ function DetailBodyTemplateRoot({
2689
2906
  },
2690
2907
  tab.props.id
2691
2908
  )) }),
2692
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pt-(--dk-panel-gap)", children: selectedTab?.props.children })
2693
- ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-(--dk-panel-gap)", children: renderChildren(children) });
2909
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "pt-(--designkit-panel-gap)", children: selectedTab?.props.children })
2910
+ ] }) : /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-(--designkit-panel-gap)", children: renderChildren(children) });
2694
2911
  const leadSlot = lead ?? defaultLead;
2695
2912
  const outsideAsideSlot = variant === "full" ? null : aside;
2696
2913
  const insideAsideSlot = variant === "full" ? aside : null;
@@ -2698,19 +2915,19 @@ function DetailBodyTemplateRoot({
2698
2915
  const hasFullLeadArea = Boolean(leadSlot || insideAsideSlot);
2699
2916
  const layout = {
2700
2917
  media: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
2701
- leadSlot && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-(--dk-panel-gap)", children: leadSlot }),
2918
+ leadSlot && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mb-(--designkit-panel-gap)", children: leadSlot }),
2702
2919
  body
2703
2920
  ] }),
2704
2921
  record: /* @__PURE__ */ jsxRuntime.jsxs(
2705
2922
  "div",
2706
2923
  {
2707
2924
  className: cn(
2708
- "grid gap-(--dk-panel-gap)",
2925
+ "grid gap-(--designkit-panel-gap)",
2709
2926
  hasRecordInspector && "xl:grid-cols-[minmax(28rem,1fr)_minmax(14rem,18rem)]"
2710
2927
  ),
2711
2928
  children: [
2712
2929
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0", children: body }),
2713
- hasRecordInspector && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-(--dk-panel-gap)", children: leadSlot })
2930
+ hasRecordInspector && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-(--designkit-panel-gap)", children: leadSlot })
2714
2931
  ]
2715
2932
  }
2716
2933
  ),
@@ -2719,12 +2936,12 @@ function DetailBodyTemplateRoot({
2719
2936
  "div",
2720
2937
  {
2721
2938
  className: cn(
2722
- "mb-(--dk-panel-gap) grid gap-(--dk-panel-gap)",
2939
+ "mb-(--designkit-panel-gap) grid gap-(--designkit-panel-gap)",
2723
2940
  insideAsideSlot && "xl:grid-cols-[minmax(0,1fr)_minmax(18rem,24rem)]"
2724
2941
  ),
2725
2942
  children: [
2726
- leadSlot && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-(--dk-panel-gap)", children: leadSlot }),
2727
- insideAsideSlot && /* @__PURE__ */ jsxRuntime.jsx("div", { className: cn("min-h-0 rounded-(--radius) border bg-card p-(--dk-panel-gap)", asideClassName), children: insideAsideSlot })
2943
+ 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 })
2728
2945
  ]
2729
2946
  }
2730
2947
  ),
@@ -2746,7 +2963,7 @@ function DetailBodyTemplateRoot({
2746
2963
  "main",
2747
2964
  {
2748
2965
  className: cn(
2749
- "min-h-0 overflow-auto px-(--dk-page-padding-x) py-(--dk-page-padding-y)",
2966
+ "min-h-0 overflow-auto px-(--designkit-page-padding-x) py-(--designkit-page-padding-y)",
2750
2967
  contentClassName
2751
2968
  ),
2752
2969
  children: layout[variant]
@@ -2756,7 +2973,7 @@ function DetailBodyTemplateRoot({
2756
2973
  "div",
2757
2974
  {
2758
2975
  className: cn(
2759
- "px-(--dk-page-padding-x) py-(--dk-page-padding-y)",
2976
+ "px-(--designkit-page-padding-x) py-(--designkit-page-padding-y)",
2760
2977
  stickyAside && "lg:sticky lg:top-0"
2761
2978
  ),
2762
2979
  children: outsideAsideSlot
@@ -2772,6 +2989,102 @@ var DetailBodyTemplate = Object.assign(DetailBodyTemplateRoot, {
2772
2989
  Tab: DetailBodyTab,
2773
2990
  Section: DetailBodySection
2774
2991
  });
2992
+ function ListDetailBodyTemplate({
2993
+ theme,
2994
+ className,
2995
+ topBar,
2996
+ list,
2997
+ detail,
2998
+ emptyDetail,
2999
+ listWidth = 320,
3000
+ listClassName,
3001
+ detailClassName,
3002
+ onBack,
3003
+ backLabel = "Back"
3004
+ }) {
3005
+ return /* @__PURE__ */ jsxRuntime.jsxs(
3006
+ DataPage,
3007
+ {
3008
+ className: cn("layout-list-detail", className),
3009
+ style: { "--ld-list-width": `${listWidth}px`, ...theme },
3010
+ children: [
3011
+ topBar && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: topBar }),
3012
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-h-0 flex-1 overflow-hidden", children: [
3013
+ /* @__PURE__ */ jsxRuntime.jsx(
3014
+ "aside",
3015
+ {
3016
+ className: cn(
3017
+ "min-h-0 shrink-0 overflow-hidden border-r",
3018
+ 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
+ listClassName
3020
+ ),
3021
+ children: list
3022
+ }
3023
+ ),
3024
+ /* @__PURE__ */ jsxRuntime.jsxs(
3025
+ "main",
3026
+ {
3027
+ className: cn(
3028
+ "flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden",
3029
+ !detail && "hidden lg:flex",
3030
+ detailClassName
3031
+ ),
3032
+ 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: [
3034
+ /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronLeft, { className: "h-4 w-4" }),
3035
+ backLabel
3036
+ ] }) }),
3037
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-h-0 flex-1 overflow-auto", children: detail ?? emptyDetail })
3038
+ ]
3039
+ }
3040
+ )
3041
+ ] })
3042
+ ]
3043
+ }
3044
+ );
3045
+ }
3046
+ function PanelTemplateSection({
3047
+ title,
3048
+ description,
3049
+ actions,
3050
+ className,
3051
+ children
3052
+ }) {
3053
+ return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: cn("space-y-2.5", className), children: [
3054
+ (title || description || actions) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-start justify-between gap-2", children: [
3055
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "min-w-0", children: [
3056
+ title && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[10px] font-semibold uppercase tracking-wider text-muted-foreground", children: title }),
3057
+ description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-0.5 text-xs text-muted-foreground", children: description })
3058
+ ] }),
3059
+ actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: actions })
3060
+ ] }),
3061
+ children
3062
+ ] });
3063
+ }
3064
+ function PanelTemplateRoot({
3065
+ title,
3066
+ eyebrow,
3067
+ actions,
3068
+ footer,
3069
+ children,
3070
+ className,
3071
+ bodyClassName
3072
+ }) {
3073
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("flex h-full flex-col overflow-hidden", className), children: [
3074
+ (title || eyebrow || actions) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "shrink-0 px-4 py-3", children: [
3075
+ eyebrow && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mb-0.5 text-[10px] font-medium uppercase tracking-wider text-muted-foreground", children: eyebrow }),
3076
+ /* @__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 }),
3078
+ actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex shrink-0 items-center gap-1", children: actions })
3079
+ ] })
3080
+ ] }),
3081
+ /* @__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 })
3083
+ ] });
3084
+ }
3085
+ var PanelTemplate = Object.assign(PanelTemplateRoot, {
3086
+ Section: PanelTemplateSection
3087
+ });
2775
3088
  function FormWizardBodyTemplate({
2776
3089
  theme,
2777
3090
  title,
@@ -2793,7 +3106,7 @@ function FormWizardBodyTemplate({
2793
3106
  return /* @__PURE__ */ jsxRuntime.jsxs(DataPage, { className: "layout-form-wizard", style: theme, children: [
2794
3107
  topBar && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0", children: topBar }),
2795
3108
  /* @__PURE__ */ jsxRuntime.jsx(DataPage.Header, { children: /* @__PURE__ */ jsxRuntime.jsx(DataPage.TitleBlock, { title }) }),
2796
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "shrink-0 px-(--dk-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: [
3109
+ /* @__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: [
2797
3110
  i > 0 && /* @__PURE__ */ jsxRuntime.jsx(
2798
3111
  "div",
2799
3112
  {
@@ -2826,7 +3139,7 @@ function FormWizardBodyTemplate({
2826
3139
  )
2827
3140
  ] })
2828
3141
  ] }, step.key)) }) }),
2829
- /* @__PURE__ */ jsxRuntime.jsx(DataPage.Content, { children: current && (variant === "card" ? /* @__PURE__ */ jsxRuntime.jsx(Card, { children: /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: "p-(--dk-panel-gap)", children: /* @__PURE__ */ jsxRuntime.jsxs("form", { id: current.key, onSubmit: handleStepSubmit, children: [
3142
+ /* @__PURE__ */ jsxRuntime.jsx(DataPage.Content, { children: current && (variant === "card" ? /* @__PURE__ */ jsxRuntime.jsx(Card, { children: /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: "p-(--designkit-panel-gap)", children: /* @__PURE__ */ jsxRuntime.jsxs("form", { id: current.key, onSubmit: handleStepSubmit, children: [
2830
3143
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mb-5", children: [
2831
3144
  /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "text-sm font-semibold", children: current.title }),
2832
3145
  current.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-xs text-muted-foreground", children: current.description })
@@ -2884,8 +3197,8 @@ function TypographyBodyTemplate({ theme, breadcrumb }) {
2884
3197
  description: "Global type scale preview for shell, template, and grid content"
2885
3198
  }
2886
3199
  ) }),
2887
- /* @__PURE__ */ jsxRuntime.jsxs(DataPage.Content, { className: "grid gap-[var(--dk-panel-gap)] lg:grid-cols-[1fr_22rem]", children: [
2888
- /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-[var(--dk-panel-gap)]", children: [
3200
+ /* @__PURE__ */ jsxRuntime.jsxs(DataPage.Content, { className: "grid gap-[var(--designkit-panel-gap)] lg:grid-cols-[1fr_22rem]", children: [
3201
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "space-y-[var(--designkit-panel-gap)]", children: [
2889
3202
  /* @__PURE__ */ jsxRuntime.jsxs(Card, { className: "rounded-lg border border-border ring-0", children: [
2890
3203
  /* @__PURE__ */ jsxRuntime.jsx(CardHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(CardTitle, { children: "Type Scale" }) }),
2891
3204
  /* @__PURE__ */ jsxRuntime.jsx(CardContent, { className: "space-y-4", children: scaleRows.map((row) => /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[8rem_1fr] items-baseline gap-4", children: [
@@ -3076,7 +3389,7 @@ function ColorsBodyTemplate({ theme, breadcrumb }) {
3076
3389
  description: "Design token color palette and derivation rules for the active theme"
3077
3390
  }
3078
3391
  ) }),
3079
- /* @__PURE__ */ jsxRuntime.jsxs(DataPage.Content, { className: "space-y-[var(--dk-panel-gap)]", children: [
3392
+ /* @__PURE__ */ jsxRuntime.jsxs(DataPage.Content, { className: "space-y-[var(--designkit-panel-gap)]", children: [
3080
3393
  /* @__PURE__ */ jsxRuntime.jsxs(Card, { className: "rounded-lg border border-border ring-0", children: [
3081
3394
  /* @__PURE__ */ jsxRuntime.jsx(CardHeader, { children: /* @__PURE__ */ jsxRuntime.jsx(CardTitle, { children: "Primary \u2014 controlled by hue & chroma" }) }),
3082
3395
  /* @__PURE__ */ jsxRuntime.jsxs(CardContent, { className: "space-y-3", children: [
@@ -3363,26 +3676,36 @@ function buildTopBar(opts) {
3363
3676
  }
3364
3677
  );
3365
3678
  }
3679
+ function AutoSidebarTrigger() {
3680
+ const ctx = useSidebarOptional();
3681
+ if (!ctx?.isMobile) return null;
3682
+ return /* @__PURE__ */ jsxRuntime.jsx(SidebarTrigger, { className: "-ml-1 shrink-0" });
3683
+ }
3366
3684
  function PageTopBar({
3367
3685
  left,
3368
3686
  right,
3369
3687
  variant = "ghost",
3370
- height = "var(--dk-toolbar-height)",
3688
+ height = "var(--designkit-toolbar-height)",
3371
3689
  className,
3372
3690
  style,
3373
- children
3691
+ children,
3692
+ sidebarTrigger
3374
3693
  }) {
3694
+ const trigger = sidebarTrigger === false ? null : sidebarTrigger !== void 0 ? sidebarTrigger : /* @__PURE__ */ jsxRuntime.jsx(AutoSidebarTrigger, {});
3375
3695
  return /* @__PURE__ */ jsxRuntime.jsxs(
3376
3696
  "div",
3377
3697
  {
3378
3698
  className: cn(
3379
- "flex shrink-0 items-center justify-between gap-4 px-(--dk-page-padding-x)",
3699
+ "flex shrink-0 items-center justify-between gap-4 px-(--designkit-page-padding-x)",
3380
3700
  variant === "default" && "border-b",
3381
3701
  className
3382
3702
  ),
3383
3703
  style: { height, ...style },
3384
3704
  children: [
3385
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex min-w-0 items-center text-xs text-muted-foreground", children: normalizeBreadcrumb(left ?? children) }),
3705
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 items-center gap-2 text-xs text-muted-foreground", children: [
3706
+ trigger,
3707
+ normalizeBreadcrumb(left ?? children)
3708
+ ] }),
3386
3709
  right && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex shrink-0 items-center gap-2", children: right })
3387
3710
  ]
3388
3711
  }
@@ -3422,8 +3745,7 @@ function buildTokenMap({
3422
3745
  }[density];
3423
3746
  const c = (factor) => (primaryChroma * factor).toFixed(4);
3424
3747
  return {
3425
- "--dk-radius": `${radius}rem`,
3426
- "--dg-radius": `${radius}rem`,
3748
+ "--designkit-radius": `${radius}rem`,
3427
3749
  "--radius": `${radius}rem`,
3428
3750
  "--radius-sm": `${(radius * 0.6).toFixed(4)}rem`,
3429
3751
  "--radius-md": `${(radius * 0.8).toFixed(4)}rem`,
@@ -3431,12 +3753,9 @@ function buildTokenMap({
3431
3753
  "--radius-xl": `${(radius * 1.4).toFixed(4)}rem`,
3432
3754
  "--radius-2xl": `${(radius * 1.8).toFixed(4)}rem`,
3433
3755
  // primary — fully controlled
3434
- "--dk-primary": `oklch(0.52 ${primaryChroma} ${primaryHue})`,
3435
- "--dk-primary-foreground": "oklch(0.985 0 0)",
3436
- "--dk-ring": `oklch(0.50 ${primaryChroma} ${primaryHue})`,
3437
- "--dg-primary": `oklch(0.52 ${primaryChroma} ${primaryHue})`,
3438
- "--dg-primary-foreground": "oklch(0.985 0 0)",
3439
- "--dg-ring": `oklch(0.50 ${primaryChroma} ${primaryHue})`,
3756
+ "--designkit-primary": `oklch(0.52 ${primaryChroma} ${primaryHue})`,
3757
+ "--designkit-primary-foreground": "oklch(0.985 0 0)",
3758
+ "--designkit-ring": `oklch(0.50 ${primaryChroma} ${primaryHue})`,
3440
3759
  "--primary": `oklch(0.52 ${primaryChroma} ${primaryHue})`,
3441
3760
  "--primary-foreground": "oklch(0.985 0 0)",
3442
3761
  "--color-primary": `oklch(0.52 ${primaryChroma} ${primaryHue})`,
@@ -3456,37 +3775,35 @@ function buildTokenMap({
3456
3775
  "--color-muted": `oklch(0.970 ${c(0.02)} ${primaryHue})`,
3457
3776
  "--color-secondary": `oklch(0.970 ${c(0.02)} ${primaryHue})`,
3458
3777
  "--color-accent": `oklch(0.970 ${c(0.04)} ${primaryHue})`,
3459
- "--dk-border": `oklch(0.922 ${c(0.04)} ${primaryHue})`,
3460
- "--dk-input": `oklch(0.922 ${c(0.04)} ${primaryHue})`,
3461
- "--dk-muted": `oklch(0.970 ${c(0.02)} ${primaryHue})`,
3462
- "--dg-border": `oklch(0.922 ${c(0.04)} ${primaryHue})`,
3463
- "--dg-muted": `oklch(0.970 ${c(0.02)} ${primaryHue})`,
3464
- "--dk-font-scale": fontScale,
3465
- "--dk-line-height": lineHeight,
3466
- "--dk-density": densityValues.density,
3467
- "--dk-page-padding-y": pagePaddingY ?? densityValues.pagePaddingY,
3468
- "--dk-panel-gap": panelGap ?? densityValues.panelGap,
3469
- "--dk-toolbar-height": toolbarHeight ?? densityValues.toolbarHeight,
3470
- "--dk-text-xs": `calc(0.75rem * ${fontScale})`,
3471
- "--dk-text-sm": `calc(0.875rem * ${fontScale})`,
3472
- "--dk-text-base": `calc(1rem * ${fontScale})`,
3473
- "--dk-text-lg": `calc(1.125rem * ${fontScale})`,
3474
- "--dk-text-xl": `calc(1.25rem * ${fontScale})`,
3475
- "--dk-leading-xs": `calc(1rem * ${lineHeight})`,
3476
- "--dk-leading-sm": `calc(1.25rem * ${lineHeight})`,
3477
- "--dk-leading-base": `calc(1.5rem * ${lineHeight})`,
3478
- "--dk-leading-lg": `calc(1.75rem * ${lineHeight})`,
3479
- "--dk-leading-xl": `calc(1.75rem * ${lineHeight})`,
3480
- "--text-xs": "var(--dk-text-xs)",
3481
- "--text-sm": "var(--dk-text-sm)",
3482
- "--text-base": "var(--dk-text-base)",
3483
- "--text-lg": "var(--dk-text-lg)",
3484
- "--text-xl": "var(--dk-text-xl)",
3485
- "--text-xs--line-height": "var(--dk-leading-xs)",
3486
- "--text-sm--line-height": "var(--dk-leading-sm)",
3487
- "--text-base--line-height": "var(--dk-leading-base)",
3488
- "--text-lg--line-height": "var(--dk-leading-lg)",
3489
- "--text-xl--line-height": "var(--dk-leading-xl)"
3778
+ "--designkit-border": `oklch(0.922 ${c(0.04)} ${primaryHue})`,
3779
+ "--designkit-input": `oklch(0.922 ${c(0.04)} ${primaryHue})`,
3780
+ "--designkit-muted": `oklch(0.970 ${c(0.02)} ${primaryHue})`,
3781
+ "--designkit-font-scale": fontScale,
3782
+ "--designkit-line-height": lineHeight,
3783
+ "--designkit-density": densityValues.density,
3784
+ "--designkit-page-padding-y": pagePaddingY ?? densityValues.pagePaddingY,
3785
+ "--designkit-panel-gap": panelGap ?? densityValues.panelGap,
3786
+ "--designkit-toolbar-height": toolbarHeight ?? densityValues.toolbarHeight,
3787
+ "--designkit-text-xs": `calc(0.75rem * ${fontScale})`,
3788
+ "--designkit-text-sm": `calc(0.875rem * ${fontScale})`,
3789
+ "--designkit-text-base": `calc(1rem * ${fontScale})`,
3790
+ "--designkit-text-lg": `calc(1.125rem * ${fontScale})`,
3791
+ "--designkit-text-xl": `calc(1.25rem * ${fontScale})`,
3792
+ "--designkit-leading-xs": `calc(1rem * ${lineHeight})`,
3793
+ "--designkit-leading-sm": `calc(1.25rem * ${lineHeight})`,
3794
+ "--designkit-leading-base": `calc(1.5rem * ${lineHeight})`,
3795
+ "--designkit-leading-lg": `calc(1.75rem * ${lineHeight})`,
3796
+ "--designkit-leading-xl": `calc(1.75rem * ${lineHeight})`,
3797
+ "--text-xs": "var(--designkit-text-xs)",
3798
+ "--text-sm": "var(--designkit-text-sm)",
3799
+ "--text-base": "var(--designkit-text-base)",
3800
+ "--text-lg": "var(--designkit-text-lg)",
3801
+ "--text-xl": "var(--designkit-text-xl)",
3802
+ "--text-xs--line-height": "var(--designkit-leading-xs)",
3803
+ "--text-sm--line-height": "var(--designkit-leading-sm)",
3804
+ "--text-base--line-height": "var(--designkit-leading-base)",
3805
+ "--text-lg--line-height": "var(--designkit-leading-lg)",
3806
+ "--text-xl--line-height": "var(--designkit-leading-xl)"
3490
3807
  };
3491
3808
  }
3492
3809
  function buildDarkTonalTokens(primaryHue, primaryChroma) {
@@ -3502,11 +3819,9 @@ function buildDarkTonalTokens(primaryHue, primaryChroma) {
3502
3819
  "--color-muted": `oklch(0.269 ${c(0.03)} ${primaryHue})`,
3503
3820
  "--color-secondary": `oklch(0.269 ${c(0.02)} ${primaryHue})`,
3504
3821
  "--color-accent": `oklch(0.320 ${c(0.04)} ${primaryHue})`,
3505
- "--dk-border": `oklch(0.32 ${c(0.06)} ${primaryHue})`,
3506
- "--dk-input": `oklch(0.35 ${c(0.06)} ${primaryHue})`,
3507
- "--dk-muted": `oklch(0.269 ${c(0.03)} ${primaryHue})`,
3508
- "--dg-border": `oklch(0.32 ${c(0.06)} ${primaryHue})`,
3509
- "--dg-muted": `oklch(0.269 ${c(0.03)} ${primaryHue})`
3822
+ "--designkit-border": `oklch(0.32 ${c(0.06)} ${primaryHue})`,
3823
+ "--designkit-input": `oklch(0.35 ${c(0.06)} ${primaryHue})`,
3824
+ "--designkit-muted": `oklch(0.269 ${c(0.03)} ${primaryHue})`
3510
3825
  };
3511
3826
  }
3512
3827
  function tokenMapToCss(tokens) {
@@ -3552,14 +3867,14 @@ ${tokenMapToCss(tokens)}
3552
3867
  }, [g.darkMode]);
3553
3868
  React2.useEffect(() => {
3554
3869
  if (g.density === "default") {
3555
- document.documentElement.removeAttribute("data-dk-density");
3870
+ document.documentElement.removeAttribute("data-designkit-density");
3556
3871
  return;
3557
3872
  }
3558
- document.documentElement.dataset.dkDensity = g.density;
3873
+ document.documentElement.dataset.designkitDensity = g.density;
3559
3874
  }, [g.density]);
3560
3875
  }
3561
3876
  function buildTemplateTheme(g, ov = {}) {
3562
- return buildTokenMap({
3877
+ const tokens = buildTokenMap({
3563
3878
  radius: ov.radius ?? g.radius,
3564
3879
  primaryHue: g.primaryHue,
3565
3880
  primaryChroma: ov.primaryChroma ?? g.primaryChroma,
@@ -3570,6 +3885,10 @@ function buildTemplateTheme(g, ov = {}) {
3570
3885
  fontScale: g.fontScale ?? 1,
3571
3886
  lineHeight: g.lineHeight ?? 1
3572
3887
  });
3888
+ if (g.darkMode) {
3889
+ Object.assign(tokens, buildDarkTonalTokens(g.primaryHue, ov.primaryChroma ?? g.primaryChroma));
3890
+ }
3891
+ return tokens;
3573
3892
  }
3574
3893
 
3575
3894
  exports.Avatar = Avatar;
@@ -3614,6 +3933,7 @@ exports.EmptyState = EmptyState;
3614
3933
  exports.FormWizardBodyTemplate = FormWizardBodyTemplate;
3615
3934
  exports.Input = Input;
3616
3935
  exports.Label = Label;
3936
+ exports.ListDetailBodyTemplate = ListDetailBodyTemplate;
3617
3937
  exports.LoginBodyTemplate = LoginBodyTemplate;
3618
3938
  exports.NavigationMenu = NavigationMenu;
3619
3939
  exports.NavigationMenuContent = NavigationMenuContent;
@@ -3625,6 +3945,7 @@ exports.NavigationMenuPositioner = NavigationMenuPositioner;
3625
3945
  exports.NavigationMenuTrigger = NavigationMenuTrigger;
3626
3946
  exports.PageBreadcrumb = PageBreadcrumb;
3627
3947
  exports.PageTopBar = PageTopBar;
3948
+ exports.PanelTemplate = PanelTemplate;
3628
3949
  exports.Popover = Popover;
3629
3950
  exports.PopoverContent = PopoverContent;
3630
3951
  exports.PopoverDescription = PopoverDescription;
@@ -3695,6 +4016,7 @@ exports.TooltipContent = TooltipContent;
3695
4016
  exports.TooltipProvider = TooltipProvider;
3696
4017
  exports.TooltipTrigger = TooltipTrigger;
3697
4018
  exports.TypographyBodyTemplate = TypographyBodyTemplate;
4019
+ exports.WorkbenchBodyTemplate = WorkbenchBodyTemplate;
3698
4020
  exports.badgeVariants = badgeVariants;
3699
4021
  exports.buildTemplateTheme = buildTemplateTheme;
3700
4022
  exports.buildTopBar = buildTopBar;
@@ -3704,6 +4026,7 @@ exports.navigationMenuTriggerStyle = navigationMenuTriggerStyle;
3704
4026
  exports.tabsListVariants = tabsListVariants;
3705
4027
  exports.useIsMobile = useIsMobile;
3706
4028
  exports.useSidebar = useSidebar;
4029
+ exports.useSidebarOptional = useSidebarOptional;
3707
4030
  exports.useStyleInjector = useStyleInjector;
3708
4031
  exports.useThemeStore = useThemeStore;
3709
4032
  //# sourceMappingURL=index.cjs.map