@ngrok/mantle 0.82.0 → 0.83.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 (175) hide show
  1. package/dist/accordion.d.ts +7 -7
  2. package/dist/accordion.js +1 -1
  3. package/dist/agent.json +3 -1
  4. package/dist/{alert-BWwNPOMI.d.ts → alert-B1HXfkYn.d.ts} +9 -7
  5. package/dist/{alert-QMs0PqMq.js → alert-BuG2qS5l.js} +1 -1
  6. package/dist/alert-center.d.ts +220 -22
  7. package/dist/alert-center.js +1 -1
  8. package/dist/alert-dialog.d.ts +18 -18
  9. package/dist/alert-dialog.js +1 -1
  10. package/dist/alert.d.ts +1 -1
  11. package/dist/alert.js +1 -1
  12. package/dist/{anchor-DvbNsphX.js → anchor-3OGK2UKU.js} +1 -1
  13. package/dist/anchor.d.ts +2 -2
  14. package/dist/anchor.js +1 -1
  15. package/dist/app-layout.d.ts +296 -213
  16. package/dist/app-layout.js +1 -1
  17. package/dist/area-chart.d.ts +67 -19
  18. package/dist/area-chart.js +1 -1
  19. package/dist/avatar.d.ts +319 -0
  20. package/dist/avatar.js +1 -0
  21. package/dist/badge.js +1 -1
  22. package/dist/bar-chart.d.ts +73 -20
  23. package/dist/bar-chart.js +1 -1
  24. package/dist/breadcrumb.d.ts +50 -17
  25. package/dist/breadcrumb.js +1 -1
  26. package/dist/browser-only.d.ts +3 -3
  27. package/dist/{button-C-gMbPso.d.ts → button-BIf69CSV.d.ts} +2 -2
  28. package/dist/button-BLDjW1u9.js +1 -0
  29. package/dist/{button-C0S8RbaJ.js → button-CCkGqE1t.js} +1 -1
  30. package/dist/{button-BUospUB3.js → button-Cnja9Bsr.js} +1 -1
  31. package/dist/{button-C7vAl6lS.d.ts → button-DJ7AAgII.d.ts} +4 -6
  32. package/dist/{button-BO2CKsz6.js → button-DmJkYfyl.js} +1 -1
  33. package/dist/{button-DARFK2KJ.d.ts → button-PoIujPMX.d.ts} +2 -2
  34. package/dist/button.d.ts +3 -3
  35. package/dist/button.js +1 -1
  36. package/dist/calendar.d.ts +1 -1
  37. package/dist/calendar.js +1 -1
  38. package/dist/card.d.ts +15 -15
  39. package/dist/card.js +1 -1
  40. package/dist/centered-layout.js +1 -1
  41. package/dist/{chart-1cVjAcj8.d.ts → chart-0zcFJh4n.d.ts} +75 -22
  42. package/dist/chart-DBxT9BNl.js +2 -0
  43. package/dist/{choice-BNRQXszu.d.ts → choice-CVdQrs-m.d.ts} +118 -6
  44. package/dist/{choice-C9gLKECf.js → choice-CnwfjSEu.js} +1 -1
  45. package/dist/choice.d.ts +1 -1
  46. package/dist/choice.js +1 -1
  47. package/dist/{code-block-C9uaM9-V.js → code-block-CIE0F2fu.js} +1 -1
  48. package/dist/{code-block-B6OlZrSI.d.ts → code-block-CZWPrV4k.d.ts} +3 -3
  49. package/dist/code-block.d.ts +10 -7
  50. package/dist/code-block.js +2 -2
  51. package/dist/code-block_highlight-utils.d.ts +1 -1
  52. package/dist/code-block_highlight-utils.js +1 -1
  53. package/dist/code.js +1 -1
  54. package/dist/combobox.d.ts +8 -9
  55. package/dist/combobox.js +1 -1
  56. package/dist/command.d.ts +668 -106
  57. package/dist/command.js +1 -1
  58. package/dist/cookie-ca4g5CKp.js +1 -0
  59. package/dist/data-table.d.ts +6 -6
  60. package/dist/data-table.js +1 -1
  61. package/dist/description-list.js +1 -1
  62. package/dist/dialog-02mNrAT1.d.ts +806 -0
  63. package/dist/{dialog-Bsj_dX6r.js → dialog-BRjTD83p.js} +1 -1
  64. package/dist/dialog.d.ts +2 -805
  65. package/dist/dialog.js +1 -1
  66. package/dist/{dropdown-menu-fUMqjRC0.js → dropdown-menu-BRH0Wd_z.js} +1 -1
  67. package/dist/dropdown-menu-BcALUQMp.d.ts +1 -0
  68. package/dist/{dropdown-menu-D6pMAY7I.d.ts → dropdown-menu-DZOfj6HB.d.ts} +1 -1
  69. package/dist/dropdown-menu.d.ts +2 -2
  70. package/dist/dropdown-menu.js +1 -1
  71. package/dist/empty.js +1 -1
  72. package/dist/field.d.ts +5 -5
  73. package/dist/field.js +1 -1
  74. package/dist/flag.js +1 -1
  75. package/dist/hooks.d.ts +16 -17
  76. package/dist/hooks.js +1 -1
  77. package/dist/icons-DEVx1oP9.js +1 -0
  78. package/dist/icons.d.ts +7 -6
  79. package/dist/icons.js +1 -1
  80. package/dist/{in-view-DDEGUKDR.d.ts → in-view-gxyc9Q1_.d.ts} +1 -1
  81. package/dist/{input-BuYDU6CF.d.ts → input-DpnC3Xgj.d.ts} +2 -2
  82. package/dist/input.d.ts +1 -1
  83. package/dist/kbd.d.ts +1 -1
  84. package/dist/line-chart.d.ts +60 -13
  85. package/dist/line-chart.js +1 -1
  86. package/dist/list-CwL23L_B.js +1 -0
  87. package/dist/list.d.ts +2 -2
  88. package/dist/list.js +1 -1
  89. package/dist/llms.txt +3 -1
  90. package/dist/main.d.ts +32 -1
  91. package/dist/mantle-dark-high-contrast.css +30 -17
  92. package/dist/mantle-dark.css +48 -13
  93. package/dist/mantle-light-high-contrast.css +33 -15
  94. package/dist/mantle.css +436 -26
  95. package/dist/media-object.d.ts +5 -1
  96. package/dist/media-object.js +1 -1
  97. package/dist/multi-select.d.ts +7 -7
  98. package/dist/multi-select.js +1 -1
  99. package/dist/otp-input.d.ts +4 -4
  100. package/dist/otp-input.js +1 -1
  101. package/dist/pagination.d.ts +2 -2
  102. package/dist/pagination.js +1 -1
  103. package/dist/{primitive-Dv-3snU3.js → primitive-D-9GIFWb.js} +1 -1
  104. package/dist/progress.d.ts +4 -4
  105. package/dist/qr-code.d.ts +2 -2
  106. package/dist/qr-code.js +1 -1
  107. package/dist/radio-group.js +1 -1
  108. package/dist/sandbar.d.ts +471 -0
  109. package/dist/sandbar.js +1 -0
  110. package/dist/sandboxed-on-click.d.ts +4 -6
  111. package/dist/sandboxed-on-click.js +1 -1
  112. package/dist/scatter-plot.d.ts +69 -24
  113. package/dist/scatter-plot.js +1 -1
  114. package/dist/{select-0z7HVS6r.d.ts → select-DVHmgih8.d.ts} +13 -7
  115. package/dist/select-LK9NX-vV.js +1 -0
  116. package/dist/select.d.ts +1 -1
  117. package/dist/select.js +1 -1
  118. package/dist/selectable-list.d.ts +4 -4
  119. package/dist/selectable-list.js +1 -1
  120. package/dist/{separator-B5UmkVRL.d.ts → separator-CNDs98Dv.d.ts} +2 -2
  121. package/dist/{separator-BepAcFFy.js → separator-D0D6VyyM.js} +1 -1
  122. package/dist/separator.d.ts +1 -1
  123. package/dist/separator.js +1 -1
  124. package/dist/{sheet-_fXLjiq2.js → sheet-BOSknSN9.js} +1 -1
  125. package/dist/sheet.d.ts +1 -1
  126. package/dist/sheet.js +1 -1
  127. package/dist/sidebar.d.ts +783 -328
  128. package/dist/sidebar.js +1 -1
  129. package/dist/{skeleton-DsHXIa9j.js → skeleton-BhcJMpem.js} +1 -1
  130. package/dist/skeleton.js +1 -1
  131. package/dist/skip-to-main-link.js +1 -1
  132. package/dist/slider.d.ts +1 -1
  133. package/dist/slot-DdgxmuI5.d.ts +67 -0
  134. package/dist/slot-DpNWVci8.js +1 -0
  135. package/dist/slot.d.ts +1 -1
  136. package/dist/slot.js +1 -1
  137. package/dist/split-button.d.ts +12 -12
  138. package/dist/split-button.js +1 -1
  139. package/dist/switch.d.ts +2 -1
  140. package/dist/{table-CGxJwtbL.js → table-C_Nm_RSV.js} +1 -1
  141. package/dist/{table-CZBYEmyK.d.ts → table-D51ZtV4U.d.ts} +18 -8
  142. package/dist/table.d.ts +1 -1
  143. package/dist/table.js +1 -1
  144. package/dist/tabs.d.ts +8 -13
  145. package/dist/tabs.js +1 -1
  146. package/dist/{theme-FbfjYiD3.d.ts → theme-6OxNhf6l.d.ts} +6 -6
  147. package/dist/theme-CVfq037P.js +1 -0
  148. package/dist/theme-switcher.d.ts +4 -4
  149. package/dist/theme-switcher.js +1 -1
  150. package/dist/theme.d.ts +86 -23
  151. package/dist/theme.js +1 -1
  152. package/dist/toast.d.ts +9 -9
  153. package/dist/toast.js +1 -1
  154. package/dist/tooltip-Dnu35cjU.js +1 -0
  155. package/dist/tooltip-DuXGxIse.d.ts +220 -0
  156. package/dist/tooltip.d.ts +1 -217
  157. package/dist/tooltip.js +1 -1
  158. package/dist/use-breakpoint-Dqu12Szq.js +1 -0
  159. package/dist/use-callback-ref-IYti9y7x.js +1 -0
  160. package/dist/use-is-apple-platform-Cxwrb86L.js +1 -0
  161. package/dist/use-matches-media-query-Bd_GhhVd.js +1 -0
  162. package/dist/utils.d.ts +1 -1
  163. package/dist/well.js +1 -1
  164. package/package.json +4 -2
  165. package/dist/button-DvHMWAPl.js +0 -1
  166. package/dist/chart-DdBQ3xwx.js +0 -2
  167. package/dist/dropdown-menu-BbbQuae2.d.ts +0 -1
  168. package/dist/icons-CPbOq7cF.js +0 -1
  169. package/dist/list-CQFWx6Z8.js +0 -1
  170. package/dist/select-B-9yWrif.js +0 -1
  171. package/dist/slot-BtwKJTLq.d.ts +0 -25
  172. package/dist/slot-Dpsqz16D.js +0 -1
  173. package/dist/theme-IAnQ35bd.js +0 -1
  174. package/dist/use-breakpoint-Wd7_5-Mu.js +0 -1
  175. package/dist/use-matches-media-query-CMSxHR9n.js +0 -1
