@ngrok/mantle 0.81.1 → 0.82.0

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.
Files changed (103) hide show
  1. package/dist/accordion.js +1 -1
  2. package/dist/agent.json +4 -1
  3. package/dist/alert-BWwNPOMI.d.ts +391 -0
  4. package/dist/alert-QMs0PqMq.js +1 -0
  5. package/dist/alert-center.d.ts +449 -0
  6. package/dist/alert-center.js +1 -0
  7. package/dist/alert-dialog.js +1 -1
  8. package/dist/alert.d.ts +1 -390
  9. package/dist/alert.js +1 -1
  10. package/dist/{anchor-DfeXTpKW.js → anchor-DvbNsphX.js} +1 -1
  11. package/dist/anchor.js +1 -1
  12. package/dist/app-layout.d.ts +483 -0
  13. package/dist/app-layout.js +1 -0
  14. package/dist/area-chart.js +1 -1
  15. package/dist/badge.js +1 -1
  16. package/dist/bar-chart.js +1 -1
  17. package/dist/breadcrumb.d.ts +1 -1
  18. package/dist/breadcrumb.js +1 -1
  19. package/dist/browser-only-CmEEzfU3.js +1 -0
  20. package/dist/browser-only.js +1 -1
  21. package/dist/{button-D9n09xUg.js → button-BO2CKsz6.js} +1 -1
  22. package/dist/{button-DjpEKt2X.js → button-BUospUB3.js} +1 -1
  23. package/dist/{button-BAno7KIU.js → button-C0S8RbaJ.js} +1 -1
  24. package/dist/button.js +1 -1
  25. package/dist/calendar.d.ts +1 -1
  26. package/dist/card.js +1 -1
  27. package/dist/centered-layout.d.ts +9 -9
  28. package/dist/centered-layout.js +1 -1
  29. package/dist/chart-DdBQ3xwx.js +2 -0
  30. package/dist/{choice-BHwFSSyv.js → choice-C9gLKECf.js} +1 -1
  31. package/dist/choice.js +1 -1
  32. package/dist/code-block.js +1 -1
  33. package/dist/code.js +1 -1
  34. package/dist/combobox.js +1 -1
  35. package/dist/command.js +1 -1
  36. package/dist/{copy-to-clipboard-BsCQ9m6K.js → copy-to-clipboard-B4UB6pts.js} +1 -1
  37. package/dist/data-slot-EM6s2WEU.js +1 -0
  38. package/dist/data-table.js +1 -1
  39. package/dist/description-list.js +1 -1
  40. package/dist/{dialog-DWZWd5Jt.js → dialog-Bsj_dX6r.js} +1 -1
  41. package/dist/dialog.d.ts +1 -1
  42. package/dist/dialog.js +1 -1
  43. package/dist/dropdown-menu-fUMqjRC0.js +1 -0
  44. package/dist/dropdown-menu.js +1 -1
  45. package/dist/empty.js +1 -1
  46. package/dist/field.js +1 -1
  47. package/dist/hooks.js +1 -1
  48. package/dist/{icons-DLCs1hLP.js → icons-CPbOq7cF.js} +1 -1
  49. package/dist/icons.js +1 -1
  50. package/dist/input.js +1 -1
  51. package/dist/line-chart.js +1 -1
  52. package/dist/{list-51KQvENW.js → list-CQFWx6Z8.js} +1 -1
  53. package/dist/list.js +1 -1
  54. package/dist/llms.txt +4 -1
  55. package/dist/main.d.ts +4 -1
  56. package/dist/main.js +1 -1
  57. package/dist/mantle.css +21 -1
  58. package/dist/media-object.js +1 -1
  59. package/dist/multi-select.d.ts +10 -2
  60. package/dist/multi-select.js +1 -1
  61. package/dist/otp-input.js +1 -1
  62. package/dist/pagination.js +1 -1
  63. package/dist/{primitive-trJDqIXJ.js → primitive-Dv-3snU3.js} +1 -1
  64. package/dist/progress.d.ts +8 -8
  65. package/dist/qr-code.js +1 -1
  66. package/dist/radio-group.d.ts +10 -0
  67. package/dist/radio-group.js +1 -1
  68. package/dist/sandboxed-on-click.js +1 -1
  69. package/dist/scatter-plot.d.ts +2 -1
  70. package/dist/scatter-plot.js +1 -1
  71. package/dist/{select-BCHWvmyC.js → select-B-9yWrif.js} +1 -1
  72. package/dist/select.js +1 -1
  73. package/dist/selectable-list.js +1 -1
  74. package/dist/{separator-bpE_kooz.js → separator-BepAcFFy.js} +1 -1
  75. package/dist/separator.js +1 -1
  76. package/dist/sheet-_fXLjiq2.js +1 -0
  77. package/dist/sheet.d.ts +1 -1
  78. package/dist/sheet.js +1 -1
  79. package/dist/sidebar.d.ts +2084 -0
  80. package/dist/sidebar.js +1 -0
  81. package/dist/{skeleton-CsbUHbBA.js → skeleton-DsHXIa9j.js} +1 -1
  82. package/dist/skeleton.js +1 -1
  83. package/dist/skip-to-main-link.js +1 -1
  84. package/dist/slot-Dpsqz16D.js +1 -0
  85. package/dist/slot.js +1 -1
  86. package/dist/split-button.js +1 -1
  87. package/dist/tabs.js +1 -1
  88. package/dist/{theme-C26-Xolp.js → theme-IAnQ35bd.js} +1 -1
  89. package/dist/theme-switcher.js +1 -1
  90. package/dist/theme.js +1 -1
  91. package/dist/toast.js +1 -1
  92. package/dist/use-breakpoint-Wd7_5-Mu.js +1 -0
  93. package/dist/use-copy-to-clipboard-CSyp4Zk0.js +1 -0
  94. package/dist/use-is-hydrated-DDCqXmju.js +1 -0
  95. package/dist/{use-prefers-reduced-motion-CagaNRgm.js → use-prefers-reduced-motion-Bk5zAfHY.js} +1 -1
  96. package/dist/utils.js +1 -1
  97. package/dist/well.js +1 -1
  98. package/package.json +16 -13
  99. package/dist/browser-only-CPH56Xw_.js +0 -1
  100. package/dist/chart-Do2qkrxl.js +0 -2
  101. package/dist/dropdown-menu-RyDWoKHx.js +0 -1
  102. package/dist/slot-CDk0Bb9z.js +0 -1
  103. package/dist/use-copy-to-clipboard-DqQ0_N3E.js +0 -1
