@ngrok/mantle 0.81.1 → 0.82.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) 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-center.d.ts +647 -0
  5. package/dist/alert-center.js +1 -0
  6. package/dist/alert-dialog.js +1 -1
  7. package/dist/alert-vwFd7qdp.js +1 -0
  8. package/dist/alert.d.ts +1 -390
  9. package/dist/alert.js +1 -1
  10. package/dist/{anchor-DfeXTpKW.js → anchor-3OGK2UKU.js} +1 -1
  11. package/dist/anchor.js +1 -1
  12. package/dist/app-layout.d.ts +566 -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-DjpEKt2X.js → button-Cnja9Bsr.js} +1 -1
  22. package/dist/{button-D9n09xUg.js → button-DmJkYfyl.js} +1 -1
  23. package/dist/{button-BAno7KIU.js → button-IlxHhjPK.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-B3pAvmkk.js +2 -0
  30. package/dist/{choice-BHwFSSyv.js → choice-CnwfjSEu.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/cookie-ca4g5CKp.js +1 -0
  37. package/dist/{copy-to-clipboard-BsCQ9m6K.js → copy-to-clipboard-B4UB6pts.js} +1 -1
  38. package/dist/data-slot-EM6s2WEU.js +1 -0
  39. package/dist/data-table.js +1 -1
  40. package/dist/description-list.js +1 -1
  41. package/dist/{dialog-DWZWd5Jt.js → dialog-DozL6n-F.js} +1 -1
  42. package/dist/dialog.d.ts +1 -1
  43. package/dist/dialog.js +1 -1
  44. package/dist/dropdown-menu-BRH0Wd_z.js +1 -0
  45. package/dist/dropdown-menu.js +1 -1
  46. package/dist/empty.js +1 -1
  47. package/dist/field.d.ts +1 -1
  48. package/dist/field.js +1 -1
  49. package/dist/hooks.js +1 -1
  50. package/dist/{icons-DLCs1hLP.js → icons-Bb_zF2OV.js} +1 -1
  51. package/dist/icons.js +1 -1
  52. package/dist/input.js +1 -1
  53. package/dist/line-chart.js +1 -1
  54. package/dist/{list-51KQvENW.js → list-CJABVHwi.js} +1 -1
  55. package/dist/list.js +1 -1
  56. package/dist/llms.txt +4 -1
  57. package/dist/main.d.ts +35 -1
  58. package/dist/main.js +1 -1
  59. package/dist/mantle.css +21 -1
  60. package/dist/media-object.js +1 -1
  61. package/dist/multi-select.d.ts +10 -2
  62. package/dist/multi-select.js +1 -1
  63. package/dist/otp-input.js +1 -1
  64. package/dist/pagination.js +1 -1
  65. package/dist/platform-BVD3gpKD.js +1 -0
  66. package/dist/{primitive-trJDqIXJ.js → primitive-D-9GIFWb.js} +1 -1
  67. package/dist/progress.d.ts +8 -8
  68. package/dist/qr-code.js +1 -1
  69. package/dist/radio-group.d.ts +10 -0
  70. package/dist/radio-group.js +1 -1
  71. package/dist/sandboxed-on-click.js +1 -1
  72. package/dist/scatter-plot.d.ts +2 -1
  73. package/dist/scatter-plot.js +1 -1
  74. package/dist/{select-BCHWvmyC.js → select-BReznXaw.js} +1 -1
  75. package/dist/select.js +1 -1
  76. package/dist/selectable-list.js +1 -1
  77. package/dist/{separator-bpE_kooz.js → separator-D0D6VyyM.js} +1 -1
  78. package/dist/separator.js +1 -1
  79. package/dist/sheet-BxvTfPLM.js +1 -0
  80. package/dist/sheet.d.ts +1 -1
  81. package/dist/sheet.js +1 -1
  82. package/dist/sidebar.d.ts +2558 -0
  83. package/dist/sidebar.js +1 -0
  84. package/dist/{skeleton-CsbUHbBA.js → skeleton-BhcJMpem.js} +1 -1
  85. package/dist/skeleton.js +1 -1
  86. package/dist/skip-to-main-link.js +1 -1
  87. package/dist/slot-DdgxmuI5.d.ts +67 -0
  88. package/dist/slot-DpNWVci8.js +1 -0
  89. package/dist/slot.d.ts +1 -1
  90. package/dist/slot.js +1 -1
  91. package/dist/split-button.js +1 -1
  92. package/dist/tabs.js +1 -1
  93. package/dist/theme-BorfgnNh.js +1 -0
  94. package/dist/theme-switcher.d.ts +1 -1
  95. package/dist/theme-switcher.js +1 -1
  96. package/dist/theme.js +1 -1
  97. package/dist/toast.js +1 -1
  98. package/dist/tooltip-Dnu35cjU.js +1 -0
  99. package/dist/tooltip-mrpLz4DZ.d.ts +218 -0
  100. package/dist/tooltip.d.ts +1 -217
  101. package/dist/tooltip.js +1 -1
  102. package/dist/use-breakpoint-Wd7_5-Mu.js +1 -0
  103. package/dist/use-copy-to-clipboard-CSyp4Zk0.js +1 -0
  104. package/dist/use-is-hydrated-DDCqXmju.js +1 -0
  105. package/dist/{use-prefers-reduced-motion-CagaNRgm.js → use-prefers-reduced-motion-Bk5zAfHY.js} +1 -1
  106. package/dist/utils.js +1 -1
  107. package/dist/well.js +1 -1
  108. package/package.json +16 -13
  109. package/dist/browser-only-CPH56Xw_.js +0 -1
  110. package/dist/chart-Do2qkrxl.js +0 -2
  111. package/dist/dropdown-menu-RyDWoKHx.js +0 -1
  112. package/dist/slot-BtwKJTLq.d.ts +0 -25
  113. package/dist/slot-CDk0Bb9z.js +0 -1
  114. package/dist/theme-C26-Xolp.js +0 -1
  115. package/dist/use-copy-to-clipboard-DqQ0_N3E.js +0 -1
@@ -0,0 +1,566 @@
1
+ import { n as WithAsChild } from "./as-child-D23mGo4f.js";
2
+ import { t as WithDataSlot } from "./data-slot-CChfb_cv.js";
3
+ import { ComponentProps } from "react";
4
+ //#region src/components/app-layout/app-layout.d.ts
5
+ /**
6
+ * The outer frame of an application shell. Renders a `<div>` with
7
+ * `relative isolate flex h-full w-full flex-col overflow-clip`, so
8
+ * it fills its nearest sized ancestor — which makes it embeddable in docs
9
+ * demos and tests. Real app shells pin it to the viewport by merging
10
+ * `className="fixed inset-0"` (mantle `cx` is tailwind-merge-backed, so the
11
+ * override is deterministic); the shell itself never scrolls — only
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.
21
+ *
22
+ * When the shell owns the document, render a `SkipToMainLink` as its first
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.
26
+ *
27
+ * @see https://mantle.ngrok.com/layouts/app-layout#applayoutroot
28
+ *
29
+ * @example
30
+ * ```tsx
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>
37
+ * <AppLayout.Content>
38
+ * <AppLayout.Header>
39
+ * <Sidebar.Trigger />
40
+ * <Breadcrumbs />
41
+ * </AppLayout.Header>
42
+ * <AppLayout.Body asChild>
43
+ * <Main>
44
+ * <Outlet />
45
+ * </Main>
46
+ * </AppLayout.Body>
47
+ * </AppLayout.Content>
48
+ * </AppLayout.Workspace>
49
+ * </AppLayout.Root>
50
+ * </Sidebar.Root>
51
+ * ```
52
+ */
53
+ declare const Root: ({ asChild, children, className, "data-slot": dataSlot, ...props }: ComponentProps<"div"> & WithAsChild & WithDataSlot) => import("react").JSX.Element;
54
+ /**
55
+ * A full-window-width strip pinned above everything else in the shell —
56
+ * including any sidebar — for maintenance notices, environment warnings,
57
+ * and similar app-wide messaging. It is a vertical composition slot: place a
58
+ * maintenance banner and an `AlertCenter.Bar` here, and each contributes its
59
+ * own row while the slot pushes the shell down. Renders an unstyled `<div>`
60
+ * (`flex w-full shrink-0 flex-col`): its children bring their own colors and
61
+ * layout, and the part collapses to nothing when empty. Deliberately not named
62
+ * `Banner` so it never reads as the ARIA `banner` landmark — it claims no
63
+ * landmark at all.
64
+ *
65
+ * @see https://mantle.ngrok.com/layouts/app-layout#applayoutnotice
66
+ *
67
+ * @example
68
+ * ```tsx
69
+ * <Sidebar.Root>
70
+ * <AppLayout.Root className="fixed inset-0">
71
+ * <SkipToMainLink />
72
+ * <AppLayout.Notice>
73
+ * {isUnderMaintenance && (
74
+ * <div className="bg-red-500 text-on-filled flex items-center gap-2 px-4 py-1 text-xs">
75
+ * The dashboard is read-only until {maintenanceEndsAt}.
76
+ * </div>
77
+ * )}
78
+ * </AppLayout.Notice>
79
+ * <AppLayout.Workspace>
80
+ * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
81
+ * <AppLayout.Content>
82
+ * <AppLayout.Header>
83
+ * <Sidebar.Trigger />
84
+ * <Breadcrumbs />
85
+ * </AppLayout.Header>
86
+ * <AppLayout.Body asChild>
87
+ * <Main>
88
+ * <Outlet />
89
+ * </Main>
90
+ * </AppLayout.Body>
91
+ * </AppLayout.Content>
92
+ * </AppLayout.Workspace>
93
+ * </AppLayout.Root>
94
+ * </Sidebar.Root>
95
+ * ```
96
+ */
97
+ declare const Notice: ({ asChild, children, className, "data-slot": dataSlot, ...props }: ComponentProps<"div"> & WithAsChild & WithDataSlot) => import("react").JSX.Element;
98
+ /**
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.
104
+ *
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
110
+ *
111
+ * @example
112
+ * ```tsx
113
+ * <Sidebar.Root>
114
+ * <AppLayout.Root className="fixed inset-0">
115
+ * <SkipToMainLink />
116
+ * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
117
+ * <AppLayout.Workspace>
118
+ * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
119
+ * <AppLayout.Content>
120
+ * <AppLayout.Header>
121
+ * <Sidebar.Trigger />
122
+ * <Breadcrumbs />
123
+ * </AppLayout.Header>
124
+ * <AppLayout.Body asChild>
125
+ * <Main>
126
+ * <Outlet />
127
+ * </Main>
128
+ * </AppLayout.Body>
129
+ * </AppLayout.Content>
130
+ * </AppLayout.Workspace>
131
+ * </AppLayout.Root>
132
+ * </Sidebar.Root>
133
+ * ```
134
+ */
135
+ declare const Workspace: ({ asChild, children, className, "data-slot": dataSlot, ...props }: ComponentProps<"div"> & WithAsChild & WithDataSlot) => import("react").JSX.Element;
136
+ /**
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.
143
+ *
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
163
+ *
164
+ * @example
165
+ * ```tsx
166
+ * <Sidebar.Root>
167
+ * <AppLayout.Root className="fixed inset-0">
168
+ * <SkipToMainLink />
169
+ * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
170
+ * <AppLayout.Workspace>
171
+ * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
172
+ * <AppLayout.Content>
173
+ * <AppLayout.Header>
174
+ * <Sidebar.Trigger />
175
+ * <Breadcrumbs />
176
+ * </AppLayout.Header>
177
+ * <AppLayout.Body asChild>
178
+ * <Main>
179
+ * <Outlet />
180
+ * </Main>
181
+ * </AppLayout.Body>
182
+ * </AppLayout.Content>
183
+ * </AppLayout.Workspace>
184
+ * </AppLayout.Root>
185
+ * </Sidebar.Root>
186
+ * ```
187
+ */
188
+ declare const Content: ({ asChild, children, className, "data-slot": dataSlot, ...props }: ComponentProps<"div"> & WithAsChild & WithDataSlot) => import("react").JSX.Element;
189
+ /**
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.
194
+ *
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.
205
+ *
206
+ * **Sidebar alignment is an invariant, not a coincidence:** standalone, the
207
+ * toolbar is `h-14`. When the shell contains a `Sidebar.Header` (detected via
208
+ * `:has()` from `AppLayout.Root`), the toolbar instead derives its height from
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.
214
+ *
215
+ * **CSS variables (public API):**
216
+ *
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
223
+ *
224
+ * @example
225
+ * ```tsx
226
+ * <Sidebar.Root>
227
+ * <AppLayout.Root className="fixed inset-0">
228
+ * <SkipToMainLink />
229
+ * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
230
+ * <AppLayout.Workspace>
231
+ * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
232
+ * <AppLayout.Content>
233
+ * <AppLayout.Header>
234
+ * <Sidebar.Trigger />
235
+ * <Breadcrumbs />
236
+ * </AppLayout.Header>
237
+ * <AppLayout.Body asChild>
238
+ * <Main>
239
+ * <Outlet />
240
+ * </Main>
241
+ * </AppLayout.Body>
242
+ * </AppLayout.Content>
243
+ * </AppLayout.Workspace>
244
+ * </AppLayout.Root>
245
+ * </Sidebar.Root>
246
+ * ```
247
+ */
248
+ declare const Header: ({ asChild, children, className, "data-slot": dataSlot, ...props }: ComponentProps<"div"> & WithAsChild & WithDataSlot) => import("react").JSX.Element;
249
+ /**
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`.
254
+ *
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
288
+ *
289
+ * @example
290
+ * ```tsx
291
+ * <Sidebar.Root>
292
+ * <AppLayout.Root className="fixed inset-0">
293
+ * <SkipToMainLink />
294
+ * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
295
+ * <AppLayout.Workspace>
296
+ * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
297
+ * <AppLayout.Content>
298
+ * <AppLayout.Header>
299
+ * <Sidebar.Trigger />
300
+ * <Breadcrumbs />
301
+ * </AppLayout.Header>
302
+ * <AppLayout.Body asChild>
303
+ * <Main>
304
+ * <Outlet />
305
+ * </Main>
306
+ * </AppLayout.Body>
307
+ * </AppLayout.Content>
308
+ * </AppLayout.Workspace>
309
+ * </AppLayout.Root>
310
+ * </Sidebar.Root>
311
+ * ```
312
+ */
313
+ declare const Body: ({ asChild, children, className, "data-slot": dataSlot, ...props }: ComponentProps<"div"> & WithAsChild & WithDataSlot) => import("react").JSX.Element;
314
+ /**
315
+ * A viewport-locked application shell: an optional full-width
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".
335
+ *
336
+ * @see https://mantle.ngrok.com/layouts/app-layout
337
+ *
338
+ * @example
339
+ * Composition:
340
+ * ```
341
+ * AppLayout.Root
342
+ * ├── AppLayout.Notice
343
+ * └── AppLayout.Workspace
344
+ * └── AppLayout.Content
345
+ * ├── AppLayout.Header
346
+ * └── AppLayout.Body
347
+ * ```
348
+ *
349
+ * @example
350
+ * ```tsx
351
+ * <Sidebar.Root>
352
+ * <AppLayout.Root className="fixed inset-0">
353
+ * <SkipToMainLink />
354
+ * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
355
+ * <AppLayout.Workspace>
356
+ * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
357
+ * <AppLayout.Content>
358
+ * <AppLayout.Header>
359
+ * <Sidebar.Trigger />
360
+ * <Breadcrumbs />
361
+ * </AppLayout.Header>
362
+ * <AppLayout.Body asChild>
363
+ * <Main>
364
+ * <Outlet />
365
+ * </Main>
366
+ * </AppLayout.Body>
367
+ * </AppLayout.Content>
368
+ * </AppLayout.Workspace>
369
+ * </AppLayout.Root>
370
+ * </Sidebar.Root>
371
+ * ```
372
+ */
373
+ declare const AppLayout: {
374
+ /**
375
+ * The outer frame. Fills its nearest sized ancestor; merge
376
+ * `className="fixed inset-0"` to pin a real app shell to the viewport.
377
+ *
378
+ * @see https://mantle.ngrok.com/layouts/app-layout#applayoutroot
379
+ *
380
+ * @example
381
+ * ```tsx
382
+ * <Sidebar.Root>
383
+ * <AppLayout.Root className="fixed inset-0">
384
+ * <SkipToMainLink />
385
+ * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
386
+ * <AppLayout.Workspace>
387
+ * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
388
+ * <AppLayout.Content>
389
+ * <AppLayout.Header>
390
+ * <Sidebar.Trigger />
391
+ * <Breadcrumbs />
392
+ * </AppLayout.Header>
393
+ * <AppLayout.Body asChild>
394
+ * <Main>
395
+ * <Outlet />
396
+ * </Main>
397
+ * </AppLayout.Body>
398
+ * </AppLayout.Content>
399
+ * </AppLayout.Workspace>
400
+ * </AppLayout.Root>
401
+ * </Sidebar.Root>
402
+ * ```
403
+ */
404
+ readonly Root: typeof Root;
405
+ /**
406
+ * A full-window-width strip above everything (maintenance notices,
407
+ * environment warnings). Unstyled; collapses when empty.
408
+ *
409
+ * @see https://mantle.ngrok.com/layouts/app-layout#applayoutnotice
410
+ *
411
+ * @example
412
+ * ```tsx
413
+ * <Sidebar.Root>
414
+ * <AppLayout.Root className="fixed inset-0">
415
+ * <SkipToMainLink />
416
+ * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
417
+ * <AppLayout.Workspace>
418
+ * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
419
+ * <AppLayout.Content>
420
+ * <AppLayout.Header>
421
+ * <Sidebar.Trigger />
422
+ * <Breadcrumbs />
423
+ * </AppLayout.Header>
424
+ * <AppLayout.Body asChild>
425
+ * <Main>
426
+ * <Outlet />
427
+ * </Main>
428
+ * </AppLayout.Body>
429
+ * </AppLayout.Content>
430
+ * </AppLayout.Workspace>
431
+ * </AppLayout.Root>
432
+ * </Sidebar.Root>
433
+ * ```
434
+ */
435
+ readonly Notice: typeof Notice;
436
+ /**
437
+ * The row below the notice where the user works — place a `Sidebar.Nav`
438
+ * beside an `AppLayout.Content` card here.
439
+ *
440
+ * @see https://mantle.ngrok.com/layouts/app-layout#applayoutworkspace
441
+ *
442
+ * @example
443
+ * ```tsx
444
+ * <Sidebar.Root>
445
+ * <AppLayout.Root className="fixed inset-0">
446
+ * <SkipToMainLink />
447
+ * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
448
+ * <AppLayout.Workspace>
449
+ * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
450
+ * <AppLayout.Content>
451
+ * <AppLayout.Header>
452
+ * <Sidebar.Trigger />
453
+ * <Breadcrumbs />
454
+ * </AppLayout.Header>
455
+ * <AppLayout.Body asChild>
456
+ * <Main>
457
+ * <Outlet />
458
+ * </Main>
459
+ * </AppLayout.Body>
460
+ * </AppLayout.Content>
461
+ * </AppLayout.Workspace>
462
+ * </AppLayout.Root>
463
+ * </Sidebar.Root>
464
+ * ```
465
+ */
466
+ readonly Workspace: typeof Workspace;
467
+ /**
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.
471
+ *
472
+ * @see https://mantle.ngrok.com/layouts/app-layout#applayoutcontent
473
+ *
474
+ * @example
475
+ * ```tsx
476
+ * <Sidebar.Root>
477
+ * <AppLayout.Root className="fixed inset-0">
478
+ * <SkipToMainLink />
479
+ * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
480
+ * <AppLayout.Workspace>
481
+ * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
482
+ * <AppLayout.Content>
483
+ * <AppLayout.Header>
484
+ * <Sidebar.Trigger />
485
+ * <Breadcrumbs />
486
+ * </AppLayout.Header>
487
+ * <AppLayout.Body asChild>
488
+ * <Main>
489
+ * <Outlet />
490
+ * </Main>
491
+ * </AppLayout.Body>
492
+ * </AppLayout.Content>
493
+ * </AppLayout.Workspace>
494
+ * </AppLayout.Root>
495
+ * </Sidebar.Root>
496
+ * ```
497
+ */
498
+ readonly Content: typeof Content;
499
+ /**
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`.
503
+ *
504
+ * @see https://mantle.ngrok.com/layouts/app-layout#applayoutheader
505
+ *
506
+ * @example
507
+ * ```tsx
508
+ * <Sidebar.Root>
509
+ * <AppLayout.Root className="fixed inset-0">
510
+ * <SkipToMainLink />
511
+ * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
512
+ * <AppLayout.Workspace>
513
+ * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
514
+ * <AppLayout.Content>
515
+ * <AppLayout.Header>
516
+ * <Sidebar.Trigger />
517
+ * <Breadcrumbs />
518
+ * </AppLayout.Header>
519
+ * <AppLayout.Body asChild>
520
+ * <Main>
521
+ * <Outlet />
522
+ * </Main>
523
+ * </AppLayout.Body>
524
+ * </AppLayout.Content>
525
+ * </AppLayout.Workspace>
526
+ * </AppLayout.Root>
527
+ * </Sidebar.Root>
528
+ * ```
529
+ */
530
+ readonly Header: typeof Header;
531
+ /**
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.
536
+ *
537
+ * @see https://mantle.ngrok.com/layouts/app-layout#applayoutbody
538
+ *
539
+ * @example
540
+ * ```tsx
541
+ * <Sidebar.Root>
542
+ * <AppLayout.Root className="fixed inset-0">
543
+ * <SkipToMainLink />
544
+ * <AppLayout.Notice>{isUnderMaintenance && <MaintenanceBanner />}</AppLayout.Notice>
545
+ * <AppLayout.Workspace>
546
+ * <Sidebar.Nav aria-label="Main">…</Sidebar.Nav>
547
+ * <AppLayout.Content>
548
+ * <AppLayout.Header>
549
+ * <Sidebar.Trigger />
550
+ * <Breadcrumbs />
551
+ * </AppLayout.Header>
552
+ * <AppLayout.Body asChild>
553
+ * <Main>
554
+ * <Outlet />
555
+ * </Main>
556
+ * </AppLayout.Body>
557
+ * </AppLayout.Content>
558
+ * </AppLayout.Workspace>
559
+ * </AppLayout.Root>
560
+ * </Sidebar.Root>
561
+ * ```
562
+ */
563
+ readonly Body: typeof Body;
564
+ };
565
+ //#endregion
566
+ export { AppLayout };
@@ -0,0 +1 @@
1
+ import{t as e}from"./cx-IiQEAKf5.js";import{t}from"./data-slot-EM6s2WEU.js";import{t as n}from"./slot-DpNWVci8.js";import{jsx as r}from"react/jsx-runtime";const i={Root:({asChild:i,children:a,className:o,"data-slot":s,...c})=>r(i?n:`div`,{"data-slot":t(s,`app-layout`),className:e(`group/app-layout bg-base relative isolate flex h-full w-full flex-col`,`overflow-clip`,o),...c,children:a}),Notice:({asChild:i,children:a,className:o,"data-slot":s,...c})=>r(i?n:`div`,{"data-slot":t(s,`app-layout-notice`),className:e(`flex w-full shrink-0 flex-col`,o),...c,children:a}),Workspace:({asChild:i,children:a,className:o,"data-slot":s,...c})=>r(i?n:`div`,{"data-slot":t(s,`app-layout-workspace`),className:e(`flex min-h-0 flex-1`,o),...c,children:a}),Content:({asChild:i,children:a,className:o,"data-slot":s,...c})=>r(i?n:`div`,{"data-slot":t(s,`app-layout-content`),className:e(`bg-card border-card-muted relative flex min-w-0 flex-1 flex-col rounded-xl border shadow-sm`,`m-[var(--app-layout-card-gutter,0.5rem)]`,`overflow-clip`,o),...c,children:a}),Header:({asChild:i,children:a,className:o,"data-slot":s,...c})=>r(i?n:`div`,{"data-slot":t(s,`app-layout-header`),className:e(`border-card-muted flex h-14 shrink-0 items-center gap-2 border-b px-4`,`group-has-[[data-slot~=sidebar-header]]/app-layout:h-[calc(var(--sidebar-header-height,4.5rem)-2*var(--app-layout-card-gutter,0.5rem)-2px)]`,o),...c,children:a}),Body:({asChild:i,children:a,className:o,"data-slot":s,...c})=>r(i?n:`div`,{"data-slot":t(s,`app-layout-body`),className:e(`scrollbar relative min-h-0 w-full flex-1 overflow-y-auto overscroll-none`,o),...c,children:a})};export{i as AppLayout};
@@ -1 +1 @@
1
- import{a as e,c as t,i as n,l as r,n as i,o as a,r as o,s,t as c}from"./chart-Do2qkrxl.js";import{jsx as l}from"react/jsx-runtime";const u={Root:e=>l(o,{kind:`area`,componentName:`AreaChart`,slotName:`area-chart`,...e}),Area:e=>a(`AreaChart.Area`,`area`,e),Grid:e=>n(`AreaChart.Grid`,e),XAxis:e=>t(`AreaChart.XAxis`,e),YAxis:e=>r(`AreaChart.YAxis`,e),ReferenceLine:t=>e(`AreaChart.ReferenceLine`,t),Tooltip:e=>s(`AreaChart.Tooltip`,e),Legend:e=>l(i,{partName:`AreaChart.Legend`,slotName:`area-chart`,...e}),CopyButton:e=>l(c,{partName:`AreaChart.CopyButton`,slotName:`area-chart`,...e})};export{u as AreaChart};
1
+ import{a as e,c as t,i as n,l as r,n as i,o as a,r as o,s,t as c}from"./chart-B3pAvmkk.js";import{jsx as l}from"react/jsx-runtime";const u={Root:e=>l(o,{kind:`area`,componentName:`AreaChart`,slotName:`area-chart`,...e}),Area:e=>a(`AreaChart.Area`,`area`,e),Grid:e=>n(`AreaChart.Grid`,e),XAxis:e=>t(`AreaChart.XAxis`,e),YAxis:e=>r(`AreaChart.YAxis`,e),ReferenceLine:t=>e(`AreaChart.ReferenceLine`,t),Tooltip:e=>s(`AreaChart.Tooltip`,e),Legend:e=>l(i,{partName:`AreaChart.Legend`,slotName:`area-chart`,...e}),CopyButton:e=>l(c,{partName:`AreaChart.CopyButton`,slotName:`area-chart`,...e})};export{u as AreaChart};
package/dist/badge.js CHANGED
@@ -1 +1 @@
1
- import{t as e}from"./cx-IiQEAKf5.js";import{t}from"./icon-d-nMCfAI.js";import{t as n}from"./slot-CDk0Bb9z.js";import{Children as r,cloneElement as i,isValidElement as a}from"react";import o from"tiny-invariant";import{Fragment as s,jsx as c,jsxs as l}from"react/jsx-runtime";const u=({appearance:u,asChild:d=!1,children:p,className:h,color:g=`neutral`,icon:_,...v})=>{let y=f(g,u),b=m(g,u),x=e(`inline-flex w-fit shrink-0 cursor-default items-center gap-1 rounded px-1.5 py-0.5 font-medium text-xs font-sans`,_&&`ps-1`,y,b,h);if(d){let e=r.only(p);o(a(e),"When using `asChild`, Badge must be passed a single child as a JSX tag.");let u=e.props?.children;return c(n,{"data-slot":`badge`,className:x,...v,children:i(e,{},l(s,{children:[_&&c(t,{className:`size-4`,svg:_}),u]}))})}return l(`span`,{"data-slot":`badge`,className:x,...v,children:[_&&c(t,{className:`size-4`,svg:_}),p]})},d={amber:`bg-amber-500/20`,blue:`bg-blue-500/20`,cyan:`bg-cyan-500/20`,emerald:`bg-emerald-500/20`,fuchsia:`bg-fuchsia-500/20`,gray:`bg-gray-500/20`,green:`bg-green-500/20`,indigo:`bg-indigo-500/20`,lime:`bg-lime-500/20`,orange:`bg-orange-500/20`,pink:`bg-pink-500/20`,purple:`bg-purple-500/20`,red:`bg-red-500/20`,rose:`bg-rose-500/20`,sky:`bg-sky-500/20`,teal:`bg-teal-500/20`,violet:`bg-violet-500/20`,yellow:`bg-yellow-500/20`,accent:`bg-accent-500/20`,danger:`bg-danger-500/20`,important:`bg-important-500/20`,info:`bg-info-500/20`,neutral:`bg-neutral-500/20`,success:`bg-success-500/20`,warning:`bg-warning-500/20`};function f(e,t){switch(t){case`muted`:return d[e];default:o(!1,`Invalid appearance: ${String(t)}`)}}const p={amber:`text-amber-700`,blue:`text-blue-700`,cyan:`text-cyan-700`,emerald:`text-emerald-700`,fuchsia:`text-fuchsia-700`,gray:`text-gray-700`,green:`text-green-700`,indigo:`text-indigo-700`,lime:`text-lime-700`,orange:`text-orange-700`,pink:`text-pink-700`,purple:`text-purple-700`,red:`text-red-700`,rose:`text-rose-700`,sky:`text-sky-700`,teal:`text-teal-700`,violet:`text-violet-700`,yellow:`text-yellow-700`,accent:`text-accent-700`,danger:`text-danger-700`,important:`text-important-700`,info:`text-info-700`,neutral:`text-neutral-700`,success:`text-success-700`,warning:`text-warning-700`};function m(e,t){switch(t){case`muted`:return p[e];default:o(!1,`Invalid appearance: ${String(t)}`)}}export{u as Badge};
1
+ import{t as e}from"./cx-IiQEAKf5.js";import{t}from"./icon-d-nMCfAI.js";import{t as n}from"./slot-DpNWVci8.js";import{Children as r,cloneElement as i,isValidElement as a}from"react";import o from"tiny-invariant";import{Fragment as s,jsx as c,jsxs as l}from"react/jsx-runtime";const u=({appearance:u,asChild:d=!1,children:p,className:h,color:g=`neutral`,icon:_,...v})=>{let y=f(g,u),b=m(g,u),x=e(`inline-flex w-fit shrink-0 cursor-default items-center gap-1 rounded px-1.5 py-0.5 font-medium text-xs font-sans`,_&&`ps-1`,y,b,h);if(d){let e=r.only(p);o(a(e),"When using `asChild`, Badge must be passed a single child as a JSX tag.");let u=e.props?.children;return c(n,{"data-slot":`badge`,className:x,...v,children:i(e,{},l(s,{children:[_&&c(t,{className:`size-4`,svg:_}),u]}))})}return l(`span`,{"data-slot":`badge`,className:x,...v,children:[_&&c(t,{className:`size-4`,svg:_}),p]})},d={amber:`bg-amber-500/20`,blue:`bg-blue-500/20`,cyan:`bg-cyan-500/20`,emerald:`bg-emerald-500/20`,fuchsia:`bg-fuchsia-500/20`,gray:`bg-gray-500/20`,green:`bg-green-500/20`,indigo:`bg-indigo-500/20`,lime:`bg-lime-500/20`,orange:`bg-orange-500/20`,pink:`bg-pink-500/20`,purple:`bg-purple-500/20`,red:`bg-red-500/20`,rose:`bg-rose-500/20`,sky:`bg-sky-500/20`,teal:`bg-teal-500/20`,violet:`bg-violet-500/20`,yellow:`bg-yellow-500/20`,accent:`bg-accent-500/20`,danger:`bg-danger-500/20`,important:`bg-important-500/20`,info:`bg-info-500/20`,neutral:`bg-neutral-500/20`,success:`bg-success-500/20`,warning:`bg-warning-500/20`};function f(e,t){switch(t){case`muted`:return d[e];default:o(!1,`Invalid appearance: ${String(t)}`)}}const p={amber:`text-amber-700`,blue:`text-blue-700`,cyan:`text-cyan-700`,emerald:`text-emerald-700`,fuchsia:`text-fuchsia-700`,gray:`text-gray-700`,green:`text-green-700`,indigo:`text-indigo-700`,lime:`text-lime-700`,orange:`text-orange-700`,pink:`text-pink-700`,purple:`text-purple-700`,red:`text-red-700`,rose:`text-rose-700`,sky:`text-sky-700`,teal:`text-teal-700`,violet:`text-violet-700`,yellow:`text-yellow-700`,accent:`text-accent-700`,danger:`text-danger-700`,important:`text-important-700`,info:`text-info-700`,neutral:`text-neutral-700`,success:`text-success-700`,warning:`text-warning-700`};function m(e,t){switch(t){case`muted`:return p[e];default:o(!1,`Invalid appearance: ${String(t)}`)}}export{u as Badge};
package/dist/bar-chart.js CHANGED
@@ -1 +1 @@
1
- import{a as e,c as t,i as n,l as r,n as i,o as a,r as o,s,t as c}from"./chart-Do2qkrxl.js";import{jsx as l}from"react/jsx-runtime";const u={Root:e=>l(o,{kind:`bar`,componentName:`BarChart`,slotName:`bar-chart`,...e}),Bar:e=>a(`BarChart.Bar`,`bar`,e),Grid:e=>n(`BarChart.Grid`,e),XAxis:e=>t(`BarChart.XAxis`,e),YAxis:e=>r(`BarChart.YAxis`,e),ReferenceLine:t=>e(`BarChart.ReferenceLine`,t),Tooltip:e=>s(`BarChart.Tooltip`,e),Legend:e=>l(i,{partName:`BarChart.Legend`,slotName:`bar-chart`,...e}),CopyButton:e=>l(c,{partName:`BarChart.CopyButton`,slotName:`bar-chart`,...e})};export{u as BarChart};
1
+ import{a as e,c as t,i as n,l as r,n as i,o as a,r as o,s,t as c}from"./chart-B3pAvmkk.js";import{jsx as l}from"react/jsx-runtime";const u={Root:e=>l(o,{kind:`bar`,componentName:`BarChart`,slotName:`bar-chart`,...e}),Bar:e=>a(`BarChart.Bar`,`bar`,e),Grid:e=>n(`BarChart.Grid`,e),XAxis:e=>t(`BarChart.XAxis`,e),YAxis:e=>r(`BarChart.YAxis`,e),ReferenceLine:t=>e(`BarChart.ReferenceLine`,t),Tooltip:e=>s(`BarChart.Tooltip`,e),Legend:e=>l(i,{partName:`BarChart.Legend`,slotName:`bar-chart`,...e}),CopyButton:e=>l(c,{partName:`BarChart.CopyButton`,slotName:`bar-chart`,...e})};export{u as BarChart};
@@ -189,7 +189,7 @@ type BreadcrumbSeparatorProps = Omit<ComponentProps<"li">, "children"> & ({
189
189
  * </Breadcrumb.Root>
190
190
  * ```
191
191
  */
192
- declare const Separator: ({ asChild, children, className, "data-slot": dataSlot, ref, ...props }: BreadcrumbSeparatorProps & WithDataSlot) => import("react").JSX.Element;
192
+ declare const Separator: ({ asChild, children, "data-slot": dataSlot, ref, ...props }: BreadcrumbSeparatorProps & WithDataSlot) => import("react").JSX.Element;
193
193
  /**
194
194
  * Compound component for WAI-ARIA breadcrumb navigation — the path from a
195
195
  * root to the current page as an ordered list of links inside a labeled
@@ -1 +1 @@
1
- import{t as e}from"./cx-IiQEAKf5.js";import{t}from"./icon-lZ48P8Nn.js";import{n,t as r}from"./slot-CDk0Bb9z.js";import{cloneElement as i,isValidElement as a}from"react";import{jsx as o}from"react/jsx-runtime";import{CaretRightIcon as s}from"@phosphor-icons/react/CaretRight";const c={Root:({asChild:e,children:t,"data-slot":i,ref:a,...s})=>o(e?r:`nav`,{ref:a,"data-slot":n(i,`breadcrumb`),"aria-label":`Breadcrumb`,...s,children:t}),List:({asChild:t,children:i,className:a,"data-slot":s,ref:c,...l})=>o(t?r:`ol`,{ref:c,"data-slot":n(s,`breadcrumb-list`),className:e(`text-muted flex flex-wrap items-center gap-1.5 text-sm`,a),...l,children:i}),Item:({asChild:t,children:i,className:a,"data-slot":s,ref:c,...l})=>o(t?r:`li`,{ref:c,"data-slot":n(s,`breadcrumb-item`),className:e(`inline-flex items-center gap-1.5`,a),...l,children:i}),Link:({asChild:t,children:i,className:a,"data-slot":s,ref:c,...l})=>o(t?r:`a`,{ref:c,"data-slot":n(s,`breadcrumb-link`),className:e(`hover:text-strong transition-colors`,a),...l,children:i}),Page:({asChild:t,children:s,className:c,"data-slot":l,ref:u,...d})=>{let f=t?r:`span`,p=t&&a(s)?i(s,{"aria-current":`page`}):s;return o(f,{ref:u,"data-slot":n(l,`breadcrumb-page`),className:e(`text-strong`,c),...d,"aria-current":`page`,children:p})},Separator:({asChild:e,children:c,className:l,"data-slot":u,ref:d,...f})=>{let p=e?r:`li`,m=e&&a(c)?i(c,{role:`presentation`,"aria-hidden":`true`}):c??o(t,{svg:o(s,{}),className:`size-3.5`});return o(p,{ref:d,"data-slot":n(u,`breadcrumb-separator`),className:l,...f,role:`presentation`,"aria-hidden":`true`,children:m})}};export{c as Breadcrumb};
1
+ import{t as e}from"./cx-IiQEAKf5.js";import{t}from"./icon-lZ48P8Nn.js";import{t as n}from"./data-slot-EM6s2WEU.js";import{t as r}from"./slot-DpNWVci8.js";import{cloneElement as i,isValidElement as a}from"react";import{jsx as o}from"react/jsx-runtime";import{CaretRightIcon as s}from"@phosphor-icons/react/CaretRight";const c={Root:({asChild:e,children:t,"data-slot":i,ref:a,...s})=>o(e?r:`nav`,{ref:a,"data-slot":n(i,`breadcrumb`),"aria-label":`Breadcrumb`,...s,children:t}),List:({asChild:t,children:i,className:a,"data-slot":s,ref:c,...l})=>o(t?r:`ol`,{ref:c,"data-slot":n(s,`breadcrumb-list`),className:e(`text-muted flex flex-wrap items-center gap-1.5 text-sm`,a),...l,children:i}),Item:({asChild:t,children:i,className:a,"data-slot":s,ref:c,...l})=>o(t?r:`li`,{ref:c,"data-slot":n(s,`breadcrumb-item`),className:e(`inline-flex items-center gap-1.5`,a),...l,children:i}),Link:({asChild:t,children:i,className:a,"data-slot":s,ref:c,...l})=>o(t?r:`a`,{ref:c,"data-slot":n(s,`breadcrumb-link`),className:e(`hover:text-strong transition-colors`,a),...l,children:i}),Page:({asChild:t,children:s,className:c,"data-slot":l,ref:u,...d})=>{let f=t?r:`span`,p=t&&a(s)?i(s,{"aria-current":`page`}):s;return o(f,{ref:u,"data-slot":n(l,`breadcrumb-page`),className:e(`text-muted`,c),...d,"aria-current":`page`,children:p})},Separator:({asChild:e,children:c,"data-slot":l,ref:u,...d})=>{let f=e?r:`li`,p=e&&a(c)?i(c,{role:`presentation`,"aria-hidden":`true`}):c??o(t,{svg:o(s,{}),className:`size-3.5`});return o(f,{ref:u,"data-slot":n(l,`breadcrumb-separator`),...d,role:`presentation`,"aria-hidden":`true`,children:p})}};export{c as Breadcrumb};
@@ -0,0 +1 @@
1
+ import{t as e}from"./use-is-hydrated-DDCqXmju.js";function t({children:t,fallback:n=null}){return e()?t():n}function n(){return typeof window<`u`&&typeof document<`u`}export{n,t};
@@ -1 +1 @@
1
- import{n as e,t}from"./browser-only-CPH56Xw_.js";export{t as BrowserOnly,e as canUseDOM};
1
+ import{n as e,t}from"./browser-only-CmEEzfU3.js";export{t as BrowserOnly,e as canUseDOM};
@@ -1 +1 @@
1
- import{t as e}from"./cx-IiQEAKf5.js";import{t}from"./icon-lZ48P8Nn.js";import{t as n}from"./slot-CDk0Bb9z.js";import{t as r}from"./booleanish-BfvnW6vy.js";import{t as i}from"./clsx-DUGZgXfJ.js";import{Children as a,cloneElement as o,isValidElement as s}from"react";import c from"tiny-invariant";import{Fragment as l,jsx as u,jsxs as d}from"react/jsx-runtime";import{cva as f}from"class-variance-authority";import{CircleNotchIcon as p}from"@phosphor-icons/react/CircleNotch";const m=f(``,{variants:{appearance:{filled:`bg-filled-accent text-white focus-visible:ring-focus-accent not-disabled:hover:bg-filled-accent-hover border border-transparent text-sm font-medium`,ghost:`text-accent-600 focus-visible:ring-focus-accent not-disabled:hover:bg-accent-500/10 not-disabled:hover:text-accent-700 border border-transparent text-sm font-medium`,outlined:`border-accent-600 bg-form text-accent-600 focus-visible:ring-focus-accent not-disabled:hover:border-accent-700 not-disabled:hover:bg-accent-500/10 not-disabled:hover:text-accent-700 border text-sm font-medium`,link:`text-accent-600 focus-visible:ring-focus-accent not-disabled:hover:underline group/button-link border-transparent`},isLoading:{false:``,true:`opacity-50`},intent:{accent:``,danger:``,neutral:``},size:{xs:``,sm:``,md:``,lg:``,xl:``}},defaultVariants:{isLoading:!1,size:`md`},compoundVariants:[{appearance:[`filled`,`ghost`,`outlined`],size:`xs`,class:`h-6 px-2`},{appearance:[`filled`,`ghost`,`outlined`],size:`sm`,class:`h-7 px-2.5`},{appearance:[`filled`,`ghost`,`outlined`],size:`md`,class:`h-9 px-3`},{appearance:[`filled`,`ghost`,`outlined`],size:`lg`,class:`h-10 px-3.5`},{appearance:[`filled`,`ghost`,`outlined`],size:`xl`,class:`h-12 px-4`},{appearance:`ghost`,intent:`danger`,class:`text-danger-600 focus-visible:ring-focus-danger not-disabled:hover:bg-danger-500/10 not-disabled:hover:text-danger-700 border-transparent`},{appearance:`outlined`,intent:`danger`,class:`border-danger-600 bg-form text-danger-600 focus-visible:ring-focus-danger not-disabled:hover:border-danger-700 not-disabled:hover:bg-danger-500/10 not-disabled:hover:text-danger-700`},{appearance:`filled`,intent:`danger`,class:`bg-filled-danger focus-visible:ring-focus-danger not-disabled:hover:bg-filled-danger-hover border-transparent`},{appearance:`link`,intent:`danger`,class:`text-danger-600 focus-visible:ring-focus-danger`},{appearance:`ghost`,intent:`neutral`,class:`text-strong focus-visible:ring-focus-accent not-disabled:hover:bg-neutral-500/10 not-disabled:hover:text-strong border-transparent`},{appearance:`outlined`,intent:`neutral`,class:`border-form bg-form text-strong focus-visible:border-accent-600 focus-visible:ring-focus-accent not-disabled:hover:border-neutral-400 not-disabled:hover:bg-form-hover not-disabled:hover:text-strong focus-visible:not-disabled:hover:border-accent-600`},{appearance:`filled`,intent:`neutral`,class:`bg-filled-neutral not-disabled:hover:bg-filled-neutral-hover border-transparent focus-visible:border-transparent text-neutral-50`},{appearance:`link`,intent:`neutral`,class:`text-strong focus-visible:ring-focus-accent`}]}),h={xs:`ps-1.5`,sm:`ps-2`,md:`ps-2.5`,lg:`ps-3`,xl:`ps-3.5`},g={xs:`pe-1.5`,sm:`pe-2`,md:`pe-2.5`,lg:`pe-3`,xl:`pe-3.5`},_=({"aria-disabled":f,appearance:_,asChild:v,children:y,className:b,disabled:x,icon:S,iconPlacement:C=`start`,intent:w,isLoading:T=!1,ref:E,size:D=`md`,type:O,...k})=>{let A=r(f??x??T),j=T?u(p,{className:`animate-spin`}):S,M=j&&_!==`link`,N={"aria-disabled":A,"data-slot":`button`,className:e(`inline-flex items-center justify-center gap-1.5 whitespace-nowrap rounded-md`,`focus:outline-hidden focus-visible:ring-4`,`disabled:cursor-default disabled:opacity-50`,`not-disabled:active:scale-97 ease-out transition-transform duration-150`,m({appearance:_,intent:w,isLoading:T,size:D}),_!==`link`&&`font-sans`,M&&C===`start`&&h[D],M&&C===`end`&&g[D],b),"data-appearance":_,"data-disabled":A,"data-intent":w,"data-loading":T,"data-size":_===`link`?void 0:D,disabled:A,ref:E,...k};return v?(c(s(y)&&a.only(y),"When using `asChild`, Button must be passed a single child as a JSX tag."),u(n,{...N,children:o(y,{},d(l,{children:[j&&u(t,{svg:j,className:i(C===`end`&&`order-last`)}),y.props.children]}))})):d(`button`,{...N,type:O??`button`,children:[j&&u(t,{svg:j,className:i(C===`end`&&`order-last`)}),y]})};export{_ as t};
1
+ import{t as e}from"./cx-IiQEAKf5.js";import{t}from"./icon-lZ48P8Nn.js";import{t as n}from"./slot-DpNWVci8.js";import{t as r}from"./booleanish-BfvnW6vy.js";import{t as i}from"./clsx-DUGZgXfJ.js";import{Children as a,cloneElement as o,isValidElement as s}from"react";import c from"tiny-invariant";import{Fragment as l,jsx as u,jsxs as d}from"react/jsx-runtime";import{cva as f}from"class-variance-authority";import{CircleNotchIcon as p}from"@phosphor-icons/react/CircleNotch";const m=f(``,{variants:{appearance:{filled:`bg-filled-accent text-white focus-visible:ring-focus-accent not-disabled:hover:bg-filled-accent-hover border border-transparent text-sm font-medium`,ghost:`text-accent-600 focus-visible:ring-focus-accent not-disabled:hover:bg-accent-500/10 not-disabled:hover:text-accent-700 border border-transparent text-sm font-medium`,outlined:`border-accent-600 bg-form text-accent-600 focus-visible:ring-focus-accent not-disabled:hover:border-accent-700 not-disabled:hover:bg-accent-500/10 not-disabled:hover:text-accent-700 border text-sm font-medium`,link:`text-accent-600 focus-visible:ring-focus-accent not-disabled:hover:underline group/button-link border-transparent`},isLoading:{false:``,true:`opacity-50`},intent:{accent:``,danger:``,neutral:``},size:{xs:``,sm:``,md:``,lg:``,xl:``}},defaultVariants:{isLoading:!1,size:`md`},compoundVariants:[{appearance:[`filled`,`ghost`,`outlined`],size:`xs`,class:`h-6 px-2`},{appearance:[`filled`,`ghost`,`outlined`],size:`sm`,class:`h-7 px-2.5`},{appearance:[`filled`,`ghost`,`outlined`],size:`md`,class:`h-9 px-3`},{appearance:[`filled`,`ghost`,`outlined`],size:`lg`,class:`h-10 px-3.5`},{appearance:[`filled`,`ghost`,`outlined`],size:`xl`,class:`h-12 px-4`},{appearance:`ghost`,intent:`danger`,class:`text-danger-600 focus-visible:ring-focus-danger not-disabled:hover:bg-danger-500/10 not-disabled:hover:text-danger-700 border-transparent`},{appearance:`outlined`,intent:`danger`,class:`border-danger-600 bg-form text-danger-600 focus-visible:ring-focus-danger not-disabled:hover:border-danger-700 not-disabled:hover:bg-danger-500/10 not-disabled:hover:text-danger-700`},{appearance:`filled`,intent:`danger`,class:`bg-filled-danger focus-visible:ring-focus-danger not-disabled:hover:bg-filled-danger-hover border-transparent`},{appearance:`link`,intent:`danger`,class:`text-danger-600 focus-visible:ring-focus-danger`},{appearance:`ghost`,intent:`neutral`,class:`text-strong focus-visible:ring-focus-accent not-disabled:hover:bg-neutral-500/10 not-disabled:hover:text-strong border-transparent`},{appearance:`outlined`,intent:`neutral`,class:`border-form bg-form text-strong focus-visible:border-accent-600 focus-visible:ring-focus-accent not-disabled:hover:border-neutral-400 not-disabled:hover:bg-form-hover not-disabled:hover:text-strong focus-visible:not-disabled:hover:border-accent-600`},{appearance:`filled`,intent:`neutral`,class:`bg-filled-neutral not-disabled:hover:bg-filled-neutral-hover border-transparent focus-visible:border-transparent text-neutral-50`},{appearance:`link`,intent:`neutral`,class:`text-strong focus-visible:ring-focus-accent`}]}),h={xs:`ps-1.5`,sm:`ps-2`,md:`ps-2.5`,lg:`ps-3`,xl:`ps-3.5`},g={xs:`pe-1.5`,sm:`pe-2`,md:`pe-2.5`,lg:`pe-3`,xl:`pe-3.5`},_=({"aria-disabled":f,appearance:_,asChild:v,children:y,className:b,disabled:x,icon:S,iconPlacement:C=`start`,intent:w,isLoading:T=!1,ref:E,size:D=`md`,type:O,...k})=>{let A=r(f??x??T),j=T?u(p,{className:`animate-spin`}):S,M=j&&_!==`link`,N={"aria-disabled":A,"data-slot":`button`,className:e(`inline-flex items-center justify-center gap-1.5 whitespace-nowrap rounded-md`,`focus:outline-hidden focus-visible:ring-4`,`disabled:cursor-default disabled:opacity-50`,`not-disabled:active:scale-97 ease-out transition-transform duration-150`,m({appearance:_,intent:w,isLoading:T,size:D}),_!==`link`&&`font-sans`,M&&C===`start`&&h[D],M&&C===`end`&&g[D],b),"data-appearance":_,"data-disabled":A,"data-intent":w,"data-loading":T,"data-size":_===`link`?void 0:D,disabled:A,ref:E,...k};return v?(c(s(y)&&a.only(y),"When using `asChild`, Button must be passed a single child as a JSX tag."),u(n,{...N,children:o(y,{},d(l,{children:[j&&u(t,{svg:j,className:i(C===`end`&&`order-last`)}),y.props.children]}))})):d(`button`,{...N,type:O??`button`,children:[j&&u(t,{svg:j,className:i(C===`end`&&`order-last`)}),y]})};export{_ as t};
@@ -1 +1 @@
1
- import{t as e}from"./cx-IiQEAKf5.js";import{t}from"./slot-CDk0Bb9z.js";import{jsx as n}from"react/jsx-runtime";import{cva as r}from"class-variance-authority";const i=r(`border-form inline-flex items-center rounded-md`,{variants:{appearance:{panel:`bg-form gap-0.5 border p-0.75 [--icon-button-border-radius:0.125rem] [&>.separator]:mx-px`,ghost:`gap-0.5`,outlined:``}}}),a=({appearance:r,asChild:a,className:o,children:s,ref:c,...l})=>n(a?t:`div`,{"data-slot":`button-group`,className:e(i({appearance:r}),o),ref:c,...l,children:s});export{a as t};
1
+ import{t as e}from"./cx-IiQEAKf5.js";import{t}from"./slot-DpNWVci8.js";import{jsx as n}from"react/jsx-runtime";import{cva as r}from"class-variance-authority";const i=r(`border-form inline-flex items-center rounded-md`,{variants:{appearance:{panel:`bg-form gap-0.5 border p-0.75 [--icon-button-border-radius:0.125rem] [&>.separator]:mx-px`,ghost:`gap-0.5`,outlined:``}}}),a=({appearance:r,asChild:a,className:o,children:s,ref:c,...l})=>n(a?t:`div`,{"data-slot":`button-group`,className:e(i({appearance:r}),o),ref:c,...l,children:s});export{a as t};