@@ -4,43 +4,57 @@ import { ComponentProps } from "react";
4
4
  //#region src/components/app-layout/app-layout.d.ts
5
5
  /**
6
6
  * The outer frame of an application shell. Renders a `<div>` with
7
- * `relative isolate flex h-full w-full flex-col overflow-hidden bg-base`, so
7
+ * `relative isolate flex h-full w-full flex-col overflow-clip`, so
8
8
  * it fills its nearest sized ancestor — which makes it embeddable in docs
9
9
  * demos and tests. Real app shells pin it to the viewport by merging
10
10
  * `className="fixed inset-0"` (mantle `cx` is tailwind-merge-backed, so the
11
11
  * override is deterministic); the shell itself never scrolls — only
12
- * `AppLayout.Content` does.
12
+ * `AppLayout.Body` does.
13
+ *
14
+ * It clips with `overflow-clip` rather than `overflow-hidden` for the same
15
+ * reason `AppLayout.Content` does: `hidden` **is** a scroll container that
16
+ * paints no scrollbar, so anything wider than the frame lets focus scroll the
17
+ * entire shell sideways — translating the notice, the rail, and the card out of
18
+ * view with no scrollbar and no gesture to bring them back. On a frame pinned
19
+ * with `fixed inset-0` that is the whole window. `clip` is not a scroll
20
+ * container at all.
13
21
  *
14
22
  * When the shell owns the document, render a `SkipToMainLink` as its first
15
- * child and compose the `Main` landmark into `AppLayout.Content` via
16
- * `asChild` so keyboard users can jump past the sidebar and toolbar straight
17
- * into the content card.
23
+ * child and compose the `Main` landmark into `AppLayout.Body` via `asChild` so
24
+ * keyboard users can jump past the sidebar and toolbar straight into the
25
+ * scrolling page region.
18
26
  *
19
- * @see https://mantle.ngrok.com/layouts/app-layout
27
+ * @see https://mantle.ngrok.com/layouts/app-layout#applayoutroot
20
28
  *
21
29
  * @example
22
30
  * ```tsx
23
- * <AppLayout.Root className="fixed inset-0">
24
- * <SkipToMainLink />
25
- * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
26
- * <AppLayout.Body>
27
- * <AppLayout.Inset>
31
+ * <Sidebar.Root>
32
+ * <AppLayout.Root className="fixed inset-0">
33
+ * <SkipToMainLink />
34
+ * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
35
+ * <AppLayout.Workspace>
36
+ * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
28
37
  * <AppLayout.Content>
29
38
  * <AppLayout.Header>
39
+ * <Sidebar.Trigger />
30
40
  * <Breadcrumbs />
31
41
  * </AppLayout.Header>
32
- * <Outlet />
42
+ * <AppLayout.Body asChild>
43
+ * <Main>
44
+ * <Outlet />
45
+ * </Main>
46
+ * </AppLayout.Body>
33
47
  * </AppLayout.Content>
34
- * </AppLayout.Inset>
35
- * </AppLayout.Body>
36
- * </AppLayout.Root>
48
+ * </AppLayout.Workspace>
49
+ * </AppLayout.Root>
50
+ * </Sidebar.Root>
37
51
  * ```
38
52
  */