@@ -0,0 +1,2084 @@
1
+ import { n as WithAsChild } from "./as-child-D23mGo4f.js";
2
+ import { n as IconButtonProps } from "./button-C7vAl6lS.js";
3
+ import { t as WithDataSlot } from "./data-slot-CChfb_cv.js";
4
+ import { n as Separator } from "./separator-B5UmkVRL.js";
5
+ import { ComponentProps, ReactNode } from "react";
6
+ //#region src/components/sidebar/sidebar.d.ts
7
+ /**
8
+ * The breakpoints below which `Sidebar.Nav` swaps from the inline desktop
9
+ * panel to the mobile `Sheet` presentation. Kept to a closed set because the
10
+ * pre-hydration visibility classes are static strings (Tailwind cannot see
11
+ * interpolated class names).
12
+ *
13
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * <Sidebar.Root mobileBreakpoint="md">…</Sidebar.Root>
18
+ * ```
19
+ */
20
+ type SidebarMobileBreakpoint = "sm" | "md" | "lg";
21
+ /**
22
+ * The state and actions shared by every part under a `Sidebar.Root`, returned
23
+ * by {@link useSidebar}. Use it to build custom triggers, keyboard shortcuts,
24
+ * or close-on-navigate behavior.
25
+ *
26
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
27
+ *
28
+ * @example
29
+ * ```tsx
30
+ * function CollapseSidebarButton() {
31
+ * const { open, toggle } = useSidebar();
32
+ * return (
33
+ * <button type="button" onClick={toggle}>
34
+ * {open ? "Collapse" : "Expand"} sidebar
35
+ * </button>
36
+ * );
37
+ * }
38
+ * ```
39
+ */
40
+ type SidebarState = {
41
+ /**
42
+ * Whether the desktop sidebar is expanded. Mirrored as
43
+ * `data-state="expanded" | "collapsed"` on `Sidebar.Nav`.
44
+ */
45
+ open: boolean;
46
+ /**
47
+ * Set the desktop expanded state. Calls `onOpenChange` and, when
48
+ * uncontrolled, updates the internal state.
49
+ */
50
+ setOpen: (open: boolean) => void;
51
+ /**
52
+ * Whether the mobile sheet is open. Only meaningful when `isMobile`.
53
+ */
54
+ openMobile: boolean;
55
+ /**
56
+ * Set the mobile sheet open state. Calls `onOpenMobileChange` and, when
57
+ * uncontrolled, updates the internal state. Use it to close the sheet on
58
+ * navigation.
59
+ */
60
+ setOpenMobile: (open: boolean) => void;
61
+ /**
62
+ * `true` when the viewport is below `mobileBreakpoint`. `false` during SSR
63
+ * and the hydration render (desktop-first).
64
+ */
65
+ isMobile: boolean;
66
+ /**
67
+ * The breakpoint below which the sidebar renders as a mobile sheet.
68
+ */
69
+ mobileBreakpoint: SidebarMobileBreakpoint;
70
+ /**
71
+ * Toggle the sidebar: the mobile sheet when `isMobile`, the desktop
72
+ * expanded state otherwise. This is what `Sidebar.Trigger` calls.
73
+ */
74
+ toggle: () => void;
75
+ /**
76
+ * The generated id of the sidebar's `<nav>` landmark. `Sidebar.Trigger`
77
+ * references it via `aria-controls`; reuse it when building custom
78
+ * triggers.
79
+ */
80
+ navId: string;
81
+ };
82
+ /**
83
+ * Read the nearest `Sidebar.Root` state. Throws when called outside a
84
+ * `Sidebar.Root` so misuse fails loudly. Use it to build custom triggers,
85
+ * a keyboard shortcut, or close-on-navigate behavior.
86
+ *
87
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
88
+ *
89
+ * @example
90
+ * ```tsx
91
+ * function CloseSidebarOnNavigate() {
92
+ * const { setOpenMobile } = useSidebar();
93
+ * const location = useLocation();
94
+ * useEffect(() => {
95
+ * setOpenMobile(false);
96
+ * }, [location.pathname, setOpenMobile]);
97
+ * return null;
98
+ * }
99
+ * ```
100
+ */
101
+ declare function useSidebar(): SidebarState;
102
+ type SidebarRootProps = {
103
+ children?: ReactNode;
104
+ /**
105
+ * The initial desktop expanded state for the uncontrolled case.
106
+ *
107
+ * @default true
108
+ */
109
+ defaultOpen?: boolean;
110
+ /**
111
+ * Controlled desktop expanded state. Pair with `onOpenChange`.
112
+ */
113
+ open?: boolean;
114
+ /**
115
+ * Called with the next desktop expanded state whenever it changes.
116
+ */
117
+ onOpenChange?: (open: boolean) => void;
118
+ /**
119
+ * Controlled mobile sheet open state. Pair with `onOpenMobileChange`.
120
+ */
121
+ openMobile?: boolean;
122
+ /**
123
+ * Called with the next mobile sheet open state whenever it changes.
124
+ */
125
+ onOpenMobileChange?: (open: boolean) => void;
126
+ /**
127
+ * The breakpoint below which `Sidebar.Nav` renders as a mobile `Sheet`
128
+ * instead of the inline desktop panel.
129
+ *
130
+ * @default "lg"
131
+ */
132
+ mobileBreakpoint?: SidebarMobileBreakpoint;
133
+ /**
134
+ * Toggle the sidebar with `⌘B` (macOS) / `Ctrl+B` (Windows/Linux). The
135
+ * shortcut requires exactly the platform modifier + `b` — combinations with
136
+ * `Shift`/`Alt` (e.g. the browser's own `⌘⇧B`) are left alone. Set `false`
137
+ * to opt out, e.g. when the app embeds a rich-text editor where `⌘B` means
138
+ * bold.
139
+ *
140
+ * The shortcut has exactly one owner per window: the first mounted root
141
+ * with the shortcut enabled. Additional roots (nested or siblings) queue
142
+ * and take ownership only when the owner unmounts, so composing a second
143
+ * sidebar never makes one keypress toggle both.
144
+ *
145
+ * @default true
146
+ */
147
+ keyboardShortcut?: boolean;
148
+ };
149
+ /**
150
+ * The state owner for a sidebar. Renders no DOM of its own (like
151
+ * `Tooltip.Root`) — it provides the expanded/collapsed and mobile-sheet state
152
+ * to every part below it, so `Sidebar.Trigger` can live anywhere in the tree
153
+ * (for example inside an `AppLayout.Header`) without coupling the app shell
154
+ * to the sidebar.
155
+ *
156
+ * Render exactly one `Sidebar.Nav` per `Sidebar.Root`. Nested roots shadow
157
+ * the outer sidebar for everything below them.
158
+ *
159
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
160
+ *
161
+ * @example
162
+ * ```tsx
163
+ * <Sidebar.Root>
164
+ * <Sidebar.Nav aria-label="Main">
165
+ * <Sidebar.Header>…</Sidebar.Header>
166
+ * <Sidebar.Body>
167
+ * <Sidebar.Group>
168
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
169
+ * <Sidebar.List>
170
+ * <Sidebar.Item>
171
+ * <Sidebar.ItemButton asChild current>
172
+ * <a href="/endpoints">
173
+ * <GraphIcon />
174
+ * Endpoints
175
+ * </a>
176
+ * </Sidebar.ItemButton>
177
+ * </Sidebar.Item>
178
+ * </Sidebar.List>
179
+ * </Sidebar.Group>
180
+ * </Sidebar.Body>
181
+ * <Sidebar.Footer>…</Sidebar.Footer>
182
+ * </Sidebar.Nav>
183
+ * <main>
184
+ * <Sidebar.Trigger />
185
+ * </main>
186
+ * </Sidebar.Root>
187
+ * ```
188
+ */
189
+ declare const Root: ({ children, defaultOpen, keyboardShortcut, mobileBreakpoint, onOpenChange, onOpenMobileChange, open: openProp, openMobile: openMobileProp }: SidebarRootProps) => import("react").JSX.Element;
190
+ type SidebarNavProps = ComponentProps<"div"> & WithDataSlot;
191
+ /**
192
+ * The sidebar panel. On viewports at or above the root's `mobileBreakpoint`
193
+ * it renders inline (in normal flow, so it composes under an
194
+ * `AppLayout.Notice` banner) and collapses by animating its width down to a
195
+ * skinny icon rail (`--sidebar-width-icon`): group labels fade out in place
196
+ * and each row becomes a square chip around its leading icon, but everything
197
+ * keeps its expanded position and stays in the tab order and the
198
+ * accessibility tree. Below the breakpoint it renders inside a mantle
199
+ * `Sheet` on the left.
200
+ *
201
+ * `className`, `style`, `ref`, and rest props land on the panel surface in
202
+ * both presentations (the desktop animator / the mobile `Sheet.Content`), so
203
+ * the width variables work anywhere:
204
+ * `className="[--sidebar-width:20rem] [--sidebar-width-mobile:20rem]"`.
205
+ * `aria-label` (default `"Main"`) is forwarded to the inner `<nav>` landmark.
206
+ *
207
+ * **CSS variables (public API):**
208
+ *
209
+ * | CSS Variable | Default | Description |
210
+ * | --- | --- | --- |
211
+ * | `--sidebar-width` | `16rem` | Expanded desktop panel width (256px). |
212
+ * | `--sidebar-width-mobile` | `18rem` | Mobile sheet width (288px). |
213
+ * | `--sidebar-width-icon` | `3.25rem` | Collapsed icon rail width (52px). |
214
+ * | `--sidebar-row-width` | `15rem` | Derived, not set: one row's width in the expanded panel (240px), for sizing surfaces that render *outside* it. See below and `Sidebar.SwitcherTrigger`. |
215
+ *
216
+ * `--sidebar-row-width` is `calc(var(--sidebar-width,16rem) - 1rem)`, declared
217
+ * at `:root` by `mantle.css` — the panel width minus the row gutter this
218
+ * component's regions apply.
219
+ *
220
+ * Each of the three widths is read with its default as the fallback, and
221
+ * custom properties inherit, so set one on `Sidebar.Nav` to resize a single
222
+ * sidebar or on any ancestor (`:root` in your global stylesheet) to resize
223
+ * every sidebar in the app. `--sidebar-row-width` resolves at `:root`, so a
224
+ * `--sidebar-width` override scoped to one `Sidebar.Nav` does not reach it in
225
+ * either direction — a narrower panel leaves the floor *wider* than the row it
226
+ * opens from. Override `--sidebar-width` at `:root` to move both together, or
227
+ * set `--sidebar-row-width` on the outside surface itself.
228
+ *
229
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
230
+ *
231
+ * @example
232
+ * ```tsx
233
+ * <Sidebar.Root>
234
+ * <Sidebar.Nav aria-label="Main">
235
+ * <Sidebar.Header>…</Sidebar.Header>
236
+ * <Sidebar.Body>
237
+ * <Sidebar.Group>
238
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
239
+ * <Sidebar.List>
240
+ * <Sidebar.Item>
241
+ * <Sidebar.ItemButton asChild>
242
+ * <a href="/endpoints">
243
+ * <GraphIcon />
244
+ * Endpoints
245
+ * </a>
246
+ * </Sidebar.ItemButton>
247
+ * </Sidebar.Item>
248
+ * </Sidebar.List>
249
+ * </Sidebar.Group>
250
+ * </Sidebar.Body>
251
+ * <Sidebar.Footer>…</Sidebar.Footer>
252
+ * </Sidebar.Nav>
253
+ * </Sidebar.Root>
254
+ * ```
255
+ */
256
+ declare const Nav: ({ "aria-label": ariaLabelProp, "aria-labelledby": ariaLabelledBy, children, className, "data-slot": dataSlot, ...props }: SidebarNavProps) => import("react").JSX.Element;
257
+ /**
258
+ * The props for `Sidebar.Trigger`. `IconButton`'s props, except the parts the
259
+ * trigger owns: `asChild` and `children` are removed (the trigger renders
260
+ * only its icon and sr-only label — build custom triggers with `useSidebar`
261
+ * instead), and `appearance`, `icon`, `intent`, and `label` become optional
262
+ * with sidebar defaults.
263
+ */
264
+ type SidebarTriggerProps = Omit<IconButtonProps, "appearance" | "asChild" | "children" | "icon" | "intent" | "label"> & WithDataSlot & {
265
+ /**
266
+ * The visual style of the trigger `IconButton`.
267
+ *
268
+ * @default "ghost"
269
+ */
270
+ appearance?: IconButtonProps["appearance"];
271
+ /**
272
+ * The icon rendered inside the trigger.
273
+ *
274
+ * @default <SidebarSimpleIcon />
275
+ */
276
+ icon?: ReactNode;
277
+ /**
278
+ * The color intent of the trigger `IconButton`.
279
+ *
280
+ * @default "neutral"
281
+ */
282
+ intent?: IconButtonProps["intent"];
283
+ /**
284
+ * The accessible name for the trigger. Visually hidden but announced to
285
+ * assistive technology. Override it for localization.
286
+ *
287
+ * @default "Toggle Sidebar"
288
+ */
289
+ label?: string;
290
+ };
291
+ /**
292
+ * The button that toggles the sidebar: the mobile sheet below the root's
293
+ * `mobileBreakpoint`, the desktop expanded state otherwise. Renders a ghost
294
+ * neutral `IconButton` with `aria-expanded` and `aria-controls` wired to the
295
+ * sidebar's `<nav>`. Place it in your app shell's header (for example
296
+ * `AppLayout.Header`) — it must stay visible at every breakpoint where the
297
+ * sidebar can collapse, or users have no way to reopen it.
298
+ *
299
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
300
+ *
301
+ * @example
302
+ * ```tsx
303
+ * <Sidebar.Root>
304
+ * <Sidebar.Nav aria-label="Main">
305
+ * <Sidebar.Header>
306
+ * <DropdownMenu.Root>
307
+ * <DropdownMenu.Trigger asChild>
308
+ * <Sidebar.SwitcherTrigger>
309
+ * <GlobeIcon />
310
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
311
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
312
+ * </Sidebar.SwitcherTrigger>
313
+ * </DropdownMenu.Trigger>
314
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
315
+ * </DropdownMenu.Root>
316
+ * </Sidebar.Header>
317
+ * <Sidebar.Body>
318
+ * <Sidebar.Group>
319
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
320
+ * <Sidebar.List>
321
+ * <Sidebar.Item>
322
+ * <Sidebar.ItemButton asChild current>
323
+ * <a href="/endpoints">
324
+ * <GraphIcon />
325
+ * Endpoints
326
+ * </a>
327
+ * </Sidebar.ItemButton>
328
+ * </Sidebar.Item>
329
+ * </Sidebar.List>
330
+ * </Sidebar.Group>
331
+ * </Sidebar.Body>
332
+ * <Sidebar.Footer>
333
+ * <Sidebar.Separator />
334
+ * <DropdownMenu.Root>
335
+ * <DropdownMenu.Trigger asChild>
336
+ * <Sidebar.SwitcherTrigger>
337
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
338
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
339
+ * <Sidebar.UserAvatar alt="Jane Doe" />
340
+ * </Sidebar.SwitcherTrigger>
341
+ * </DropdownMenu.Trigger>
342
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
343
+ * </DropdownMenu.Root>
344
+ * </Sidebar.Footer>
345
+ * </Sidebar.Nav>
346
+ * <Sidebar.Trigger />
347
+ * </Sidebar.Root>
348
+ * ```
349
+ *
350
+ * @example
351
+ * Placement within an `AppLayout` shell:
352
+ * ```tsx
353
+ * <Sidebar.Root>
354
+ * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
355
+ * <AppLayout.Inset>
356
+ * <AppLayout.Content>
357
+ * <AppLayout.Header>
358
+ * <Sidebar.Trigger />
359
+ * </AppLayout.Header>
360
+ * …
361
+ * </AppLayout.Content>
362
+ * </AppLayout.Inset>
363
+ * </Sidebar.Root>
364
+ * ```
365
+ */
366
+ declare const Trigger: ({ appearance, "data-slot": dataSlot, icon, intent, label, onClick, ...props }: SidebarTriggerProps) => import("react").JSX.Element;
367
+ type SidebarHeaderProps = ComponentProps<"div"> & WithAsChild & WithDataSlot;
368
+ /**
369
+ * The top container of a `Sidebar.Nav`, pinned above the scrollable
370
+ * `Sidebar.Body`. Typically holds an app/product switcher built from
371
+ * `Sidebar.SwitcherTrigger` composed with a `DropdownMenu` or `Dialog`. Its
372
+ * height is the public `--sidebar-header-height` CSS variable (default
373
+ * `4.5rem`), which centers the switcher row on the same horizontal band as an
374
+ * `AppLayout.Header` toolbar — when a sidebar header is composed inside an
375
+ * `AppLayout`, the toolbar derives its own height from the same variable, so
376
+ * overriding it at a shared ancestor (e.g. `AppLayout.Root`) moves both rows
377
+ * together and the alignment holds by construction.
378
+ *
379
+ * **CSS variables (public API):**
380
+ *
381
+ * | CSS Variable | Default | Description |
382
+ * | --- | --- | --- |
383
+ * | `--sidebar-header-height` | `4.5rem` | The header row height (72px). Set it on a common ancestor of the sidebar and `AppLayout.Header`, not on `Sidebar.Nav`, so both rows read one value. |
384
+ *
385
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
386
+ *
387
+ * @example
388
+ * ```tsx
389
+ * <Sidebar.Root>
390
+ * <Sidebar.Nav aria-label="Main">
391
+ * <Sidebar.Header>
392
+ * <DropdownMenu.Root>
393
+ * <DropdownMenu.Trigger asChild>
394
+ * <Sidebar.SwitcherTrigger>
395
+ * <GlobeIcon />
396
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
397
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
398
+ * </Sidebar.SwitcherTrigger>
399
+ * </DropdownMenu.Trigger>
400
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
401
+ * </DropdownMenu.Root>
402
+ * </Sidebar.Header>
403
+ * <Sidebar.Body>
404
+ * <Sidebar.Group>
405
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
406
+ * <Sidebar.List>
407
+ * <Sidebar.Item>
408
+ * <Sidebar.ItemButton asChild current>
409
+ * <a href="/endpoints">
410
+ * <GraphIcon />
411
+ * Endpoints
412
+ * </a>
413
+ * </Sidebar.ItemButton>
414
+ * </Sidebar.Item>
415
+ * </Sidebar.List>
416
+ * </Sidebar.Group>
417
+ * </Sidebar.Body>
418
+ * <Sidebar.Footer>
419
+ * <Sidebar.Separator />
420
+ * <DropdownMenu.Root>
421
+ * <DropdownMenu.Trigger asChild>
422
+ * <Sidebar.SwitcherTrigger>
423
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
424
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
425
+ * <Sidebar.UserAvatar alt="Jane Doe" />
426
+ * </Sidebar.SwitcherTrigger>
427
+ * </DropdownMenu.Trigger>
428
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
429
+ * </DropdownMenu.Root>
430
+ * </Sidebar.Footer>
431
+ * </Sidebar.Nav>
432
+ * <Sidebar.Trigger />
433
+ * </Sidebar.Root>
434
+ * ```
435
+ */
436
+ declare const Header: ({ asChild, children, className, "data-slot": dataSlot, ...props }: SidebarHeaderProps) => import("react").JSX.Element;
437
+ type SidebarBodyProps = ComponentProps<"div"> & WithAsChild & WithDataSlot;
438
+ /**
439
+ * The scrollable middle region of a `Sidebar.Nav`, growing to fill the space
440
+ * between `Sidebar.Header` and `Sidebar.Footer`. Holds the navigation
441
+ * `Sidebar.Group` children. Overflowing edges fade out via the
442
+ * `scroll-fade-y` mask; inside the collapsed icon rail the scrollbar and its
443
+ * reserved gutter are hidden and the fade is the only overflow signal.
444
+ *
445
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
446
+ *
447
+ * @example
448
+ * ```tsx
449
+ * <Sidebar.Root>
450
+ * <Sidebar.Nav aria-label="Main">
451
+ * <Sidebar.Header>
452
+ * <DropdownMenu.Root>
453
+ * <DropdownMenu.Trigger asChild>
454
+ * <Sidebar.SwitcherTrigger>
455
+ * <GlobeIcon />
456
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
457
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
458
+ * </Sidebar.SwitcherTrigger>
459
+ * </DropdownMenu.Trigger>
460
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
461
+ * </DropdownMenu.Root>
462
+ * </Sidebar.Header>
463
+ * <Sidebar.Body>
464
+ * <Sidebar.Group>
465
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
466
+ * <Sidebar.List>
467
+ * <Sidebar.Item>
468
+ * <Sidebar.ItemButton asChild current>
469
+ * <a href="/endpoints">
470
+ * <GraphIcon />
471
+ * Endpoints
472
+ * </a>
473
+ * </Sidebar.ItemButton>
474
+ * </Sidebar.Item>
475
+ * </Sidebar.List>
476
+ * </Sidebar.Group>
477
+ * </Sidebar.Body>
478
+ * <Sidebar.Footer>
479
+ * <Sidebar.Separator />
480
+ * <DropdownMenu.Root>
481
+ * <DropdownMenu.Trigger asChild>
482
+ * <Sidebar.SwitcherTrigger>
483
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
484
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
485
+ * <Sidebar.UserAvatar alt="Jane Doe" />
486
+ * </Sidebar.SwitcherTrigger>
487
+ * </DropdownMenu.Trigger>
488
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
489
+ * </DropdownMenu.Root>
490
+ * </Sidebar.Footer>
491
+ * </Sidebar.Nav>
492
+ * <Sidebar.Trigger />
493
+ * </Sidebar.Root>
494
+ * ```
495
+ */
496
+ declare const Body: ({ asChild, children, className, "data-slot": dataSlot, ...props }: SidebarBodyProps) => import("react").JSX.Element;
497
+ type SidebarFooterProps = ComponentProps<"div"> & WithAsChild & WithDataSlot;
498
+ /**
499
+ * The bottom container of a `Sidebar.Nav`, pinned below the scrollable
500
+ * `Sidebar.Body`. Typically holds cross-product items and the account/user
501
+ * switcher row (`Sidebar.SwitcherTrigger` with `Sidebar.AccountAvatar` and
502
+ * `Sidebar.UserAvatar`).
503
+ *
504
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
505
+ *
506
+ * @example
507
+ * ```tsx
508
+ * <Sidebar.Root>
509
+ * <Sidebar.Nav aria-label="Main">
510
+ * <Sidebar.Header>
511
+ * <DropdownMenu.Root>
512
+ * <DropdownMenu.Trigger asChild>
513
+ * <Sidebar.SwitcherTrigger>
514
+ * <GlobeIcon />
515
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
516
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
517
+ * </Sidebar.SwitcherTrigger>
518
+ * </DropdownMenu.Trigger>
519
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
520
+ * </DropdownMenu.Root>
521
+ * </Sidebar.Header>
522
+ * <Sidebar.Body>
523
+ * <Sidebar.Group>
524
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
525
+ * <Sidebar.List>
526
+ * <Sidebar.Item>
527
+ * <Sidebar.ItemButton asChild current>
528
+ * <a href="/endpoints">
529
+ * <GraphIcon />
530
+ * Endpoints
531
+ * </a>
532
+ * </Sidebar.ItemButton>
533
+ * </Sidebar.Item>
534
+ * </Sidebar.List>
535
+ * </Sidebar.Group>
536
+ * </Sidebar.Body>
537
+ * <Sidebar.Footer>
538
+ * <Sidebar.Separator />
539
+ * <DropdownMenu.Root>
540
+ * <DropdownMenu.Trigger asChild>
541
+ * <Sidebar.SwitcherTrigger>
542
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
543
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
544
+ * <Sidebar.UserAvatar alt="Jane Doe" />
545
+ * </Sidebar.SwitcherTrigger>
546
+ * </DropdownMenu.Trigger>
547
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
548
+ * </DropdownMenu.Root>
549
+ * </Sidebar.Footer>
550
+ * </Sidebar.Nav>
551
+ * <Sidebar.Trigger />
552
+ * </Sidebar.Root>
553
+ * ```
554
+ */
555
+ declare const Footer: ({ asChild, children, className, "data-slot": dataSlot, ...props }: SidebarFooterProps) => import("react").JSX.Element;
556
+ type SidebarGroupProps = ComponentProps<"div"> & WithAsChild & WithDataSlot;
557
+ /**
558
+ * A grouping container inside `Sidebar.Body` pairing an optional
559
+ * `Sidebar.GroupLabel` with a `Sidebar.List`. When a label is present, the
560
+ * group wires it to the list via `aria-labelledby` so assistive technology
561
+ * announces the list with the group's name.
562
+ *
563
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
564
+ *
565
+ * @example
566
+ * ```tsx
567
+ * <Sidebar.Root>
568
+ * <Sidebar.Nav aria-label="Main">
569
+ * <Sidebar.Header>
570
+ * <DropdownMenu.Root>
571
+ * <DropdownMenu.Trigger asChild>
572
+ * <Sidebar.SwitcherTrigger>
573
+ * <GlobeIcon />
574
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
575
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
576
+ * </Sidebar.SwitcherTrigger>
577
+ * </DropdownMenu.Trigger>
578
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
579
+ * </DropdownMenu.Root>
580
+ * </Sidebar.Header>
581
+ * <Sidebar.Body>
582
+ * <Sidebar.Group>
583
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
584
+ * <Sidebar.List>
585
+ * <Sidebar.Item>
586
+ * <Sidebar.ItemButton asChild current>
587
+ * <a href="/endpoints">
588
+ * <GraphIcon />
589
+ * Endpoints
590
+ * </a>
591
+ * </Sidebar.ItemButton>
592
+ * </Sidebar.Item>
593
+ * </Sidebar.List>
594
+ * </Sidebar.Group>
595
+ * </Sidebar.Body>
596
+ * <Sidebar.Footer>
597
+ * <Sidebar.Separator />
598
+ * <DropdownMenu.Root>
599
+ * <DropdownMenu.Trigger asChild>
600
+ * <Sidebar.SwitcherTrigger>
601
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
602
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
603
+ * <Sidebar.UserAvatar alt="Jane Doe" />
604
+ * </Sidebar.SwitcherTrigger>
605
+ * </DropdownMenu.Trigger>
606
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
607
+ * </DropdownMenu.Root>
608
+ * </Sidebar.Footer>
609
+ * </Sidebar.Nav>
610
+ * <Sidebar.Trigger />
611
+ * </Sidebar.Root>
612
+ * ```
613
+ */
614
+ declare const Group: ({ asChild, children, className, "data-slot": dataSlot, ...props }: SidebarGroupProps) => import("react").JSX.Element;
615
+ type SidebarGroupLabelProps = ComponentProps<"div"> & WithAsChild & WithDataSlot;
616
+ /**
617
+ * The muted label of a `Sidebar.Group`, rendered above its `Sidebar.List`.
618
+ * Renders a `<div>` (not a heading, so the sidebar never dictates the page's
619
+ * heading outline); inside a `Sidebar.Group` it is automatically linked to
620
+ * the sibling list via `aria-labelledby`. Pass `asChild` to render a heading
621
+ * at a level you control.
622
+ *
623
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
624
+ *
625
+ * @example
626
+ * ```tsx
627
+ * <Sidebar.Root>
628
+ * <Sidebar.Nav aria-label="Main">
629
+ * <Sidebar.Header>
630
+ * <DropdownMenu.Root>
631
+ * <DropdownMenu.Trigger asChild>
632
+ * <Sidebar.SwitcherTrigger>
633
+ * <GlobeIcon />
634
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
635
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
636
+ * </Sidebar.SwitcherTrigger>
637
+ * </DropdownMenu.Trigger>
638
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
639
+ * </DropdownMenu.Root>
640
+ * </Sidebar.Header>
641
+ * <Sidebar.Body>
642
+ * <Sidebar.Group>
643
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
644
+ * <Sidebar.List>
645
+ * <Sidebar.Item>
646
+ * <Sidebar.ItemButton asChild current>
647
+ * <a href="/endpoints">
648
+ * <GraphIcon />
649
+ * Endpoints
650
+ * </a>
651
+ * </Sidebar.ItemButton>
652
+ * </Sidebar.Item>
653
+ * </Sidebar.List>
654
+ * </Sidebar.Group>
655
+ * </Sidebar.Body>
656
+ * <Sidebar.Footer>
657
+ * <Sidebar.Separator />
658
+ * <DropdownMenu.Root>
659
+ * <DropdownMenu.Trigger asChild>
660
+ * <Sidebar.SwitcherTrigger>
661
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
662
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
663
+ * <Sidebar.UserAvatar alt="Jane Doe" />
664
+ * </Sidebar.SwitcherTrigger>
665
+ * </DropdownMenu.Trigger>
666
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
667
+ * </DropdownMenu.Root>
668
+ * </Sidebar.Footer>
669
+ * </Sidebar.Nav>
670
+ * <Sidebar.Trigger />
671
+ * </Sidebar.Root>
672
+ * ```
673
+ */
674
+ declare const GroupLabel: ({ asChild, children, className, "data-slot": dataSlot, id: idProp, ...props }: SidebarGroupLabelProps) => import("react").JSX.Element;
675
+ type SidebarListProps = ComponentProps<"ul"> & WithAsChild & WithDataSlot;
676
+ /**
677
+ * The `<ul>` list of navigation rows inside a `Sidebar.Group`. When the group
678
+ * has a `Sidebar.GroupLabel`, the list is announced with the group's name via
679
+ * `aria-labelledby`.
680
+ *
681
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
682
+ *
683
+ * @example
684
+ * ```tsx
685
+ * <Sidebar.Root>
686
+ * <Sidebar.Nav aria-label="Main">
687
+ * <Sidebar.Header>
688
+ * <DropdownMenu.Root>
689
+ * <DropdownMenu.Trigger asChild>
690
+ * <Sidebar.SwitcherTrigger>
691
+ * <GlobeIcon />
692
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
693
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
694
+ * </Sidebar.SwitcherTrigger>
695
+ * </DropdownMenu.Trigger>
696
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
697
+ * </DropdownMenu.Root>
698
+ * </Sidebar.Header>
699
+ * <Sidebar.Body>
700
+ * <Sidebar.Group>
701
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
702
+ * <Sidebar.List>
703
+ * <Sidebar.Item>
704
+ * <Sidebar.ItemButton asChild current>
705
+ * <a href="/endpoints">
706
+ * <GraphIcon />
707
+ * Endpoints
708
+ * </a>
709
+ * </Sidebar.ItemButton>
710
+ * </Sidebar.Item>
711
+ * </Sidebar.List>
712
+ * </Sidebar.Group>
713
+ * </Sidebar.Body>
714
+ * <Sidebar.Footer>
715
+ * <Sidebar.Separator />
716
+ * <DropdownMenu.Root>
717
+ * <DropdownMenu.Trigger asChild>
718
+ * <Sidebar.SwitcherTrigger>
719
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
720
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
721
+ * <Sidebar.UserAvatar alt="Jane Doe" />
722
+ * </Sidebar.SwitcherTrigger>
723
+ * </DropdownMenu.Trigger>
724
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
725
+ * </DropdownMenu.Root>
726
+ * </Sidebar.Footer>
727
+ * </Sidebar.Nav>
728
+ * <Sidebar.Trigger />
729
+ * </Sidebar.Root>
730
+ * ```
731
+ */
732
+ declare const List: ({ "aria-labelledby": ariaLabelledBy, asChild, children, className, "data-slot": dataSlot, ...props }: SidebarListProps) => import("react").JSX.Element;
733
+ type SidebarItemProps = ComponentProps<"li"> & WithAsChild & WithDataSlot;
734
+ /**
735
+ * A single `<li>` row of a `Sidebar.List`. A plain wrapper — the interactive
736
+ * element is the `Sidebar.ItemButton` child, so props, `ref`, and `className`
737
+ * all target the list item itself.
738
+ *
739
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
740
+ *
741
+ * @example
742
+ * ```tsx
743
+ * <Sidebar.Root>
744
+ * <Sidebar.Nav aria-label="Main">
745
+ * <Sidebar.Header>
746
+ * <DropdownMenu.Root>
747
+ * <DropdownMenu.Trigger asChild>
748
+ * <Sidebar.SwitcherTrigger>
749
+ * <GlobeIcon />
750
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
751
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
752
+ * </Sidebar.SwitcherTrigger>
753
+ * </DropdownMenu.Trigger>
754
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
755
+ * </DropdownMenu.Root>
756
+ * </Sidebar.Header>
757
+ * <Sidebar.Body>
758
+ * <Sidebar.Group>
759
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
760
+ * <Sidebar.List>
761
+ * <Sidebar.Item>
762
+ * <Sidebar.ItemButton asChild current>
763
+ * <a href="/endpoints">
764
+ * <GraphIcon />
765
+ * Endpoints
766
+ * </a>
767
+ * </Sidebar.ItemButton>
768
+ * </Sidebar.Item>
769
+ * </Sidebar.List>
770
+ * </Sidebar.Group>
771
+ * </Sidebar.Body>
772
+ * <Sidebar.Footer>
773
+ * <Sidebar.Separator />
774
+ * <DropdownMenu.Root>
775
+ * <DropdownMenu.Trigger asChild>
776
+ * <Sidebar.SwitcherTrigger>
777
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
778
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
779
+ * <Sidebar.UserAvatar alt="Jane Doe" />
780
+ * </Sidebar.SwitcherTrigger>
781
+ * </DropdownMenu.Trigger>
782
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
783
+ * </DropdownMenu.Root>
784
+ * </Sidebar.Footer>
785
+ * </Sidebar.Nav>
786
+ * <Sidebar.Trigger />
787
+ * </Sidebar.Root>
788
+ * ```
789
+ */
790
+ declare const Item: ({ asChild, children, className, "data-slot": dataSlot, ...props }: SidebarItemProps) => import("react").JSX.Element;
791
+ type SidebarItemButtonProps = ComponentProps<"button"> & WithAsChild & WithDataSlot & {
792
+ /**
793
+ * Marks this row as the current page: sets `aria-current="page"` and the
794
+ * `data-current` styling state. Consumers control it from their router,
795
+ * e.g. `current={pathname === "/endpoints"}`.
796
+ */
797
+ current?: boolean;
798
+ };
799
+ /**
800
+ * The interactive row of a `Sidebar.Item`: a leading icon slot and a
801
+ * truncating label. Renders a `<button>` by default; pass `asChild` to
802
+ * compose with a router link. `current` sets `aria-current="page"` and the
803
+ * `data-current` visual state.
804
+ *
805
+ * The row sizes its **leading** icon to 20px and leaves trailing visuals — a
806
+ * caret, a count, a status dot — to size themselves, so a row composed with
807
+ * `DropdownMenu.Trigger asChild` can end in `<CaretDownIcon className="text-muted
808
+ * ml-auto size-4 shrink-0" />` and stays highlighted while its menu is open
809
+ * (`data-state="open"`, supplied by the trigger). Give that menu the same width
810
+ * floor the switcher rows use — `className="min-w-(--sidebar-row-width)"` — so
811
+ * it keeps the expanded row's width instead of shrinking to this row's 28px
812
+ * rail chip (see `Sidebar.SwitcherTrigger` for the whole contract).
813
+ *
814
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
815
+ *
816
+ * @example
817
+ * ```tsx
818
+ * <Sidebar.Root>
819
+ * <Sidebar.Nav aria-label="Main">
820
+ * <Sidebar.Header>
821
+ * <DropdownMenu.Root>
822
+ * <DropdownMenu.Trigger asChild>
823
+ * <Sidebar.SwitcherTrigger>
824
+ * <GlobeIcon />
825
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
826
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
827
+ * </Sidebar.SwitcherTrigger>
828
+ * </DropdownMenu.Trigger>
829
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
830
+ * </DropdownMenu.Root>
831
+ * </Sidebar.Header>
832
+ * <Sidebar.Body>
833
+ * <Sidebar.Group>
834
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
835
+ * <Sidebar.List>
836
+ * <Sidebar.Item>
837
+ * <Sidebar.ItemButton asChild current>
838
+ * <a href="/endpoints">
839
+ * <GraphIcon />
840
+ * Endpoints
841
+ * </a>
842
+ * </Sidebar.ItemButton>
843
+ * </Sidebar.Item>
844
+ * </Sidebar.List>
845
+ * </Sidebar.Group>
846
+ * </Sidebar.Body>
847
+ * <Sidebar.Footer>
848
+ * <Sidebar.Separator />
849
+ * <DropdownMenu.Root>
850
+ * <DropdownMenu.Trigger asChild>
851
+ * <Sidebar.SwitcherTrigger>
852
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
853
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
854
+ * <Sidebar.UserAvatar alt="Jane Doe" />
855
+ * </Sidebar.SwitcherTrigger>
856
+ * </DropdownMenu.Trigger>
857
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
858
+ * </DropdownMenu.Root>
859
+ * </Sidebar.Footer>
860
+ * </Sidebar.Nav>
861
+ * <Sidebar.Trigger />
862
+ * </Sidebar.Root>
863
+ * ```
864
+ */
865
+ declare const ItemButton: ({ asChild, children, className, current, "data-slot": dataSlot, type, ...props }: SidebarItemButtonProps) => import("react").JSX.Element;
866
+ type SidebarSwitcherTriggerProps = ComponentProps<"button"> & WithAsChild & WithDataSlot;
867
+ /**
868
+ * The styled row for the sidebar's switchers: the app/product switcher in
869
+ * `Sidebar.Header` and the account/user row in `Sidebar.Footer`. A styled
870
+ * button only — it is not wired to any state; compose it with
871
+ * `DropdownMenu.Trigger asChild` or `Dialog.Trigger asChild`, which supply
872
+ * the open state (`data-state="open"` styling comes for free from those
873
+ * primitives).
874
+ *
875
+ * Inside the collapsed icon rail, the row collapses to
876
+ * its **first child element** — the leading visual (product icon, account
877
+ * avatar) — and the remaining children become visually hidden while staying
878
+ * in the accessibility tree, so the button's accessible name is unchanged.
879
+ * Wrap loose text in an element (e.g. a `<span>`) so it participates.
880
+ *
881
+ * A menu opened from the row should be as wide as the row: `width="trigger"`
882
+ * does that while the panel is expanded, but the row shrinks to a 36px chip in
883
+ * the icon rail and would drag the menu down to it. Floor the menu at the
884
+ * expanded row width with `className="min-w-(--sidebar-row-width)"` — the
885
+ * token `mantle.css` declares at `:root` for exactly this, since the menu
886
+ * renders in a portal and inherits nothing from the panel. The floor is a
887
+ * no-op while the panel is expanded (the row already measures that wide), and
888
+ * inert in the mobile sheet as long as its row is the wider of the two
889
+ * (`--sidebar-width-mobile` minus `1.5rem` and the sheet's 1px border, vs
890
+ * `--sidebar-width` minus `1rem`; 263px vs 240px at the defaults) — so widen
891
+ * `--sidebar-width-mobile` whenever you widen `--sidebar-width`, or the floor
892
+ * overhangs the sheet.
893
+ *
894
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
895
+ *
896
+ * @example
897
+ * ```tsx
898
+ * <Sidebar.Root>
899
+ * <Sidebar.Nav aria-label="Main">
900
+ * <Sidebar.Header>
901
+ * <DropdownMenu.Root>
902
+ * <DropdownMenu.Trigger asChild>
903
+ * <Sidebar.SwitcherTrigger>
904
+ * <GlobeIcon />
905
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
906
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
907
+ * </Sidebar.SwitcherTrigger>
908
+ * </DropdownMenu.Trigger>
909
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
910
+ * </DropdownMenu.Root>
911
+ * </Sidebar.Header>
912
+ * <Sidebar.Body>
913
+ * <Sidebar.Group>
914
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
915
+ * <Sidebar.List>
916
+ * <Sidebar.Item>
917
+ * <Sidebar.ItemButton asChild current>
918
+ * <a href="/endpoints">
919
+ * <GraphIcon />
920
+ * Endpoints
921
+ * </a>
922
+ * </Sidebar.ItemButton>
923
+ * </Sidebar.Item>
924
+ * </Sidebar.List>
925
+ * </Sidebar.Group>
926
+ * </Sidebar.Body>
927
+ * <Sidebar.Footer>
928
+ * <Sidebar.Separator />
929
+ * <DropdownMenu.Root>
930
+ * <DropdownMenu.Trigger asChild>
931
+ * <Sidebar.SwitcherTrigger>
932
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
933
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
934
+ * <Sidebar.UserAvatar alt="Jane Doe" />
935
+ * </Sidebar.SwitcherTrigger>
936
+ * </DropdownMenu.Trigger>
937
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
938
+ * </DropdownMenu.Root>
939
+ * </Sidebar.Footer>
940
+ * </Sidebar.Nav>
941
+ * <Sidebar.Trigger />
942
+ * </Sidebar.Root>
943
+ * ```
944
+ */
945
+ declare const SwitcherTrigger: ({ asChild, children, className, "data-slot": dataSlot, type, ...props }: SidebarSwitcherTriggerProps) => import("react").JSX.Element;
946
+ type SidebarSeparatorProps = ComponentProps<typeof Separator>;
947
+ /**
948
+ * An inset hairline between sidebar regions. Composes the mantle `Separator`,
949
+ * staying aligned with the `px-3` content padding of `Sidebar.Body` and
950
+ * `Sidebar.Footer` (it deliberately does not run edge to edge) with `my-3`
951
+ * breathing room above and below. When collapsed to the icon rail, it widens
952
+ * to the same 36px chip width as `Sidebar.SwitcherTrigger`, balancing the
953
+ * adjacent app-content gutter that sits outside the rail.
954
+ *
955
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
956
+ *
957
+ * @example
958
+ * ```tsx
959
+ * <Sidebar.Root>
960
+ * <Sidebar.Nav aria-label="Main">
961
+ * <Sidebar.Header>
962
+ * <DropdownMenu.Root>
963
+ * <DropdownMenu.Trigger asChild>
964
+ * <Sidebar.SwitcherTrigger>
965
+ * <GlobeIcon />
966
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
967
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
968
+ * </Sidebar.SwitcherTrigger>
969
+ * </DropdownMenu.Trigger>
970
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
971
+ * </DropdownMenu.Root>
972
+ * </Sidebar.Header>
973
+ * <Sidebar.Body>
974
+ * <Sidebar.Group>
975
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
976
+ * <Sidebar.List>
977
+ * <Sidebar.Item>
978
+ * <Sidebar.ItemButton asChild current>
979
+ * <a href="/endpoints">
980
+ * <GraphIcon />
981
+ * Endpoints
982
+ * </a>
983
+ * </Sidebar.ItemButton>
984
+ * </Sidebar.Item>
985
+ * </Sidebar.List>
986
+ * </Sidebar.Group>
987
+ * </Sidebar.Body>
988
+ * <Sidebar.Footer>
989
+ * <Sidebar.Separator />
990
+ * <DropdownMenu.Root>
991
+ * <DropdownMenu.Trigger asChild>
992
+ * <Sidebar.SwitcherTrigger>
993
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
994
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
995
+ * <Sidebar.UserAvatar alt="Jane Doe" />
996
+ * </Sidebar.SwitcherTrigger>
997
+ * </DropdownMenu.Trigger>
998
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
999
+ * </DropdownMenu.Root>
1000
+ * </Sidebar.Footer>
1001
+ * </Sidebar.Nav>
1002
+ * <Sidebar.Trigger />
1003
+ * </Sidebar.Root>
1004
+ * ```
1005
+ */
1006
+ declare const SidebarSeparator: ({ className, ...props }: SidebarSeparatorProps) => import("react").JSX.Element;
1007
+ type SidebarAccountAvatarProps = Omit<ComponentProps<"div">, "children"> & {
1008
+ /**
1009
+ * The account's stable identifier. Used to deterministically select a
1010
+ * background swatch from the design system's palette so the same account
1011
+ * always gets the same color.
1012
+ */
1013
+ accountId: string | undefined;
1014
+ /**
1015
+ * The account's display name. The first one or two letters become the
1016
+ * avatar's initials. Falls back to `?` when the name is empty.
1017
+ */
1018
+ accountName: string | undefined;
1019
+ };
1020
+ /**
1021
+ * A small rounded-square avatar that represents an account (workspace,
1022
+ * organization, etc.). The background color is derived deterministically from
1023
+ * the `accountId` so an account's swatch is stable across renders, sessions,
1024
+ * and devices.
1025
+ *
1026
+ * Accounts are rendered as squares to differentiate them visually from users,
1027
+ * which use a circular `Sidebar.UserAvatar`.
1028
+ *
1029
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
1030
+ *
1031
+ * @example
1032
+ * ```tsx
1033
+ * <Sidebar.Root>
1034
+ * <Sidebar.Nav aria-label="Main">
1035
+ * <Sidebar.Header>
1036
+ * <DropdownMenu.Root>
1037
+ * <DropdownMenu.Trigger asChild>
1038
+ * <Sidebar.SwitcherTrigger>
1039
+ * <GlobeIcon />
1040
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
1041
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
1042
+ * </Sidebar.SwitcherTrigger>
1043
+ * </DropdownMenu.Trigger>
1044
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1045
+ * </DropdownMenu.Root>
1046
+ * </Sidebar.Header>
1047
+ * <Sidebar.Body>
1048
+ * <Sidebar.Group>
1049
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
1050
+ * <Sidebar.List>
1051
+ * <Sidebar.Item>
1052
+ * <Sidebar.ItemButton asChild current>
1053
+ * <a href="/endpoints">
1054
+ * <GraphIcon />
1055
+ * Endpoints
1056
+ * </a>
1057
+ * </Sidebar.ItemButton>
1058
+ * </Sidebar.Item>
1059
+ * </Sidebar.List>
1060
+ * </Sidebar.Group>
1061
+ * </Sidebar.Body>
1062
+ * <Sidebar.Footer>
1063
+ * <Sidebar.Separator />
1064
+ * <DropdownMenu.Root>
1065
+ * <DropdownMenu.Trigger asChild>
1066
+ * <Sidebar.SwitcherTrigger>
1067
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
1068
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
1069
+ * <Sidebar.UserAvatar alt="Jane Doe" />
1070
+ * </Sidebar.SwitcherTrigger>
1071
+ * </DropdownMenu.Trigger>
1072
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1073
+ * </DropdownMenu.Root>
1074
+ * </Sidebar.Footer>
1075
+ * </Sidebar.Nav>
1076
+ * <Sidebar.Trigger />
1077
+ * </Sidebar.Root>
1078
+ * ```
1079
+ */
1080
+ declare const AccountAvatar: ({ accountId, accountName, className, ...props }: SidebarAccountAvatarProps) => import("react").JSX.Element;
1081
+ type SidebarUserAvatarProps = Omit<ComponentProps<"div">, "children"> & {
1082
+ /**
1083
+ * Optional URL of the user's profile picture. When provided, the image is
1084
+ * rendered to fill the avatar with `object-cover`. When omitted (or while
1085
+ * loading), a neutral person silhouette is shown.
1086
+ */
1087
+ src?: string;
1088
+ /**
1089
+ * Accessible label for the avatar. Used as the image's `alt` text and as
1090
+ * the container's `aria-label` when no image is rendered.
1091
+ *
1092
+ * @default "Your account"
1093
+ */
1094
+ alt?: string;
1095
+ };
1096
+ /**
1097
+ * A circular avatar that represents the currently signed-in user. Renders the
1098
+ * user's profile picture when `src` is provided, otherwise falls back to a
1099
+ * neutral, theme-aware person silhouette.
1100
+ *
1101
+ * Users are rendered as circles to differentiate them visually from accounts,
1102
+ * which use a square `Sidebar.AccountAvatar`.
1103
+ *
1104
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
1105
+ *
1106
+ * @example
1107
+ * ```tsx
1108
+ * <Sidebar.Root>
1109
+ * <Sidebar.Nav aria-label="Main">
1110
+ * <Sidebar.Header>
1111
+ * <DropdownMenu.Root>
1112
+ * <DropdownMenu.Trigger asChild>
1113
+ * <Sidebar.SwitcherTrigger>
1114
+ * <GlobeIcon />
1115
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
1116
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
1117
+ * </Sidebar.SwitcherTrigger>
1118
+ * </DropdownMenu.Trigger>
1119
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1120
+ * </DropdownMenu.Root>
1121
+ * </Sidebar.Header>
1122
+ * <Sidebar.Body>
1123
+ * <Sidebar.Group>
1124
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
1125
+ * <Sidebar.List>
1126
+ * <Sidebar.Item>
1127
+ * <Sidebar.ItemButton asChild current>
1128
+ * <a href="/endpoints">
1129
+ * <GraphIcon />
1130
+ * Endpoints
1131
+ * </a>
1132
+ * </Sidebar.ItemButton>
1133
+ * </Sidebar.Item>
1134
+ * </Sidebar.List>
1135
+ * </Sidebar.Group>
1136
+ * </Sidebar.Body>
1137
+ * <Sidebar.Footer>
1138
+ * <Sidebar.Separator />
1139
+ * <DropdownMenu.Root>
1140
+ * <DropdownMenu.Trigger asChild>
1141
+ * <Sidebar.SwitcherTrigger>
1142
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
1143
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
1144
+ * <Sidebar.UserAvatar alt="Jane Doe" />
1145
+ * </Sidebar.SwitcherTrigger>
1146
+ * </DropdownMenu.Trigger>
1147
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1148
+ * </DropdownMenu.Root>
1149
+ * </Sidebar.Footer>
1150
+ * </Sidebar.Nav>
1151
+ * <Sidebar.Trigger />
1152
+ * </Sidebar.Root>
1153
+ * ```
1154
+ */
1155
+ declare const UserAvatar: ({ alt, className, src, ...props }: SidebarUserAvatarProps) => import("react").JSX.Element;
1156
+ /**
1157
+ * A composable, collapsible app-navigation sidebar. `Sidebar.Root` owns the
1158
+ * state (no DOM); `Sidebar.Nav` renders the panel — inline on desktop,
1159
+ * collapsing to a skinny icon rail, and a left-side `Sheet` below the root's
1160
+ * `mobileBreakpoint`; and `Sidebar.Trigger` toggles it from anywhere under the
1161
+ * root (typically an `AppLayout.Header`). Navigation is grouped with
1162
+ * `Sidebar.Group`/`Sidebar.GroupLabel`/`Sidebar.List`, and the switcher rows
1163
+ * (app switcher up top, account/user down bottom) compose
1164
+ * `Sidebar.SwitcherTrigger` with your own `DropdownMenu` or `Dialog`.
1165
+ *
1166
+ * The component is routing-agnostic: compose router links via `asChild` on
1167
+ * `Sidebar.ItemButton` and drive `current` from your router's location.
1168
+ *
1169
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
1170
+ *
1171
+ * @example
1172
+ * Composition:
1173
+ * ```
1174
+ * Sidebar.Root
1175
+ * ├── Sidebar.Nav
1176
+ * │ ├── Sidebar.Header
1177
+ * │ │ └── Sidebar.SwitcherTrigger
1178
+ * │ ├── Sidebar.Body
1179
+ * │ │ └── Sidebar.Group
1180
+ * │ │ ├── Sidebar.GroupLabel
1181
+ * │ │ └── Sidebar.List
1182
+ * │ │ └── Sidebar.Item
1183
+ * │ │ └── Sidebar.ItemButton
1184
+ * │ └── Sidebar.Footer
1185
+ * │ ├── Sidebar.Separator
1186
+ * │ └── Sidebar.SwitcherTrigger
1187
+ * │ ├── Sidebar.AccountAvatar
1188
+ * │ └── Sidebar.UserAvatar
1189
+ * └── Sidebar.Trigger
1190
+ * ```
1191
+ *
1192
+ * @example
1193
+ * ```tsx
1194
+ * <Sidebar.Root>
1195
+ * <Sidebar.Nav aria-label="Main">
1196
+ * <Sidebar.Header>
1197
+ * <DropdownMenu.Root>
1198
+ * <DropdownMenu.Trigger asChild>
1199
+ * <Sidebar.SwitcherTrigger>
1200
+ * <GlobeIcon />
1201
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
1202
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
1203
+ * </Sidebar.SwitcherTrigger>
1204
+ * </DropdownMenu.Trigger>
1205
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1206
+ * </DropdownMenu.Root>
1207
+ * </Sidebar.Header>
1208
+ * <Sidebar.Body>
1209
+ * <Sidebar.Group>
1210
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
1211
+ * <Sidebar.List>
1212
+ * <Sidebar.Item>
1213
+ * <Sidebar.ItemButton asChild current>
1214
+ * <a href="/endpoints">
1215
+ * <GraphIcon />
1216
+ * Endpoints
1217
+ * </a>
1218
+ * </Sidebar.ItemButton>
1219
+ * </Sidebar.Item>
1220
+ * </Sidebar.List>
1221
+ * </Sidebar.Group>
1222
+ * </Sidebar.Body>
1223
+ * <Sidebar.Footer>
1224
+ * <Sidebar.Separator />
1225
+ * <DropdownMenu.Root>
1226
+ * <DropdownMenu.Trigger asChild>
1227
+ * <Sidebar.SwitcherTrigger>
1228
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
1229
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
1230
+ * <Sidebar.UserAvatar alt="Jane Doe" />
1231
+ * </Sidebar.SwitcherTrigger>
1232
+ * </DropdownMenu.Trigger>
1233
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1234
+ * </DropdownMenu.Root>
1235
+ * </Sidebar.Footer>
1236
+ * </Sidebar.Nav>
1237
+ * <Sidebar.Trigger />
1238
+ * </Sidebar.Root>
1239
+ * ```
1240
+ */
1241
+ declare const Sidebar: {
1242
+ /**
1243
+ * The state owner for a sidebar. Renders no DOM — provides expanded /
1244
+ * mobile-sheet state to every part below it so the trigger can live in the
1245
+ * app shell without coupling it to the sidebar.
1246
+ *
1247
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
1248
+ *
1249
+ * @example
1250
+ * ```tsx
1251
+ * <Sidebar.Root>
1252
+ * <Sidebar.Nav aria-label="Main">
1253
+ * <Sidebar.Header>
1254
+ * <DropdownMenu.Root>
1255
+ * <DropdownMenu.Trigger asChild>
1256
+ * <Sidebar.SwitcherTrigger>
1257
+ * <GlobeIcon />
1258
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
1259
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
1260
+ * </Sidebar.SwitcherTrigger>
1261
+ * </DropdownMenu.Trigger>
1262
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1263
+ * </DropdownMenu.Root>
1264
+ * </Sidebar.Header>
1265
+ * <Sidebar.Body>
1266
+ * <Sidebar.Group>
1267
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
1268
+ * <Sidebar.List>
1269
+ * <Sidebar.Item>
1270
+ * <Sidebar.ItemButton asChild current>
1271
+ * <a href="/endpoints">
1272
+ * <GraphIcon />
1273
+ * Endpoints
1274
+ * </a>
1275
+ * </Sidebar.ItemButton>
1276
+ * </Sidebar.Item>
1277
+ * </Sidebar.List>
1278
+ * </Sidebar.Group>
1279
+ * </Sidebar.Body>
1280
+ * <Sidebar.Footer>
1281
+ * <Sidebar.Separator />
1282
+ * <DropdownMenu.Root>
1283
+ * <DropdownMenu.Trigger asChild>
1284
+ * <Sidebar.SwitcherTrigger>
1285
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
1286
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
1287
+ * <Sidebar.UserAvatar alt="Jane Doe" />
1288
+ * </Sidebar.SwitcherTrigger>
1289
+ * </DropdownMenu.Trigger>
1290
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1291
+ * </DropdownMenu.Root>
1292
+ * </Sidebar.Footer>
1293
+ * </Sidebar.Nav>
1294
+ * <Sidebar.Trigger />
1295
+ * </Sidebar.Root>
1296
+ * ```
1297
+ */
1298
+ readonly Root: typeof Root;
1299
+ /**
1300
+ * The sidebar panel: an inline panel that collapses to the icon rail on
1301
+ * desktop, a left `Sheet` below the root's `mobileBreakpoint`. Set
1302
+ * `--sidebar-width` / `--sidebar-width-mobile` via its `className` or
1303
+ * `style`.
1304
+ *
1305
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
1306
+ *
1307
+ * @example
1308
+ * ```tsx
1309
+ * <Sidebar.Root>
1310
+ * <Sidebar.Nav aria-label="Main">
1311
+ * <Sidebar.Header>
1312
+ * <DropdownMenu.Root>
1313
+ * <DropdownMenu.Trigger asChild>
1314
+ * <Sidebar.SwitcherTrigger>
1315
+ * <GlobeIcon />
1316
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
1317
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
1318
+ * </Sidebar.SwitcherTrigger>
1319
+ * </DropdownMenu.Trigger>
1320
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1321
+ * </DropdownMenu.Root>
1322
+ * </Sidebar.Header>
1323
+ * <Sidebar.Body>
1324
+ * <Sidebar.Group>
1325
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
1326
+ * <Sidebar.List>
1327
+ * <Sidebar.Item>
1328
+ * <Sidebar.ItemButton asChild current>
1329
+ * <a href="/endpoints">
1330
+ * <GraphIcon />
1331
+ * Endpoints
1332
+ * </a>
1333
+ * </Sidebar.ItemButton>
1334
+ * </Sidebar.Item>
1335
+ * </Sidebar.List>
1336
+ * </Sidebar.Group>
1337
+ * </Sidebar.Body>
1338
+ * <Sidebar.Footer>
1339
+ * <Sidebar.Separator />
1340
+ * <DropdownMenu.Root>
1341
+ * <DropdownMenu.Trigger asChild>
1342
+ * <Sidebar.SwitcherTrigger>
1343
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
1344
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
1345
+ * <Sidebar.UserAvatar alt="Jane Doe" />
1346
+ * </Sidebar.SwitcherTrigger>
1347
+ * </DropdownMenu.Trigger>
1348
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1349
+ * </DropdownMenu.Root>
1350
+ * </Sidebar.Footer>
1351
+ * </Sidebar.Nav>
1352
+ * <Sidebar.Trigger />
1353
+ * </Sidebar.Root>
1354
+ * ```
1355
+ */
1356
+ readonly Nav: typeof Nav;
1357
+ /**
1358
+ * The `IconButton` that toggles the sidebar. Place it in the app shell's
1359
+ * header; it stays functional at every breakpoint.
1360
+ *
1361
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
1362
+ *
1363
+ * @example
1364
+ * ```tsx
1365
+ * <Sidebar.Root>
1366
+ * <Sidebar.Nav aria-label="Main">
1367
+ * <Sidebar.Header>
1368
+ * <DropdownMenu.Root>
1369
+ * <DropdownMenu.Trigger asChild>
1370
+ * <Sidebar.SwitcherTrigger>
1371
+ * <GlobeIcon />
1372
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
1373
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
1374
+ * </Sidebar.SwitcherTrigger>
1375
+ * </DropdownMenu.Trigger>
1376
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1377
+ * </DropdownMenu.Root>
1378
+ * </Sidebar.Header>
1379
+ * <Sidebar.Body>
1380
+ * <Sidebar.Group>
1381
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
1382
+ * <Sidebar.List>
1383
+ * <Sidebar.Item>
1384
+ * <Sidebar.ItemButton asChild current>
1385
+ * <a href="/endpoints">
1386
+ * <GraphIcon />
1387
+ * Endpoints
1388
+ * </a>
1389
+ * </Sidebar.ItemButton>
1390
+ * </Sidebar.Item>
1391
+ * </Sidebar.List>
1392
+ * </Sidebar.Group>
1393
+ * </Sidebar.Body>
1394
+ * <Sidebar.Footer>
1395
+ * <Sidebar.Separator />
1396
+ * <DropdownMenu.Root>
1397
+ * <DropdownMenu.Trigger asChild>
1398
+ * <Sidebar.SwitcherTrigger>
1399
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
1400
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
1401
+ * <Sidebar.UserAvatar alt="Jane Doe" />
1402
+ * </Sidebar.SwitcherTrigger>
1403
+ * </DropdownMenu.Trigger>
1404
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1405
+ * </DropdownMenu.Root>
1406
+ * </Sidebar.Footer>
1407
+ * </Sidebar.Nav>
1408
+ * <Sidebar.Trigger />
1409
+ * </Sidebar.Root>
1410
+ * ```
1411
+ */
1412
+ readonly Trigger: typeof Trigger;
1413
+ /**
1414
+ * The pinned top container of the panel, typically holding the app
1415
+ * switcher (`Sidebar.SwitcherTrigger` + `DropdownMenu`/`Dialog`). Its
1416
+ * height vertically aligns the switcher with an `AppLayout.Header`.
1417
+ *
1418
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
1419
+ *
1420
+ * @example
1421
+ * ```tsx
1422
+ * <Sidebar.Root>
1423
+ * <Sidebar.Nav aria-label="Main">
1424
+ * <Sidebar.Header>
1425
+ * <DropdownMenu.Root>
1426
+ * <DropdownMenu.Trigger asChild>
1427
+ * <Sidebar.SwitcherTrigger>
1428
+ * <GlobeIcon />
1429
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
1430
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
1431
+ * </Sidebar.SwitcherTrigger>
1432
+ * </DropdownMenu.Trigger>
1433
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1434
+ * </DropdownMenu.Root>
1435
+ * </Sidebar.Header>
1436
+ * <Sidebar.Body>
1437
+ * <Sidebar.Group>
1438
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
1439
+ * <Sidebar.List>
1440
+ * <Sidebar.Item>
1441
+ * <Sidebar.ItemButton asChild current>
1442
+ * <a href="/endpoints">
1443
+ * <GraphIcon />
1444
+ * Endpoints
1445
+ * </a>
1446
+ * </Sidebar.ItemButton>
1447
+ * </Sidebar.Item>
1448
+ * </Sidebar.List>
1449
+ * </Sidebar.Group>
1450
+ * </Sidebar.Body>
1451
+ * <Sidebar.Footer>
1452
+ * <Sidebar.Separator />
1453
+ * <DropdownMenu.Root>
1454
+ * <DropdownMenu.Trigger asChild>
1455
+ * <Sidebar.SwitcherTrigger>
1456
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
1457
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
1458
+ * <Sidebar.UserAvatar alt="Jane Doe" />
1459
+ * </Sidebar.SwitcherTrigger>
1460
+ * </DropdownMenu.Trigger>
1461
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1462
+ * </DropdownMenu.Root>
1463
+ * </Sidebar.Footer>
1464
+ * </Sidebar.Nav>
1465
+ * <Sidebar.Trigger />
1466
+ * </Sidebar.Root>
1467
+ * ```
1468
+ */
1469
+ readonly Header: typeof Header;
1470
+ /**
1471
+ * The scrollable middle region holding the navigation groups.
1472
+ *
1473
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
1474
+ *
1475
+ * @example
1476
+ * ```tsx
1477
+ * <Sidebar.Root>
1478
+ * <Sidebar.Nav aria-label="Main">
1479
+ * <Sidebar.Header>
1480
+ * <DropdownMenu.Root>
1481
+ * <DropdownMenu.Trigger asChild>
1482
+ * <Sidebar.SwitcherTrigger>
1483
+ * <GlobeIcon />
1484
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
1485
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
1486
+ * </Sidebar.SwitcherTrigger>
1487
+ * </DropdownMenu.Trigger>
1488
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1489
+ * </DropdownMenu.Root>
1490
+ * </Sidebar.Header>
1491
+ * <Sidebar.Body>
1492
+ * <Sidebar.Group>
1493
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
1494
+ * <Sidebar.List>
1495
+ * <Sidebar.Item>
1496
+ * <Sidebar.ItemButton asChild current>
1497
+ * <a href="/endpoints">
1498
+ * <GraphIcon />
1499
+ * Endpoints
1500
+ * </a>
1501
+ * </Sidebar.ItemButton>
1502
+ * </Sidebar.Item>
1503
+ * </Sidebar.List>
1504
+ * </Sidebar.Group>
1505
+ * </Sidebar.Body>
1506
+ * <Sidebar.Footer>
1507
+ * <Sidebar.Separator />
1508
+ * <DropdownMenu.Root>
1509
+ * <DropdownMenu.Trigger asChild>
1510
+ * <Sidebar.SwitcherTrigger>
1511
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
1512
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
1513
+ * <Sidebar.UserAvatar alt="Jane Doe" />
1514
+ * </Sidebar.SwitcherTrigger>
1515
+ * </DropdownMenu.Trigger>
1516
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1517
+ * </DropdownMenu.Root>
1518
+ * </Sidebar.Footer>
1519
+ * </Sidebar.Nav>
1520
+ * <Sidebar.Trigger />
1521
+ * </Sidebar.Root>
1522
+ * ```
1523
+ */
1524
+ readonly Body: typeof Body;
1525
+ /**
1526
+ * The pinned bottom container, typically holding cross-product items and
1527
+ * the account/user switcher row.
1528
+ *
1529
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
1530
+ *
1531
+ * @example
1532
+ * ```tsx
1533
+ * <Sidebar.Root>
1534
+ * <Sidebar.Nav aria-label="Main">
1535
+ * <Sidebar.Header>
1536
+ * <DropdownMenu.Root>
1537
+ * <DropdownMenu.Trigger asChild>
1538
+ * <Sidebar.SwitcherTrigger>
1539
+ * <GlobeIcon />
1540
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
1541
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
1542
+ * </Sidebar.SwitcherTrigger>
1543
+ * </DropdownMenu.Trigger>
1544
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1545
+ * </DropdownMenu.Root>
1546
+ * </Sidebar.Header>
1547
+ * <Sidebar.Body>
1548
+ * <Sidebar.Group>
1549
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
1550
+ * <Sidebar.List>
1551
+ * <Sidebar.Item>
1552
+ * <Sidebar.ItemButton asChild current>
1553
+ * <a href="/endpoints">
1554
+ * <GraphIcon />
1555
+ * Endpoints
1556
+ * </a>
1557
+ * </Sidebar.ItemButton>
1558
+ * </Sidebar.Item>
1559
+ * </Sidebar.List>
1560
+ * </Sidebar.Group>
1561
+ * </Sidebar.Body>
1562
+ * <Sidebar.Footer>
1563
+ * <Sidebar.Separator />
1564
+ * <DropdownMenu.Root>
1565
+ * <DropdownMenu.Trigger asChild>
1566
+ * <Sidebar.SwitcherTrigger>
1567
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
1568
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
1569
+ * <Sidebar.UserAvatar alt="Jane Doe" />
1570
+ * </Sidebar.SwitcherTrigger>
1571
+ * </DropdownMenu.Trigger>
1572
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1573
+ * </DropdownMenu.Root>
1574
+ * </Sidebar.Footer>
1575
+ * </Sidebar.Nav>
1576
+ * <Sidebar.Trigger />
1577
+ * </Sidebar.Root>
1578
+ * ```
1579
+ */
1580
+ readonly Footer: typeof Footer;
1581
+ /**
1582
+ * A grouping container pairing a `GroupLabel` with a `List`; wires the
1583
+ * label to the list via `aria-labelledby`.
1584
+ *
1585
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
1586
+ *
1587
+ * @example
1588
+ * ```tsx
1589
+ * <Sidebar.Root>
1590
+ * <Sidebar.Nav aria-label="Main">
1591
+ * <Sidebar.Header>
1592
+ * <DropdownMenu.Root>
1593
+ * <DropdownMenu.Trigger asChild>
1594
+ * <Sidebar.SwitcherTrigger>
1595
+ * <GlobeIcon />
1596
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
1597
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
1598
+ * </Sidebar.SwitcherTrigger>
1599
+ * </DropdownMenu.Trigger>
1600
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1601
+ * </DropdownMenu.Root>
1602
+ * </Sidebar.Header>
1603
+ * <Sidebar.Body>
1604
+ * <Sidebar.Group>
1605
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
1606
+ * <Sidebar.List>
1607
+ * <Sidebar.Item>
1608
+ * <Sidebar.ItemButton asChild current>
1609
+ * <a href="/endpoints">
1610
+ * <GraphIcon />
1611
+ * Endpoints
1612
+ * </a>
1613
+ * </Sidebar.ItemButton>
1614
+ * </Sidebar.Item>
1615
+ * </Sidebar.List>
1616
+ * </Sidebar.Group>
1617
+ * </Sidebar.Body>
1618
+ * <Sidebar.Footer>
1619
+ * <Sidebar.Separator />
1620
+ * <DropdownMenu.Root>
1621
+ * <DropdownMenu.Trigger asChild>
1622
+ * <Sidebar.SwitcherTrigger>
1623
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
1624
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
1625
+ * <Sidebar.UserAvatar alt="Jane Doe" />
1626
+ * </Sidebar.SwitcherTrigger>
1627
+ * </DropdownMenu.Trigger>
1628
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1629
+ * </DropdownMenu.Root>
1630
+ * </Sidebar.Footer>
1631
+ * </Sidebar.Nav>
1632
+ * <Sidebar.Trigger />
1633
+ * </Sidebar.Root>
1634
+ * ```
1635
+ */
1636
+ readonly Group: typeof Group;
1637
+ /**
1638
+ * The muted label of a group. Renders a `<div>`; pass `asChild` to render
1639
+ * a heading at a level you control.
1640
+ *
1641
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
1642
+ *
1643
+ * @example
1644
+ * ```tsx
1645
+ * <Sidebar.Root>
1646
+ * <Sidebar.Nav aria-label="Main">
1647
+ * <Sidebar.Header>
1648
+ * <DropdownMenu.Root>
1649
+ * <DropdownMenu.Trigger asChild>
1650
+ * <Sidebar.SwitcherTrigger>
1651
+ * <GlobeIcon />
1652
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
1653
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
1654
+ * </Sidebar.SwitcherTrigger>
1655
+ * </DropdownMenu.Trigger>
1656
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1657
+ * </DropdownMenu.Root>
1658
+ * </Sidebar.Header>
1659
+ * <Sidebar.Body>
1660
+ * <Sidebar.Group>
1661
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
1662
+ * <Sidebar.List>
1663
+ * <Sidebar.Item>
1664
+ * <Sidebar.ItemButton asChild current>
1665
+ * <a href="/endpoints">
1666
+ * <GraphIcon />
1667
+ * Endpoints
1668
+ * </a>
1669
+ * </Sidebar.ItemButton>
1670
+ * </Sidebar.Item>
1671
+ * </Sidebar.List>
1672
+ * </Sidebar.Group>
1673
+ * </Sidebar.Body>
1674
+ * <Sidebar.Footer>
1675
+ * <Sidebar.Separator />
1676
+ * <DropdownMenu.Root>
1677
+ * <DropdownMenu.Trigger asChild>
1678
+ * <Sidebar.SwitcherTrigger>
1679
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
1680
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
1681
+ * <Sidebar.UserAvatar alt="Jane Doe" />
1682
+ * </Sidebar.SwitcherTrigger>
1683
+ * </DropdownMenu.Trigger>
1684
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1685
+ * </DropdownMenu.Root>
1686
+ * </Sidebar.Footer>
1687
+ * </Sidebar.Nav>
1688
+ * <Sidebar.Trigger />
1689
+ * </Sidebar.Root>
1690
+ * ```
1691
+ */
1692
+ readonly GroupLabel: typeof GroupLabel;
1693
+ /**
1694
+ * The `<ul>` of navigation rows in a group.
1695
+ *
1696
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
1697
+ *
1698
+ * @example
1699
+ * ```tsx
1700
+ * <Sidebar.Root>
1701
+ * <Sidebar.Nav aria-label="Main">
1702
+ * <Sidebar.Header>
1703
+ * <DropdownMenu.Root>
1704
+ * <DropdownMenu.Trigger asChild>
1705
+ * <Sidebar.SwitcherTrigger>
1706
+ * <GlobeIcon />
1707
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
1708
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
1709
+ * </Sidebar.SwitcherTrigger>
1710
+ * </DropdownMenu.Trigger>
1711
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1712
+ * </DropdownMenu.Root>
1713
+ * </Sidebar.Header>
1714
+ * <Sidebar.Body>
1715
+ * <Sidebar.Group>
1716
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
1717
+ * <Sidebar.List>
1718
+ * <Sidebar.Item>
1719
+ * <Sidebar.ItemButton asChild current>
1720
+ * <a href="/endpoints">
1721
+ * <GraphIcon />
1722
+ * Endpoints
1723
+ * </a>
1724
+ * </Sidebar.ItemButton>
1725
+ * </Sidebar.Item>
1726
+ * </Sidebar.List>
1727
+ * </Sidebar.Group>
1728
+ * </Sidebar.Body>
1729
+ * <Sidebar.Footer>
1730
+ * <Sidebar.Separator />
1731
+ * <DropdownMenu.Root>
1732
+ * <DropdownMenu.Trigger asChild>
1733
+ * <Sidebar.SwitcherTrigger>
1734
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
1735
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
1736
+ * <Sidebar.UserAvatar alt="Jane Doe" />
1737
+ * </Sidebar.SwitcherTrigger>
1738
+ * </DropdownMenu.Trigger>
1739
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1740
+ * </DropdownMenu.Root>
1741
+ * </Sidebar.Footer>
1742
+ * </Sidebar.Nav>
1743
+ * <Sidebar.Trigger />
1744
+ * </Sidebar.Root>
1745
+ * ```
1746
+ */
1747
+ readonly List: typeof List;
1748
+ /**
1749
+ * A single `<li>` row wrapper.
1750
+ *
1751
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
1752
+ *
1753
+ * @example
1754
+ * ```tsx
1755
+ * <Sidebar.Root>
1756
+ * <Sidebar.Nav aria-label="Main">
1757
+ * <Sidebar.Header>
1758
+ * <DropdownMenu.Root>
1759
+ * <DropdownMenu.Trigger asChild>
1760
+ * <Sidebar.SwitcherTrigger>
1761
+ * <GlobeIcon />
1762
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
1763
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
1764
+ * </Sidebar.SwitcherTrigger>
1765
+ * </DropdownMenu.Trigger>
1766
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1767
+ * </DropdownMenu.Root>
1768
+ * </Sidebar.Header>
1769
+ * <Sidebar.Body>
1770
+ * <Sidebar.Group>
1771
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
1772
+ * <Sidebar.List>
1773
+ * <Sidebar.Item>
1774
+ * <Sidebar.ItemButton asChild current>
1775
+ * <a href="/endpoints">
1776
+ * <GraphIcon />
1777
+ * Endpoints
1778
+ * </a>
1779
+ * </Sidebar.ItemButton>
1780
+ * </Sidebar.Item>
1781
+ * </Sidebar.List>
1782
+ * </Sidebar.Group>
1783
+ * </Sidebar.Body>
1784
+ * <Sidebar.Footer>
1785
+ * <Sidebar.Separator />
1786
+ * <DropdownMenu.Root>
1787
+ * <DropdownMenu.Trigger asChild>
1788
+ * <Sidebar.SwitcherTrigger>
1789
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
1790
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
1791
+ * <Sidebar.UserAvatar alt="Jane Doe" />
1792
+ * </Sidebar.SwitcherTrigger>
1793
+ * </DropdownMenu.Trigger>
1794
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1795
+ * </DropdownMenu.Root>
1796
+ * </Sidebar.Footer>
1797
+ * </Sidebar.Nav>
1798
+ * <Sidebar.Trigger />
1799
+ * </Sidebar.Root>
1800
+ * ```
1801
+ */
1802
+ readonly Item: typeof Item;
1803
+ /**
1804
+ * The interactive navigation row (icon + truncating label). `asChild` for
1805
+ * router links; `current` for the active page.
1806
+ *
1807
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
1808
+ *
1809
+ * @example
1810
+ * ```tsx
1811
+ * <Sidebar.Root>
1812
+ * <Sidebar.Nav aria-label="Main">
1813
+ * <Sidebar.Header>
1814
+ * <DropdownMenu.Root>
1815
+ * <DropdownMenu.Trigger asChild>
1816
+ * <Sidebar.SwitcherTrigger>
1817
+ * <GlobeIcon />
1818
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
1819
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
1820
+ * </Sidebar.SwitcherTrigger>
1821
+ * </DropdownMenu.Trigger>
1822
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1823
+ * </DropdownMenu.Root>
1824
+ * </Sidebar.Header>
1825
+ * <Sidebar.Body>
1826
+ * <Sidebar.Group>
1827
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
1828
+ * <Sidebar.List>
1829
+ * <Sidebar.Item>
1830
+ * <Sidebar.ItemButton asChild current>
1831
+ * <a href="/endpoints">
1832
+ * <GraphIcon />
1833
+ * Endpoints
1834
+ * </a>
1835
+ * </Sidebar.ItemButton>
1836
+ * </Sidebar.Item>
1837
+ * </Sidebar.List>
1838
+ * </Sidebar.Group>
1839
+ * </Sidebar.Body>
1840
+ * <Sidebar.Footer>
1841
+ * <Sidebar.Separator />
1842
+ * <DropdownMenu.Root>
1843
+ * <DropdownMenu.Trigger asChild>
1844
+ * <Sidebar.SwitcherTrigger>
1845
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
1846
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
1847
+ * <Sidebar.UserAvatar alt="Jane Doe" />
1848
+ * </Sidebar.SwitcherTrigger>
1849
+ * </DropdownMenu.Trigger>
1850
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1851
+ * </DropdownMenu.Root>
1852
+ * </Sidebar.Footer>
1853
+ * </Sidebar.Nav>
1854
+ * <Sidebar.Trigger />
1855
+ * </Sidebar.Root>
1856
+ * ```
1857
+ */
1858
+ readonly ItemButton: typeof ItemButton;
1859
+ /**
1860
+ * The styled switcher row for the header/footer. Not state-wired — compose
1861
+ * with `DropdownMenu.Trigger asChild` or `Dialog.Trigger asChild`.
1862
+ *
1863
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
1864
+ *
1865
+ * @example
1866
+ * ```tsx
1867
+ * <Sidebar.Root>
1868
+ * <Sidebar.Nav aria-label="Main">
1869
+ * <Sidebar.Header>
1870
+ * <DropdownMenu.Root>
1871
+ * <DropdownMenu.Trigger asChild>
1872
+ * <Sidebar.SwitcherTrigger>
1873
+ * <GlobeIcon />
1874
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
1875
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
1876
+ * </Sidebar.SwitcherTrigger>
1877
+ * </DropdownMenu.Trigger>
1878
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1879
+ * </DropdownMenu.Root>
1880
+ * </Sidebar.Header>
1881
+ * <Sidebar.Body>
1882
+ * <Sidebar.Group>
1883
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
1884
+ * <Sidebar.List>
1885
+ * <Sidebar.Item>
1886
+ * <Sidebar.ItemButton asChild current>
1887
+ * <a href="/endpoints">
1888
+ * <GraphIcon />
1889
+ * Endpoints
1890
+ * </a>
1891
+ * </Sidebar.ItemButton>
1892
+ * </Sidebar.Item>
1893
+ * </Sidebar.List>
1894
+ * </Sidebar.Group>
1895
+ * </Sidebar.Body>
1896
+ * <Sidebar.Footer>
1897
+ * <Sidebar.Separator />
1898
+ * <DropdownMenu.Root>
1899
+ * <DropdownMenu.Trigger asChild>
1900
+ * <Sidebar.SwitcherTrigger>
1901
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
1902
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
1903
+ * <Sidebar.UserAvatar alt="Jane Doe" />
1904
+ * </Sidebar.SwitcherTrigger>
1905
+ * </DropdownMenu.Trigger>
1906
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1907
+ * </DropdownMenu.Root>
1908
+ * </Sidebar.Footer>
1909
+ * </Sidebar.Nav>
1910
+ * <Sidebar.Trigger />
1911
+ * </Sidebar.Root>
1912
+ * ```
1913
+ */
1914
+ readonly SwitcherTrigger: typeof SwitcherTrigger;
1915
+ /**
1916
+ * An inset hairline between sidebar regions, aligned with the content
1917
+ * padding.
1918
+ *
1919
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
1920
+ *
1921
+ * @example
1922
+ * ```tsx
1923
+ * <Sidebar.Root>
1924
+ * <Sidebar.Nav aria-label="Main">
1925
+ * <Sidebar.Header>
1926
+ * <DropdownMenu.Root>
1927
+ * <DropdownMenu.Trigger asChild>
1928
+ * <Sidebar.SwitcherTrigger>
1929
+ * <GlobeIcon />
1930
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
1931
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
1932
+ * </Sidebar.SwitcherTrigger>
1933
+ * </DropdownMenu.Trigger>
1934
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1935
+ * </DropdownMenu.Root>
1936
+ * </Sidebar.Header>
1937
+ * <Sidebar.Body>
1938
+ * <Sidebar.Group>
1939
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
1940
+ * <Sidebar.List>
1941
+ * <Sidebar.Item>
1942
+ * <Sidebar.ItemButton asChild current>
1943
+ * <a href="/endpoints">
1944
+ * <GraphIcon />
1945
+ * Endpoints
1946
+ * </a>
1947
+ * </Sidebar.ItemButton>
1948
+ * </Sidebar.Item>
1949
+ * </Sidebar.List>
1950
+ * </Sidebar.Group>
1951
+ * </Sidebar.Body>
1952
+ * <Sidebar.Footer>
1953
+ * <Sidebar.Separator />
1954
+ * <DropdownMenu.Root>
1955
+ * <DropdownMenu.Trigger asChild>
1956
+ * <Sidebar.SwitcherTrigger>
1957
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
1958
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
1959
+ * <Sidebar.UserAvatar alt="Jane Doe" />
1960
+ * </Sidebar.SwitcherTrigger>
1961
+ * </DropdownMenu.Trigger>
1962
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1963
+ * </DropdownMenu.Root>
1964
+ * </Sidebar.Footer>
1965
+ * </Sidebar.Nav>
1966
+ * <Sidebar.Trigger />
1967
+ * </Sidebar.Root>
1968
+ * ```
1969
+ */
1970
+ readonly Separator: typeof SidebarSeparator;
1971
+ /**
1972
+ * A rounded-square account avatar with deterministic, WCAG-compliant
1973
+ * swatch colors derived from the account id.
1974
+ *
1975
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
1976
+ *
1977
+ * @example
1978
+ * ```tsx
1979
+ * <Sidebar.Root>
1980
+ * <Sidebar.Nav aria-label="Main">
1981
+ * <Sidebar.Header>
1982
+ * <DropdownMenu.Root>
1983
+ * <DropdownMenu.Trigger asChild>
1984
+ * <Sidebar.SwitcherTrigger>
1985
+ * <GlobeIcon />
1986
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
1987
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
1988
+ * </Sidebar.SwitcherTrigger>
1989
+ * </DropdownMenu.Trigger>
1990
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
1991
+ * </DropdownMenu.Root>
1992
+ * </Sidebar.Header>
1993
+ * <Sidebar.Body>
1994
+ * <Sidebar.Group>
1995
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
1996
+ * <Sidebar.List>
1997
+ * <Sidebar.Item>
1998
+ * <Sidebar.ItemButton asChild current>
1999
+ * <a href="/endpoints">
2000
+ * <GraphIcon />
2001
+ * Endpoints
2002
+ * </a>
2003
+ * </Sidebar.ItemButton>
2004
+ * </Sidebar.Item>
2005
+ * </Sidebar.List>
2006
+ * </Sidebar.Group>
2007
+ * </Sidebar.Body>
2008
+ * <Sidebar.Footer>
2009
+ * <Sidebar.Separator />
2010
+ * <DropdownMenu.Root>
2011
+ * <DropdownMenu.Trigger asChild>
2012
+ * <Sidebar.SwitcherTrigger>
2013
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
2014
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
2015
+ * <Sidebar.UserAvatar alt="Jane Doe" />
2016
+ * </Sidebar.SwitcherTrigger>
2017
+ * </DropdownMenu.Trigger>
2018
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
2019
+ * </DropdownMenu.Root>
2020
+ * </Sidebar.Footer>
2021
+ * </Sidebar.Nav>
2022
+ * <Sidebar.Trigger />
2023
+ * </Sidebar.Root>
2024
+ * ```
2025
+ */
2026
+ readonly AccountAvatar: typeof AccountAvatar;
2027
+ /**
2028
+ * A circular user avatar with a silhouette fallback.
2029
+ *
2030
+ * @see https://mantle.ngrok.com/components/navigation/sidebar
2031
+ *
2032
+ * @example
2033
+ * ```tsx
2034
+ * <Sidebar.Root>
2035
+ * <Sidebar.Nav aria-label="Main">
2036
+ * <Sidebar.Header>
2037
+ * <DropdownMenu.Root>
2038
+ * <DropdownMenu.Trigger asChild>
2039
+ * <Sidebar.SwitcherTrigger>
2040
+ * <GlobeIcon />
2041
+ * <span className="text-strong min-w-0 flex-1 truncate text-base">Universal Gateway</span>
2042
+ * <CaretDownIcon className="text-muted size-4 shrink-0" />
2043
+ * </Sidebar.SwitcherTrigger>
2044
+ * </DropdownMenu.Trigger>
2045
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
2046
+ * </DropdownMenu.Root>
2047
+ * </Sidebar.Header>
2048
+ * <Sidebar.Body>
2049
+ * <Sidebar.Group>
2050
+ * <Sidebar.GroupLabel>Traffic</Sidebar.GroupLabel>
2051
+ * <Sidebar.List>
2052
+ * <Sidebar.Item>
2053
+ * <Sidebar.ItemButton asChild current>
2054
+ * <a href="/endpoints">
2055
+ * <GraphIcon />
2056
+ * Endpoints
2057
+ * </a>
2058
+ * </Sidebar.ItemButton>
2059
+ * </Sidebar.Item>
2060
+ * </Sidebar.List>
2061
+ * </Sidebar.Group>
2062
+ * </Sidebar.Body>
2063
+ * <Sidebar.Footer>
2064
+ * <Sidebar.Separator />
2065
+ * <DropdownMenu.Root>
2066
+ * <DropdownMenu.Trigger asChild>
2067
+ * <Sidebar.SwitcherTrigger>
2068
+ * <Sidebar.AccountAvatar accountId="acc_123" accountName="Acme Corp" />
2069
+ * <span className="text-strong min-w-0 flex-1 truncate text-sm font-medium">Acme Corp</span>
2070
+ * <Sidebar.UserAvatar alt="Jane Doe" />
2071
+ * </Sidebar.SwitcherTrigger>
2072
+ * </DropdownMenu.Trigger>
2073
+ * <DropdownMenu.Content width="trigger" className="min-w-(--sidebar-row-width)">…</DropdownMenu.Content>
2074
+ * </DropdownMenu.Root>
2075
+ * </Sidebar.Footer>
2076
+ * </Sidebar.Nav>
2077
+ * <Sidebar.Trigger />
2078
+ * </Sidebar.Root>
2079
+ * ```
2080
+ */
2081
+ readonly UserAvatar: typeof UserAvatar;
2082
+ };
2083
+ //#endregion
2084
+ export { Sidebar, type SidebarMobileBreakpoint, type SidebarState, useSidebar };