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