39
53
  declare const Root: ({ asChild, children, className, "data-slot": dataSlot, ...props }: ComponentProps<"div"> & WithAsChild & WithDataSlot) => import("react").JSX.Element;
40
54
  /**
41
55
  * A full-window-width strip pinned above everything else in the shell —
42
56
  * including any sidebar — for maintenance notices, environment warnings,
43
- * and similar app-wide messaging. It is a vertical composition slot: place an
57
+ * and similar app-wide messaging. It is a vertical composition slot: place a
44
58
  * maintenance banner and an `AlertCenter.Bar` here, and each contributes its
45
59
  * own row while the slot pushes the shell down. Renders an unstyled `<div>`
46
60
  * (`flex w-full shrink-0 flex-col`): its children bring their own colors and
@@ -48,7 +62,7 @@ declare const Root: ({ asChild, children, className, "data-slot": dataSlot, ...p
48
62
  * `Banner` so it never reads as the ARIA `banner` landmark — it claims no
49
63
  * landmark at all.
50
64
  *
51
- * @see https://mantle.ngrok.com/layouts/app-layout
65
+ * @see https://mantle.ngrok.com/layouts/app-layout#applayoutnotice
52
66
  *
53
67
  * @example
54
68
  * ```tsx
@@ -62,32 +76,37 @@ declare const Root: ({ asChild, children, className, "data-slot": dataSlot, ...p
62
76
  * </div>
63
77
  * )}
64
78
  * </AppLayout.Notice>
65
- * <AppLayout.Body>
79
+ * <AppLayout.Workspace>
66
80
  * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
67
- * <AppLayout.Inset>
68
- * <AppLayout.Content asChild>
81
+ * <AppLayout.Content>
82
+ * <AppLayout.Header>
83
+ * <Sidebar.Trigger />
84
+ * <Breadcrumbs />
85
+ * </AppLayout.Header>
86
+ * <AppLayout.Body asChild>
69
87
  * <Main>
70
- * <AppLayout.Header>
71
- * <Sidebar.Trigger />
72
- * <Breadcrumbs />
73
- * </AppLayout.Header>
74
88
  * <Outlet />
75
89
  * </Main>
76
- * </AppLayout.Content>
77
- * </AppLayout.Inset>
78
- * </AppLayout.Body>
90
+ * </AppLayout.Body>
91
+ * </AppLayout.Content>
92
+ * </AppLayout.Workspace>
79
93
  * </AppLayout.Root>
80
94
  * </Sidebar.Root>
81
95
  * ```
82
96
  */
83
97
  declare const Notice: ({ asChild, children, className, "data-slot": dataSlot, ...props }: ComponentProps<"div"> & WithAsChild & WithDataSlot) => import("react").JSX.Element;
84
98
  /**
85
- * The main horizontal region of the shell, below `AppLayout.Notice`. A flex
86
- * row (`flex min-h-0 flex-1`) whose children are the app's columns place a
87
- * `Sidebar.Nav` (or any other rail) beside an `AppLayout.Inset`. The
88
- * `min-h-0` is what lets `AppLayout.Content` scroll instead of the page.
99
+ * The region where the user actually works: everything below
100
+ * `AppLayout.Notice`, laid out as a row of columns. Place a `Sidebar.Nav` (or
101
+ * any other rail, on either side) beside an `AppLayout.Content` card. A flex row
102
+ * (`flex min-h-0 flex-1`) whose `min-h-0` is what lets `AppLayout.Body` scroll
103
+ * instead of the page.
89
104
  *
90
- * @see https://mantle.ngrok.com/layouts/app-layout
105
+ * It owns no gutter, deliberately: the card insets itself with its own margin,
106
+ * so a rail stays flush against the window edge and a collapsed icon rail keeps
107
+ * its flush geometry.
108
+ *
109
+ * @see https://mantle.ngrok.com/layouts/app-layout#applayoutworkspace
91
110
  *
92
111
  * @example
93
112
  * ```tsx
@@ -95,32 +114,52 @@ declare const Notice: ({ asChild, children, className, "data-slot": dataSlot, ..
95
114
  * <AppLayout.Root className="fixed inset-0">
96
115
  * <SkipToMainLink />
97
116
  * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
98
- * <AppLayout.Body>
117
+ * <AppLayout.Workspace>
99
118
  * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
100
- * <AppLayout.Inset>
101
- * <AppLayout.Content asChild>
119
+ * <AppLayout.Content>
120
+ * <AppLayout.Header>
121
+ * <Sidebar.Trigger />
122
+ * <Breadcrumbs />
123
+ * </AppLayout.Header>
124
+ * <AppLayout.Body asChild>
102
125
  * <Main>
103
- * <AppLayout.Header>
104
- * <Sidebar.Trigger />
105
- * <Breadcrumbs />
106
- * </AppLayout.Header>
107
126
  * <Outlet />
108
127
  * </Main>
109
- * </AppLayout.Content>
110
- * </AppLayout.Inset>
111
- * </AppLayout.Body>
128
+ * </AppLayout.Body>
129
+ * </AppLayout.Content>
130
+ * </AppLayout.Workspace>
112
131
  * </AppLayout.Root>
113
132
  * </Sidebar.Root>
114
133
  * ```
115
134
  */
