@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.
- package/dist/accordion.d.ts +7 -7
- package/dist/accordion.js +1 -1
- package/dist/agent.json +3 -1
- package/dist/{alert-BWwNPOMI.d.ts → alert-B1HXfkYn.d.ts} +9 -7
- package/dist/{alert-QMs0PqMq.js → alert-BuG2qS5l.js} +1 -1
- package/dist/alert-center.d.ts +220 -22
- package/dist/alert-center.js +1 -1
- package/dist/alert-dialog.d.ts +18 -18
- package/dist/alert-dialog.js +1 -1
- package/dist/alert.d.ts +1 -1
- package/dist/alert.js +1 -1
- package/dist/{anchor-DvbNsphX.js → anchor-3OGK2UKU.js} +1 -1
- package/dist/anchor.d.ts +2 -2
- package/dist/anchor.js +1 -1
- package/dist/app-layout.d.ts +296 -213
- package/dist/app-layout.js +1 -1
- package/dist/area-chart.d.ts +67 -19
- package/dist/area-chart.js +1 -1
- package/dist/avatar.d.ts +319 -0
- package/dist/avatar.js +1 -0
- package/dist/badge.js +1 -1
- package/dist/bar-chart.d.ts +73 -20
- package/dist/bar-chart.js +1 -1
- package/dist/breadcrumb.d.ts +50 -17
- package/dist/breadcrumb.js +1 -1
- package/dist/browser-only.d.ts +3 -3
- package/dist/{button-C-gMbPso.d.ts → button-BIf69CSV.d.ts} +2 -2
- package/dist/button-BLDjW1u9.js +1 -0
- package/dist/{button-C0S8RbaJ.js → button-CCkGqE1t.js} +1 -1
- package/dist/{button-BUospUB3.js → button-Cnja9Bsr.js} +1 -1
- package/dist/{button-C7vAl6lS.d.ts → button-DJ7AAgII.d.ts} +4 -6
- package/dist/{button-BO2CKsz6.js → button-DmJkYfyl.js} +1 -1
- package/dist/{button-DARFK2KJ.d.ts → button-PoIujPMX.d.ts} +2 -2
- package/dist/button.d.ts +3 -3
- package/dist/button.js +1 -1
- package/dist/calendar.d.ts +1 -1
- package/dist/calendar.js +1 -1
- package/dist/card.d.ts +15 -15
- package/dist/card.js +1 -1
- package/dist/centered-layout.js +1 -1
- package/dist/{chart-1cVjAcj8.d.ts → chart-0zcFJh4n.d.ts} +75 -22
- package/dist/chart-DBxT9BNl.js +2 -0
- package/dist/{choice-BNRQXszu.d.ts → choice-CVdQrs-m.d.ts} +118 -6
- package/dist/{choice-C9gLKECf.js → choice-CnwfjSEu.js} +1 -1
- package/dist/choice.d.ts +1 -1
- package/dist/choice.js +1 -1
- package/dist/{code-block-C9uaM9-V.js → code-block-CIE0F2fu.js} +1 -1
- package/dist/{code-block-B6OlZrSI.d.ts → code-block-CZWPrV4k.d.ts} +3 -3
- package/dist/code-block.d.ts +10 -7
- package/dist/code-block.js +2 -2
- package/dist/code-block_highlight-utils.d.ts +1 -1
- package/dist/code-block_highlight-utils.js +1 -1
- package/dist/code.js +1 -1
- package/dist/combobox.d.ts +8 -9
- package/dist/combobox.js +1 -1
- package/dist/command.d.ts +668 -106
- package/dist/command.js +1 -1
- package/dist/cookie-ca4g5CKp.js +1 -0
- package/dist/data-table.d.ts +6 -6
- package/dist/data-table.js +1 -1
- package/dist/description-list.js +1 -1
- package/dist/dialog-02mNrAT1.d.ts +806 -0
- package/dist/{dialog-Bsj_dX6r.js → dialog-BRjTD83p.js} +1 -1
- package/dist/dialog.d.ts +2 -805
- package/dist/dialog.js +1 -1
- package/dist/{dropdown-menu-fUMqjRC0.js → dropdown-menu-BRH0Wd_z.js} +1 -1
- package/dist/dropdown-menu-BcALUQMp.d.ts +1 -0
- package/dist/{dropdown-menu-D6pMAY7I.d.ts → dropdown-menu-DZOfj6HB.d.ts} +1 -1
- package/dist/dropdown-menu.d.ts +2 -2
- package/dist/dropdown-menu.js +1 -1
- package/dist/empty.js +1 -1
- package/dist/field.d.ts +5 -5
- package/dist/field.js +1 -1
- package/dist/flag.js +1 -1
- package/dist/hooks.d.ts +16 -17
- package/dist/hooks.js +1 -1
- package/dist/icons-DEVx1oP9.js +1 -0
- package/dist/icons.d.ts +7 -6
- package/dist/icons.js +1 -1
- package/dist/{in-view-DDEGUKDR.d.ts → in-view-gxyc9Q1_.d.ts} +1 -1
- package/dist/{input-BuYDU6CF.d.ts → input-DpnC3Xgj.d.ts} +2 -2
- package/dist/input.d.ts +1 -1
- package/dist/kbd.d.ts +1 -1
- package/dist/line-chart.d.ts +60 -13
- package/dist/line-chart.js +1 -1
- package/dist/list-CwL23L_B.js +1 -0
- package/dist/list.d.ts +2 -2
- package/dist/list.js +1 -1
- package/dist/llms.txt +3 -1
- package/dist/main.d.ts +32 -1
- package/dist/mantle-dark-high-contrast.css +30 -17
- package/dist/mantle-dark.css +48 -13
- package/dist/mantle-light-high-contrast.css +33 -15
- package/dist/mantle.css +436 -26
- package/dist/media-object.d.ts +5 -1
- package/dist/media-object.js +1 -1
- package/dist/multi-select.d.ts +7 -7
- package/dist/multi-select.js +1 -1
- package/dist/otp-input.d.ts +4 -4
- package/dist/otp-input.js +1 -1
- package/dist/pagination.d.ts +2 -2
- package/dist/pagination.js +1 -1
- package/dist/{primitive-Dv-3snU3.js → primitive-D-9GIFWb.js} +1 -1
- package/dist/progress.d.ts +4 -4
- package/dist/qr-code.d.ts +2 -2
- package/dist/qr-code.js +1 -1
- package/dist/radio-group.js +1 -1
- package/dist/sandbar.d.ts +471 -0
- package/dist/sandbar.js +1 -0
- package/dist/sandboxed-on-click.d.ts +4 -6
- package/dist/sandboxed-on-click.js +1 -1
- package/dist/scatter-plot.d.ts +69 -24
- package/dist/scatter-plot.js +1 -1
- package/dist/{select-0z7HVS6r.d.ts → select-DVHmgih8.d.ts} +13 -7
- package/dist/select-LK9NX-vV.js +1 -0
- package/dist/select.d.ts +1 -1
- package/dist/select.js +1 -1
- package/dist/selectable-list.d.ts +4 -4
- package/dist/selectable-list.js +1 -1
- package/dist/{separator-B5UmkVRL.d.ts → separator-CNDs98Dv.d.ts} +2 -2
- package/dist/{separator-BepAcFFy.js → separator-D0D6VyyM.js} +1 -1
- package/dist/separator.d.ts +1 -1
- package/dist/separator.js +1 -1
- package/dist/{sheet-_fXLjiq2.js → sheet-BOSknSN9.js} +1 -1
- package/dist/sheet.d.ts +1 -1
- package/dist/sheet.js +1 -1
- package/dist/sidebar.d.ts +783 -328
- package/dist/sidebar.js +1 -1
- package/dist/{skeleton-DsHXIa9j.js → skeleton-BhcJMpem.js} +1 -1
- package/dist/skeleton.js +1 -1
- package/dist/skip-to-main-link.js +1 -1
- package/dist/slider.d.ts +1 -1
- package/dist/slot-DdgxmuI5.d.ts +67 -0
- package/dist/slot-DpNWVci8.js +1 -0
- package/dist/slot.d.ts +1 -1
- package/dist/slot.js +1 -1
- package/dist/split-button.d.ts +12 -12
- package/dist/split-button.js +1 -1
- package/dist/switch.d.ts +2 -1
- package/dist/{table-CGxJwtbL.js → table-C_Nm_RSV.js} +1 -1
- package/dist/{table-CZBYEmyK.d.ts → table-D51ZtV4U.d.ts} +18 -8
- package/dist/table.d.ts +1 -1
- package/dist/table.js +1 -1
- package/dist/tabs.d.ts +8 -13
- package/dist/tabs.js +1 -1
- package/dist/{theme-FbfjYiD3.d.ts → theme-6OxNhf6l.d.ts} +6 -6
- package/dist/theme-CVfq037P.js +1 -0
- package/dist/theme-switcher.d.ts +4 -4
- package/dist/theme-switcher.js +1 -1
- package/dist/theme.d.ts +86 -23
- package/dist/theme.js +1 -1
- package/dist/toast.d.ts +9 -9
- package/dist/toast.js +1 -1
- package/dist/tooltip-Dnu35cjU.js +1 -0
- package/dist/tooltip-DuXGxIse.d.ts +220 -0
- package/dist/tooltip.d.ts +1 -217
- package/dist/tooltip.js +1 -1
- package/dist/use-breakpoint-Dqu12Szq.js +1 -0
- package/dist/use-callback-ref-IYti9y7x.js +1 -0
- package/dist/use-is-apple-platform-Cxwrb86L.js +1 -0
- package/dist/use-matches-media-query-Bd_GhhVd.js +1 -0
- package/dist/utils.d.ts +1 -1
- package/dist/well.js +1 -1
- package/package.json +4 -2
- package/dist/button-DvHMWAPl.js +0 -1
- package/dist/chart-DdBQ3xwx.js +0 -2
- package/dist/dropdown-menu-BbbQuae2.d.ts +0 -1
- package/dist/icons-CPbOq7cF.js +0 -1
- package/dist/list-CQFWx6Z8.js +0 -1
- package/dist/select-B-9yWrif.js +0 -1
- package/dist/slot-BtwKJTLq.d.ts +0 -25
- package/dist/slot-Dpsqz16D.js +0 -1
- package/dist/theme-IAnQ35bd.js +0 -1
- package/dist/use-breakpoint-Wd7_5-Mu.js +0 -1
- package/dist/use-matches-media-query-CMSxHR9n.js +0 -1
package/dist/app-layout.d.ts
CHANGED
|
@@ -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-
|
|
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.
|
|
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.
|
|
16
|
-
*
|
|
17
|
-
*
|
|
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
|
-
* <
|
|
24
|
-
* <
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* <AppLayout.
|
|
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
|
-
* <
|
|
42
|
+
* <AppLayout.Body asChild>
|
|
43
|
+
* <Main>
|
|
44
|
+
* <Outlet />
|
|
45
|
+
* </Main>
|
|
46
|
+
* </AppLayout.Body>
|
|
33
47
|
* </AppLayout.Content>
|
|
34
|
-
* </AppLayout.
|
|
35
|
-
* </AppLayout.
|
|
36
|
-
* </
|
|
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
|
|
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.
|
|
79
|
+
* <AppLayout.Workspace>
|
|
66
80
|
* <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
|
|
67
|
-
* <AppLayout.
|
|
68
|
-
* <AppLayout.
|
|
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.
|
|
77
|
-
* </AppLayout.
|
|
78
|
-
* </AppLayout.
|
|
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
|
|
86
|
-
*
|
|
87
|
-
*
|
|
88
|
-
* `min-h-0` is what lets `AppLayout.
|
|
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
|
-
*
|
|
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.
|
|
117
|
+
* <AppLayout.Workspace>
|
|
99
118
|
* <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
|
|
100
|
-
* <AppLayout.
|
|
101
|
-
* <AppLayout.
|
|
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.
|
|
110
|
-
* </AppLayout.
|
|
111
|
-
* </AppLayout.
|
|
128
|
+
* </AppLayout.Body>
|
|
129
|
+
* </AppLayout.Content>
|
|
130
|
+
* </AppLayout.Workspace>
|
|
112
131
|
* </AppLayout.Root>
|
|
113
132
|
* </Sidebar.Root>
|
|
114
133
|
* ```
|
|
115
134
|
*/
|
|
116
|
-
declare const
|
|
135
|
+
declare const Workspace: ({ asChild, children, className, "data-slot": dataSlot, ...props }: ComponentProps<"div"> & WithAsChild & WithDataSlot) => import("react").JSX.Element;
|
|
117
136
|
/**
|
|
118
|
-
* The content
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
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
|
-
*
|
|
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.
|
|
170
|
+
* <AppLayout.Workspace>
|
|
132
171
|
* <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
|
|
133
|
-
* <AppLayout.
|
|
134
|
-
* <AppLayout.
|
|
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.
|
|
143
|
-
* </AppLayout.
|
|
144
|
-
* </AppLayout.
|
|
181
|
+
* </AppLayout.Body>
|
|
182
|
+
* </AppLayout.Content>
|
|
183
|
+
* </AppLayout.Workspace>
|
|
145
184
|
* </AppLayout.Root>
|
|
146
185
|
* </Sidebar.Root>
|
|
147
186
|
* ```
|
|
148
187
|
*/
|
|
149
|
-
declare const
|
|
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
|
|
152
|
-
*
|
|
153
|
-
*
|
|
154
|
-
*
|
|
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
|
-
*
|
|
158
|
-
*
|
|
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
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
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
|
-
*
|
|
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.
|
|
230
|
+
* <AppLayout.Workspace>
|
|
186
231
|
* <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
|
|
187
|
-
* <AppLayout.
|
|
188
|
-
* <AppLayout.
|
|
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.
|
|
197
|
-
* </AppLayout.
|
|
198
|
-
* </AppLayout.
|
|
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<"
|
|
248
|
+
declare const Header: ({ asChild, children, className, "data-slot": dataSlot, ...props }: ComponentProps<"div"> & WithAsChild & WithDataSlot) => import("react").JSX.Element;
|
|
204
249
|
/**
|
|
205
|
-
* The
|
|
206
|
-
*
|
|
207
|
-
*
|
|
208
|
-
*
|
|
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
|
-
*
|
|
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.
|
|
295
|
+
* <AppLayout.Workspace>
|
|
228
296
|
* <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
|
|
229
|
-
* <AppLayout.
|
|
230
|
-
* <AppLayout.
|
|
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.
|
|
239
|
-
* </AppLayout.
|
|
240
|
-
* </AppLayout.
|
|
306
|
+
* </AppLayout.Body>
|
|
307
|
+
* </AppLayout.Content>
|
|
308
|
+
* </AppLayout.Workspace>
|
|
241
309
|
* </AppLayout.Root>
|
|
242
310
|
* </Sidebar.Root>
|
|
243
311
|
* ```
|
|
244
312
|
*/
|
|
245
|
-
declare const
|
|
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
|
|
249
|
-
* typically a `Sidebar.Nav` beside an `AppLayout.
|
|
250
|
-
* `AppLayout.
|
|
251
|
-
*
|
|
252
|
-
*
|
|
253
|
-
*
|
|
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.
|
|
263
|
-
* └── AppLayout.
|
|
264
|
-
*
|
|
265
|
-
*
|
|
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.
|
|
355
|
+
* <AppLayout.Workspace>
|
|
275
356
|
* <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
|
|
276
|
-
* <AppLayout.
|
|
277
|
-
* <AppLayout.
|
|
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.
|
|
286
|
-
* </AppLayout.
|
|
287
|
-
* </AppLayout.
|
|
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.
|
|
386
|
+
* <AppLayout.Workspace>
|
|
306
387
|
* <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
|
|
307
|
-
* <AppLayout.
|
|
308
|
-
* <AppLayout.
|
|
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.
|
|
317
|
-
* </AppLayout.
|
|
318
|
-
* </AppLayout.
|
|
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.
|
|
417
|
+
* <AppLayout.Workspace>
|
|
337
418
|
* <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
|
|
338
|
-
* <AppLayout.
|
|
339
|
-
* <AppLayout.
|
|
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.
|
|
348
|
-
* </AppLayout.
|
|
349
|
-
* </AppLayout.
|
|
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
|
|
357
|
-
* `AppLayout.
|
|
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.
|
|
448
|
+
* <AppLayout.Workspace>
|
|
368
449
|
* <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
|
|
369
|
-
* <AppLayout.
|
|
370
|
-
* <AppLayout.
|
|
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.
|
|
379
|
-
* </AppLayout.
|
|
380
|
-
* </AppLayout.
|
|
459
|
+
* </AppLayout.Body>
|
|
460
|
+
* </AppLayout.Content>
|
|
461
|
+
* </AppLayout.Workspace>
|
|
381
462
|
* </AppLayout.Root>
|
|
382
463
|
* </Sidebar.Root>
|
|
383
464
|
* ```
|
|
384
465
|
*/
|
|
385
|
-
readonly
|
|
466
|
+
readonly Workspace: typeof Workspace;
|
|
386
467
|
/**
|
|
387
|
-
* The
|
|
388
|
-
* card
|
|
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.
|
|
480
|
+
* <AppLayout.Workspace>
|
|
399
481
|
* <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
|
|
400
|
-
* <AppLayout.
|
|
401
|
-
* <AppLayout.
|
|
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.
|
|
410
|
-
* </AppLayout.
|
|
411
|
-
* </AppLayout.
|
|
491
|
+
* </AppLayout.Body>
|
|
492
|
+
* </AppLayout.Content>
|
|
493
|
+
* </AppLayout.Workspace>
|
|
412
494
|
* </AppLayout.Root>
|
|
413
495
|
* </Sidebar.Root>
|
|
414
496
|
* ```
|
|
415
497
|
*/
|
|
416
|
-
readonly
|
|
498
|
+
readonly Content: typeof Content;
|
|
417
499
|
/**
|
|
418
|
-
* The
|
|
419
|
-
*
|
|
420
|
-
*
|
|
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.
|
|
512
|
+
* <AppLayout.Workspace>
|
|
431
513
|
* <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
|
|
432
|
-
* <AppLayout.
|
|
433
|
-
* <AppLayout.
|
|
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.
|
|
442
|
-
* </AppLayout.
|
|
443
|
-
* </AppLayout.
|
|
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
|
|
451
|
-
*
|
|
452
|
-
*
|
|
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.
|
|
545
|
+
* <AppLayout.Workspace>
|
|
463
546
|
* <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
|
|
464
|
-
* <AppLayout.
|
|
465
|
-
* <AppLayout.
|
|
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.
|
|
474
|
-
* </AppLayout.
|
|
475
|
-
* </AppLayout.
|
|
556
|
+
* </AppLayout.Body>
|
|
557
|
+
* </AppLayout.Content>
|
|
558
|
+
* </AppLayout.Workspace>
|
|
476
559
|
* </AppLayout.Root>
|
|
477
560
|
* </Sidebar.Root>
|
|
478
561
|
* ```
|
|
479
562
|
*/
|
|
480
|
-
readonly
|
|
563
|
+
readonly Body: typeof Body;
|
|
481
564
|
};
|
|
482
565
|
//#endregion
|
|
483
566
|
export { AppLayout };
|