@agent-native/toolkit 0.19.7 → 0.19.8-nightly-20260910195009

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.
@@ -96,7 +96,14 @@
96
96
  "strategy": "source-copy",
97
97
  "sourceEntries": ["src/app-shell"],
98
98
  "targetRoot": "app/components/agent-native/toolkit",
99
- "dependencies": ["clsx", "react", "tailwind-merge"],
99
+ "dependencies": [
100
+ "@radix-ui/react-collapsible",
101
+ "@radix-ui/react-tooltip",
102
+ "@tabler/icons-react",
103
+ "clsx",
104
+ "react",
105
+ "tailwind-merge"
106
+ ],
100
107
  "verification": ["pnpm typecheck"]
101
108
  },
102
109
  {
@@ -1,4 +1,5 @@
1
1
  export * from "./header-actions.js";
2
2
  export * from "./sidebar-footer-actions.js";
3
+ export * from "./sidebar.js";
3
4
  export * from "./use-persistent-sidebar-collapsed.js";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app-shell/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uCAAuC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app-shell/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,cAAc,CAAC;AAC7B,cAAc,uCAAuC,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export * from "./header-actions.js";
2
2
  export * from "./sidebar-footer-actions.js";
3
+ export * from "./sidebar.js";
3
4
  export * from "./use-persistent-sidebar-collapsed.js";
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/app-shell/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uCAAuC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/app-shell/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,cAAc,CAAC;AAC7B,cAAc,uCAAuC,CAAC"}
@@ -0,0 +1,134 @@
1
+ import { type ComponentType, type HTMLAttributes, type MouseEvent, type ReactNode } from "react";
2
+ export type AppSidebarLinkComponent = ComponentType<{
3
+ to?: string;
4
+ href?: string;
5
+ className?: string;
6
+ onClick?: (event: MouseEvent) => void;
7
+ children?: ReactNode;
8
+ "aria-label"?: string;
9
+ }>;
10
+ export interface AppSidebarContextValue {
11
+ collapsed: boolean;
12
+ setCollapsed: (collapsed: boolean | ((current: boolean) => boolean)) => void;
13
+ toggleCollapsed: () => void;
14
+ isMobile: boolean;
15
+ /** Router-aware link. Defaults to a native `<a href>`. */
16
+ LinkComponent: AppSidebarLinkComponent;
17
+ }
18
+ export declare function useAppSidebar(): AppSidebarContextValue;
19
+ export interface AppSidebarItemDefinition {
20
+ id?: string;
21
+ to?: string;
22
+ href?: string;
23
+ label: string;
24
+ icon?: ComponentType<{
25
+ className?: string;
26
+ }> | ReactNode;
27
+ active?: boolean;
28
+ count?: number | string;
29
+ badge?: ReactNode;
30
+ actions?: ReactNode;
31
+ onClick?: (event: MouseEvent) => void;
32
+ children?: ReactNode;
33
+ }
34
+ export interface AppSidebarHeaderProps extends HTMLAttributes<HTMLDivElement> {
35
+ brandName?: ReactNode;
36
+ brandHref?: string;
37
+ brandIcon?: ReactNode;
38
+ brandLink?: ReactNode;
39
+ badge?: ReactNode;
40
+ onBrandClick?: (event: MouseEvent) => void;
41
+ collapsed?: boolean;
42
+ }
43
+ export declare const AppSidebarHeader: import("react").ForwardRefExoticComponent<AppSidebarHeaderProps & import("react").RefAttributes<HTMLDivElement>>;
44
+ export interface AppSidebarNavItemProps extends HTMLAttributes<HTMLDivElement> {
45
+ label: ReactNode;
46
+ icon?: ComponentType<{
47
+ className?: string;
48
+ }> | ReactNode;
49
+ to?: string;
50
+ href?: string;
51
+ active?: boolean;
52
+ count?: number | string;
53
+ badge?: ReactNode;
54
+ actions?: ReactNode;
55
+ onClick?: (event: MouseEvent) => void;
56
+ asChild?: boolean;
57
+ tooltipSide?: "right" | "top" | "bottom" | "left";
58
+ }
59
+ export declare const AppSidebarNavItem: import("react").ForwardRefExoticComponent<AppSidebarNavItemProps & import("react").RefAttributes<HTMLDivElement>>;
60
+ export interface AppSidebarNavGroupProps extends HTMLAttributes<HTMLDivElement> {
61
+ label: ReactNode;
62
+ icon?: ComponentType<{
63
+ className?: string;
64
+ }> | ReactNode;
65
+ to?: string;
66
+ href?: string;
67
+ active?: boolean;
68
+ count?: number | string;
69
+ open?: boolean;
70
+ onOpenChange?: (open: boolean) => void;
71
+ defaultOpen?: boolean;
72
+ actions?: ReactNode;
73
+ children: ReactNode;
74
+ }
75
+ export declare const AppSidebarNavGroup: import("react").ForwardRefExoticComponent<AppSidebarNavGroupProps & import("react").RefAttributes<HTMLDivElement>>;
76
+ export interface AppSidebarSectionProps extends Omit<HTMLAttributes<HTMLDivElement>, "title"> {
77
+ title?: ReactNode;
78
+ divider?: boolean;
79
+ }
80
+ export declare const AppSidebarSection: import("react").ForwardRefExoticComponent<AppSidebarSectionProps & import("react").RefAttributes<HTMLDivElement>>;
81
+ export interface AppSidebarFeedbackButtonProps {
82
+ label?: string;
83
+ icon?: ComponentType<{
84
+ className?: string;
85
+ }> | ReactNode;
86
+ onClick?: (event: MouseEvent) => void;
87
+ className?: string;
88
+ collapsed?: boolean;
89
+ }
90
+ export declare function AppSidebarFeedbackButton({ label, icon, onClick, className, collapsed: propCollapsed, }: AppSidebarFeedbackButtonProps): import("react").JSX.Element;
91
+ export interface AppSidebarFooterProps extends HTMLAttributes<HTMLDivElement> {
92
+ feedback?: ReactNode;
93
+ orgSwitcher?: ReactNode;
94
+ footerExtras?: ReactNode;
95
+ collapsible?: boolean;
96
+ expandLabel?: string;
97
+ collapseLabel?: string;
98
+ collapsed?: boolean;
99
+ onToggleCollapsed?: () => void;
100
+ }
101
+ export declare const AppSidebarFooter: import("react").ForwardRefExoticComponent<AppSidebarFooterProps & import("react").RefAttributes<HTMLDivElement>>;
102
+ export interface AppSidebarProps extends HTMLAttributes<HTMLElement> {
103
+ collapsed?: boolean;
104
+ onCollapsedChange?: (collapsed: boolean) => void;
105
+ defaultCollapsed?: boolean;
106
+ collapsible?: boolean;
107
+ storageKey?: string;
108
+ isMobile?: boolean;
109
+ /**
110
+ * When set (boolean), the sidebar owns off-canvas mobile drawer positioning.
111
+ * Leave undefined when embedding inside an external Sheet/drawer so the
112
+ * sidebar stays visible without translate offsets.
113
+ */
114
+ mobileOpen?: boolean;
115
+ onMobileOpenChange?: (open: boolean) => void;
116
+ /** Router-aware link component. Defaults to a native `<a href>`. */
117
+ linkComponent?: AppSidebarLinkComponent;
118
+ brandName?: ReactNode;
119
+ brandHref?: string;
120
+ brandIcon?: ReactNode;
121
+ brandLink?: ReactNode;
122
+ badge?: ReactNode;
123
+ headerContent?: ReactNode;
124
+ items?: AppSidebarItemDefinition[];
125
+ secondaryItems?: AppSidebarItemDefinition[];
126
+ feedback?: ReactNode;
127
+ orgSwitcher?: ReactNode;
128
+ footerExtras?: ReactNode;
129
+ footerContent?: ReactNode;
130
+ expandLabel?: string;
131
+ collapseLabel?: string;
132
+ }
133
+ export declare const AppSidebar: import("react").ForwardRefExoticComponent<AppSidebarProps & import("react").RefAttributes<HTMLElement>>;
134
+ //# sourceMappingURL=sidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../src/app-shell/sidebar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,183 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { IconChevronDown, IconLayoutSidebarLeftCollapse, IconLayoutSidebarLeftExpand, IconMessageCircle, } from "@tabler/icons-react";
3
+ import { createContext, forwardRef, isValidElement, useCallback, useContext, useMemo, useState, } from "react";
4
+ import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "../ui/collapsible.js";
5
+ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, } from "../ui/tooltip.js";
6
+ import { cn } from "../utils.js";
7
+ import { usePersistentSidebarCollapsed } from "./use-persistent-sidebar-collapsed.js";
8
+ const AppSidebarContext = createContext(null);
9
+ function NativeSidebarLink({ to, href, className, onClick, children, "aria-label": ariaLabel, }) {
10
+ return (_jsx("a", { href: to ?? href, className: className, onClick: onClick, "aria-label": ariaLabel, children: children }));
11
+ }
12
+ const defaultSidebarContextValue = {
13
+ collapsed: false,
14
+ setCollapsed: () => { },
15
+ toggleCollapsed: () => { },
16
+ isMobile: false,
17
+ LinkComponent: NativeSidebarLink,
18
+ };
19
+ export function useAppSidebar() {
20
+ const context = useContext(AppSidebarContext);
21
+ return context ?? defaultSidebarContextValue;
22
+ }
23
+ function renderSidebarIcon(icon, className = "size-4 shrink-0 text-primary") {
24
+ if (!icon)
25
+ return null;
26
+ if (isValidElement(icon)) {
27
+ return icon;
28
+ }
29
+ const IconComponent = icon;
30
+ return _jsx(IconComponent, { className: className });
31
+ }
32
+ export const AppSidebarHeader = forwardRef(({ brandName, brandHref = "/", brandIcon, brandLink, badge, onBrandClick, collapsed: propCollapsed, className, children, ...props }, ref) => {
33
+ const context = useAppSidebar();
34
+ const collapsed = propCollapsed ?? context.collapsed;
35
+ const LinkComponent = context.LinkComponent;
36
+ return (_jsxs("div", { ref: ref, "data-sidebar-header": true, className: cn("flex h-14 shrink-0 items-center border-b border-border", collapsed ? "flex-col justify-center gap-0.5 px-2" : "gap-2 px-4", className), ...props, children: [brandLink ?? (_jsxs(LinkComponent, { to: brandHref, href: brandHref, "aria-label": typeof brandName === "string" ? brandName : undefined, onClick: onBrandClick, className: cn("flex min-w-0 items-center gap-2 rounded text-start outline-none focus-visible:ring-2 focus-visible:ring-ring", collapsed ? "size-8 justify-center" : "shrink-0"), children: [brandIcon, !collapsed && brandName && (_jsx("span", { className: "truncate text-sm font-semibold text-primary", children: brandName }))] })), badge, children] }));
37
+ });
38
+ AppSidebarHeader.displayName = "AppSidebarHeader";
39
+ export const AppSidebarNavItem = forwardRef(({ label, icon, to, href, active = false, count, badge, actions, onClick, asChild = false, tooltipSide = "right", className, children, ...props }, ref) => {
40
+ const { collapsed, LinkComponent } = useAppSidebar();
41
+ const linkHref = to ?? href;
42
+ if (collapsed) {
43
+ const tooltipLabel = typeof label === "string" ? label : undefined;
44
+ const content = asChild ? (children) : linkHref ? (_jsx(LinkComponent, { to: to, href: href ?? to, "aria-label": tooltipLabel, onClick: onClick, className: cn("flex size-9 items-center justify-center rounded-md text-primary hover:bg-accent/60 hover:text-primary", active &&
45
+ "bg-primary/10 text-primary hover:bg-primary/10 hover:text-primary", className), children: renderSidebarIcon(icon) })) : (_jsx("button", { type: "button", "aria-label": tooltipLabel, onClick: onClick, className: cn("flex size-9 items-center justify-center rounded-md text-primary hover:bg-accent/60 hover:text-primary", active &&
46
+ "bg-primary/10 text-primary hover:bg-primary/10 hover:text-primary", className), children: renderSidebarIcon(icon) }));
47
+ return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: content }), _jsx(TooltipContent, { side: tooltipSide, children: label })] }));
48
+ }
49
+ if (asChild) {
50
+ return (_jsxs("div", { ref: ref, className: cn("group flex items-center rounded", active
51
+ ? "bg-primary/10 font-medium text-primary"
52
+ : "text-primary hover:bg-accent/60", className), ...props, children: [children, actions] }));
53
+ }
54
+ const innerContent = (_jsxs(_Fragment, { children: [renderSidebarIcon(icon), _jsx("span", { className: "flex-1 truncate text-primary", children: label }), count !== undefined &&
55
+ (typeof count === "number" ? count > 0 : Boolean(count)) && (_jsx("span", { className: "shrink-0 tabular-nums text-[11px] text-primary/80", children: count })), badge] }));
56
+ return (_jsxs("div", { ref: ref, className: cn("group flex items-center rounded", active
57
+ ? "bg-primary/10 font-medium text-primary"
58
+ : "text-primary hover:bg-accent/60", className), ...props, children: [linkHref ? (_jsx(LinkComponent, { to: to, href: href ?? to, onClick: onClick, className: "flex min-w-0 flex-1 items-center gap-2 px-2 py-1.5 text-xs text-primary", children: innerContent })) : (_jsx("button", { type: "button", onClick: onClick, className: "flex min-w-0 flex-1 items-center gap-2 px-2 py-1.5 text-xs text-primary", children: innerContent })), actions] }));
59
+ });
60
+ AppSidebarNavItem.displayName = "AppSidebarNavItem";
61
+ export const AppSidebarNavGroup = forwardRef(({ label, icon, to, href, active = false, count, open: controlledOpen, onOpenChange: controlledOnOpenChange, defaultOpen = false, actions, children, className, ...props }, ref) => {
62
+ const { collapsed, LinkComponent } = useAppSidebar();
63
+ const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);
64
+ const open = controlledOpen ?? uncontrolledOpen;
65
+ const onOpenChange = controlledOnOpenChange ?? setUncontrolledOpen;
66
+ const linkHref = to ?? href;
67
+ if (collapsed) {
68
+ const tooltipLabel = typeof label === "string" ? label : undefined;
69
+ return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx(LinkComponent, { to: to, href: href ?? to ?? "#", "aria-label": tooltipLabel, className: cn("flex size-9 items-center justify-center rounded-md text-primary hover:bg-accent/60 hover:text-primary", active &&
70
+ "bg-primary/10 text-primary hover:bg-primary/10 hover:text-primary", className), children: renderSidebarIcon(icon) }) }), _jsx(TooltipContent, { side: "right", children: label })] }));
71
+ }
72
+ return (_jsxs(Collapsible, { open: open, onOpenChange: onOpenChange, className: cn("group/sidebar-nav", className), ...props, children: [_jsxs("div", { ref: ref, className: cn("group flex items-center rounded", active
73
+ ? "bg-primary/10 font-medium text-primary"
74
+ : "text-primary hover:bg-accent/60"), children: [linkHref ? (_jsxs(LinkComponent, { to: to, href: href ?? to, className: "flex min-w-0 flex-1 items-center gap-2 px-2 py-1.5 text-xs text-primary", children: [renderSidebarIcon(icon), _jsx("span", { className: "flex-1 truncate text-primary", children: label }), count !== undefined &&
75
+ (typeof count === "number" ? count > 0 : Boolean(count)) && (_jsx("span", { className: "shrink-0 tabular-nums text-[11px] text-primary/80", children: count }))] })) : (_jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2 px-2 py-1.5 text-xs text-primary", children: [renderSidebarIcon(icon), _jsx("span", { className: "flex-1 truncate text-primary", children: label }), count !== undefined &&
76
+ (typeof count === "number" ? count > 0 : Boolean(count)) && (_jsx("span", { className: "shrink-0 tabular-nums text-[11px] text-primary/80", children: count }))] })), actions, _jsx(CollapsibleTrigger, { asChild: true, children: _jsx("button", { type: "button", "aria-label": open ? "Collapse" : "Expand", className: "me-1 flex size-7 shrink-0 items-center justify-center rounded text-primary hover:bg-accent hover:text-primary focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring", children: _jsx(IconChevronDown, { className: cn("size-3.5 transition-transform motion-reduce:transition-none", open && "rotate-180") }) }) })] }), _jsx(CollapsibleContent, { className: "clips-collapsible-content", children: _jsx("div", { className: "ms-3.5 border-s border-border/70 ps-2", children: children }) })] }));
77
+ });
78
+ AppSidebarNavGroup.displayName = "AppSidebarNavGroup";
79
+ export const AppSidebarSection = forwardRef(({ title, divider = true, className, children, ...props }, ref) => {
80
+ const { collapsed } = useAppSidebar();
81
+ return (_jsxs("div", { ref: ref, "data-sidebar-section": true, className: cn(divider && "border-t border-border/70", collapsed
82
+ ? "mt-2 flex flex-col items-center gap-1 pt-2"
83
+ : "mt-3 space-y-0.5 pt-3", className), ...props, children: [!collapsed && title && (_jsx("p", { className: "px-2 pb-1 text-[11px] font-medium uppercase tracking-wide text-muted-foreground/60", children: title })), children] }));
84
+ });
85
+ AppSidebarSection.displayName = "AppSidebarSection";
86
+ export function AppSidebarFeedbackButton({ label = "Report an issue", icon, onClick, className, collapsed: propCollapsed, }) {
87
+ let contextCollapsed = false;
88
+ try {
89
+ const context = useAppSidebar();
90
+ contextCollapsed = context.collapsed;
91
+ }
92
+ catch {
93
+ // coercion-ok: context is optional when AppSidebarFeedbackButton is used standalone
94
+ }
95
+ const isCollapsed = propCollapsed ?? contextCollapsed;
96
+ const button = (_jsxs("button", { type: "button", "aria-label": isCollapsed ? label : undefined, onClick: onClick, className: cn(isCollapsed
97
+ ? "flex size-9 items-center justify-center rounded-md bg-transparent text-primary hover:bg-accent/60 hover:text-primary"
98
+ : "flex h-auto w-full items-center justify-start gap-2 rounded bg-transparent px-2 py-1.5 text-xs font-normal text-primary hover:bg-accent/60 hover:text-primary", className), children: [renderSidebarIcon(icon, "size-4 shrink-0 text-primary") ?? (_jsx(IconMessageCircle, { className: "size-4 shrink-0 text-primary" })), !isCollapsed && _jsx("span", { children: label })] }));
99
+ if (!isCollapsed)
100
+ return button;
101
+ return (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: button }), _jsx(TooltipContent, { side: "right", children: label })] }));
102
+ }
103
+ export const AppSidebarFooter = forwardRef(({ feedback, orgSwitcher, footerExtras, collapsible = true, expandLabel = "Expand sidebar", collapseLabel = "Collapse sidebar", collapsed: propCollapsed, onToggleCollapsed, className, children, ...props }, ref) => {
104
+ const context = useAppSidebar();
105
+ const collapsed = propCollapsed ?? context.collapsed;
106
+ const toggleCollapsed = onToggleCollapsed ?? context.toggleCollapsed;
107
+ if (children) {
108
+ return (_jsx("div", { ref: ref, "data-sidebar-footer": true, className: cn("shrink-0 border-t border-border p-2", collapsed ? "space-y-1" : "space-y-1.5", className), ...props, children: children }));
109
+ }
110
+ const collapseButton = collapsible ? (_jsxs(Tooltip, { children: [_jsx(TooltipTrigger, { asChild: true, children: _jsx("button", { type: "button", "aria-label": collapsed ? expandLabel : collapseLabel, onClick: toggleCollapsed, className: "flex size-9 shrink-0 items-center justify-center rounded-md bg-transparent text-primary hover:bg-accent/60 hover:text-primary focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring", children: collapsed ? (_jsx(IconLayoutSidebarLeftExpand, { className: "size-4 rtl:-scale-x-100" })) : (_jsx(IconLayoutSidebarLeftCollapse, { className: "size-4 rtl:-scale-x-100" })) }) }), _jsx(TooltipContent, { side: "right", children: collapsed ? expandLabel : collapseLabel })] })) : null;
111
+ const resolvedFeedback = feedback !== undefined ? (feedback) : (_jsx(AppSidebarFeedbackButton, { collapsed: collapsed }));
112
+ return (_jsxs("div", { ref: ref, "data-sidebar-footer": true, className: cn("shrink-0 border-t border-border p-2", collapsed ? "space-y-1" : "space-y-1.5", className), ...props, children: [resolvedFeedback, _jsxs("div", { "data-sidebar-footer-utilities": true, className: cn(collapsed
113
+ ? "flex flex-col items-center gap-1"
114
+ : "flex items-center gap-0.5"), children: [orgSwitcher, footerExtras, collapseButton] })] }));
115
+ });
116
+ 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) => {
118
+ // Persistence hook if storageKey is provided and not controlled
119
+ const persistent = usePersistentSidebarCollapsed({
120
+ storageKey: storageKey ?? "app-sidebar-default-key",
121
+ defaultCollapsed,
122
+ });
123
+ const isControlled = controlledCollapsed !== undefined;
124
+ const isUsingStorage = !isControlled && Boolean(storageKey);
125
+ const [uncontrolledCollapsed, setUncontrolledCollapsed] = useState(defaultCollapsed);
126
+ const collapsed = isControlled
127
+ ? controlledCollapsed
128
+ : isUsingStorage
129
+ ? persistent.collapsed
130
+ : uncontrolledCollapsed;
131
+ const setCollapsed = useCallback((value) => {
132
+ const next = typeof value === "function" ? value(collapsed) : value;
133
+ if (controlledOnCollapsedChange) {
134
+ controlledOnCollapsedChange(next);
135
+ }
136
+ if (isUsingStorage) {
137
+ persistent.setCollapsed(next);
138
+ }
139
+ if (!isControlled && !isUsingStorage) {
140
+ setUncontrolledCollapsed(next);
141
+ }
142
+ }, [
143
+ collapsed,
144
+ controlledOnCollapsedChange,
145
+ isControlled,
146
+ isUsingStorage,
147
+ persistent,
148
+ ]);
149
+ const toggleCollapsed = useCallback(() => {
150
+ setCollapsed((prev) => !prev);
151
+ }, [setCollapsed]);
152
+ const showCollapsedSidebar = collapsed && !isMobile;
153
+ const LinkComponent = linkComponent ?? NativeSidebarLink;
154
+ // Only self-manage off-canvas transform when the caller controls mobileOpen.
155
+ // Sheet/drawer embeds leave mobileOpen undefined so content stays visible.
156
+ const ownsMobileDrawer = typeof mobileOpen === "boolean";
157
+ const contextValue = useMemo(() => ({
158
+ collapsed: showCollapsedSidebar,
159
+ setCollapsed,
160
+ toggleCollapsed,
161
+ isMobile,
162
+ LinkComponent,
163
+ }), [
164
+ showCollapsedSidebar,
165
+ setCollapsed,
166
+ toggleCollapsed,
167
+ isMobile,
168
+ LinkComponent,
169
+ ]);
170
+ return (_jsx(AppSidebarContext.Provider, { value: contextValue, children: _jsx(TooltipProvider, { delayDuration: 0, children: _jsxs("aside", { ref: ref, "data-collapsed": showCollapsedSidebar ? "true" : "false", className: cn("flex h-full w-[260px] flex-col overflow-hidden border-e border-border bg-sidebar transition-[width,transform] duration-200 ease-out", ownsMobileDrawer
171
+ ? "agent-layout-left-drawer fixed inset-y-0 start-0 z-50 md:static md:z-auto"
172
+ : "relative md:static", showCollapsedSidebar && "md:w-14", ownsMobileDrawer &&
173
+ (mobileOpen
174
+ ? "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("div", { className: "min-h-0 flex-1 overflow-y-auto", 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
+ if (item.children) {
177
+ 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
+ }
179
+ return (_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));
180
+ }), 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
+ });
182
+ AppSidebar.displayName = "AppSidebar";
183
+ //# sourceMappingURL=sidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar.js","sourceRoot":"","sources":["../../src/app-shell/sidebar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sidebar.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar.spec.d.ts","sourceRoot":"","sources":["../../src/app-shell/sidebar.spec.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,82 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ // @vitest-environment happy-dom
3
+ import { act } from "react";
4
+ import { createRoot } from "react-dom/client";
5
+ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
6
+ import { AppSidebar, AppSidebarNavItem, AppSidebarNavGroup, AppSidebarSection, } from "./sidebar.js";
7
+ describe("AppSidebar", () => {
8
+ let container;
9
+ let root;
10
+ beforeEach(() => {
11
+ vi.stubGlobal("IS_REACT_ACT_ENVIRONMENT", true);
12
+ container = document.createElement("div");
13
+ document.body.appendChild(container);
14
+ root = createRoot(container);
15
+ });
16
+ afterEach(() => {
17
+ act(() => root.unmount());
18
+ container.remove();
19
+ });
20
+ it("renders expanded sidebar with brand, items, and utilities", () => {
21
+ act(() => {
22
+ root.render(_jsx(AppSidebar, { brandName: "My App", brandHref: "/home", badge: _jsx("span", { "data-badge": true, children: "alpha" }), items: [
23
+ { label: "Inbox", to: "/inbox", count: 5, active: true },
24
+ { label: "Tasks", to: "/tasks" },
25
+ ], secondaryItems: [{ label: "Archive", to: "/archive" }], feedback: _jsx("button", { type: "button", children: "Feedback" }), orgSwitcher: _jsx("button", { type: "button", children: "Acme Org" }) }));
26
+ });
27
+ const aside = container.querySelector("aside");
28
+ expect(aside).not.toBeNull();
29
+ expect(aside?.getAttribute("data-collapsed")).toBe("false");
30
+ expect(aside?.className).toContain("w-[260px]");
31
+ expect(container.textContent).toContain("My App");
32
+ expect(container.textContent).toContain("alpha");
33
+ expect(container.textContent).toContain("Inbox");
34
+ expect(container.textContent).toContain("5");
35
+ expect(container.textContent).toContain("Tasks");
36
+ expect(container.textContent).toContain("Archive");
37
+ expect(container.textContent).toContain("Feedback");
38
+ expect(container.textContent).toContain("Acme Org");
39
+ });
40
+ it("renders collapsed sidebar with md:w-14 and tooltips", () => {
41
+ act(() => {
42
+ root.render(_jsx(AppSidebar, { collapsed: true, brandName: "My App", badge: _jsx("span", { "data-badge": true, children: "alpha" }), items: [{ label: "Inbox", to: "/inbox" }] }));
43
+ });
44
+ const aside = container.querySelector("aside");
45
+ expect(aside?.getAttribute("data-collapsed")).toBe("true");
46
+ expect(aside?.className).toContain("md:w-14");
47
+ // In collapsed mode, brand name is hidden from screen, badge is present
48
+ expect(container.querySelector("[data-badge]")?.textContent).toBe("alpha");
49
+ });
50
+ it("toggles collapsed state via collapse button", () => {
51
+ const onCollapsedChange = vi.fn();
52
+ act(() => {
53
+ root.render(_jsx(AppSidebar, { collapsed: false, onCollapsedChange: onCollapsedChange, brandName: "My App" }));
54
+ });
55
+ const collapseButton = container.querySelector('button[aria-label="Collapse sidebar"]');
56
+ expect(collapseButton).not.toBeNull();
57
+ act(() => {
58
+ collapseButton?.dispatchEvent(new MouseEvent("click", { bubbles: true }));
59
+ });
60
+ expect(onCollapsedChange).toHaveBeenCalledWith(true);
61
+ });
62
+ it("renders collapsible nav group and expands/collapses children", () => {
63
+ act(() => {
64
+ root.render(_jsx(AppSidebar, { brandName: "My App", children: _jsx(AppSidebarNavGroup, { label: "Projects", defaultOpen: false, children: _jsx("div", { children: "Project Alpha" }) }) }));
65
+ });
66
+ expect(container.textContent).toContain("Projects");
67
+ const toggleButton = container.querySelector('button[aria-label="Expand"]');
68
+ expect(toggleButton).not.toBeNull();
69
+ act(() => {
70
+ toggleButton?.dispatchEvent(new MouseEvent("click", { bubbles: true }));
71
+ });
72
+ expect(container.textContent).toContain("Project Alpha");
73
+ });
74
+ it("renders sections with uppercase headers and dividers", () => {
75
+ act(() => {
76
+ root.render(_jsx(AppSidebar, { brandName: "My App", children: _jsx(AppSidebarSection, { title: "Favorites", children: _jsx(AppSidebarNavItem, { label: "Starred item" }) }) }));
77
+ });
78
+ expect(container.textContent).toContain("Favorites");
79
+ expect(container.textContent).toContain("Starred item");
80
+ });
81
+ });
82
+ //# sourceMappingURL=sidebar.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar.spec.js","sourceRoot":"","sources":["../../src/app-shell/sidebar.spec.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/toolkit",
3
- "version": "0.19.7",
3
+ "version": "0.19.8-nightly-20260910195009",
4
4
  "description": "Reusable app-building UI and helpers for Agent-Native apps.",
5
5
  "homepage": "https://github.com/BuilderIO/agent-native#readme",
6
6
  "bugs": {
@@ -1,3 +1,4 @@
1
1
  export * from "./header-actions.js";
2
2
  export * from "./sidebar-footer-actions.js";
3
+ export * from "./sidebar.js";
3
4
  export * from "./use-persistent-sidebar-collapsed.js";