116
- declare const Body: ({ asChild, children, className, "data-slot": dataSlot, ...props }: ComponentProps<"div"> & WithAsChild & WithDataSlot) => import("react").JSX.Element;
135
+ declare const Workspace: ({ asChild, children, className, "data-slot": dataSlot, ...props }: ComponentProps<"div"> & WithAsChild & WithDataSlot) => import("react").JSX.Element;
117
136
  /**
118
- * The content column of the shell: the flex column beside the sidebar that
119
- * wraps the scrolling `AppLayout.Content` card. Owns the card gutter
120
- * (`gap-2 p-2`), keeping a consistent gap beside a sidebar (invisible when
121
- * both share `bg-base`).
137
+ * The content card of the shell: a rounded, bordered `bg-card` surface beside
138
+ * the sidebar, holding `AppLayout.Header` and `AppLayout.Body`. A flex column
139
+ * that fills the remaining width of
140
+ * `AppLayout.Workspace` and insets itself from the window edge and the rail with
141
+ * its own margin (`--app-layout-card-gutter`, default `0.5rem`) — the gutter
142
+ * belongs to the card so a rail stays flush against the window edge.
122
143
  *
123
- * @see https://mantle.ngrok.com/layouts/app-layout
144
+ * The card does **not** scroll: `AppLayout.Body` does. `Content` is
145
+ * `overflow-clip`, which does two jobs — it keeps a full-bleed page background
146
+ * from painting square corners over the card's `rounded-xl`, and it is
147
+ * deliberately `clip` rather than `hidden` because `hidden` is a scroll
148
+ * container with no scrollbar: a long toolbar would let focus scroll the card
149
+ * sideways, dragging the header and the page with it, and nothing could scroll
150
+ * it back.
151
+ *
152
+ * It is also `relative`, so page content positioned with `absolute` resolves
153
+ * against the card instead of escaping to `AppLayout.Root` and painting across
154
+ * the sidebar rail.
155
+ *
156
+ * **CSS variables (public API):**
157
+ *
158
+ * | CSS Variable | Default | Description |
159
+ * | --- | --- | --- |
160
+ * | `--app-layout-card-gutter` | `0.5rem` | The gap between the card and the window edge, the notice above it, and the rail beside it (8px). `AppLayout.Header` subtracts twice this value when deriving its height, so overriding it keeps the toolbar aligned with the sidebar header. |
161
+ *
162
+ * @see https://mantle.ngrok.com/layouts/app-layout#applayoutcontent
124
163
  *
125
164
  * @example
126
165
  * ```tsx
@@ -128,53 +167,59 @@ declare const Body: ({ asChild, children, className, "data-slot": dataSlot, ...p
128
167
  * <AppLayout.Root className="fixed inset-0">
129
168
  * <SkipToMainLink />
130
169
  * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
131
- * <AppLayout.Body>
170
+ * <AppLayout.Workspace>
132
171
  * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
133
- * <AppLayout.Inset>
134
- * <AppLayout.Content asChild>
172
+ * <AppLayout.Content>
173
+ * <AppLayout.Header>
174
+ * <Sidebar.Trigger />
175
+ * <Breadcrumbs />
176
+ * </AppLayout.Header>
177
+ * <AppLayout.Body asChild>
135
178
  * <Main>
136
- * <AppLayout.Header>
137
- * <Sidebar.Trigger />
138
- * <Breadcrumbs />
139
- * </AppLayout.Header>
140
179
  * <Outlet />
141
180
  * </Main>
142
- * </AppLayout.Content>
143
- * </AppLayout.Inset>
144
- * </AppLayout.Body>
181
+ * </AppLayout.Body>
182
+ * </AppLayout.Content>
183
+ * </AppLayout.Workspace>
145
184
  * </AppLayout.Root>
146
185
  * </Sidebar.Root>
147
186
  * ```
148
187
  */
