@agent-native/toolkit 0.20.1-nightly-20260915184036 → 0.20.1
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/agent-native.eject.json +1 -0
- package/dist/app-shell/sidebar-overflow.spec.d.ts +2 -0
- package/dist/app-shell/sidebar-overflow.spec.d.ts.map +1 -0
- package/dist/app-shell/sidebar-overflow.spec.js +109 -0
- package/dist/app-shell/sidebar-overflow.spec.js.map +1 -0
- package/dist/app-shell/sidebar.d.ts +2 -0
- package/dist/app-shell/sidebar.d.ts.map +1 -1
- package/dist/app-shell/sidebar.js +57 -3
- package/dist/app-shell/sidebar.js.map +1 -1
- package/package.json +1 -1
- package/src/app-shell/sidebar-overflow.spec.tsx +136 -0
- package/src/app-shell/sidebar.tsx +102 -2
package/agent-native.eject.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidebar-overflow.spec.d.ts","sourceRoot":"","sources":["../../src/app-shell/sidebar-overflow.spec.tsx"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
// @vitest-environment happy-dom
|
|
3
|
+
import { act } from "react";
|
|
4
|
+
import { createPortal } from "react-dom";
|
|
5
|
+
import { createRoot } from "react-dom/client";
|
|
6
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
7
|
+
import { AppSidebar } from "./sidebar.js";
|
|
8
|
+
describe("AppSidebar overflow affordances", () => {
|
|
9
|
+
let container;
|
|
10
|
+
let root;
|
|
11
|
+
let resize;
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
const resizeCallbacks = [];
|
|
14
|
+
resize = () => resizeCallbacks.forEach((callback) => callback());
|
|
15
|
+
vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true);
|
|
16
|
+
vi.stubGlobal("ResizeObserver", class {
|
|
17
|
+
constructor(callback) {
|
|
18
|
+
resizeCallbacks.push(callback);
|
|
19
|
+
}
|
|
20
|
+
observe() { }
|
|
21
|
+
unobserve() { }
|
|
22
|
+
disconnect() { }
|
|
23
|
+
});
|
|
24
|
+
container = document.createElement("div");
|
|
25
|
+
document.body.append(container);
|
|
26
|
+
root = createRoot(container);
|
|
27
|
+
});
|
|
28
|
+
afterEach(() => {
|
|
29
|
+
act(() => root.unmount());
|
|
30
|
+
container.remove();
|
|
31
|
+
vi.unstubAllGlobals();
|
|
32
|
+
});
|
|
33
|
+
function render(children = _jsx("button", { type: "button", children: "Calendar" })) {
|
|
34
|
+
act(() => {
|
|
35
|
+
root.render(_jsx(AppSidebar, { brandName: "Calendar", overflowAffordances: true, children: children }));
|
|
36
|
+
});
|
|
37
|
+
return container.querySelector("[data-app-sidebar-scroll-viewport]");
|
|
38
|
+
}
|
|
39
|
+
function setDimensions(viewport, height = 600, contentHeight = 1000) {
|
|
40
|
+
Object.defineProperties(viewport, {
|
|
41
|
+
clientHeight: { configurable: true, value: height },
|
|
42
|
+
scrollHeight: { configurable: true, value: contentHeight },
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
it("shows the relevant edge cues as the user scrolls", () => {
|
|
46
|
+
const viewport = render();
|
|
47
|
+
setDimensions(viewport);
|
|
48
|
+
act(() => resize());
|
|
49
|
+
expect(container.querySelector('[data-scroll-edge="top"]')).toBeNull();
|
|
50
|
+
expect(container.querySelector('[data-scroll-edge="bottom"]')).not.toBeNull();
|
|
51
|
+
act(() => {
|
|
52
|
+
viewport.scrollTop = 200;
|
|
53
|
+
viewport.dispatchEvent(new Event("scroll"));
|
|
54
|
+
});
|
|
55
|
+
expect(container.querySelectorAll("[data-scroll-edge]")).toHaveLength(2);
|
|
56
|
+
act(() => {
|
|
57
|
+
viewport.scrollTop = 399.5;
|
|
58
|
+
viewport.dispatchEvent(new Event("scroll"));
|
|
59
|
+
});
|
|
60
|
+
expect(container.querySelector('[data-scroll-edge="top"]')).not.toBeNull();
|
|
61
|
+
expect(container.querySelector('[data-scroll-edge="bottom"]')).toBeNull();
|
|
62
|
+
});
|
|
63
|
+
it("removes the cues when resized content fits", () => {
|
|
64
|
+
const viewport = render();
|
|
65
|
+
setDimensions(viewport);
|
|
66
|
+
act(() => resize());
|
|
67
|
+
setDimensions(viewport, 600, 600.5);
|
|
68
|
+
act(() => resize());
|
|
69
|
+
expect(container.querySelectorAll("[data-scroll-edge]")).toHaveLength(0);
|
|
70
|
+
});
|
|
71
|
+
it("reveals focused controls clear of an edge cue", () => {
|
|
72
|
+
const viewport = render();
|
|
73
|
+
setDimensions(viewport);
|
|
74
|
+
const button = container.querySelector("nav button");
|
|
75
|
+
vi.spyOn(viewport, "getBoundingClientRect").mockReturnValue({
|
|
76
|
+
top: 50,
|
|
77
|
+
bottom: 650,
|
|
78
|
+
});
|
|
79
|
+
vi.spyOn(button, "getBoundingClientRect").mockReturnValue({
|
|
80
|
+
top: 640,
|
|
81
|
+
bottom: 670,
|
|
82
|
+
});
|
|
83
|
+
act(() => button.focus());
|
|
84
|
+
expect(viewport.scrollTop).toBe(28);
|
|
85
|
+
});
|
|
86
|
+
it("does not scroll for a portaled control outside the viewport", () => {
|
|
87
|
+
const portal = document.createElement("div");
|
|
88
|
+
document.body.append(portal);
|
|
89
|
+
try {
|
|
90
|
+
const viewport = render(createPortal(_jsx("button", { type: "button", children: "Color" }), portal));
|
|
91
|
+
setDimensions(viewport);
|
|
92
|
+
const button = portal.querySelector("button");
|
|
93
|
+
vi.spyOn(viewport, "getBoundingClientRect").mockReturnValue({
|
|
94
|
+
top: 50,
|
|
95
|
+
bottom: 650,
|
|
96
|
+
});
|
|
97
|
+
vi.spyOn(button, "getBoundingClientRect").mockReturnValue({
|
|
98
|
+
top: 670,
|
|
99
|
+
bottom: 700,
|
|
100
|
+
});
|
|
101
|
+
act(() => button.focus());
|
|
102
|
+
expect(viewport.scrollTop).toBe(0);
|
|
103
|
+
}
|
|
104
|
+
finally {
|
|
105
|
+
portal.remove();
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
//# sourceMappingURL=sidebar-overflow.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidebar-overflow.spec.js","sourceRoot":"","sources":["../../src/app-shell/sidebar-overflow.spec.tsx"],"names":[],"mappings":"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"}
|
|
@@ -121,6 +121,8 @@ export interface AppSidebarProps extends HTMLAttributes<HTMLElement> {
|
|
|
121
121
|
onMobileOpenChange?: (open: boolean) => void;
|
|
122
122
|
/** Router-aware link component. Defaults to a native `<a href>`. */
|
|
123
123
|
linkComponent?: AppSidebarLinkComponent;
|
|
124
|
+
/** Show a persistent scrollbar and edge cues while the sidebar overflows. */
|
|
125
|
+
overflowAffordances?: boolean;
|
|
124
126
|
brandName?: ReactNode;
|
|
125
127
|
brandHref?: string;
|
|
126
128
|
brandIcon?: ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../src/app-shell/sidebar.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../src/app-shell/sidebar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
|
|
2
3
|
import { IconChevronDown, IconLayoutSidebarLeftCollapse, IconLayoutSidebarLeftExpand, IconMessageCircle, } from "@tabler/icons-react";
|
|
3
|
-
import { createContext, forwardRef, isValidElement, useCallback, useContext, useMemo, useState, } from "react";
|
|
4
|
+
import { createContext, forwardRef, isValidElement, useCallback, useContext, useMemo, useEffect, useRef, useState, } from "react";
|
|
4
5
|
import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "../ui/collapsible.js";
|
|
6
|
+
import { ScrollBar } from "../ui/scroll-area.js";
|
|
5
7
|
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "../ui/tooltip.js";
|
|
6
8
|
import { cn } from "../utils.js";
|
|
7
9
|
import { usePersistentSidebarCollapsed } from "./use-persistent-sidebar-collapsed.js";
|
|
@@ -114,7 +116,7 @@ export const AppSidebarFooter = forwardRef(({ feedback, orgSwitcher, footerExtra
|
|
|
114
116
|
: "flex items-center gap-0.5"), children: [orgSwitcher, footerExtras, collapseButton] })] }));
|
|
115
117
|
});
|
|
116
118
|
AppSidebarFooter.displayName = "AppSidebarFooter";
|
|
117
|
-
export const AppSidebar = forwardRef(({ collapsed: controlledCollapsed, onCollapsedChange: controlledOnCollapsedChange, defaultCollapsed = false, collapsible = true, storageKey, isMobile = false, mobileOpen, onMobileOpenChange, linkComponent, brandName, brandHref = "/", brandIcon, brandLink, badge, headerContent, items, secondaryItems, feedback, orgSwitcher, footerExtras, footerContent, expandLabel = "Expand sidebar", collapseLabel = "Collapse sidebar", className, children, ...props }, ref) => {
|
|
119
|
+
export const AppSidebar = forwardRef(({ collapsed: controlledCollapsed, onCollapsedChange: controlledOnCollapsedChange, defaultCollapsed = false, collapsible = true, storageKey, isMobile = false, mobileOpen, onMobileOpenChange, linkComponent, overflowAffordances = false, brandName, brandHref = "/", brandIcon, brandLink, badge, headerContent, items, secondaryItems, feedback, orgSwitcher, footerExtras, footerContent, expandLabel = "Expand sidebar", collapseLabel = "Collapse sidebar", className, children, ...props }, ref) => {
|
|
118
120
|
// Persistence hook if storageKey is provided and not controlled
|
|
119
121
|
const persistent = usePersistentSidebarCollapsed({
|
|
120
122
|
storageKey: storageKey ?? "app-sidebar-default-key",
|
|
@@ -172,7 +174,7 @@ export const AppSidebar = forwardRef(({ collapsed: controlledCollapsed, onCollap
|
|
|
172
174
|
: "relative md:static", showCollapsedSidebar && "md:w-14", ownsMobileDrawer &&
|
|
173
175
|
(mobileOpen
|
|
174
176
|
? "translate-x-0"
|
|
175
|
-
: "-translate-x-full rtl:translate-x-full md:translate-x-0"), className), ...props, children: [headerContent ?? (_jsx(AppSidebarHeader, { brandName: brandName, brandHref: brandHref, brandIcon: brandIcon, brandLink: brandLink, badge: badge })), _jsx(
|
|
177
|
+
: "-translate-x-full rtl:translate-x-full md:translate-x-0"), className), ...props, children: [headerContent ?? (_jsx(AppSidebarHeader, { brandName: brandName, brandHref: brandHref, brandIcon: brandIcon, brandLink: brandLink, badge: badge })), _jsx(AppSidebarScrollRegion, { affordances: overflowAffordances, children: showCollapsedSidebar ? (_jsxs("nav", { className: "flex flex-col items-center gap-1 px-2 py-3", children: [items?.map((item) => (_jsx(AppSidebarNavItem, { to: item.to, href: item.href, label: item.label, icon: item.icon, active: item.active, count: item.count, badge: item.badge, onClick: item.onClick }, item.id ?? item.to ?? item.href ?? item.label))), children, secondaryItems && secondaryItems.length > 0 && (_jsx("div", { className: "mt-2 flex flex-col items-center gap-1 border-t border-border/70 pt-2", children: secondaryItems.map((item) => (_jsx(AppSidebarNavItem, { to: item.to, href: item.href, label: item.label, icon: item.icon, active: item.active, count: item.count, badge: item.badge, onClick: item.onClick }, item.id ?? item.to ?? item.href ?? item.label))) }))] })) : (_jsxs("nav", { className: "space-y-0.5 px-2 py-3", children: [items?.map((item) => {
|
|
176
178
|
if (item.children) {
|
|
177
179
|
return (_jsx(AppSidebarNavGroup, { to: item.to, href: item.href, label: item.label, icon: item.icon, active: item.active, count: item.count, actions: item.actions, children: item.children }, item.id ?? item.to ?? item.href ?? item.label));
|
|
178
180
|
}
|
|
@@ -180,4 +182,56 @@ export const AppSidebar = forwardRef(({ collapsed: controlledCollapsed, onCollap
|
|
|
180
182
|
}), children, secondaryItems && secondaryItems.length > 0 && (_jsx("div", { className: "mt-3 space-y-0.5 border-t border-border/70 pt-3", children: secondaryItems.map((item) => (_jsx(AppSidebarNavItem, { to: item.to, href: item.href, label: item.label, icon: item.icon, active: item.active, count: item.count, badge: item.badge, actions: item.actions, onClick: item.onClick }, item.id ?? item.to ?? item.href ?? item.label))) }))] })) }), footerContent ?? (_jsx(AppSidebarFooter, { feedback: feedback, orgSwitcher: orgSwitcher, footerExtras: footerExtras, collapsible: collapsible, expandLabel: expandLabel, collapseLabel: collapseLabel }))] }) }) }));
|
|
181
183
|
});
|
|
182
184
|
AppSidebar.displayName = "AppSidebar";
|
|
185
|
+
function AppSidebarScrollRegion({ affordances, children, }) {
|
|
186
|
+
const viewportRef = useRef(null);
|
|
187
|
+
const contentRef = useRef(null);
|
|
188
|
+
const [edges, setEdges] = useState({ above: false, below: false });
|
|
189
|
+
useEffect(() => {
|
|
190
|
+
if (!affordances)
|
|
191
|
+
return;
|
|
192
|
+
const viewport = viewportRef.current;
|
|
193
|
+
const content = contentRef.current;
|
|
194
|
+
if (!viewport || !content)
|
|
195
|
+
return;
|
|
196
|
+
const update = () => {
|
|
197
|
+
const remaining = viewport.scrollHeight - viewport.clientHeight;
|
|
198
|
+
const overflowing = remaining > 1;
|
|
199
|
+
const above = overflowing && viewport.scrollTop > 1;
|
|
200
|
+
const below = overflowing && viewport.scrollTop < remaining - 1;
|
|
201
|
+
setEdges((current) => current.above === above && current.below === below
|
|
202
|
+
? current
|
|
203
|
+
: { above, below });
|
|
204
|
+
};
|
|
205
|
+
const observer = new ResizeObserver(update);
|
|
206
|
+
observer.observe(viewport);
|
|
207
|
+
observer.observe(content);
|
|
208
|
+
viewport.addEventListener("scroll", update, { passive: true });
|
|
209
|
+
update();
|
|
210
|
+
return () => {
|
|
211
|
+
observer.disconnect();
|
|
212
|
+
viewport.removeEventListener("scroll", update);
|
|
213
|
+
};
|
|
214
|
+
}, [affordances]);
|
|
215
|
+
if (!affordances) {
|
|
216
|
+
return _jsx("div", { className: "min-h-0 flex-1 overflow-y-auto", children: children });
|
|
217
|
+
}
|
|
218
|
+
return (_jsxs(ScrollAreaPrimitive.Root, { type: edges.above || edges.below ? "always" : "auto", className: "relative min-h-0 flex-1 overflow-hidden", "data-app-sidebar-scroll-area": true, children: [_jsx(ScrollAreaPrimitive.Viewport, { ref: viewportRef,
|
|
219
|
+
// Radix's intrinsic table sizing would widen truncated rows beyond the sidebar.
|
|
220
|
+
className: "size-full scroll-py-2 [&>div]:!block", "data-app-sidebar-scroll-viewport": true, onFocusCapture: (event) => {
|
|
221
|
+
const viewport = event.currentTarget;
|
|
222
|
+
const target = event.target;
|
|
223
|
+
if (!(target instanceof HTMLElement) ||
|
|
224
|
+
target === viewport ||
|
|
225
|
+
!viewport.contains(target))
|
|
226
|
+
return;
|
|
227
|
+
const bounds = viewport.getBoundingClientRect();
|
|
228
|
+
const focused = target.getBoundingClientRect();
|
|
229
|
+
if (focused.top < bounds.top + 8) {
|
|
230
|
+
viewport.scrollTop += focused.top - bounds.top - 8;
|
|
231
|
+
}
|
|
232
|
+
else if (focused.bottom > bounds.bottom - 8) {
|
|
233
|
+
viewport.scrollTop += focused.bottom - bounds.bottom + 8;
|
|
234
|
+
}
|
|
235
|
+
}, children: _jsx("div", { ref: contentRef, children: children }) }), _jsx(ScrollBar, { className: "z-10 w-1.5 border-none p-px [&>div]:bg-muted-foreground/50" }), edges.above && (_jsx("div", { "aria-hidden": "true", "data-scroll-edge": "top", className: "pointer-events-none absolute inset-x-0 top-0 h-2 bg-gradient-to-b from-sidebar to-transparent" })), edges.below && (_jsx("div", { "aria-hidden": "true", "data-scroll-edge": "bottom", className: "pointer-events-none absolute inset-x-0 bottom-0 h-2 bg-gradient-to-t from-sidebar to-transparent" }))] }));
|
|
236
|
+
}
|
|
183
237
|
//# sourceMappingURL=sidebar.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sidebar.js","sourceRoot":"","sources":["../../src/app-shell/sidebar.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sidebar.js","sourceRoot":"","sources":["../../src/app-shell/sidebar.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
// @vitest-environment happy-dom
|
|
2
|
+
|
|
3
|
+
import { act } from "react";
|
|
4
|
+
import { createPortal } from "react-dom";
|
|
5
|
+
import { createRoot, type Root } from "react-dom/client";
|
|
6
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
7
|
+
|
|
8
|
+
import { AppSidebar } from "./sidebar.js";
|
|
9
|
+
|
|
10
|
+
describe("AppSidebar overflow affordances", () => {
|
|
11
|
+
let container: HTMLDivElement;
|
|
12
|
+
let root: Root;
|
|
13
|
+
let resize: () => void;
|
|
14
|
+
|
|
15
|
+
beforeEach(() => {
|
|
16
|
+
const resizeCallbacks: Array<() => void> = [];
|
|
17
|
+
resize = () => resizeCallbacks.forEach((callback) => callback());
|
|
18
|
+
vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true);
|
|
19
|
+
vi.stubGlobal(
|
|
20
|
+
"ResizeObserver",
|
|
21
|
+
class {
|
|
22
|
+
constructor(callback: () => void) {
|
|
23
|
+
resizeCallbacks.push(callback);
|
|
24
|
+
}
|
|
25
|
+
observe() {}
|
|
26
|
+
unobserve() {}
|
|
27
|
+
disconnect() {}
|
|
28
|
+
},
|
|
29
|
+
);
|
|
30
|
+
container = document.createElement("div");
|
|
31
|
+
document.body.append(container);
|
|
32
|
+
root = createRoot(container);
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
afterEach(() => {
|
|
36
|
+
act(() => root.unmount());
|
|
37
|
+
container.remove();
|
|
38
|
+
vi.unstubAllGlobals();
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
function render(children = <button type="button">Calendar</button>) {
|
|
42
|
+
act(() => {
|
|
43
|
+
root.render(
|
|
44
|
+
<AppSidebar brandName="Calendar" overflowAffordances>
|
|
45
|
+
{children}
|
|
46
|
+
</AppSidebar>,
|
|
47
|
+
);
|
|
48
|
+
});
|
|
49
|
+
return container.querySelector<HTMLDivElement>(
|
|
50
|
+
"[data-app-sidebar-scroll-viewport]",
|
|
51
|
+
)!;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function setDimensions(
|
|
55
|
+
viewport: HTMLDivElement,
|
|
56
|
+
height = 600,
|
|
57
|
+
contentHeight = 1000,
|
|
58
|
+
) {
|
|
59
|
+
Object.defineProperties(viewport, {
|
|
60
|
+
clientHeight: { configurable: true, value: height },
|
|
61
|
+
scrollHeight: { configurable: true, value: contentHeight },
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
it("shows the relevant edge cues as the user scrolls", () => {
|
|
66
|
+
const viewport = render();
|
|
67
|
+
setDimensions(viewport);
|
|
68
|
+
act(() => resize());
|
|
69
|
+
expect(container.querySelector('[data-scroll-edge="top"]')).toBeNull();
|
|
70
|
+
expect(
|
|
71
|
+
container.querySelector('[data-scroll-edge="bottom"]'),
|
|
72
|
+
).not.toBeNull();
|
|
73
|
+
|
|
74
|
+
act(() => {
|
|
75
|
+
viewport.scrollTop = 200;
|
|
76
|
+
viewport.dispatchEvent(new Event("scroll"));
|
|
77
|
+
});
|
|
78
|
+
expect(container.querySelectorAll("[data-scroll-edge]")).toHaveLength(2);
|
|
79
|
+
|
|
80
|
+
act(() => {
|
|
81
|
+
viewport.scrollTop = 399.5;
|
|
82
|
+
viewport.dispatchEvent(new Event("scroll"));
|
|
83
|
+
});
|
|
84
|
+
expect(container.querySelector('[data-scroll-edge="top"]')).not.toBeNull();
|
|
85
|
+
expect(container.querySelector('[data-scroll-edge="bottom"]')).toBeNull();
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it("removes the cues when resized content fits", () => {
|
|
89
|
+
const viewport = render();
|
|
90
|
+
setDimensions(viewport);
|
|
91
|
+
act(() => resize());
|
|
92
|
+
setDimensions(viewport, 600, 600.5);
|
|
93
|
+
act(() => resize());
|
|
94
|
+
expect(container.querySelectorAll("[data-scroll-edge]")).toHaveLength(0);
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
it("reveals focused controls clear of an edge cue", () => {
|
|
98
|
+
const viewport = render();
|
|
99
|
+
setDimensions(viewport);
|
|
100
|
+
const button = container.querySelector<HTMLButtonElement>("nav button")!;
|
|
101
|
+
vi.spyOn(viewport, "getBoundingClientRect").mockReturnValue({
|
|
102
|
+
top: 50,
|
|
103
|
+
bottom: 650,
|
|
104
|
+
} as DOMRect);
|
|
105
|
+
vi.spyOn(button, "getBoundingClientRect").mockReturnValue({
|
|
106
|
+
top: 640,
|
|
107
|
+
bottom: 670,
|
|
108
|
+
} as DOMRect);
|
|
109
|
+
act(() => button.focus());
|
|
110
|
+
expect(viewport.scrollTop).toBe(28);
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
it("does not scroll for a portaled control outside the viewport", () => {
|
|
114
|
+
const portal = document.createElement("div");
|
|
115
|
+
document.body.append(portal);
|
|
116
|
+
try {
|
|
117
|
+
const viewport = render(
|
|
118
|
+
createPortal(<button type="button">Color</button>, portal),
|
|
119
|
+
);
|
|
120
|
+
setDimensions(viewport);
|
|
121
|
+
const button = portal.querySelector<HTMLButtonElement>("button")!;
|
|
122
|
+
vi.spyOn(viewport, "getBoundingClientRect").mockReturnValue({
|
|
123
|
+
top: 50,
|
|
124
|
+
bottom: 650,
|
|
125
|
+
} as DOMRect);
|
|
126
|
+
vi.spyOn(button, "getBoundingClientRect").mockReturnValue({
|
|
127
|
+
top: 670,
|
|
128
|
+
bottom: 700,
|
|
129
|
+
} as DOMRect);
|
|
130
|
+
act(() => button.focus());
|
|
131
|
+
expect(viewport.scrollTop).toBe(0);
|
|
132
|
+
} finally {
|
|
133
|
+
portal.remove();
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
});
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
|
|
1
2
|
import {
|
|
2
3
|
IconChevronDown,
|
|
3
4
|
IconLayoutSidebarLeftCollapse,
|
|
@@ -11,6 +12,8 @@ import {
|
|
|
11
12
|
useCallback,
|
|
12
13
|
useContext,
|
|
13
14
|
useMemo,
|
|
15
|
+
useEffect,
|
|
16
|
+
useRef,
|
|
14
17
|
useState,
|
|
15
18
|
type AnchorHTMLAttributes,
|
|
16
19
|
type ComponentType,
|
|
@@ -25,6 +28,7 @@ import {
|
|
|
25
28
|
CollapsibleContent,
|
|
26
29
|
CollapsibleTrigger,
|
|
27
30
|
} from "../ui/collapsible.js";
|
|
31
|
+
import { ScrollBar } from "../ui/scroll-area.js";
|
|
28
32
|
import {
|
|
29
33
|
Tooltip,
|
|
30
34
|
TooltipContent,
|
|
@@ -744,6 +748,8 @@ export interface AppSidebarProps extends HTMLAttributes<HTMLElement> {
|
|
|
744
748
|
onMobileOpenChange?: (open: boolean) => void;
|
|
745
749
|
/** Router-aware link component. Defaults to a native `<a href>`. */
|
|
746
750
|
linkComponent?: AppSidebarLinkComponent;
|
|
751
|
+
/** Show a persistent scrollbar and edge cues while the sidebar overflows. */
|
|
752
|
+
overflowAffordances?: boolean;
|
|
747
753
|
|
|
748
754
|
// Header
|
|
749
755
|
brandName?: ReactNode;
|
|
@@ -778,6 +784,7 @@ export const AppSidebar = forwardRef<HTMLElement, AppSidebarProps>(
|
|
|
778
784
|
mobileOpen,
|
|
779
785
|
onMobileOpenChange,
|
|
780
786
|
linkComponent,
|
|
787
|
+
overflowAffordances = false,
|
|
781
788
|
|
|
782
789
|
brandName,
|
|
783
790
|
brandHref = "/",
|
|
@@ -900,7 +907,7 @@ export const AppSidebar = forwardRef<HTMLElement, AppSidebarProps>(
|
|
|
900
907
|
/>
|
|
901
908
|
)}
|
|
902
909
|
|
|
903
|
-
<
|
|
910
|
+
<AppSidebarScrollRegion affordances={overflowAffordances}>
|
|
904
911
|
{showCollapsedSidebar ? (
|
|
905
912
|
<nav className="flex flex-col items-center gap-1 px-2 py-3">
|
|
906
913
|
{items?.map((item) => (
|
|
@@ -990,7 +997,7 @@ export const AppSidebar = forwardRef<HTMLElement, AppSidebarProps>(
|
|
|
990
997
|
)}
|
|
991
998
|
</nav>
|
|
992
999
|
)}
|
|
993
|
-
</
|
|
1000
|
+
</AppSidebarScrollRegion>
|
|
994
1001
|
|
|
995
1002
|
{footerContent ?? (
|
|
996
1003
|
<AppSidebarFooter
|
|
@@ -1009,3 +1016,96 @@ export const AppSidebar = forwardRef<HTMLElement, AppSidebarProps>(
|
|
|
1009
1016
|
},
|
|
1010
1017
|
);
|
|
1011
1018
|
AppSidebar.displayName = "AppSidebar";
|
|
1019
|
+
|
|
1020
|
+
function AppSidebarScrollRegion({
|
|
1021
|
+
affordances,
|
|
1022
|
+
children,
|
|
1023
|
+
}: {
|
|
1024
|
+
affordances: boolean;
|
|
1025
|
+
children: ReactNode;
|
|
1026
|
+
}) {
|
|
1027
|
+
const viewportRef = useRef<HTMLDivElement>(null);
|
|
1028
|
+
const contentRef = useRef<HTMLDivElement>(null);
|
|
1029
|
+
const [edges, setEdges] = useState({ above: false, below: false });
|
|
1030
|
+
|
|
1031
|
+
useEffect(() => {
|
|
1032
|
+
if (!affordances) return;
|
|
1033
|
+
const viewport = viewportRef.current;
|
|
1034
|
+
const content = contentRef.current;
|
|
1035
|
+
if (!viewport || !content) return;
|
|
1036
|
+
|
|
1037
|
+
const update = () => {
|
|
1038
|
+
const remaining = viewport.scrollHeight - viewport.clientHeight;
|
|
1039
|
+
const overflowing = remaining > 1;
|
|
1040
|
+
const above = overflowing && viewport.scrollTop > 1;
|
|
1041
|
+
const below = overflowing && viewport.scrollTop < remaining - 1;
|
|
1042
|
+
setEdges((current) =>
|
|
1043
|
+
current.above === above && current.below === below
|
|
1044
|
+
? current
|
|
1045
|
+
: { above, below },
|
|
1046
|
+
);
|
|
1047
|
+
};
|
|
1048
|
+
const observer = new ResizeObserver(update);
|
|
1049
|
+
observer.observe(viewport);
|
|
1050
|
+
observer.observe(content);
|
|
1051
|
+
viewport.addEventListener("scroll", update, { passive: true });
|
|
1052
|
+
update();
|
|
1053
|
+
return () => {
|
|
1054
|
+
observer.disconnect();
|
|
1055
|
+
viewport.removeEventListener("scroll", update);
|
|
1056
|
+
};
|
|
1057
|
+
}, [affordances]);
|
|
1058
|
+
|
|
1059
|
+
if (!affordances) {
|
|
1060
|
+
return <div className="min-h-0 flex-1 overflow-y-auto">{children}</div>;
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
return (
|
|
1064
|
+
<ScrollAreaPrimitive.Root
|
|
1065
|
+
type={edges.above || edges.below ? "always" : "auto"}
|
|
1066
|
+
className="relative min-h-0 flex-1 overflow-hidden"
|
|
1067
|
+
data-app-sidebar-scroll-area
|
|
1068
|
+
>
|
|
1069
|
+
<ScrollAreaPrimitive.Viewport
|
|
1070
|
+
ref={viewportRef}
|
|
1071
|
+
// Radix's intrinsic table sizing would widen truncated rows beyond the sidebar.
|
|
1072
|
+
className="size-full scroll-py-2 [&>div]:!block"
|
|
1073
|
+
data-app-sidebar-scroll-viewport
|
|
1074
|
+
onFocusCapture={(event) => {
|
|
1075
|
+
const viewport = event.currentTarget;
|
|
1076
|
+
const target = event.target;
|
|
1077
|
+
if (
|
|
1078
|
+
!(target instanceof HTMLElement) ||
|
|
1079
|
+
target === viewport ||
|
|
1080
|
+
!viewport.contains(target)
|
|
1081
|
+
)
|
|
1082
|
+
return;
|
|
1083
|
+
const bounds = viewport.getBoundingClientRect();
|
|
1084
|
+
const focused = target.getBoundingClientRect();
|
|
1085
|
+
if (focused.top < bounds.top + 8) {
|
|
1086
|
+
viewport.scrollTop += focused.top - bounds.top - 8;
|
|
1087
|
+
} else if (focused.bottom > bounds.bottom - 8) {
|
|
1088
|
+
viewport.scrollTop += focused.bottom - bounds.bottom + 8;
|
|
1089
|
+
}
|
|
1090
|
+
}}
|
|
1091
|
+
>
|
|
1092
|
+
<div ref={contentRef}>{children}</div>
|
|
1093
|
+
</ScrollAreaPrimitive.Viewport>
|
|
1094
|
+
<ScrollBar className="z-10 w-1.5 border-none p-px [&>div]:bg-muted-foreground/50" />
|
|
1095
|
+
{edges.above && (
|
|
1096
|
+
<div
|
|
1097
|
+
aria-hidden="true"
|
|
1098
|
+
data-scroll-edge="top"
|
|
1099
|
+
className="pointer-events-none absolute inset-x-0 top-0 h-2 bg-gradient-to-b from-sidebar to-transparent"
|
|
1100
|
+
/>
|
|
1101
|
+
)}
|
|
1102
|
+
{edges.below && (
|
|
1103
|
+
<div
|
|
1104
|
+
aria-hidden="true"
|
|
1105
|
+
data-scroll-edge="bottom"
|
|
1106
|
+
className="pointer-events-none absolute inset-x-0 bottom-0 h-2 bg-gradient-to-t from-sidebar to-transparent"
|
|
1107
|
+
/>
|
|
1108
|
+
)}
|
|
1109
|
+
</ScrollAreaPrimitive.Root>
|
|
1110
|
+
);
|
|
1111
|
+
}
|