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