149
- declare const Inset: ({ asChild, children, className, "data-slot": dataSlot, ...props }: ComponentProps<"div"> & WithAsChild & WithDataSlot) => import("react").JSX.Element;
188
+ declare const Content: ({ asChild, children, className, "data-slot": dataSlot, ...props }: ComponentProps<"div"> & WithAsChild & WithDataSlot) => import("react").JSX.Element;
150
189
  /**
151
- * The toolbar row pinned to the top of the content card — render it as the
152
- * **first child of `AppLayout.Content`**. It is sticky (`top-0`) inside the
153
- * card's scroll container with a hairline border beneath it, so page content
154
- * scrolls under it. The natural home for a `Sidebar.Trigger` in its top-left,
155
- * followed by `Breadcrumb` navigation, search, or page-level actions.
190
+ * The toolbar row at the top of the content card — render it as the **first
191
+ * child of `AppLayout.Content`**. The natural home for a `Sidebar.Trigger` in
192
+ * its top-left, followed by `Breadcrumb` navigation, search, or page-level
193
+ * actions.
156
194
  *
157
- * Renders a semantic `<header>` scoped to the content region (inside `Main`
158
- * it is deliberately not an ARIA `banner` landmark).
195
+ * It is pinned by construction, not by `sticky`: as a `shrink-0` flex sibling
196
+ * *outside* the scrolling `AppLayout.Body`, it cannot scroll away, cannot be
197
+ * overlapped by a page's own `sticky top-0`, and does not translate sideways
198
+ * when the page scrolls horizontally. It also no longer steals height from a
199
+ * page that asks for `h-full`.
200
+ *
201
+ * Renders a `<div>`, not a `<header>`: the `Main` landmark is composed onto
202
+ * `AppLayout.Body`, so a `<header>` here would have no sectioning ancestor and
203
+ * would therefore *become* the ARIA `banner` landmark — which a card toolbar is
204
+ * not. Compose your own element with `asChild` if you need one.
159
205
  *
160
206
  * **Sidebar alignment is an invariant, not a coincidence:** standalone, the
161
207
  * toolbar is `h-14`. When the shell contains a `Sidebar.Header` (detected via
162
208
  * `:has()` from `AppLayout.Root`), the toolbar instead derives its height from
163
- * the sidebar's public `--sidebar-header-height` token as
164
- * `calc(var(--sidebar-header-height, 4.5rem) - 1rem - 2px)`subtracting
165
- * twice the `AppLayout.Inset` gutter and twice the content card's hairline
166
- * border which keeps the two rows' vertical centers on the same band by
167
- * construction. Override `--sidebar-header-height` on a common ancestor
168
- * (e.g. `AppLayout.Root`'s `className`) and both rows move together.
209
+ * the sidebar's public `--sidebar-header-height` token, subtracting twice the
210
+ * card gutter and twice the card's hairline border which keeps the two rows'
211
+ * vertical centers on the same band by construction, for any header height.
212
+ * Override `--sidebar-header-height` on a common ancestor (e.g.
213
+ * `AppLayout.Root`'s `className`) and both rows move together.
169
214
  *
170
215
  * **CSS variables (public API):**
171
- * - `--sidebar-header-height` — read, not owned: `Sidebar.Header` owns this
172
- * token (default `4.5rem`) and `AppLayout.Header` derives its own height
173
- * from it whenever a sidebar header is present in the shell. Set it on a
174
- * common ancestor of both rows (e.g. `AppLayout.Root`), never on one of
175
- * them, since custom properties only inherit downward.
176
216
  *
177
- * @see https://mantle.ngrok.com/layouts/app-layout
217
+ * | CSS Variable | Default | Description |
218
+ * | --- | --- | --- |
219
+ * | `--sidebar-header-height` | `4.5rem` | Read, not owned: `Sidebar.Header` owns this token and `AppLayout.Header` derives its own height from it whenever a sidebar header is present in the shell. Set it on a common ancestor of both rows (e.g. `AppLayout.Root`), never on one of them, since custom properties only inherit downward. |
220
+ * | `--app-layout-card-gutter` | `0.5rem` | Read, not owned: `AppLayout.Content` owns this token. The derived height subtracts twice its value, so changing the card gutter keeps the two rows aligned instead of drifting. |
221
+ *
222
+ * @see https://mantle.ngrok.com/layouts/app-layout#applayoutheader
178
223
  *
179
224
  * @example
180
225
  * ```tsx
@@ -182,41 +227,64 @@ declare const Inset: ({ asChild, children, className, "data-slot": dataSlot, ...
182
227
  * <AppLayout.Root className="fixed inset-0">
183
228
  * <SkipToMainLink />
184
229
  * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
185
- * <AppLayout.Body>
230
+ * <AppLayout.Workspace>
186
231
  * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
187
- * <AppLayout.Inset>
188
- * <AppLayout.Content asChild>
232
+ * <AppLayout.Content>
233
+ * <AppLayout.Header>
234
+ * <Sidebar.Trigger />
235
+ * <Breadcrumbs />
236
+ * </AppLayout.Header>
237
+ * <AppLayout.Body asChild>
189
238
  * <Main>
190
- * <AppLayout.Header>
191
- * <Sidebar.Trigger />
192
- * <Breadcrumbs />
193
- * </AppLayout.Header>
194
239
  * <Outlet />
195
240
  * </Main>
196
- * </AppLayout.Content>
197
- * </AppLayout.Inset>
198
- * </AppLayout.Body>
241
+ * </AppLayout.Body>
242
+ * </AppLayout.Content>
243
+ * </AppLayout.Workspace>
199
244
  * </AppLayout.Root>
200
245
  * </Sidebar.Root>
201
246
  * ```
202
247
  */
