@deadragdoll/reactnu 0.1.52 → 0.1.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/MainMenu/MainMenu.types.d.ts +3 -0
- package/dist/components/Window/Window.d.ts +8 -2
- package/dist/components/Window/internals/WindowTitleBar.d.ts +3 -2
- package/dist/index.cjs +88 -43
- package/dist/index.js +184 -139
- package/dist/styles.css +40 -2
- package/dist/windowing/WindowBar.d.ts +2 -0
- package/dist/windowing/windowing.types.d.ts +10 -0
- package/docs/MainMenu.md +1 -0
- package/docs/NuWindowProvider.md +72 -0
- package/docs/Window.md +19 -0
- package/docs/WindowBar.md +3 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -375,6 +375,7 @@ function MainMenuList({
|
|
|
375
375
|
) : isChecked ? /* @__PURE__ */ jsx3(NuGlyph, { name: "check-mark" }) : null
|
|
376
376
|
}
|
|
377
377
|
) : null,
|
|
378
|
+
isPopupRow ? /* @__PURE__ */ jsx3("span", { "aria-hidden": "true", className: "nu-main-menu__icon", children: item.icon }) : null,
|
|
378
379
|
/* @__PURE__ */ jsx3("span", { className: "nu-main-menu__label", children: renderItemLabel(item) }),
|
|
379
380
|
isPopupRow ? /* @__PURE__ */ jsx3("span", { className: "nu-main-menu__shortcut", children: resolveItemShortcut(item) }) : null,
|
|
380
381
|
isPopupRow ? /* @__PURE__ */ jsx3("span", { className: "nu-main-menu__submenu-arrow", children: hasChildren ? "\u25B6" : "" }) : null
|
|
@@ -1654,6 +1655,7 @@ function MdiWindowPickerDialog({
|
|
|
1654
1655
|
items: resolvedWindows.map((windowEntry, index) => ({
|
|
1655
1656
|
id: windowEntry.id,
|
|
1656
1657
|
name: {
|
|
1658
|
+
icon: windowEntry.icon,
|
|
1657
1659
|
text: `${index + 1} ${formatPickerWindowTitle(windows, windowEntry)}`
|
|
1658
1660
|
},
|
|
1659
1661
|
selected: windowEntry.id === activeWindowId
|
|
@@ -1769,6 +1771,7 @@ function buildStandardMdiMenuItems(bridge) {
|
|
|
1769
1771
|
...mdiWindows.map((windowEntry, index) => ({
|
|
1770
1772
|
checked: windowEntry.id === activeWindowId,
|
|
1771
1773
|
id: `mdi.window.${windowEntry.id}`,
|
|
1774
|
+
icon: windowEntry.icon,
|
|
1772
1775
|
onSelect: () => bridge?.activateWindow(windowEntry.id),
|
|
1773
1776
|
text: `${index + 1} ${windowEntry.title}`
|
|
1774
1777
|
})),
|
|
@@ -2006,6 +2009,7 @@ function WindowTitleButton({
|
|
|
2006
2009
|
import { jsx as jsx20, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
2007
2010
|
function WindowTitleBar({
|
|
2008
2011
|
draggable,
|
|
2012
|
+
icon,
|
|
2009
2013
|
onDragStart,
|
|
2010
2014
|
titleButtons,
|
|
2011
2015
|
title
|
|
@@ -2021,6 +2025,7 @@ function WindowTitleBar({
|
|
|
2021
2025
|
"--nu-window-title-controls-width": controlsWidth
|
|
2022
2026
|
},
|
|
2023
2027
|
children: [
|
|
2028
|
+
/* @__PURE__ */ jsx20("span", { "aria-hidden": true, className: "nu-window__title-icon", children: icon }),
|
|
2024
2029
|
/* @__PURE__ */ jsx20("span", { className: "nu-window__title", children: renderMnemonicText(title) }),
|
|
2025
2030
|
titleButtons.length > 0 ? /* @__PURE__ */ jsx20("span", { className: "nu-window__title-controls", children: titleButtons.map((button, index) => /* @__PURE__ */ jsx20(
|
|
2026
2031
|
WindowTitleButton,
|
|
@@ -2121,16 +2126,23 @@ function getWindowGeometry(node) {
|
|
|
2121
2126
|
width: rect.width
|
|
2122
2127
|
};
|
|
2123
2128
|
}
|
|
2129
|
+
function getValidAspectRatio(value) {
|
|
2130
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : void 0;
|
|
2131
|
+
}
|
|
2124
2132
|
function WindowInner({
|
|
2125
2133
|
active = true,
|
|
2134
|
+
aspectRatio,
|
|
2126
2135
|
bodyClassName,
|
|
2127
2136
|
border = "single",
|
|
2128
2137
|
children,
|
|
2129
2138
|
className,
|
|
2130
2139
|
closeable = true,
|
|
2131
2140
|
draggable,
|
|
2141
|
+
icon,
|
|
2132
2142
|
maximizable,
|
|
2133
2143
|
maximized = false,
|
|
2144
|
+
minHeight,
|
|
2145
|
+
minWidth,
|
|
2134
2146
|
minimizable,
|
|
2135
2147
|
minimized = false,
|
|
2136
2148
|
mode = "dialog",
|
|
@@ -2159,7 +2171,8 @@ function WindowInner({
|
|
|
2159
2171
|
const menuState = useMainMenuState();
|
|
2160
2172
|
const windowManager = useContext5(NuWindowContext);
|
|
2161
2173
|
const isDraggable = draggable ?? mode === "window";
|
|
2162
|
-
const
|
|
2174
|
+
const resolvedAspectRatio = getValidAspectRatio(aspectRatio);
|
|
2175
|
+
const isMaximizable = resolvedAspectRatio === void 0 && (maximizable ?? mode === "window");
|
|
2163
2176
|
const isMinimizable = minimizable ?? mode === "window";
|
|
2164
2177
|
const isResizable = resizable ?? mode === "window";
|
|
2165
2178
|
const mdiBridge = useMemo6(
|
|
@@ -2309,22 +2322,16 @@ function WindowInner({
|
|
|
2309
2322
|
} = getWindowGeometry(windowNode);
|
|
2310
2323
|
const layerBounds = getWindowLayerBounds(windowNode);
|
|
2311
2324
|
const computedStyle = window.getComputedStyle(windowNode);
|
|
2312
|
-
const
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
);
|
|
2316
|
-
const
|
|
2317
|
-
|
|
2318
|
-
|
|
2319
|
-
|
|
2320
|
-
|
|
2321
|
-
|
|
2322
|
-
(layerBounds?.width ?? window.innerWidth) - left
|
|
2323
|
-
);
|
|
2324
|
-
const maxHeight = Math.max(
|
|
2325
|
-
minHeight,
|
|
2326
|
-
(layerBounds?.height ?? window.innerHeight) - top
|
|
2327
|
-
);
|
|
2325
|
+
const minWidth2 = Number.parseFloat(computedStyle.minWidth || "0") || 0;
|
|
2326
|
+
const minHeight2 = Number.parseFloat(computedStyle.minHeight || "0") || 0;
|
|
2327
|
+
const availableWidth = (layerBounds?.width ?? window.innerWidth) - left;
|
|
2328
|
+
const availableHeight = (layerBounds?.height ?? window.innerHeight) - top;
|
|
2329
|
+
const ratioMinWidth = resolvedAspectRatio ? Math.max(minWidth2, minHeight2 * resolvedAspectRatio) : minWidth2;
|
|
2330
|
+
const maxWidth = resolvedAspectRatio ? Math.max(
|
|
2331
|
+
ratioMinWidth,
|
|
2332
|
+
Math.min(availableWidth, availableHeight * resolvedAspectRatio)
|
|
2333
|
+
) : Math.max(minWidth2, availableWidth);
|
|
2334
|
+
const maxHeight = resolvedAspectRatio ? maxWidth / resolvedAspectRatio : Math.max(minHeight2, availableHeight);
|
|
2328
2335
|
const hadTransform = computedStyle.transform !== "none";
|
|
2329
2336
|
let didResize = false;
|
|
2330
2337
|
if (hadTransform) {
|
|
@@ -2349,14 +2356,16 @@ function WindowInner({
|
|
|
2349
2356
|
resizeFrameRef.current = window.requestAnimationFrame(flushResize);
|
|
2350
2357
|
}
|
|
2351
2358
|
function handlePointerMove(moveEvent) {
|
|
2352
|
-
const
|
|
2359
|
+
const widthDelta = moveEvent.clientX - startClientX;
|
|
2360
|
+
const heightDelta = moveEvent.clientY - startClientY;
|
|
2361
|
+
const nextWidth = resolvedAspectRatio ? Math.min(
|
|
2353
2362
|
maxWidth,
|
|
2354
|
-
Math.max(
|
|
2355
|
-
|
|
2356
|
-
|
|
2357
|
-
|
|
2358
|
-
|
|
2359
|
-
);
|
|
2363
|
+
Math.max(
|
|
2364
|
+
ratioMinWidth,
|
|
2365
|
+
startWidth + (Math.abs(widthDelta) >= Math.abs(heightDelta * resolvedAspectRatio) ? widthDelta : heightDelta * resolvedAspectRatio)
|
|
2366
|
+
)
|
|
2367
|
+
) : Math.min(maxWidth, Math.max(minWidth2, startWidth + widthDelta));
|
|
2368
|
+
const nextHeight = resolvedAspectRatio ? nextWidth / resolvedAspectRatio : Math.min(maxHeight, Math.max(minHeight2, startHeight + heightDelta));
|
|
2360
2369
|
didResize = true;
|
|
2361
2370
|
scheduleResize({
|
|
2362
2371
|
height: nextHeight,
|
|
@@ -2396,7 +2405,11 @@ function WindowInner({
|
|
|
2396
2405
|
"data-mode": mode,
|
|
2397
2406
|
onPointerDownCapture: handleRootPointerDownCapture,
|
|
2398
2407
|
ref: windowRef,
|
|
2399
|
-
style
|
|
2408
|
+
style: {
|
|
2409
|
+
...style,
|
|
2410
|
+
minHeight: minHeight ?? style?.minHeight ?? 120,
|
|
2411
|
+
minWidth: minWidth ?? style?.minWidth ?? 240
|
|
2412
|
+
},
|
|
2400
2413
|
children: [
|
|
2401
2414
|
/* @__PURE__ */ jsx21(
|
|
2402
2415
|
"span",
|
|
@@ -2417,6 +2430,7 @@ function WindowInner({
|
|
|
2417
2430
|
WindowTitleBar,
|
|
2418
2431
|
{
|
|
2419
2432
|
draggable: isDraggable,
|
|
2433
|
+
icon,
|
|
2420
2434
|
onDragStart: handleTitlePointerDown,
|
|
2421
2435
|
title,
|
|
2422
2436
|
titleButtons: resolvedTitleButtons
|
|
@@ -2543,7 +2557,7 @@ function AppBarItem(props) {
|
|
|
2543
2557
|
}
|
|
2544
2558
|
|
|
2545
2559
|
// src/windowing/WindowBar.tsx
|
|
2546
|
-
import { jsx as jsx23 } from "react/jsx-runtime";
|
|
2560
|
+
import { jsx as jsx23, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
2547
2561
|
function buildWindowBarGroups(items) {
|
|
2548
2562
|
const groups = [];
|
|
2549
2563
|
const groupsByDomain = /* @__PURE__ */ new Map();
|
|
@@ -2552,6 +2566,7 @@ function buildWindowBarGroups(items) {
|
|
|
2552
2566
|
groups.push({
|
|
2553
2567
|
active: Boolean(item.active),
|
|
2554
2568
|
id: item.id,
|
|
2569
|
+
icon: item.icon,
|
|
2555
2570
|
items: [item],
|
|
2556
2571
|
label: item.title
|
|
2557
2572
|
});
|
|
@@ -2563,6 +2578,7 @@ function buildWindowBarGroups(items) {
|
|
|
2563
2578
|
active: Boolean(item.active),
|
|
2564
2579
|
domain: item.domain,
|
|
2565
2580
|
id: item.id,
|
|
2581
|
+
icon: item.icon,
|
|
2566
2582
|
items: [item],
|
|
2567
2583
|
label: item.title
|
|
2568
2584
|
};
|
|
@@ -2572,10 +2588,16 @@ function buildWindowBarGroups(items) {
|
|
|
2572
2588
|
}
|
|
2573
2589
|
existingGroup.items.push(item);
|
|
2574
2590
|
existingGroup.active = existingGroup.active || Boolean(item.active);
|
|
2591
|
+
if (item.active) {
|
|
2592
|
+
existingGroup.icon = item.icon;
|
|
2593
|
+
}
|
|
2575
2594
|
existingGroup.label = `${item.domain} (${existingGroup.items.length})`;
|
|
2576
2595
|
});
|
|
2577
2596
|
return groups;
|
|
2578
2597
|
}
|
|
2598
|
+
function getGroupIcon(group) {
|
|
2599
|
+
return group.items.find((item) => item.active)?.icon ?? group.icon;
|
|
2600
|
+
}
|
|
2579
2601
|
function WindowBar({ items, onActivateWindow }) {
|
|
2580
2602
|
const windowManager = useContext6(NuWindowContext);
|
|
2581
2603
|
const groups = buildWindowBarGroups(items);
|
|
@@ -2616,17 +2638,23 @@ function WindowBar({ items, onActivateWindow }) {
|
|
|
2616
2638
|
};
|
|
2617
2639
|
windowManager.openDialog(dialogDefinition);
|
|
2618
2640
|
}
|
|
2619
|
-
return /* @__PURE__ */ jsx23("div", { className: "nu-window-bar", role: "group", "aria-label": "Open windows", children: groups.map((group) =>
|
|
2620
|
-
|
|
2621
|
-
|
|
2622
|
-
|
|
2623
|
-
|
|
2624
|
-
|
|
2625
|
-
|
|
2626
|
-
|
|
2627
|
-
|
|
2628
|
-
|
|
2629
|
-
|
|
2641
|
+
return /* @__PURE__ */ jsx23("div", { className: "nu-window-bar", role: "group", "aria-label": "Open windows", children: groups.map((group) => {
|
|
2642
|
+
const icon = getGroupIcon(group);
|
|
2643
|
+
return /* @__PURE__ */ jsxs13(
|
|
2644
|
+
AppBarItem,
|
|
2645
|
+
{
|
|
2646
|
+
active: group.active,
|
|
2647
|
+
className: "nu-window-bar__item",
|
|
2648
|
+
interactive: true,
|
|
2649
|
+
onClick: () => activateGroup(group),
|
|
2650
|
+
children: [
|
|
2651
|
+
icon ? /* @__PURE__ */ jsx23("span", { "aria-hidden": true, className: "nu-window-bar__icon", children: icon }) : null,
|
|
2652
|
+
group.label
|
|
2653
|
+
]
|
|
2654
|
+
},
|
|
2655
|
+
group.id
|
|
2656
|
+
);
|
|
2657
|
+
}) });
|
|
2630
2658
|
}
|
|
2631
2659
|
|
|
2632
2660
|
// src/windowing/dialogHelpers.tsx
|
|
@@ -2639,7 +2667,7 @@ import {
|
|
|
2639
2667
|
useRef as useRef6,
|
|
2640
2668
|
useState as useState7
|
|
2641
2669
|
} from "react";
|
|
2642
|
-
import { jsx as jsx24, jsxs as
|
|
2670
|
+
import { jsx as jsx24, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
2643
2671
|
function TextField({
|
|
2644
2672
|
className,
|
|
2645
2673
|
debounceMs = 0,
|
|
@@ -2690,7 +2718,7 @@ function TextField({
|
|
|
2690
2718
|
}
|
|
2691
2719
|
onChange?.(event);
|
|
2692
2720
|
}
|
|
2693
|
-
return /* @__PURE__ */
|
|
2721
|
+
return /* @__PURE__ */ jsxs14(
|
|
2694
2722
|
"label",
|
|
2695
2723
|
{
|
|
2696
2724
|
className: cx("nu-text-field", slotClassNames?.root, className),
|
|
@@ -2705,7 +2733,7 @@ function TextField({
|
|
|
2705
2733
|
children: renderMnemonicText(label)
|
|
2706
2734
|
}
|
|
2707
2735
|
),
|
|
2708
|
-
/* @__PURE__ */
|
|
2736
|
+
/* @__PURE__ */ jsxs14(
|
|
2709
2737
|
"span",
|
|
2710
2738
|
{
|
|
2711
2739
|
className: cx("nu-text-field__slot", slotClassNames?.slot),
|
|
@@ -2797,7 +2825,7 @@ function NuView({
|
|
|
2797
2825
|
}
|
|
2798
2826
|
|
|
2799
2827
|
// src/windowing/dialogHelpers.tsx
|
|
2800
|
-
import { jsx as jsx26, jsxs as
|
|
2828
|
+
import { jsx as jsx26, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
2801
2829
|
function getPresetButtons(preset) {
|
|
2802
2830
|
switch (preset) {
|
|
2803
2831
|
case "ok-cancel":
|
|
@@ -2900,7 +2928,7 @@ function MessageBoxDialogContent({
|
|
|
2900
2928
|
const bodyStyle = kind === "error" ? {
|
|
2901
2929
|
background: "var(--nu-color-button-danger)"
|
|
2902
2930
|
} : void 0;
|
|
2903
|
-
return /* @__PURE__ */ jsx26(NuView, { padding: "cell", style: bodyStyle, children: /* @__PURE__ */
|
|
2931
|
+
return /* @__PURE__ */ jsx26(NuView, { padding: "cell", style: bodyStyle, children: /* @__PURE__ */ jsxs15(Stack, { gap: "md", children: [
|
|
2904
2932
|
/* @__PURE__ */ jsx26(
|
|
2905
2933
|
"div",
|
|
2906
2934
|
{
|
|
@@ -2910,7 +2938,7 @@ function MessageBoxDialogContent({
|
|
|
2910
2938
|
children: message
|
|
2911
2939
|
}
|
|
2912
2940
|
),
|
|
2913
|
-
/* @__PURE__ */
|
|
2941
|
+
/* @__PURE__ */ jsxs15(Stack, { direction: "row", gap: "sm", justify: "center", children: [
|
|
2914
2942
|
ok ? /* @__PURE__ */ jsx26(
|
|
2915
2943
|
Button,
|
|
2916
2944
|
{
|
|
@@ -2960,7 +2988,7 @@ function InputBoxDialogContent({
|
|
|
2960
2988
|
placeholder
|
|
2961
2989
|
}) {
|
|
2962
2990
|
const [value, setValue] = useState8(defaultValue ?? "");
|
|
2963
|
-
return /* @__PURE__ */ jsx26(NuView, { padding: "cell", children: /* @__PURE__ */
|
|
2991
|
+
return /* @__PURE__ */ jsx26(NuView, { padding: "cell", children: /* @__PURE__ */ jsxs15(Stack, { gap: "md", children: [
|
|
2964
2992
|
/* @__PURE__ */ jsx26(
|
|
2965
2993
|
TextField,
|
|
2966
2994
|
{
|
|
@@ -2972,7 +3000,7 @@ function InputBoxDialogContent({
|
|
|
2972
3000
|
placeholder
|
|
2973
3001
|
}
|
|
2974
3002
|
),
|
|
2975
|
-
/* @__PURE__ */
|
|
3003
|
+
/* @__PURE__ */ jsxs15(Stack, { direction: "row", gap: "sm", justify: "center", children: [
|
|
2976
3004
|
/* @__PURE__ */ jsx26(
|
|
2977
3005
|
Button,
|
|
2978
3006
|
{
|
|
@@ -2996,7 +3024,7 @@ function InputBoxDialogContent({
|
|
|
2996
3024
|
}
|
|
2997
3025
|
|
|
2998
3026
|
// src/windowing/NuWindowProvider.tsx
|
|
2999
|
-
import { jsx as jsx27, jsxs as
|
|
3027
|
+
import { jsx as jsx27, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
3000
3028
|
function getDefaultWindowStyle(mode, index) {
|
|
3001
3029
|
const offset = index * 18;
|
|
3002
3030
|
return {
|
|
@@ -3071,6 +3099,7 @@ function buildWindowRecord(definition, currentWindows, windowBoundsById, creatio
|
|
|
3071
3099
|
ownerCenteredStyle,
|
|
3072
3100
|
index
|
|
3073
3101
|
);
|
|
3102
|
+
const hasAspectRatio = typeof definition.aspectRatio === "number" && Number.isFinite(definition.aspectRatio) && definition.aspectRatio > 0;
|
|
3074
3103
|
return {
|
|
3075
3104
|
...definition,
|
|
3076
3105
|
appModal,
|
|
@@ -3079,18 +3108,18 @@ function buildWindowRecord(definition, currentWindows, windowBoundsById, creatio
|
|
|
3079
3108
|
creationOrder,
|
|
3080
3109
|
draggable: mode === "window",
|
|
3081
3110
|
id,
|
|
3082
|
-
maximizable: definition.maximizable ?? mode === "window",
|
|
3111
|
+
maximizable: !hasAspectRatio && (definition.maximizable ?? mode === "window"),
|
|
3083
3112
|
modalOwnerId,
|
|
3084
3113
|
minimizable: definition.minimizable ?? mode === "window",
|
|
3085
3114
|
mode,
|
|
3086
3115
|
resizable: definition.resizable ?? mode === "window",
|
|
3087
|
-
restoreStyle: savedWindowState.restoreStyle,
|
|
3116
|
+
restoreStyle: hasAspectRatio ? void 0 : savedWindowState.restoreStyle,
|
|
3088
3117
|
title: resolveManagedWindowTitle(currentWindows, titleBase),
|
|
3089
3118
|
titleBase,
|
|
3090
3119
|
style: {
|
|
3091
3120
|
...savedWindowState.style
|
|
3092
3121
|
},
|
|
3093
|
-
maximized: savedWindowState.maximized,
|
|
3122
|
+
maximized: hasAspectRatio ? false : savedWindowState.maximized,
|
|
3094
3123
|
minimized: savedWindowState.minimized
|
|
3095
3124
|
};
|
|
3096
3125
|
}
|
|
@@ -3305,7 +3334,7 @@ function NuWindowProvider({
|
|
|
3305
3334
|
const toggleWindowMaximized = useCallback3((id) => {
|
|
3306
3335
|
setWindows(
|
|
3307
3336
|
(currentWindows) => currentWindows.map((windowEntry) => {
|
|
3308
|
-
if (windowEntry.id !== id) {
|
|
3337
|
+
if (windowEntry.id !== id || !windowEntry.maximizable) {
|
|
3309
3338
|
return windowEntry;
|
|
3310
3339
|
}
|
|
3311
3340
|
if (windowEntry.maximized) {
|
|
@@ -3471,21 +3500,32 @@ function NuWindowProvider({
|
|
|
3471
3500
|
const topmostAppModalIndex = findTopmostAppModalIndex(visibleWindows);
|
|
3472
3501
|
const topmostAppModalId = topmostAppModalIndex >= 0 ? visibleWindows[topmostAppModalIndex]?.id : void 0;
|
|
3473
3502
|
const activeWindowId = topmostAppModalIndex >= 0 ? visibleWindows[topmostAppModalIndex]?.id : visibleWindows[visibleWindows.length - 1]?.id;
|
|
3503
|
+
const activeWindow = activeWindowId ? windows.find((windowEntry) => windowEntry.id === activeWindowId) : void 0;
|
|
3504
|
+
const activeActivationGroup = topmostAppModalIndex >= 0 ? void 0 : activeWindow?.activationGroup;
|
|
3474
3505
|
const hasAppModal = topmostAppModalIndex >= 0;
|
|
3506
|
+
const isWindowActive = useCallback3(
|
|
3507
|
+
(windowEntry) => windowEntry.id === activeWindowId || activeActivationGroup !== void 0 && windowEntry.activationGroup === activeActivationGroup,
|
|
3508
|
+
[activeActivationGroup, activeWindowId]
|
|
3509
|
+
);
|
|
3475
3510
|
const windowsInfo = useMemo7(
|
|
3476
3511
|
() => [...windows].sort(
|
|
3477
3512
|
(leftWindow, rightWindow) => leftWindow.creationOrder - rightWindow.creationOrder
|
|
3478
3513
|
).map((windowEntry) => ({
|
|
3479
|
-
active: windowEntry
|
|
3514
|
+
active: isWindowActive(windowEntry),
|
|
3515
|
+
activationGroup: windowEntry.activationGroup,
|
|
3516
|
+
aspectRatio: windowEntry.aspectRatio,
|
|
3480
3517
|
bodyClassName: windowEntry.bodyClassName,
|
|
3481
3518
|
appModal: windowEntry.appModal,
|
|
3482
3519
|
border: windowEntry.border,
|
|
3483
3520
|
className: windowEntry.className,
|
|
3484
3521
|
closeable: windowEntry.closeable,
|
|
3485
3522
|
domain: windowEntry.domain,
|
|
3523
|
+
icon: windowEntry.icon,
|
|
3486
3524
|
id: windowEntry.id,
|
|
3487
3525
|
maximizable: windowEntry.maximizable,
|
|
3488
3526
|
maximized: windowEntry.maximized,
|
|
3527
|
+
minHeight: windowEntry.minHeight,
|
|
3528
|
+
minWidth: windowEntry.minWidth,
|
|
3489
3529
|
modal: windowEntry.modalOwnerId ?? false,
|
|
3490
3530
|
minimizable: windowEntry.minimizable,
|
|
3491
3531
|
minimized: windowEntry.minimized,
|
|
@@ -3496,7 +3536,7 @@ function NuWindowProvider({
|
|
|
3496
3536
|
title: windowEntry.title,
|
|
3497
3537
|
titleButtons: windowEntry.titleButtons
|
|
3498
3538
|
})),
|
|
3499
|
-
[
|
|
3539
|
+
[isWindowActive, windows]
|
|
3500
3540
|
);
|
|
3501
3541
|
const mdiBridge = useMemo7(
|
|
3502
3542
|
() => ({
|
|
@@ -3553,10 +3593,10 @@ function NuWindowProvider({
|
|
|
3553
3593
|
useEffect6(() => {
|
|
3554
3594
|
onAppModalChange?.(hasAppModal);
|
|
3555
3595
|
}, [hasAppModal, onAppModalChange]);
|
|
3556
|
-
return /* @__PURE__ */ jsx27(NuWindowContext.Provider, { value: contextValue, children: /* @__PURE__ */
|
|
3596
|
+
return /* @__PURE__ */ jsx27(NuWindowContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxs16("div", { className: ["nu-window-host", className].filter(Boolean).join(" "), children: [
|
|
3557
3597
|
children,
|
|
3558
3598
|
/* @__PURE__ */ jsx27("div", { className: "nu-window-layer", children: renderWindows.map((windowEntry) => {
|
|
3559
|
-
const isActiveWindow = windowEntry
|
|
3599
|
+
const isActiveWindow = isWindowActive(windowEntry);
|
|
3560
3600
|
const stackIndex = stackIndexById.get(windowEntry.id);
|
|
3561
3601
|
const isTopmostAppModal = windowEntry.id === topmostAppModalId;
|
|
3562
3602
|
const ownerBounds = windowEntry.modalOwnerId ? windowBoundsById[windowEntry.modalOwnerId] : void 0;
|
|
@@ -3584,7 +3624,7 @@ function NuWindowProvider({
|
|
|
3584
3624
|
update: handleUpdate
|
|
3585
3625
|
};
|
|
3586
3626
|
const content = typeof windowEntry.content === "function" ? windowEntry.content(controls) : windowEntry.content;
|
|
3587
|
-
return /* @__PURE__ */
|
|
3627
|
+
return /* @__PURE__ */ jsxs16(Fragment3, { children: [
|
|
3588
3628
|
isTopmostAppModal ? /* @__PURE__ */ jsx27(
|
|
3589
3629
|
"div",
|
|
3590
3630
|
{
|
|
@@ -3602,12 +3642,16 @@ function NuWindowProvider({
|
|
|
3602
3642
|
Window,
|
|
3603
3643
|
{
|
|
3604
3644
|
active: isActiveWindow,
|
|
3645
|
+
aspectRatio: windowEntry.aspectRatio,
|
|
3605
3646
|
bodyClassName: windowEntry.bodyClassName,
|
|
3606
3647
|
border: windowEntry.border,
|
|
3607
3648
|
className: windowEntry.className,
|
|
3608
3649
|
closeable: windowEntry.closeable,
|
|
3609
3650
|
draggable: windowEntry.draggable,
|
|
3651
|
+
icon: windowEntry.icon,
|
|
3610
3652
|
maximizable: windowEntry.maximizable,
|
|
3653
|
+
minHeight: windowEntry.minHeight,
|
|
3654
|
+
minWidth: windowEntry.minWidth,
|
|
3611
3655
|
minimizable: windowEntry.minimizable,
|
|
3612
3656
|
maximized: windowEntry.maximized,
|
|
3613
3657
|
minimized: windowEntry.minimized,
|
|
@@ -3638,6 +3682,7 @@ function NuWindowProvider({
|
|
|
3638
3682
|
active: windowEntry.active,
|
|
3639
3683
|
domain: windowEntry.domain,
|
|
3640
3684
|
id: windowEntry.id,
|
|
3685
|
+
icon: windowEntry.icon,
|
|
3641
3686
|
minimized: windowEntry.minimized,
|
|
3642
3687
|
title: windowEntry.title
|
|
3643
3688
|
})),
|
|
@@ -3648,9 +3693,9 @@ function NuWindowProvider({
|
|
|
3648
3693
|
}
|
|
3649
3694
|
|
|
3650
3695
|
// src/components/Desktop/Desktop.tsx
|
|
3651
|
-
import { jsx as jsx28, jsxs as
|
|
3696
|
+
import { jsx as jsx28, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
3652
3697
|
function DesktopWindowRegion({ appBar, children }) {
|
|
3653
|
-
return /* @__PURE__ */
|
|
3698
|
+
return /* @__PURE__ */ jsxs17(Fragment4, { children: [
|
|
3654
3699
|
/* @__PURE__ */ jsx28("div", { className: "nu-desktop__workspace", children }),
|
|
3655
3700
|
appBar ? /* @__PURE__ */ jsx28("div", { className: "nu-desktop__app-bar", children: appBar }) : null
|
|
3656
3701
|
] });
|
|
@@ -3695,7 +3740,7 @@ function NuDesktopShell({
|
|
|
3695
3740
|
appHostContext.mainMenu,
|
|
3696
3741
|
appHostContext.windowBridge
|
|
3697
3742
|
);
|
|
3698
|
-
return /* @__PURE__ */
|
|
3743
|
+
return /* @__PURE__ */ jsxs17(
|
|
3699
3744
|
"div",
|
|
3700
3745
|
{
|
|
3701
3746
|
...props,
|
|
@@ -3805,7 +3850,7 @@ function Dashboard({
|
|
|
3805
3850
|
|
|
3806
3851
|
// src/components/CheckBox/CheckBox.tsx
|
|
3807
3852
|
import { useId as useId3, useState as useState11 } from "react";
|
|
3808
|
-
import { jsx as jsx30, jsxs as
|
|
3853
|
+
import { jsx as jsx30, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
3809
3854
|
function CheckBox({
|
|
3810
3855
|
checked,
|
|
3811
3856
|
className,
|
|
@@ -3832,13 +3877,13 @@ function CheckBox({
|
|
|
3832
3877
|
}
|
|
3833
3878
|
onCheckedChange?.(event.target.checked, event);
|
|
3834
3879
|
}
|
|
3835
|
-
return /* @__PURE__ */
|
|
3880
|
+
return /* @__PURE__ */ jsxs18(
|
|
3836
3881
|
"label",
|
|
3837
3882
|
{
|
|
3838
3883
|
className: cx("nu-check-box", slotClassNames?.root, className),
|
|
3839
3884
|
style: slotStyles?.root,
|
|
3840
3885
|
children: [
|
|
3841
|
-
/* @__PURE__ */
|
|
3886
|
+
/* @__PURE__ */ jsxs18(
|
|
3842
3887
|
"span",
|
|
3843
3888
|
{
|
|
3844
3889
|
className: cx("nu-check-box__main", slotClassNames?.main),
|
|
@@ -4067,7 +4112,7 @@ function usePopupPosition({
|
|
|
4067
4112
|
}
|
|
4068
4113
|
|
|
4069
4114
|
// src/components/Dropdown/Dropdown.tsx
|
|
4070
|
-
import { jsx as jsx32, jsxs as
|
|
4115
|
+
import { jsx as jsx32, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
4071
4116
|
function flattenDropdownOptions(data) {
|
|
4072
4117
|
const options = [];
|
|
4073
4118
|
data.forEach((group) => {
|
|
@@ -4233,7 +4278,7 @@ function Dropdown({
|
|
|
4233
4278
|
break;
|
|
4234
4279
|
}
|
|
4235
4280
|
}
|
|
4236
|
-
return /* @__PURE__ */
|
|
4281
|
+
return /* @__PURE__ */ jsxs19(
|
|
4237
4282
|
"div",
|
|
4238
4283
|
{
|
|
4239
4284
|
...props,
|
|
@@ -4268,13 +4313,13 @@ function Dropdown({
|
|
|
4268
4313
|
},
|
|
4269
4314
|
style: slotStyles?.trigger,
|
|
4270
4315
|
type: "button",
|
|
4271
|
-
children: /* @__PURE__ */
|
|
4316
|
+
children: /* @__PURE__ */ jsxs19(
|
|
4272
4317
|
"span",
|
|
4273
4318
|
{
|
|
4274
4319
|
className: cx("nu-dropdown__slot", slotClassNames?.slot),
|
|
4275
4320
|
style: slotStyles?.slot,
|
|
4276
4321
|
children: [
|
|
4277
|
-
/* @__PURE__ */
|
|
4322
|
+
/* @__PURE__ */ jsxs19(
|
|
4278
4323
|
"span",
|
|
4279
4324
|
{
|
|
4280
4325
|
className: cx("nu-dropdown__field", slotClassNames?.field),
|
|
@@ -4411,7 +4456,7 @@ function Dropdown({
|
|
|
4411
4456
|
}
|
|
4412
4457
|
|
|
4413
4458
|
// src/components/Frame/Frame.tsx
|
|
4414
|
-
import { jsx as jsx33, jsxs as
|
|
4459
|
+
import { jsx as jsx33, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
4415
4460
|
function Frame({
|
|
4416
4461
|
children,
|
|
4417
4462
|
className,
|
|
@@ -4432,7 +4477,7 @@ function Frame({
|
|
|
4432
4477
|
}) {
|
|
4433
4478
|
const resolvedTitleContent = titleContent ?? (title ? renderMnemonicText(title) : null);
|
|
4434
4479
|
const hasTitleShell = Boolean(titleStart || resolvedTitleContent || titleEnd);
|
|
4435
|
-
return /* @__PURE__ */
|
|
4480
|
+
return /* @__PURE__ */ jsxs20(
|
|
4436
4481
|
"section",
|
|
4437
4482
|
{
|
|
4438
4483
|
...props,
|
|
@@ -4449,7 +4494,7 @@ function Frame({
|
|
|
4449
4494
|
...slotStyles?.root
|
|
4450
4495
|
},
|
|
4451
4496
|
children: [
|
|
4452
|
-
hasTitleShell ? /* @__PURE__ */
|
|
4497
|
+
hasTitleShell ? /* @__PURE__ */ jsxs20(
|
|
4453
4498
|
"span",
|
|
4454
4499
|
{
|
|
4455
4500
|
className: cx("nu-frame__title", slotClassNames?.title),
|
|
@@ -4796,7 +4841,7 @@ function useNuIconGridContext() {
|
|
|
4796
4841
|
}
|
|
4797
4842
|
|
|
4798
4843
|
// src/components/IconGrid/NuIconGrid.tsx
|
|
4799
|
-
import { Fragment as Fragment5, jsx as jsx36, jsxs as
|
|
4844
|
+
import { Fragment as Fragment5, jsx as jsx36, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
4800
4845
|
var DRAG_THRESHOLD2 = 3;
|
|
4801
4846
|
var gridRegistrations = /* @__PURE__ */ new Map();
|
|
4802
4847
|
function clamp2(value, minimum, maximum) {
|
|
@@ -5010,8 +5055,8 @@ function NuIconGridItem({
|
|
|
5010
5055
|
manager.selectIcon(icon.id);
|
|
5011
5056
|
contextMenu.openAtElement(event.currentTarget);
|
|
5012
5057
|
}
|
|
5013
|
-
return /* @__PURE__ */
|
|
5014
|
-
/* @__PURE__ */
|
|
5058
|
+
return /* @__PURE__ */ jsxs21(Fragment5, { children: [
|
|
5059
|
+
/* @__PURE__ */ jsxs21(
|
|
5015
5060
|
"button",
|
|
5016
5061
|
{
|
|
5017
5062
|
"aria-haspopup": contextMenuItems.length > 0 ? "menu" : void 0,
|
|
@@ -5125,7 +5170,7 @@ function NuIconGrid({
|
|
|
5125
5170
|
manager.selectIcon(null);
|
|
5126
5171
|
contextMenu.openAtPoint(event.clientX, event.clientY, event.currentTarget);
|
|
5127
5172
|
}
|
|
5128
|
-
return /* @__PURE__ */
|
|
5173
|
+
return /* @__PURE__ */ jsxs21(
|
|
5129
5174
|
"div",
|
|
5130
5175
|
{
|
|
5131
5176
|
...props,
|
|
@@ -5335,7 +5380,7 @@ import {
|
|
|
5335
5380
|
useState as useState17
|
|
5336
5381
|
} from "react";
|
|
5337
5382
|
import { createPortal as createPortal3 } from "react-dom";
|
|
5338
|
-
import { jsx as jsx38, jsxs as
|
|
5383
|
+
import { jsx as jsx38, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
5339
5384
|
function flattenComboBoxOptions(data) {
|
|
5340
5385
|
const options = [];
|
|
5341
5386
|
data.forEach((group) => {
|
|
@@ -5495,7 +5540,7 @@ function ComboBox({
|
|
|
5495
5540
|
break;
|
|
5496
5541
|
}
|
|
5497
5542
|
}
|
|
5498
|
-
return /* @__PURE__ */
|
|
5543
|
+
return /* @__PURE__ */ jsxs22(
|
|
5499
5544
|
"div",
|
|
5500
5545
|
{
|
|
5501
5546
|
...props,
|
|
@@ -5513,13 +5558,13 @@ function ComboBox({
|
|
|
5513
5558
|
children: renderMnemonicText(label)
|
|
5514
5559
|
}
|
|
5515
5560
|
),
|
|
5516
|
-
/* @__PURE__ */
|
|
5561
|
+
/* @__PURE__ */ jsxs22(
|
|
5517
5562
|
"span",
|
|
5518
5563
|
{
|
|
5519
5564
|
className: cx("nu-combo-box__slot", slotClassNames?.slot),
|
|
5520
5565
|
style: slotStyles?.slot,
|
|
5521
5566
|
children: [
|
|
5522
|
-
/* @__PURE__ */
|
|
5567
|
+
/* @__PURE__ */ jsxs22(
|
|
5523
5568
|
"span",
|
|
5524
5569
|
{
|
|
5525
5570
|
className: cx("nu-combo-box__field", slotClassNames?.field),
|
|
@@ -5658,7 +5703,7 @@ function ComboBox({
|
|
|
5658
5703
|
import {
|
|
5659
5704
|
Fragment as Fragment6
|
|
5660
5705
|
} from "react";
|
|
5661
|
-
import { jsx as jsx39, jsxs as
|
|
5706
|
+
import { jsx as jsx39, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
5662
5707
|
var COMMAND_BUTTON_GLYPH_NAMES = /* @__PURE__ */ new Set([
|
|
5663
5708
|
"check-fill",
|
|
5664
5709
|
"check-mark",
|
|
@@ -5707,8 +5752,8 @@ function CommandButton({
|
|
|
5707
5752
|
}
|
|
5708
5753
|
popupMenu.openFromClick(event);
|
|
5709
5754
|
}
|
|
5710
|
-
return /* @__PURE__ */
|
|
5711
|
-
/* @__PURE__ */
|
|
5755
|
+
return /* @__PURE__ */ jsxs23(Fragment6, { children: [
|
|
5756
|
+
/* @__PURE__ */ jsxs23(
|
|
5712
5757
|
"button",
|
|
5713
5758
|
{
|
|
5714
5759
|
...props,
|
|
@@ -5779,7 +5824,7 @@ function CommandButton({
|
|
|
5779
5824
|
|
|
5780
5825
|
// src/components/CrtGlitch/CrtGlitch.tsx
|
|
5781
5826
|
import { useEffect as useEffect10, useId as useId6, useRef as useRef13 } from "react";
|
|
5782
|
-
import { jsx as jsx40, jsxs as
|
|
5827
|
+
import { jsx as jsx40, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
5783
5828
|
var DEFAULT_INTERVAL_MS = 3e3;
|
|
5784
5829
|
var DEFAULT_DURATION_MS = 2500;
|
|
5785
5830
|
var DEFAULT_TOP_LEVEL_RATIO = 1 / 3;
|
|
@@ -5913,7 +5958,7 @@ function NuCrtGlitch({
|
|
|
5913
5958
|
}
|
|
5914
5959
|
};
|
|
5915
5960
|
}, [durationMs, enabled, filterId, intervalMs, targetSelector, topLevelRatio]);
|
|
5916
|
-
return /* @__PURE__ */ jsx40("svg", { "aria-hidden": "true", height: "0", style: { position: "absolute" }, width: "0", children: /* @__PURE__ */ jsx40("defs", { children: /* @__PURE__ */
|
|
5961
|
+
return /* @__PURE__ */ jsx40("svg", { "aria-hidden": "true", height: "0", style: { position: "absolute" }, width: "0", children: /* @__PURE__ */ jsx40("defs", { children: /* @__PURE__ */ jsxs24(
|
|
5917
5962
|
"filter",
|
|
5918
5963
|
{
|
|
5919
5964
|
"color-interpolation-filters": "sRGB",
|
|
@@ -6068,7 +6113,7 @@ function ListViewCheckControl({
|
|
|
6068
6113
|
}
|
|
6069
6114
|
|
|
6070
6115
|
// src/components/ListView/internals/ListViewRow.tsx
|
|
6071
|
-
import { jsx as jsx42, jsxs as
|
|
6116
|
+
import { jsx as jsx42, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
6072
6117
|
function ListViewRowInner({
|
|
6073
6118
|
columns,
|
|
6074
6119
|
isActive,
|
|
@@ -6099,7 +6144,7 @@ function ListViewRowInner({
|
|
|
6099
6144
|
function handleToggleCheck() {
|
|
6100
6145
|
onToggleCheck(rowId);
|
|
6101
6146
|
}
|
|
6102
|
-
return /* @__PURE__ */
|
|
6147
|
+
return /* @__PURE__ */ jsxs25(
|
|
6103
6148
|
"div",
|
|
6104
6149
|
{
|
|
6105
6150
|
"aria-disabled": row.disabled || void 0,
|
|
@@ -6149,7 +6194,7 @@ function ListViewRowInner({
|
|
|
6149
6194
|
var ListViewRow = memo3(ListViewRowInner);
|
|
6150
6195
|
|
|
6151
6196
|
// src/components/ListView/ListView.tsx
|
|
6152
|
-
import { jsx as jsx43, jsxs as
|
|
6197
|
+
import { jsx as jsx43, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
6153
6198
|
function ListViewInner({
|
|
6154
6199
|
activeRowId: activeRowIdProp,
|
|
6155
6200
|
checkedIds,
|
|
@@ -6317,7 +6362,7 @@ function ListViewInner({
|
|
|
6317
6362
|
break;
|
|
6318
6363
|
}
|
|
6319
6364
|
}
|
|
6320
|
-
return /* @__PURE__ */
|
|
6365
|
+
return /* @__PURE__ */ jsxs26(
|
|
6321
6366
|
"div",
|
|
6322
6367
|
{
|
|
6323
6368
|
...props,
|
|
@@ -6328,7 +6373,7 @@ function ListViewInner({
|
|
|
6328
6373
|
role: "grid",
|
|
6329
6374
|
tabIndex: 0,
|
|
6330
6375
|
children: [
|
|
6331
|
-
/* @__PURE__ */
|
|
6376
|
+
/* @__PURE__ */ jsxs26(
|
|
6332
6377
|
"div",
|
|
6333
6378
|
{
|
|
6334
6379
|
className: "nu-list-view__header",
|
|
@@ -6549,7 +6594,7 @@ function getMaskedFieldState(mask, rawValue) {
|
|
|
6549
6594
|
}
|
|
6550
6595
|
|
|
6551
6596
|
// src/components/MaskedField/MaskedField.tsx
|
|
6552
|
-
import { jsx as jsx44, jsxs as
|
|
6597
|
+
import { jsx as jsx44, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
6553
6598
|
function MaskedField({
|
|
6554
6599
|
"aria-invalid": ariaInvalid,
|
|
6555
6600
|
className,
|
|
@@ -6621,7 +6666,7 @@ function MaskedField({
|
|
|
6621
6666
|
}
|
|
6622
6667
|
onChange?.(event);
|
|
6623
6668
|
}
|
|
6624
|
-
return /* @__PURE__ */
|
|
6669
|
+
return /* @__PURE__ */ jsxs27(
|
|
6625
6670
|
"label",
|
|
6626
6671
|
{
|
|
6627
6672
|
className: cx(
|
|
@@ -6641,7 +6686,7 @@ function MaskedField({
|
|
|
6641
6686
|
children: renderMnemonicText(label)
|
|
6642
6687
|
}
|
|
6643
6688
|
),
|
|
6644
|
-
/* @__PURE__ */
|
|
6689
|
+
/* @__PURE__ */ jsxs27(
|
|
6645
6690
|
"span",
|
|
6646
6691
|
{
|
|
6647
6692
|
className: cx("nu-masked-field__slot", slotClassNames?.slot),
|
|
@@ -6775,7 +6820,7 @@ import {
|
|
|
6775
6820
|
useRef as useRef16,
|
|
6776
6821
|
useState as useState21
|
|
6777
6822
|
} from "react";
|
|
6778
|
-
import { jsx as jsx46, jsxs as
|
|
6823
|
+
import { jsx as jsx46, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
6779
6824
|
function PageControl({
|
|
6780
6825
|
activePageId: activePageIdProp,
|
|
6781
6826
|
className,
|
|
@@ -6860,7 +6905,7 @@ function PageControl({
|
|
|
6860
6905
|
break;
|
|
6861
6906
|
}
|
|
6862
6907
|
}
|
|
6863
|
-
return /* @__PURE__ */
|
|
6908
|
+
return /* @__PURE__ */ jsxs28(
|
|
6864
6909
|
"div",
|
|
6865
6910
|
{
|
|
6866
6911
|
...props,
|
|
@@ -6923,7 +6968,7 @@ function PageControl({
|
|
|
6923
6968
|
}
|
|
6924
6969
|
|
|
6925
6970
|
// src/components/Panel/Panel.tsx
|
|
6926
|
-
import { jsx as jsx47, jsxs as
|
|
6971
|
+
import { jsx as jsx47, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
6927
6972
|
function Panel({
|
|
6928
6973
|
children,
|
|
6929
6974
|
className,
|
|
@@ -6934,7 +6979,7 @@ function Panel({
|
|
|
6934
6979
|
title,
|
|
6935
6980
|
...props
|
|
6936
6981
|
}) {
|
|
6937
|
-
return /* @__PURE__ */
|
|
6982
|
+
return /* @__PURE__ */ jsxs29(
|
|
6938
6983
|
"section",
|
|
6939
6984
|
{
|
|
6940
6985
|
...props,
|
|
@@ -6981,7 +7026,7 @@ import {
|
|
|
6981
7026
|
useRef as useRef17,
|
|
6982
7027
|
useState as useState22
|
|
6983
7028
|
} from "react";
|
|
6984
|
-
import { jsx as jsx48, jsxs as
|
|
7029
|
+
import { jsx as jsx48, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
6985
7030
|
function collectGroupIds(entries) {
|
|
6986
7031
|
const groupIds = /* @__PURE__ */ new Set();
|
|
6987
7032
|
function visit(nextEntries) {
|
|
@@ -7242,7 +7287,7 @@ function PropertyGrid({
|
|
|
7242
7287
|
}
|
|
7243
7288
|
if (row.type === "group") {
|
|
7244
7289
|
const isExpanded = expandedIdSet.has(row.entry.id);
|
|
7245
|
-
return /* @__PURE__ */
|
|
7290
|
+
return /* @__PURE__ */ jsxs30(
|
|
7246
7291
|
"div",
|
|
7247
7292
|
{
|
|
7248
7293
|
className: "nu-property-grid__row",
|
|
@@ -7271,7 +7316,7 @@ function PropertyGrid({
|
|
|
7271
7316
|
"--nu-property-grid-depth": row.depth
|
|
7272
7317
|
},
|
|
7273
7318
|
type: "button",
|
|
7274
|
-
children: /* @__PURE__ */
|
|
7319
|
+
children: /* @__PURE__ */ jsxs30("span", { className: "nu-property-grid__lead", children: [
|
|
7275
7320
|
/* @__PURE__ */ jsx48("span", { className: "nu-property-grid__expander", children: /* @__PURE__ */ jsx48(
|
|
7276
7321
|
NuGlyph,
|
|
7277
7322
|
{
|
|
@@ -7289,7 +7334,7 @@ function PropertyGrid({
|
|
|
7289
7334
|
);
|
|
7290
7335
|
}
|
|
7291
7336
|
const editorId = `${editorIdPrefix}-editor-${row.entry.id}`;
|
|
7292
|
-
return /* @__PURE__ */
|
|
7337
|
+
return /* @__PURE__ */ jsxs30(
|
|
7293
7338
|
"div",
|
|
7294
7339
|
{
|
|
7295
7340
|
className: "nu-property-grid__row",
|
|
@@ -7316,13 +7361,13 @@ function PropertyGrid({
|
|
|
7316
7361
|
"--nu-property-grid-depth": row.depth
|
|
7317
7362
|
},
|
|
7318
7363
|
type: "button",
|
|
7319
|
-
children: /* @__PURE__ */
|
|
7364
|
+
children: /* @__PURE__ */ jsxs30("span", { className: "nu-property-grid__lead", children: [
|
|
7320
7365
|
/* @__PURE__ */ jsx48("span", { className: "nu-property-grid__expander-placeholder" }),
|
|
7321
7366
|
/* @__PURE__ */ jsx48("span", { className: "nu-property-grid__label-text", children: renderMnemonicText(row.entry.label) })
|
|
7322
7367
|
] })
|
|
7323
7368
|
}
|
|
7324
7369
|
),
|
|
7325
|
-
/* @__PURE__ */
|
|
7370
|
+
/* @__PURE__ */ jsxs30(
|
|
7326
7371
|
"div",
|
|
7327
7372
|
{
|
|
7328
7373
|
className: "nu-property-grid__editor",
|
|
@@ -7344,7 +7389,7 @@ function PropertyGrid({
|
|
|
7344
7389
|
}
|
|
7345
7390
|
|
|
7346
7391
|
// src/components/ProgressBar/ProgressBar.tsx
|
|
7347
|
-
import { jsx as jsx49, jsxs as
|
|
7392
|
+
import { jsx as jsx49, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
7348
7393
|
function clamp3(value, min, max) {
|
|
7349
7394
|
return Math.min(max, Math.max(min, value));
|
|
7350
7395
|
}
|
|
@@ -7368,7 +7413,7 @@ function ProgressBar({
|
|
|
7368
7413
|
const clampedValue = clamp3(value, min, safeMax);
|
|
7369
7414
|
const percent = Math.round((clampedValue - min) / (safeMax - min) * 100);
|
|
7370
7415
|
const renderedValue = valueRenderer ? valueRenderer(percent, clampedValue, min, safeMax) : `${percent}%`;
|
|
7371
|
-
return /* @__PURE__ */
|
|
7416
|
+
return /* @__PURE__ */ jsxs31(
|
|
7372
7417
|
"div",
|
|
7373
7418
|
{
|
|
7374
7419
|
...props,
|
|
@@ -7388,7 +7433,7 @@ function ProgressBar({
|
|
|
7388
7433
|
children: renderMnemonicText(label)
|
|
7389
7434
|
}
|
|
7390
7435
|
) : null,
|
|
7391
|
-
/* @__PURE__ */
|
|
7436
|
+
/* @__PURE__ */ jsxs31(
|
|
7392
7437
|
"div",
|
|
7393
7438
|
{
|
|
7394
7439
|
className: cx("nu-progress-bar__track", slotClassNames?.track),
|
|
@@ -7438,7 +7483,7 @@ function ProgressBar({
|
|
|
7438
7483
|
|
|
7439
7484
|
// src/components/RadioGroup/RadioButton.tsx
|
|
7440
7485
|
import { useId as useId10, useState as useState23 } from "react";
|
|
7441
|
-
import { jsx as jsx50, jsxs as
|
|
7486
|
+
import { jsx as jsx50, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
7442
7487
|
function RadioButton({
|
|
7443
7488
|
checked,
|
|
7444
7489
|
className,
|
|
@@ -7462,8 +7507,8 @@ function RadioButton({
|
|
|
7462
7507
|
}
|
|
7463
7508
|
onCheckedChange?.(event.target.checked, event);
|
|
7464
7509
|
}
|
|
7465
|
-
return /* @__PURE__ */
|
|
7466
|
-
/* @__PURE__ */
|
|
7510
|
+
return /* @__PURE__ */ jsxs32("label", { className: ["nu-radio-button", className].filter(Boolean).join(" "), children: [
|
|
7511
|
+
/* @__PURE__ */ jsxs32("span", { className: "nu-radio-button__main", children: [
|
|
7467
7512
|
/* @__PURE__ */ jsx50(
|
|
7468
7513
|
"input",
|
|
7469
7514
|
{
|
|
@@ -7477,7 +7522,7 @@ function RadioButton({
|
|
|
7477
7522
|
type: "radio"
|
|
7478
7523
|
}
|
|
7479
7524
|
),
|
|
7480
|
-
/* @__PURE__ */ jsx50("span", { "aria-hidden": "true", className: "nu-radio-button__control", children: /* @__PURE__ */
|
|
7525
|
+
/* @__PURE__ */ jsx50("span", { "aria-hidden": "true", className: "nu-radio-button__control", children: /* @__PURE__ */ jsxs32("span", { className: "nu-radio-button__disc", children: [
|
|
7481
7526
|
/* @__PURE__ */ jsx50(NuGlyph, { className: "nu-radio-button__ring", name: "radio-ring" }),
|
|
7482
7527
|
resolvedChecked ? /* @__PURE__ */ jsx50(NuGlyph, { className: "nu-radio-button__fill", name: "radio-fill" }) : null
|
|
7483
7528
|
] }) }),
|
|
@@ -7489,7 +7534,7 @@ function RadioButton({
|
|
|
7489
7534
|
|
|
7490
7535
|
// src/components/RadioGroup/RadioGroup.tsx
|
|
7491
7536
|
import { useId as useId11, useState as useState24 } from "react";
|
|
7492
|
-
import { jsx as jsx51, jsxs as
|
|
7537
|
+
import { jsx as jsx51, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
7493
7538
|
function RadioGroup({
|
|
7494
7539
|
className,
|
|
7495
7540
|
defaultValue,
|
|
@@ -7516,7 +7561,7 @@ function RadioGroup({
|
|
|
7516
7561
|
}
|
|
7517
7562
|
onValueChange?.(nextValue);
|
|
7518
7563
|
}
|
|
7519
|
-
return /* @__PURE__ */
|
|
7564
|
+
return /* @__PURE__ */ jsxs33(
|
|
7520
7565
|
"fieldset",
|
|
7521
7566
|
{
|
|
7522
7567
|
...props,
|
|
@@ -7601,7 +7646,7 @@ import {
|
|
|
7601
7646
|
useState as useState25
|
|
7602
7647
|
} from "react";
|
|
7603
7648
|
import { createPortal as createPortal4 } from "react-dom";
|
|
7604
|
-
import { jsx as jsx53, jsxs as
|
|
7649
|
+
import { jsx as jsx53, jsxs as jsxs34 } from "react/jsx-runtime";
|
|
7605
7650
|
function resolveSearchBoxPortalRoot() {
|
|
7606
7651
|
return document.body;
|
|
7607
7652
|
}
|
|
@@ -7796,7 +7841,7 @@ function SearchBox({
|
|
|
7796
7841
|
break;
|
|
7797
7842
|
}
|
|
7798
7843
|
}
|
|
7799
|
-
return /* @__PURE__ */
|
|
7844
|
+
return /* @__PURE__ */ jsxs34(
|
|
7800
7845
|
"div",
|
|
7801
7846
|
{
|
|
7802
7847
|
...props,
|
|
@@ -7805,7 +7850,7 @@ function SearchBox({
|
|
|
7805
7850
|
style,
|
|
7806
7851
|
children: [
|
|
7807
7852
|
/* @__PURE__ */ jsx53("label", { className: "nu-search-box__label", htmlFor: fieldId, id: labelId, children: renderMnemonicText(label) }),
|
|
7808
|
-
/* @__PURE__ */
|
|
7853
|
+
/* @__PURE__ */ jsxs34("span", { className: "nu-search-box__slot", ref: fieldRef, children: [
|
|
7809
7854
|
/* @__PURE__ */ jsx53("span", { "aria-hidden": "true", className: "nu-search-box__bracket", children: "[" }),
|
|
7810
7855
|
/* @__PURE__ */ jsx53("span", { className: "nu-search-box__input-shell", children: /* @__PURE__ */ jsx53(
|
|
7811
7856
|
"input",
|
|
@@ -7859,7 +7904,7 @@ import {
|
|
|
7859
7904
|
useMemo as useMemo17,
|
|
7860
7905
|
useState as useState26
|
|
7861
7906
|
} from "react";
|
|
7862
|
-
import { jsx as jsx54, jsxs as
|
|
7907
|
+
import { jsx as jsx54, jsxs as jsxs35 } from "react/jsx-runtime";
|
|
7863
7908
|
function clampSpinValue(value, min, max) {
|
|
7864
7909
|
let nextValue = value;
|
|
7865
7910
|
if (min !== void 0) {
|
|
@@ -7972,7 +8017,7 @@ function SpinBox({
|
|
|
7972
8017
|
() => disabled || max !== void 0 && numericValue >= max,
|
|
7973
8018
|
[disabled, max, numericValue]
|
|
7974
8019
|
);
|
|
7975
|
-
return /* @__PURE__ */
|
|
8020
|
+
return /* @__PURE__ */ jsxs35(
|
|
7976
8021
|
"label",
|
|
7977
8022
|
{
|
|
7978
8023
|
className: cx("nu-spin-box", slotClassNames?.root, className),
|
|
@@ -7987,7 +8032,7 @@ function SpinBox({
|
|
|
7987
8032
|
children: renderMnemonicText(label)
|
|
7988
8033
|
}
|
|
7989
8034
|
),
|
|
7990
|
-
/* @__PURE__ */
|
|
8035
|
+
/* @__PURE__ */ jsxs35(
|
|
7991
8036
|
"span",
|
|
7992
8037
|
{
|
|
7993
8038
|
className: cx("nu-spin-box__slot", slotClassNames?.slot),
|
|
@@ -8035,7 +8080,7 @@ function SpinBox({
|
|
|
8035
8080
|
children: "]"
|
|
8036
8081
|
}
|
|
8037
8082
|
),
|
|
8038
|
-
/* @__PURE__ */
|
|
8083
|
+
/* @__PURE__ */ jsxs35(
|
|
8039
8084
|
"span",
|
|
8040
8085
|
{
|
|
8041
8086
|
className: cx("nu-spin-box__controls", slotClassNames?.controls),
|
|
@@ -8090,7 +8135,7 @@ import {
|
|
|
8090
8135
|
useRef as useRef19,
|
|
8091
8136
|
useState as useState27
|
|
8092
8137
|
} from "react";
|
|
8093
|
-
import { jsx as jsx55, jsxs as
|
|
8138
|
+
import { jsx as jsx55, jsxs as jsxs36 } from "react/jsx-runtime";
|
|
8094
8139
|
function clamp4(value, min, max) {
|
|
8095
8140
|
return Math.min(max, Math.max(min, value));
|
|
8096
8141
|
}
|
|
@@ -8245,7 +8290,7 @@ function Splitter({
|
|
|
8245
8290
|
commitValue(max);
|
|
8246
8291
|
}
|
|
8247
8292
|
}
|
|
8248
|
-
return /* @__PURE__ */
|
|
8293
|
+
return /* @__PURE__ */ jsxs36(
|
|
8249
8294
|
"div",
|
|
8250
8295
|
{
|
|
8251
8296
|
...props,
|
|
@@ -8295,7 +8340,7 @@ import {
|
|
|
8295
8340
|
useRef as useRef20,
|
|
8296
8341
|
useState as useState28
|
|
8297
8342
|
} from "react";
|
|
8298
|
-
import { jsx as jsx56, jsxs as
|
|
8343
|
+
import { jsx as jsx56, jsxs as jsxs37 } from "react/jsx-runtime";
|
|
8299
8344
|
function clamp5(value, min, max) {
|
|
8300
8345
|
return Math.min(max, Math.max(min, value));
|
|
8301
8346
|
}
|
|
@@ -8431,7 +8476,7 @@ function TickBar({
|
|
|
8431
8476
|
}
|
|
8432
8477
|
onKeyDown?.(event);
|
|
8433
8478
|
}
|
|
8434
|
-
return /* @__PURE__ */
|
|
8479
|
+
return /* @__PURE__ */ jsxs37(
|
|
8435
8480
|
"div",
|
|
8436
8481
|
{
|
|
8437
8482
|
...props,
|
|
@@ -8452,13 +8497,13 @@ function TickBar({
|
|
|
8452
8497
|
children: renderMnemonicText(label)
|
|
8453
8498
|
}
|
|
8454
8499
|
) : null,
|
|
8455
|
-
/* @__PURE__ */
|
|
8500
|
+
/* @__PURE__ */ jsxs37(
|
|
8456
8501
|
"div",
|
|
8457
8502
|
{
|
|
8458
8503
|
className: cx("nu-tick-bar__slot", slotClassNames?.slot),
|
|
8459
8504
|
style: slotStyles?.slot,
|
|
8460
8505
|
children: [
|
|
8461
|
-
/* @__PURE__ */
|
|
8506
|
+
/* @__PURE__ */ jsxs37(
|
|
8462
8507
|
"div",
|
|
8463
8508
|
{
|
|
8464
8509
|
"aria-describedby": hintId,
|
|
@@ -8774,7 +8819,7 @@ function collectVisibleTreeItems(items, expandedIds, depth = 0, guideMask = [],
|
|
|
8774
8819
|
|
|
8775
8820
|
// src/components/TreeView/internals/TreeViewItem.tsx
|
|
8776
8821
|
import { memo as memo4 } from "react";
|
|
8777
|
-
import { jsx as jsx58, jsxs as
|
|
8822
|
+
import { jsx as jsx58, jsxs as jsxs38 } from "react/jsx-runtime";
|
|
8778
8823
|
function areTreeViewGuideArraysEqual(previousArray, nextArray) {
|
|
8779
8824
|
if (previousArray.length !== nextArray.length) {
|
|
8780
8825
|
return false;
|
|
@@ -8848,8 +8893,8 @@ function TreeViewItemInner({
|
|
|
8848
8893
|
handleActivate();
|
|
8849
8894
|
onToggleItemCheck?.(item, !isChecked);
|
|
8850
8895
|
}
|
|
8851
|
-
return /* @__PURE__ */
|
|
8852
|
-
/* @__PURE__ */
|
|
8896
|
+
return /* @__PURE__ */ jsxs38("div", { className: "nu-tree-view__row", role: "none", children: [
|
|
8897
|
+
/* @__PURE__ */ jsxs38(
|
|
8853
8898
|
"div",
|
|
8854
8899
|
{
|
|
8855
8900
|
"aria-checked": isCheckable ? isChecked : void 0,
|
|
@@ -8868,7 +8913,7 @@ function TreeViewItemInner({
|
|
|
8868
8913
|
ref: (node) => registerItemRef(itemId, node),
|
|
8869
8914
|
role: "treeitem",
|
|
8870
8915
|
children: [
|
|
8871
|
-
/* @__PURE__ */
|
|
8916
|
+
/* @__PURE__ */ jsxs38("span", { "aria-hidden": "true", className: "nu-tree-view__prefix", children: [
|
|
8872
8917
|
guideMask.map((hasGuide, guideIndex) => /* @__PURE__ */ jsx58(
|
|
8873
8918
|
"span",
|
|
8874
8919
|
{
|
|
@@ -8880,7 +8925,7 @@ function TreeViewItemInner({
|
|
|
8880
8925
|
},
|
|
8881
8926
|
`${itemId}-guide-${guideIndex}`
|
|
8882
8927
|
)),
|
|
8883
|
-
/* @__PURE__ */
|
|
8928
|
+
/* @__PURE__ */ jsxs38(
|
|
8884
8929
|
"span",
|
|
8885
8930
|
{
|
|
8886
8931
|
className: "nu-tree-view__lead",
|
|
@@ -8928,7 +8973,7 @@ function TreeViewItemInner({
|
|
|
8928
8973
|
}
|
|
8929
8974
|
)
|
|
8930
8975
|
] }),
|
|
8931
|
-
/* @__PURE__ */
|
|
8976
|
+
/* @__PURE__ */ jsxs38("span", { className: "nu-tree-view__content", children: [
|
|
8932
8977
|
isCheckable ? /* @__PURE__ */ jsx58("span", { className: "nu-tree-view__check-slot", children: /* @__PURE__ */ jsx58(
|
|
8933
8978
|
"button",
|
|
8934
8979
|
{
|
|
@@ -9384,9 +9429,9 @@ function renderTreeListCellValue(item, column) {
|
|
|
9384
9429
|
|
|
9385
9430
|
// src/components/TreeListView/internals/TreeListViewRow.tsx
|
|
9386
9431
|
import { memo as memo5 } from "react";
|
|
9387
|
-
import { Fragment as Fragment7, jsx as jsx60, jsxs as
|
|
9432
|
+
import { Fragment as Fragment7, jsx as jsx60, jsxs as jsxs39 } from "react/jsx-runtime";
|
|
9388
9433
|
function renderTreeTitleContent(item) {
|
|
9389
|
-
return /* @__PURE__ */
|
|
9434
|
+
return /* @__PURE__ */ jsxs39(Fragment7, { children: [
|
|
9390
9435
|
/* @__PURE__ */ jsx60("span", { className: "nu-tree-list-view__title", children: item.title }),
|
|
9391
9436
|
item.hint ? /* @__PURE__ */ jsx60("span", { className: "nu-tree-list-view__hint", children: item.hint }) : null
|
|
9392
9437
|
] });
|
|
@@ -9514,7 +9559,7 @@ function TreeListViewRowInner({
|
|
|
9514
9559
|
handleActivate();
|
|
9515
9560
|
onToggleItemCheck?.(item, !isChecked);
|
|
9516
9561
|
}
|
|
9517
|
-
return /* @__PURE__ */
|
|
9562
|
+
return /* @__PURE__ */ jsxs39(Fragment7, { children: [
|
|
9518
9563
|
/* @__PURE__ */ jsx60(
|
|
9519
9564
|
"div",
|
|
9520
9565
|
{
|
|
@@ -9543,7 +9588,7 @@ function TreeListViewRowInner({
|
|
|
9543
9588
|
"--nu-tree-list-view-columns": templateColumns
|
|
9544
9589
|
},
|
|
9545
9590
|
children: columns.map(
|
|
9546
|
-
(column, columnIndex) => column.id === treeColumnId ? /* @__PURE__ */
|
|
9591
|
+
(column, columnIndex) => column.id === treeColumnId ? /* @__PURE__ */ jsxs39(
|
|
9547
9592
|
"span",
|
|
9548
9593
|
{
|
|
9549
9594
|
className: [
|
|
@@ -9555,7 +9600,7 @@ function TreeListViewRowInner({
|
|
|
9555
9600
|
"data-column-id": column.id,
|
|
9556
9601
|
role: "gridcell",
|
|
9557
9602
|
children: [
|
|
9558
|
-
/* @__PURE__ */
|
|
9603
|
+
/* @__PURE__ */ jsxs39("span", { "aria-hidden": "true", className: "nu-tree-list-view__prefix", children: [
|
|
9559
9604
|
guideMask.map((hasGuide, guideIndex) => /* @__PURE__ */ jsx60(
|
|
9560
9605
|
"span",
|
|
9561
9606
|
{
|
|
@@ -9567,7 +9612,7 @@ function TreeListViewRowInner({
|
|
|
9567
9612
|
},
|
|
9568
9613
|
`${itemId}-guide-${guideIndex}`
|
|
9569
9614
|
)),
|
|
9570
|
-
/* @__PURE__ */
|
|
9615
|
+
/* @__PURE__ */ jsxs39(
|
|
9571
9616
|
"span",
|
|
9572
9617
|
{
|
|
9573
9618
|
className: "nu-tree-list-view__lead",
|
|
@@ -9615,7 +9660,7 @@ function TreeListViewRowInner({
|
|
|
9615
9660
|
}
|
|
9616
9661
|
)
|
|
9617
9662
|
] }),
|
|
9618
|
-
/* @__PURE__ */
|
|
9663
|
+
/* @__PURE__ */ jsxs39("span", { className: "nu-tree-list-view__tree-content", children: [
|
|
9619
9664
|
isCheckable ? /* @__PURE__ */ jsx60("span", { className: "nu-tree-list-view__check-slot", children: /* @__PURE__ */ jsx60(
|
|
9620
9665
|
"button",
|
|
9621
9666
|
{
|
|
@@ -9716,7 +9761,7 @@ var TreeListViewRow = memo5(
|
|
|
9716
9761
|
);
|
|
9717
9762
|
|
|
9718
9763
|
// src/components/TreeListView/TreeListView.tsx
|
|
9719
|
-
import { jsx as jsx61, jsxs as
|
|
9764
|
+
import { jsx as jsx61, jsxs as jsxs40 } from "react/jsx-runtime";
|
|
9720
9765
|
function TreeListViewInner({
|
|
9721
9766
|
acceptsDrop,
|
|
9722
9767
|
activeItemId: activeItemIdProp,
|
|
@@ -10160,7 +10205,7 @@ function TreeListViewInner({
|
|
|
10160
10205
|
window.addEventListener("pointermove", handleColumnResizeMove);
|
|
10161
10206
|
window.addEventListener("pointerup", handleColumnResizeEnd);
|
|
10162
10207
|
}
|
|
10163
|
-
return /* @__PURE__ */
|
|
10208
|
+
return /* @__PURE__ */ jsxs40(
|
|
10164
10209
|
"div",
|
|
10165
10210
|
{
|
|
10166
10211
|
...props,
|
|
@@ -10180,7 +10225,7 @@ function TreeListViewInner({
|
|
|
10180
10225
|
style: {
|
|
10181
10226
|
"--nu-tree-list-view-columns": templateColumns
|
|
10182
10227
|
},
|
|
10183
|
-
children: columns.map((column, columnIndex) => /* @__PURE__ */
|
|
10228
|
+
children: columns.map((column, columnIndex) => /* @__PURE__ */ jsxs40(
|
|
10184
10229
|
"span",
|
|
10185
10230
|
{
|
|
10186
10231
|
className: [
|
|
@@ -10541,7 +10586,7 @@ function useNuTheme() {
|
|
|
10541
10586
|
}
|
|
10542
10587
|
|
|
10543
10588
|
// src/theme/NuThemeProvider.tsx
|
|
10544
|
-
import { jsx as jsx62, jsxs as
|
|
10589
|
+
import { jsx as jsx62, jsxs as jsxs41 } from "react/jsx-runtime";
|
|
10545
10590
|
function NuThemeProvider({
|
|
10546
10591
|
children,
|
|
10547
10592
|
className,
|
|
@@ -10632,7 +10677,7 @@ function NuThemeProvider({
|
|
|
10632
10677
|
handleThemeChange
|
|
10633
10678
|
]
|
|
10634
10679
|
);
|
|
10635
|
-
return /* @__PURE__ */ jsx62(NuThemeContext.Provider, { value: contextValue, children: /* @__PURE__ */
|
|
10680
|
+
return /* @__PURE__ */ jsx62(NuThemeContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxs41(
|
|
10636
10681
|
"div",
|
|
10637
10682
|
{
|
|
10638
10683
|
className: ["nu-theme-root", className].filter(Boolean).join(" "),
|