203
- declare const Header: ({ asChild, children, className, "data-slot": dataSlot, ...props }: ComponentProps<"header"> & WithAsChild & WithDataSlot) => import("react").JSX.Element;
248
+ declare const Header: ({ asChild, children, className, "data-slot": dataSlot, ...props }: ComponentProps<"div"> & WithAsChild & WithDataSlot) => import("react").JSX.Element;
204
249
  /**
205
- * The scrolling content card of the shell: a rounded, bordered `bg-card`
206
- * surface that fills the remaining space and scrolls internally
207
- * (`overflow-y-auto overscroll-none`) the page body never scrolls and
208
- * scroll never bounces the shell. Render `AppLayout.Header` as its first
209
- * child for a sticky in-card toolbar that content scrolls beneath. The card
210
- * renders a `<div>` by default, but in a real
211
- * app shell this should almost always be mantle's `Main` landmark, composed
212
- * via `asChild` — pair it with a `SkipToMainLink` as the first child of
213
- * `AppLayout.Root` so keyboard users can jump past the sidebar and toolbar
214
- * straight into the content card (`SkipToMainLink`'s default `targetId`
215
- * matches `Main`'s `id="main"`). The `<div>` default exists for embedded
216
- * usage (docs demos, tests) where the surrounding document already owns the
217
- * Main landmark.
250
+ * The page region of the content card, and the shell's **only** scroll
251
+ * container (`overflow-y-auto overscroll-none`) the page body never scrolls
252
+ * and scroll never bounces the shell. Render it after `AppLayout.Header` inside
253
+ * `AppLayout.Content`.
218
254
  *
219
- * @see https://mantle.ngrok.com/layouts/app-layout
255
+ * In a real app shell this should almost always be mantle's `Main` landmark,
256
+ * composed via `asChild`, and paired with a `SkipToMainLink` as the first child
257
+ * of `AppLayout.Root` (`SkipToMainLink`'s default `targetId` matches `Main`'s
258
+ * `id="main"`). Composing `Main` here rather than onto the card is what makes
259
+ * the skip link actually useful: the focused landmark **is** the scroll
260
+ * container, so arrows, `Space`, and `PageDown` scroll the page immediately, and
261
+ * the skip really does jump past the sidebar *and* the toolbar. The plain
262
+ * `<div>` default exists for embedded usage (docs demos, tests) where the
263
+ * surrounding document already owns the Main landmark.
264
+ *
265
+ * It is a flex **item** that is **block inside**, and both halves are
266
+ * load-bearing:
267
+ *
268
+ * - `min-h-0 flex-1` gives it a definite height, so a page that asks for
269
+ * `h-full` fills exactly the card interior instead of overflowing it by the
270
+ * toolbar's height.
271
+ * - block layout inside — not flex — is why `mx-auto max-w-7xl` still centers a
272
+ * page at its max width. As a *flex child*, auto margins beat
273
+ * `align-items: stretch` and the same container shrink-to-fits, getting
274
+ * *narrower* as the viewport gets wider.
275
+ * - `w-full` states the width outright instead of leaning on the flex
276
+ * container's cross-axis `stretch`, so an `mx-auto` merged onto `Body` still
277
+ * leaves it full width — auto cross-axis margins would otherwise turn a
278
+ * stretched item into a shrink-to-fit one. It is no floor, though: `cx` is
279
+ * tailwind-merge-backed and the consumer's `className` wins, so a merged
280
+ * `w-*` replaces it outright, while a merged `max-w-*` — a separate conflict
281
+ * group — survives beside it and clamps the scrollport. Constrain the *page*
282
+ * inside `Body`, not `Body` itself.
283
+ *
284
+ * It is `relative` too, so page content positioned with `absolute` is contained
285
+ * by the scrollport the route author is already reasoning about.
286
+ *
287
+ * @see https://mantle.ngrok.com/layouts/app-layout#applayoutbody
220
288
  *
221
289
  * @example
222
290
  * ```tsx
@@ -224,33 +292,46 @@ declare const Header: ({ asChild, children, className, "data-slot": dataSlot, ..
224
292
  * <AppLayout.Root className="fixed inset-0">
225
293
  * <SkipToMainLink />
226
294
  * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
227
- * <AppLayout.Body>
295
+ * <AppLayout.Workspace>
228
296
  * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
229
- * <AppLayout.Inset>
230
- * <AppLayout.Content asChild>
297
+ * <AppLayout.Content>
298
+ * <AppLayout.Header>
299
+ * <Sidebar.Trigger />
300
+ * <Breadcrumbs />
301
+ * </AppLayout.Header>
302
+ * <AppLayout.Body asChild>
231
303
  * <Main>
232
- * <AppLayout.Header>
233
- * <Sidebar.Trigger />
234
- * <Breadcrumbs />
235
- * </AppLayout.Header>
236
304
  * <Outlet />
237
305
  * </Main>
238
- * </AppLayout.Content>
239
- * </AppLayout.Inset>
240
- * </AppLayout.Body>
306
+ * </AppLayout.Body>
307
+ * </AppLayout.Content>
308
+ * </AppLayout.Workspace>
241
309
  * </AppLayout.Root>
242
310
  * </Sidebar.Root>
243
311
  * ```
244
312
  */
245
- declare const Content: ({ asChild, children, className, "data-slot": dataSlot, ...props }: ComponentProps<"div"> & WithAsChild & WithDataSlot) => import("react").JSX.Element;
313
+ declare const Body: ({ asChild, children, className, "data-slot": dataSlot, ...props }: ComponentProps<"div"> & WithAsChild & WithDataSlot) => import("react").JSX.Element;
246
314
  /**
247
315
  * A viewport-locked application shell: an optional full-width
248
- * `AppLayout.Notice` strip on top, then a row holding the app's columns —
249
- * typically a `Sidebar.Nav` beside an `AppLayout.Inset` whose
250
- * `AppLayout.Content` card is the only thing that scrolls. It owns structure
251
- * only and is deliberately unaware of any sidebar: compose `Sidebar.Root`
252
- * around it and place `Sidebar.Trigger` in `AppLayout.Header` to connect the
253
- * two.
316
+ * `AppLayout.Notice` strip on top, then an `AppLayout.Workspace` row holding the
317
+ * app's columns — typically a `Sidebar.Nav` beside an `AppLayout.Content` card
318
+ * whose `AppLayout.Body` is the only thing that scrolls. It owns structure only
319
+ * and is deliberately unaware of any sidebar: compose `Sidebar.Root` around it
320
+ * and place `Sidebar.Trigger` in `AppLayout.Header` to connect the two.
321
+ *
322
+ * Reach for it when a signed-in application needs navigation chrome that
323
+ * persists across routes. When the page is a single centered task surface with
324
+ * no rail — sign in, sign up, onboarding, a standalone flow, a 404 — compose
325
+ * [`CenteredLayout`](https://mantle.ngrok.com/layouts/centered-layout) instead.
326
+ *
327
+ * The card reads exactly like the column beside it and like every other mantle
328
+ * surface — `Content > Header + Body`, the same shape as `Sidebar.Nav`,
329
+ * `Dialog.Content`, `Sheet.Content`, and `Card.Root`.
330
+ *
331
+ * There is deliberately no `Footer` part: a route rendering through an
332
+ * `<Outlet />` inside `AppLayout.Body` could never reach one, and a page-owned
333
+ * bottom bar is exactly what most consumers want. Make the page's root a flex
334
+ * column instead — see the docs' "Sizing a page to the card".
254
335
  *
255
336
  * @see https://mantle.ngrok.com/layouts/app-layout
256
337
  *
@@ -259,10 +340,10 @@ declare const Content: ({ asChild, children, className, "data-slot": dataSlot, .
259
340
  * ```
260
341
  * AppLayout.Root
261
342
  * ├── AppLayout.Notice
262
- * └── AppLayout.Body
263
- * └── AppLayout.Inset
264
- * └── AppLayout.Content
265
- * └── AppLayout.Header
343
+ * └── AppLayout.Workspace
344
+ * └── AppLayout.Content
345
+ * ├── AppLayout.Header
346
+ * └── AppLayout.Body
266
347
  * ```
267
348
  *
268
349
  * @example
@@ -271,20 +352,20 @@ declare const Content: ({ asChild, children, className, "data-slot": dataSlot, .
271
352
  * <AppLayout.Root className="fixed inset-0">
272
353
  * <SkipToMainLink />
273
354
  * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
274
- * <AppLayout.Body>
355
+ * <AppLayout.Workspace>
275
356
  * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
276
- * <AppLayout.Inset>
277
- * <AppLayout.Content asChild>
357
+ * <AppLayout.Content>
358
+ * <AppLayout.Header>
359
+ * <Sidebar.Trigger />
360
+ * <Breadcrumbs />
361
+ * </AppLayout.Header>
362
+ * <AppLayout.Body asChild>
278
363
  * <Main>
279
- * <AppLayout.Header>
280
- * <Sidebar.Trigger />
281
- * <Breadcrumbs />
282
- * </AppLayout.Header>
283
364
  * <Outlet />
284
365
  * </Main>
285
- * </AppLayout.Content>
286
- * </AppLayout.Inset>
287
- * </AppLayout.Body>
366
+ * </AppLayout.Body>
367
+ * </AppLayout.Content>
368
+ * </AppLayout.Workspace>
288
369
  * </AppLayout.Root>
289
370
  * </Sidebar.Root>
290
371
  * ```
@@ -294,7 +375,7 @@ declare const AppLayout: {
294
375
  * The outer frame. Fills its nearest sized ancestor; merge
295
376
  * `className="fixed inset-0"` to pin a real app shell to the viewport.
296
377
  *
297
- * @see https://mantle.ngrok.com/layouts/app-layout
378
+ * @see https://mantle.ngrok.com/layouts/app-layout#applayoutroot
298
379
  *
299
380
  * @example
300
381
  * ```tsx
@@ -302,20 +383,20 @@ declare const AppLayout: {
302
383
  * <AppLayout.Root className="fixed inset-0">
303
384
  * <SkipToMainLink />
304
385
  * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
305
- * <AppLayout.Body>
386
+ * <AppLayout.Workspace>
306
387
  * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
307
- * <AppLayout.Inset>
308
- * <AppLayout.Content asChild>
388
+ * <AppLayout.Content>
389
+ * <AppLayout.Header>
390
+ * <Sidebar.Trigger />
391
+ * <Breadcrumbs />
392
+ * </AppLayout.Header>
393
+ * <AppLayout.Body asChild>
309
394
  * <Main>
310
- * <AppLayout.Header>
311
- * <Sidebar.Trigger />
312
- * <Breadcrumbs />
313
- * </AppLayout.Header>
314
395
  * <Outlet />
315
396
  * </Main>
316
- * </AppLayout.Content>
317
- * </AppLayout.Inset>
318
- * </AppLayout.Body>
397
+ * </AppLayout.Body>
398
+ * </AppLayout.Content>
399
+ * </AppLayout.Workspace>
319
400
  * </AppLayout.Root>
320
401
  * </Sidebar.Root>
321
402
  * ```
@@ -325,7 +406,7 @@ declare const AppLayout: {
325
406
  * A full-window-width strip above everything (maintenance notices,
326
407
  * environment warnings). Unstyled; collapses when empty.
327
408
  *
328
- * @see https://mantle.ngrok.com/layouts/app-layout
409
+ * @see https://mantle.ngrok.com/layouts/app-layout#applayoutnotice
329
410
  *
330
411
  * @example
331
412
  * ```tsx
@@ -333,30 +414,30 @@ declare const AppLayout: {
333
414
  * <AppLayout.Root className="fixed inset-0">
334
415
  * <SkipToMainLink />
335
416
  * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
336
- * <AppLayout.Body>
417
+ * <AppLayout.Workspace>
337
418
  * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
338
- * <AppLayout.Inset>
339
- * <AppLayout.Content asChild>
419
+ * <AppLayout.Content>
420
+ * <AppLayout.Header>
421
+ * <Sidebar.Trigger />
422
+ * <Breadcrumbs />
423
+ * </AppLayout.Header>
424
+ * <AppLayout.Body asChild>
340
425
  * <Main>
341
- * <AppLayout.Header>
342
- * <Sidebar.Trigger />
343
- * <Breadcrumbs />
344
- * </AppLayout.Header>
345
426
  * <Outlet />
346
427
  * </Main>
347
- * </AppLayout.Content>
348
- * </AppLayout.Inset>
349
- * </AppLayout.Body>
428
+ * </AppLayout.Body>
429
+ * </AppLayout.Content>
430
+ * </AppLayout.Workspace>
350
431
  * </AppLayout.Root>
351
432
  * </Sidebar.Root>
352
433
  * ```
353
434
  */
354
435
  readonly Notice: typeof Notice;
355
436
  /**
356
- * The flex row below the notice — place a `Sidebar.Nav` beside an
357
- * `AppLayout.Inset` here.
437
+ * The row below the notice where the user works — place a `Sidebar.Nav`
438
+ * beside an `AppLayout.Content` card here.
358
439
  *
359
- * @see https://mantle.ngrok.com/layouts/app-layout
440
+ * @see https://mantle.ngrok.com/layouts/app-layout#applayoutworkspace
360
441
  *
361
442
  * @example
362
443
  * ```tsx
@@ -364,30 +445,31 @@ declare const AppLayout: {
364
445
  * <AppLayout.Root className="fixed inset-0">
365
446
  * <SkipToMainLink />
366
447
  * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
367
- * <AppLayout.Body>
448
+ * <AppLayout.Workspace>
368
449
  * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
369
- * <AppLayout.Inset>
370
- * <AppLayout.Content asChild>
450
+ * <AppLayout.Content>
451
+ * <AppLayout.Header>
452
+ * <Sidebar.Trigger />
453
+ * <Breadcrumbs />
454
+ * </AppLayout.Header>
455
+ * <AppLayout.Body asChild>
371
456
  * <Main>
372
- * <AppLayout.Header>
373
- * <Sidebar.Trigger />
374
- * <Breadcrumbs />
375
- * </AppLayout.Header>
376
457
  * <Outlet />
377
458
  * </Main>
378
- * </AppLayout.Content>
379
- * </AppLayout.Inset>
380
- * </AppLayout.Body>
459
+ * </AppLayout.Body>
460
+ * </AppLayout.Content>
461
+ * </AppLayout.Workspace>
381
462
  * </AppLayout.Root>
382
463
  * </Sidebar.Root>
383
464
  * ```
384
465
  */
385
- readonly Body: typeof Body;
466
+ readonly Workspace: typeof Workspace;
386
467
  /**
387
- * The content column: wraps the `AppLayout.Content` card and owns the
388
- * card gutter.
468
+ * The rounded `bg-card` surface beside the sidebar, holding the toolbar and
469
+ * the page region. Insets itself with `--app-layout-card-gutter`; does not
470
+ * scroll — `AppLayout.Body` does.
389
471
  *
390
- * @see https://mantle.ngrok.com/layouts/app-layout
472
+ * @see https://mantle.ngrok.com/layouts/app-layout#applayoutcontent
391
473
  *
392
474
  * @example
393
475
  * ```tsx
@@ -395,31 +477,31 @@ declare const AppLayout: {
395
477
  * <AppLayout.Root className="fixed inset-0">
396
478
  * <SkipToMainLink />
397
479
  * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
398
- * <AppLayout.Body>
480
+ * <AppLayout.Workspace>
399
481
  * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
400
- * <AppLayout.Inset>
401
- * <AppLayout.Content asChild>
482
+ * <AppLayout.Content>
483
+ * <AppLayout.Header>
484
+ * <Sidebar.Trigger />
485
+ * <Breadcrumbs />
486
+ * </AppLayout.Header>
487
+ * <AppLayout.Body asChild>
402
488
  * <Main>
403
- * <AppLayout.Header>
404
- * <Sidebar.Trigger />
405
- * <Breadcrumbs />
406
- * </AppLayout.Header>
407
489
  * <Outlet />
408
490
  * </Main>
409
- * </AppLayout.Content>
410
- * </AppLayout.Inset>
411
- * </AppLayout.Body>
491
+ * </AppLayout.Body>
492
+ * </AppLayout.Content>
493
+ * </AppLayout.Workspace>
412
494
  * </AppLayout.Root>
413
495
  * </Sidebar.Root>
414
496
  * ```
415
497
  */
416
- readonly Inset: typeof Inset;
498
+ readonly Content: typeof Content;
417
499
  /**
418
- * The sticky toolbar `<header>` at the top of the content card — render
419
- * it as `AppLayout.Content`'s first child, with `Sidebar.Trigger` in its
420
- * top-left followed by breadcrumbs.
500
+ * The toolbar row at the top of the content card — `AppLayout.Content`'s
501
+ * first child, with `Sidebar.Trigger` in its top-left followed by
502
+ * breadcrumbs. Pinned by `shrink-0`, not `sticky`.
421
503
  *
422
- * @see https://mantle.ngrok.com/layouts/app-layout
504
+ * @see https://mantle.ngrok.com/layouts/app-layout#applayoutheader
423
505
  *
424
506
  * @example
425
507
  * ```tsx
@@ -427,31 +509,32 @@ declare const AppLayout: {
427
509
  * <AppLayout.Root className="fixed inset-0">
428
510
  * <SkipToMainLink />
429
511
  * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
430
- * <AppLayout.Body>
512
+ * <AppLayout.Workspace>
431
513
  * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
432
- * <AppLayout.Inset>
433
- * <AppLayout.Content asChild>
514
+ * <AppLayout.Content>
515
+ * <AppLayout.Header>
516
+ * <Sidebar.Trigger />
517
+ * <Breadcrumbs />
518
+ * </AppLayout.Header>
519
+ * <AppLayout.Body asChild>
434
520
  * <Main>
435
- * <AppLayout.Header>
436
- * <Sidebar.Trigger />
437
- * <Breadcrumbs />
438
- * </AppLayout.Header>
439
521
  * <Outlet />
440
522
  * </Main>
441
- * </AppLayout.Content>
442
- * </AppLayout.Inset>
443
- * </AppLayout.Body>
523
+ * </AppLayout.Body>
524
+ * </AppLayout.Content>
525
+ * </AppLayout.Workspace>
444
526
  * </AppLayout.Root>
445
527
  * </Sidebar.Root>
446
528
  * ```
447
529
  */
448
530
  readonly Header: typeof Header;
449
531
  /**
450
- * The rounded `bg-card` surface that is the shell's only scroll container
451
- * (`overflow-y-auto overscroll-none`). `AppLayout.Header` is its first
452
- * child; compose `Main` via `asChild` when the shell owns the document.
532
+ * The page region and the shell's only scroll container. A flex item that is
533
+ * block inside, so `h-full` pages fit the card and `mx-auto max-w-7xl` pages
534
+ * still center. Compose `Main` here via `asChild` when the shell owns the
535
+ * document.
453
536
  *
454
- * @see https://mantle.ngrok.com/layouts/app-layout
537
+ * @see https://mantle.ngrok.com/layouts/app-layout#applayoutbody
455
538
  *
456
539
  * @example
457
540
  * ```tsx
@@ -459,25 +542,25 @@ declare const AppLayout: {
459
542
  * <AppLayout.Root className="fixed inset-0">
460
543
  * <SkipToMainLink />
461
544
  * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
462
- * <AppLayout.Body>
545
+ * <AppLayout.Workspace>
463
546
  * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
464
- * <AppLayout.Inset>
465
- * <AppLayout.Content asChild>
547
+ * <AppLayout.Content>
548
+ * <AppLayout.Header>
549
+ * <Sidebar.Trigger />
550
+ * <Breadcrumbs />
551
+ * </AppLayout.Header>
552
+ * <AppLayout.Body asChild>
466
553
  * <Main>
467
- * <AppLayout.Header>
468
- * <Sidebar.Trigger />
469
- * <Breadcrumbs />
470
- * </AppLayout.Header>
471
554
  * <Outlet />
472
555
  * </Main>
473
- * </AppLayout.Content>
474
- * </AppLayout.Inset>
475
- * </AppLayout.Body>
556
+ * </AppLayout.Body>
557
+ * </AppLayout.Content>
558
+ * </AppLayout.Workspace>
476
559
  * </AppLayout.Root>
477
560
  * </Sidebar.Root>
478
561
  * ```
479
562
  */
480
- readonly Content: typeof Content;
563
+ readonly Body: typeof Body;
481
564
  };
482
565
  //#endregion
483
566
  export { AppLayout };