@ngrok/mantle 0.79.3 → 0.81.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (222) hide show
  1. package/dist/accordion.d.ts +158 -19
  2. package/dist/accordion.js +1 -1
  3. package/dist/agent.json +5 -1
  4. package/dist/alert-dialog.d.ts +465 -32
  5. package/dist/alert-dialog.js +1 -1
  6. package/dist/alert.d.ts +116 -14
  7. package/dist/alert.js +1 -1
  8. package/dist/anchor-DfeXTpKW.js +1 -0
  9. package/dist/anchor.d.ts +2 -2
  10. package/dist/anchor.js +1 -1
  11. package/dist/area-chart.d.ts +504 -0
  12. package/dist/area-chart.js +1 -0
  13. package/dist/as-child-D23mGo4f.d.ts +49 -0
  14. package/dist/badge.d.ts +44 -5
  15. package/dist/badge.js +1 -1
  16. package/dist/bar-chart.d.ts +491 -0
  17. package/dist/bar-chart.js +1 -0
  18. package/dist/breadcrumb.d.ts +196 -14
  19. package/dist/breadcrumb.js +1 -1
  20. package/dist/button-BAno7KIU.js +1 -0
  21. package/dist/{index-BSAizFod.d.ts → button-C-gMbPso.d.ts} +5 -5
  22. package/dist/{icon-button-BvQvT790.d.ts → button-C7vAl6lS.d.ts} +22 -63
  23. package/dist/button-D9n09xUg.js +1 -0
  24. package/dist/{button-DcXOWUYo.d.ts → button-DARFK2KJ.d.ts} +4 -4
  25. package/dist/button-DjpEKt2X.js +1 -0
  26. package/dist/button-DvHMWAPl.js +1 -0
  27. package/dist/button.d.ts +5 -5
  28. package/dist/button.js +1 -1
  29. package/dist/calendar.d.ts +0 -3
  30. package/dist/calendar.js +1 -1
  31. package/dist/card.d.ts +131 -9
  32. package/dist/card.js +1 -1
  33. package/dist/centered-layout.d.ts +209 -8
  34. package/dist/centered-layout.js +1 -1
  35. package/dist/chart-BROa2gqt.js +2 -0
  36. package/dist/chart-BcOC6Qj0.d.ts +275 -0
  37. package/dist/checkbox-0EoxOyMA.js +1 -0
  38. package/dist/checkbox.d.ts +13 -11
  39. package/dist/checkbox.js +1 -1
  40. package/dist/choice-BHwFSSyv.js +1 -0
  41. package/dist/choice-BNRQXszu.d.ts +254 -0
  42. package/dist/choice.d.ts +1 -252
  43. package/dist/choice.js +1 -1
  44. package/dist/code-block.d.ts +242 -52
  45. package/dist/code-block.js +6 -6
  46. package/dist/code-block_highlight-utils.d.ts +1 -1
  47. package/dist/code-block_highlight-utils.js +1 -1
  48. package/dist/code.d.ts +3 -2
  49. package/dist/code.js +1 -1
  50. package/dist/combobox.d.ts +171 -16
  51. package/dist/combobox.js +1 -1
  52. package/dist/command.d.ts +279 -81
  53. package/dist/command.js +1 -1
  54. package/dist/compose-refs-BdBMM9ga.js +1 -0
  55. package/dist/data-table.d.ts +28 -6
  56. package/dist/data-table.js +1 -1
  57. package/dist/description-list.d.ts +67 -6
  58. package/dist/description-list.js +1 -1
  59. package/dist/dialog-BM4wPCft.d.ts +24 -0
  60. package/dist/dialog-DWZWd5Jt.js +1 -0
  61. package/dist/dialog.d.ts +226 -35
  62. package/dist/dialog.js +1 -1
  63. package/dist/{dropdown-menu-DP_Ne9Mr.d.ts → dropdown-menu-DZg-Cd69.d.ts} +137 -32
  64. package/dist/dropdown-menu-Dw-OtXPm.d.ts +1 -0
  65. package/dist/dropdown-menu-RyDWoKHx.js +1 -0
  66. package/dist/dropdown-menu.d.ts +2 -2
  67. package/dist/dropdown-menu.js +1 -1
  68. package/dist/empty.d.ts +7 -22
  69. package/dist/empty.js +1 -1
  70. package/dist/field-B1wqeZr4.js +1 -0
  71. package/dist/field.d.ts +568 -47
  72. package/dist/field.js +1 -1
  73. package/dist/flag.d.ts +0 -3
  74. package/dist/flag.js +1 -1
  75. package/dist/hooks.d.ts +3 -4
  76. package/dist/hooks.js +1 -1
  77. package/dist/hover-card.d.ts +48 -7
  78. package/dist/hover-card.js +1 -1
  79. package/dist/{svg-only-BFeFS1aa.d.ts → icon-CX_gj6sW.d.ts} +2 -2
  80. package/dist/icon-d-nMCfAI.js +1 -0
  81. package/dist/{icon-Cevjo93X.d.ts → icon-k4E9yNWD.d.ts} +2 -2
  82. package/dist/icon-lZ48P8Nn.js +1 -0
  83. package/dist/icon.d.ts +3 -3
  84. package/dist/icon.js +1 -1
  85. package/dist/{sort-BPX2Fk9t.js → icons-B_DDQcVD.js} +1 -1
  86. package/dist/{traffic-policy-file-0g5RXFqu.js → icons-CF1lbWtp.js} +1 -1
  87. package/dist/icons-DLCs1hLP.js +1 -0
  88. package/dist/icons.d.ts +7 -15
  89. package/dist/icons.js +1 -1
  90. package/dist/{in-view-nkSOdED2.d.ts → in-view-DDEGUKDR.d.ts} +17 -9
  91. package/dist/{index-D47aqlpz.d.ts → index-DA4ig3gj.d.ts} +1 -1
  92. package/dist/input-BnlpQF0c.js +1 -0
  93. package/dist/{types-C19IR7jf.d.ts → input-BuYDU6CF.d.ts} +42 -2
  94. package/dist/input.d.ts +5 -56
  95. package/dist/input.js +1 -1
  96. package/dist/{label-v2-bv98k.d.ts → label-C6YH9skg.d.ts} +8 -6
  97. package/dist/label-D-D11mlp.js +1 -0
  98. package/dist/label.d.ts +1 -1
  99. package/dist/label.js +1 -1
  100. package/dist/line-chart.d.ts +490 -0
  101. package/dist/line-chart.js +1 -0
  102. package/dist/list-51KQvENW.js +1 -0
  103. package/dist/list.d.ts +135 -6
  104. package/dist/list.js +1 -1
  105. package/dist/llms.txt +5 -1
  106. package/dist/main.d.ts +20 -4
  107. package/dist/main.js +1 -1
  108. package/dist/mantle-dark-high-contrast.css +17 -0
  109. package/dist/mantle-dark.css +13 -0
  110. package/dist/mantle-light-high-contrast.css +15 -0
  111. package/dist/mantle.css +29 -0
  112. package/dist/media-object.d.ts +18 -4
  113. package/dist/media-object.js +1 -1
  114. package/dist/multi-select.d.ts +282 -24
  115. package/dist/multi-select.js +1 -1
  116. package/dist/otp-input.d.ts +118 -6
  117. package/dist/otp-input.js +1 -1
  118. package/dist/pagination.d.ts +61 -6
  119. package/dist/pagination.js +1 -1
  120. package/dist/popover-CE4OlWkd.d.ts +208 -0
  121. package/dist/popover-CQ9s7jG5.js +1 -0
  122. package/dist/popover.d.ts +1 -181
  123. package/dist/popover.js +1 -1
  124. package/dist/primitive-trJDqIXJ.js +1 -0
  125. package/dist/progress.d.ts +2 -8
  126. package/dist/progress.js +1 -1
  127. package/dist/qr-code.d.ts +101 -5
  128. package/dist/qr-code.js +1 -1
  129. package/dist/radio-group.d.ts +110 -35
  130. package/dist/radio-group.js +1 -1
  131. package/dist/sandboxed-on-click.d.ts +2 -2
  132. package/dist/sandboxed-on-click.js +1 -1
  133. package/dist/scatter-plot.d.ts +495 -0
  134. package/dist/scatter-plot.js +1 -0
  135. package/dist/select-0z7HVS6r.d.ts +579 -0
  136. package/dist/select-BCHWvmyC.js +1 -0
  137. package/dist/select.d.ts +1 -1
  138. package/dist/select.js +1 -1
  139. package/dist/selectable-list.d.ts +225 -298
  140. package/dist/selectable-list.js +1 -1
  141. package/dist/separator-B5UmkVRL.d.ts +75 -0
  142. package/dist/separator-bpE_kooz.js +1 -0
  143. package/dist/separator.d.ts +1 -52
  144. package/dist/separator.js +1 -1
  145. package/dist/sheet.d.ts +285 -38
  146. package/dist/sheet.js +1 -1
  147. package/dist/skeleton-CsbUHbBA.js +1 -0
  148. package/dist/skeleton.d.ts +4 -7
  149. package/dist/skeleton.js +1 -1
  150. package/dist/skip-to-main-link.d.ts +24 -4
  151. package/dist/skip-to-main-link.js +1 -1
  152. package/dist/slider.js +1 -1
  153. package/dist/{index-Rv8RL7xy.d.ts → slot-BtwKJTLq.d.ts} +1 -1
  154. package/dist/slot-CDk0Bb9z.js +1 -0
  155. package/dist/slot.d.ts +1 -1
  156. package/dist/slot.js +1 -1
  157. package/dist/split-button.d.ts +14 -14
  158. package/dist/split-button.js +1 -1
  159. package/dist/switch.d.ts +10 -7
  160. package/dist/switch.js +1 -1
  161. package/dist/table-Bo0vNxIJ.d.ts +848 -0
  162. package/dist/table-CGxJwtbL.js +1 -0
  163. package/dist/table.d.ts +1 -1
  164. package/dist/table.js +1 -1
  165. package/dist/tabs.d.ts +124 -25
  166. package/dist/tabs.js +1 -1
  167. package/dist/text-area.d.ts +2 -2
  168. package/dist/text-area.js +1 -1
  169. package/dist/theme-C26-Xolp.js +1 -0
  170. package/dist/theme-switcher.d.ts +105 -33
  171. package/dist/theme-switcher.js +1 -1
  172. package/dist/theme.d.ts +54 -15
  173. package/dist/theme.js +1 -1
  174. package/dist/toast.d.ts +86 -10
  175. package/dist/toast.js +1 -1
  176. package/dist/tooltip.d.ts +50 -5
  177. package/dist/tooltip.js +1 -1
  178. package/dist/types.d.ts +2 -2
  179. package/dist/utils.d.ts +1 -1
  180. package/dist/utils.js +1 -1
  181. package/dist/well.d.ts +3 -3
  182. package/dist/well.js +1 -1
  183. package/package.json +9 -3
  184. package/dist/anchor-C_tjSVy6.js +0 -1
  185. package/dist/as-child-CYEVu1WY.d.ts +0 -23
  186. package/dist/button-5t6-JS_I.js +0 -1
  187. package/dist/button-ClC60Nzg.js +0 -1
  188. package/dist/checkbox-DJ2xl7Rc.js +0 -1
  189. package/dist/choice-DOdyNzFC.js +0 -1
  190. package/dist/compose-refs-Cjf2gfB8.js +0 -1
  191. package/dist/dialog-vxLIvB8M.js +0 -1
  192. package/dist/dropdown-menu-Bt1aKF1g.js +0 -1
  193. package/dist/field-context-BR01g789.js +0 -1
  194. package/dist/icon-CDtYjF_H.js +0 -1
  195. package/dist/icon-button-DV2-GZHf.js +0 -1
  196. package/dist/index-g2rfwNCH.d.ts +0 -1
  197. package/dist/input-Ct1YOqSy.js +0 -1
  198. package/dist/label-BMlHW_2D.js +0 -1
  199. package/dist/popover-D5WxxnBY.js +0 -1
  200. package/dist/primitive-C64-m48O.d.ts +0 -13
  201. package/dist/primitive-IKruV2iB.js +0 -1
  202. package/dist/select-Bwt2YduR.d.ts +0 -345
  203. package/dist/select-D-5u0Blc.js +0 -1
  204. package/dist/separator-kBnnv3Cw.js +0 -1
  205. package/dist/skeleton-Bu3tgNcW.js +0 -1
  206. package/dist/slot-DmPrjM7N.js +0 -1
  207. package/dist/svg-only-DDx6FtJd.js +0 -1
  208. package/dist/table-CPH2md2-.js +0 -1
  209. package/dist/table-CwFHXC-G.d.ts +0 -414
  210. package/dist/theme-D3MDng6U.js +0 -1
  211. package/dist/theme-provider-C9zpDyJW.js +0 -1
  212. package/dist/toast-BsCjaMVS.js +0 -1
  213. package/dist/virtual-DZMBu7Ch.js +0 -1
  214. /package/dist/{sizes-BCoI4bhP.d.ts → button-BCoI4bhP.d.ts} +0 -0
  215. /package/dist/{intents-DdSKSj1c.d.ts → button-DdSKSj1c.d.ts} +0 -0
  216. /package/dist/{resolve-pre-rendered-props-B6OlZrSI.d.ts → code-block-B6OlZrSI.d.ts} +0 -0
  217. /package/dist/{resolve-pre-rendered-props-C9uaM9-V.js → code-block-C9uaM9-V.js} +0 -0
  218. /package/dist/{validation-7QeiTFwl.d.ts → field-7QeiTFwl.d.ts} +0 -0
  219. /package/dist/{validation-Bpptk_9t.js → field-Bpptk_9t.js} +0 -0
  220. /package/dist/{types-D1RY5Tcj.d.ts → icon-D1RY5Tcj.d.ts} +0 -0
  221. /package/dist/{is-input-CXmS0OFN.js → input-CXmS0OFN.js} +0 -0
  222. /package/dist/{themes-CYNpplwN.d.ts → theme-CYNpplwN.d.ts} +0 -0
package/dist/list.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { t as WithAsChild } from "./as-child-CYEVu1WY.js";
1
+ import { n as WithAsChild } from "./as-child-D23mGo4f.js";
2
2
  import { CSSProperties, ComponentProps, ReactNode, Ref } from "react";
3
3
  //#region src/components/list/primitive.d.ts
4
4
  /**
@@ -113,6 +113,35 @@ type VirtualRootProps = ListRootProps$1 & {
113
113
  * ```
114
114
  */
115
115
  type ListRootProps = Omit<ListRootProps$1, "semantics" | "onActivate" | "itemId" | "isItemDisabled">;
116
+ /**
117
+ * The scrollable container for a `List`: a `role="list"` of clickable items
118
+ * inside the bordered, rounded `bg-popover` viewport (styled after the
119
+ * `MultiSelect` popover). Renders **every** item — the non-virtualized default.
120
+ * Compose `List.Item` children directly. **Bound its height**
121
+ * (`max-h-*`, `h-*`, or `min-h-0 flex-1`) so long lists scroll.
122
+ *
123
+ * Keyboard: items keep their native tab order, and `ArrowUp` / `ArrowDown` /
124
+ * `Home` / `End` also move focus between items (skipping disabled ones); the
125
+ * focused item lights up with the hover tint rather than a focus ring.
126
+ *
127
+ * For very long lists, swap in `List.VirtualRoot`, which windows the same
128
+ * `Item` children — the call site is otherwise identical.
129
+ *
130
+ * @see https://mantle.ngrok.com/components/data-display/list
131
+ *
132
+ * @example
133
+ * ```tsx
134
+ * <List.Root aria-label="Your accounts" className="max-h-80">
135
+ * {accounts.map((account) => (
136
+ * <List.Item key={account.id} onClick={() => switchTo(account.id)}>
137
+ * <List.ItemTitle>{account.name}</List.ItemTitle>
138
+ * <List.ItemDescription>{account.plan}</List.ItemDescription>
139
+ * </List.Item>
140
+ * ))}
141
+ * </List.Root>
142
+ * ```
143
+ */
144
+ declare const Root: (props: ListRootProps) => import("react").JSX.Element;
116
145
  /**
117
146
  * Props for `List.VirtualRoot` — the internal list primitive's
118
147
  * `VirtualRoot` props (viewport props plus `estimateItemHeight` / `overscan`),
@@ -131,6 +160,29 @@ type ListRootProps = Omit<ListRootProps$1, "semantics" | "onActivate" | "itemId"
131
160
  * ```
132
161
  */
133
162
  type ListVirtualRootProps = Omit<VirtualRootProps, "semantics" | "onActivate" | "itemId" | "isItemDisabled">;
163
+ /**
164
+ * The windowed counterpart to `List.Root`: renders only the visible slice
165
+ * of its `List.Item` children via `@tanstack/react-virtual`. Authored
166
+ * identically to `Root` — same `Item` children — so opting into
167
+ * virtualization never changes the call site. Reach for it only when a list is
168
+ * long enough to need it; **bound its height** so the virtualizer has a
169
+ * viewport to measure.
170
+ *
171
+ * @see https://mantle.ngrok.com/components/data-display/list
172
+ *
173
+ * @example
174
+ * ```tsx
175
+ * <List.VirtualRoot aria-label="Your accounts" className="max-h-80">
176
+ * {accounts.map((account) => (
177
+ * <List.Item key={account.id} onClick={() => switchTo(account.id)}>
178
+ * <List.ItemTitle>{account.name}</List.ItemTitle>
179
+ * <List.ItemDescription>{account.plan}</List.ItemDescription>
180
+ * </List.Item>
181
+ * ))}
182
+ * </List.VirtualRoot>
183
+ * ```
184
+ */
185
+ declare const VirtualRoot: (props: ListVirtualRootProps) => import("react").JSX.Element;
134
186
  /**
135
187
  * Props for `List.Item`. Extends `<button>` props (minus `type`, which is fixed
136
188
  * to `"button"`) with `asChild` and the optional `current` accent.
@@ -155,6 +207,83 @@ type ListItemProps = Omit<ComponentProps<"button">, "type"> & WithAsChild & {
155
207
  */
156
208
  current?: boolean;
157
209
  };
210
+ /**
211
+ * A single clickable item in a `List`. Sits inside a `role="listitem"` pill
212
+ * from the internal list primitive; renders a `<button>` by default (with
213
+ * `onClick`), or your own element via `asChild` — e.g. an `<a>` for navigation
214
+ * (account switching, SSO selection). The button/link fills its pill, so
215
+ * clicking anywhere on the item triggers it, and the pill's hover / `current`
216
+ * accent is provided by the enclosing listitem.
217
+ *
218
+ * @see https://mantle.ngrok.com/components/data-display/list
219
+ *
220
+ * @example
221
+ * ```tsx
222
+ * // Action items.
223
+ * <List.Root aria-label="Your accounts" className="max-h-80">
224
+ * {accounts.map((account) => (
225
+ * <List.Item key={account.id} onClick={() => switchTo(account.id)}>
226
+ * <List.ItemTitle>{account.name}</List.ItemTitle>
227
+ * <List.ItemDescription>{account.plan}</List.ItemDescription>
228
+ * </List.Item>
229
+ * ))}
230
+ * </List.Root>
231
+ * ```
232
+ *
233
+ * @example
234
+ * ```tsx
235
+ * // Navigation items via asChild.
236
+ * <List.Root aria-label="SSO providers" className="max-h-80">
237
+ * {providers.map((provider) => (
238
+ * <List.Item key={provider.id} asChild>
239
+ * <a href={`/sso/${provider.id}`}>
240
+ * <List.ItemTitle>{provider.name}</List.ItemTitle>
241
+ * <List.ItemDescription>{provider.domain}</List.ItemDescription>
242
+ * </a>
243
+ * </List.Item>
244
+ * ))}
245
+ * </List.Root>
246
+ * ```
247
+ */
248
+ declare const Item: ({ asChild, className, current, disabled, onClick, ref, ...props }: ListItemProps) => import("react").JSX.Element;
249
+ /**
250
+ * The emphasized title line inside a `List.Item`, in the stronger foreground
251
+ * color. A styled `<span>`.
252
+ *
253
+ * @see https://mantle.ngrok.com/components/data-display/list
254
+ *
255
+ * @example
256
+ * ```tsx
257
+ * <List.Root aria-label="Your accounts" className="max-h-80">
258
+ * {accounts.map((account) => (
259
+ * <List.Item key={account.id} onClick={() => switchTo(account.id)}>
260
+ * <List.ItemTitle>{account.name}</List.ItemTitle>
261
+ * <List.ItemDescription>{account.plan}</List.ItemDescription>
262
+ * </List.Item>
263
+ * ))}
264
+ * </List.Root>
265
+ * ```
266
+ */
267
+ declare const ItemTitle: ({ className, ref, ...props }: ComponentProps<"span">) => import("react").JSX.Element;
268
+ /**
269
+ * The de-emphasized sub-line inside a `List.Item`, in the muted body color. A
270
+ * styled `<span>`.
271
+ *
272
+ * @see https://mantle.ngrok.com/components/data-display/list
273
+ *
274
+ * @example
275
+ * ```tsx
276
+ * <List.Root aria-label="Your accounts" className="max-h-80">
277
+ * {accounts.map((account) => (
278
+ * <List.Item key={account.id} onClick={() => switchTo(account.id)}>
279
+ * <List.ItemTitle>{account.name}</List.ItemTitle>
280
+ * <List.ItemDescription>{account.plan}</List.ItemDescription>
281
+ * </List.Item>
282
+ * ))}
283
+ * </List.Root>
284
+ * ```
285
+ */
286
+ declare const ItemDescription: ({ className, ref, ...props }: ComponentProps<"span">) => import("react").JSX.Element;
158
287
  /**
159
288
  * A scrollable, optionally-virtualized list of clickable items — the action /
160
289
  * navigation counterpart to `SelectableList` (e.g. an account switcher or SSO
@@ -215,7 +344,7 @@ declare const List: {
215
344
  * </List.Root>
216
345
  * ```
217
346
  */
218
- readonly Root: import("react").ForwardRefExoticComponent<Omit<ListRootProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
347
+ readonly Root: typeof Root;
219
348
  /**
220
349
  * The virtualized container — windows the same `Item` children. Opt in for
221
350
  * long lists; authored identically to `Root`.
@@ -234,7 +363,7 @@ declare const List: {
234
363
  * </List.VirtualRoot>
235
364
  * ```
236
365
  */
237
- readonly VirtualRoot: import("react").ForwardRefExoticComponent<Omit<ListVirtualRootProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
366
+ readonly VirtualRoot: typeof VirtualRoot;
238
367
  /**
239
368
  * A clickable item — a `<button>` by default, or your own element via
240
369
  * `asChild` (e.g. an `<a>`). Optional `current` gives the accent treatment.
@@ -253,7 +382,7 @@ declare const List: {
253
382
  * </List.Root>
254
383
  * ```
255
384
  */
256
- readonly Item: import("react").ForwardRefExoticComponent<Omit<ListItemProps, "ref"> & import("react").RefAttributes<HTMLButtonElement>>;
385
+ readonly Item: typeof Item;
257
386
  /**
258
387
  * Emphasized title line inside a `List.Item`.
259
388
  *
@@ -271,7 +400,7 @@ declare const List: {
271
400
  * </List.Root>
272
401
  * ```
273
402
  */
274
- readonly ItemTitle: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
403
+ readonly ItemTitle: typeof ItemTitle;
275
404
  /**
276
405
  * De-emphasized sub-line inside a `List.Item`.
277
406
  *
@@ -289,7 +418,7 @@ declare const List: {
289
418
  * </List.Root>
290
419
  * ```
291
420
  */
292
- readonly ItemDescription: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
421
+ readonly ItemDescription: typeof ItemDescription;
293
422
  };
294
423
  //#endregion
295
424
  export { List, type ListItemProps, type ListRootProps, type ListVirtualRootProps };
package/dist/list.js CHANGED
@@ -1 +1 @@
1
- import{t as e}from"./cx-IiQEAKf5.js";import{t}from"./slot-DmPrjM7N.js";import{n,r,t as i}from"./virtual-DZMBu7Ch.js";import{forwardRef as a}from"react";import{jsx as o}from"react/jsx-runtime";const s=a((e,t)=>o(r,{ref:t,semantics:`list`,...e}));s.displayName=`ListRoot`;const c=a((e,t)=>o(i,{ref:t,semantics:`list`,...e}));c.displayName=`ListVirtualRoot`;const l=a(({asChild:r,className:i,current:a,disabled:s,onClick:c,...l},u)=>o(n,{selected:a,disabled:s,children:o(r?t:`button`,{ref:u,"data-slot":`list-item-control`,"aria-current":a||void 0,...r?{"aria-disabled":s||void 0,tabIndex:s?-1:void 0}:{type:`button`,disabled:s},onClick:e=>{if(r&&s){e.preventDefault(),e.stopPropagation();return}c?.(e)},className:e(`flex w-full cursor-pointer flex-col gap-0.5 rounded-md bg-transparent px-2 py-1.5 text-left text-sm`,`disabled:cursor-default disabled:opacity-50 aria-disabled:cursor-default aria-disabled:opacity-50 aria-disabled:pointer-events-none`,`focus-visible:outline-hidden`,i),...l,onClickCapture:r&&s?e=>{e.preventDefault(),e.stopPropagation()}:l.onClickCapture})}));l.displayName=`ListItem`;const u=a(({className:t,...n},r)=>o(`span`,{ref:r,"data-slot":`list-item-title`,className:e(`text-strong font-medium`,t),...n}));u.displayName=`ListItemTitle`;const d=a(({className:t,...n},r)=>o(`span`,{ref:r,"data-slot":`list-item-description`,className:e(`text-body leading-4`,t),...n}));d.displayName=`ListItemDescription`;const f={Root:s,VirtualRoot:c,Item:l,ItemTitle:u,ItemDescription:d};export{f as List};
1
+ import{t as e}from"./cx-IiQEAKf5.js";import{t}from"./slot-CDk0Bb9z.js";import{n,r,t as i}from"./list-51KQvENW.js";import{jsx as a}from"react/jsx-runtime";const o={Root:e=>a(r,{semantics:`list`,...e}),VirtualRoot:e=>a(i,{semantics:`list`,...e}),Item:({asChild:r,className:i,current:o,disabled:s,onClick:c,ref:l,...u})=>a(n,{selected:o,disabled:s,children:a(r?t:`button`,{ref:l,"data-slot":`list-item-control`,"aria-current":o||void 0,...r?{"aria-disabled":s||void 0,tabIndex:s?-1:void 0}:{type:`button`,disabled:s},onClick:e=>{if(r&&s){e.preventDefault(),e.stopPropagation();return}c?.(e)},className:e(`flex w-full cursor-pointer flex-col gap-0.5 rounded-md bg-transparent px-2 py-1.5 text-left text-sm`,`disabled:cursor-default disabled:opacity-50 aria-disabled:cursor-default aria-disabled:opacity-50 aria-disabled:pointer-events-none`,`focus-visible:outline-hidden`,i),...u,onClickCapture:r&&s?e=>{e.preventDefault(),e.stopPropagation()}:u.onClickCapture})}),ItemTitle:({className:t,ref:n,...r})=>a(`span`,{ref:n,"data-slot":`list-item-title`,className:e(`text-strong font-medium`,t),...r}),ItemDescription:({className:t,ref:n,...r})=>a(`span`,{ref:n,"data-slot":`list-item-description`,className:e(`text-body leading-4`,t),...r})};export{o as List};
package/dist/llms.txt CHANGED
@@ -1,4 +1,4 @@
1
- # @ngrok/mantle (0.79.3)
1
+ # @ngrok/mantle (0.81.0)
2
2
 
3
3
  > Offline discovery hint shipped inside the @ngrok/mantle npm package. Authoritative metadata lives at https://mantle.ngrok.com/for-ai-agents.
4
4
 
@@ -23,7 +23,9 @@ Full text: https://mantle.ngrok.com/llms-full.txt
23
23
  - `@ngrok/mantle/alert`
24
24
  - `@ngrok/mantle/alert-dialog`
25
25
  - `@ngrok/mantle/anchor`
26
+ - `@ngrok/mantle/area-chart`
26
27
  - `@ngrok/mantle/badge`
28
+ - `@ngrok/mantle/bar-chart`
27
29
  - `@ngrok/mantle/breadcrumb`
28
30
  - `@ngrok/mantle/browser-only`
29
31
  - `@ngrok/mantle/button`
@@ -53,6 +55,7 @@ Full text: https://mantle.ngrok.com/llms-full.txt
53
55
  - `@ngrok/mantle/input`
54
56
  - `@ngrok/mantle/kbd`
55
57
  - `@ngrok/mantle/label`
58
+ - `@ngrok/mantle/line-chart`
56
59
  - `@ngrok/mantle/list`
57
60
  - `@ngrok/mantle/main`
58
61
  - `@ngrok/mantle/media-object`
@@ -64,6 +67,7 @@ Full text: https://mantle.ngrok.com/llms-full.txt
64
67
  - `@ngrok/mantle/qr-code`
65
68
  - `@ngrok/mantle/radio-group`
66
69
  - `@ngrok/mantle/sandboxed-on-click`
70
+ - `@ngrok/mantle/scatter-plot`
67
71
  - `@ngrok/mantle/select`
68
72
  - `@ngrok/mantle/selectable-list`
69
73
  - `@ngrok/mantle/separator`
package/dist/main.d.ts CHANGED
@@ -1,8 +1,24 @@
1
1
  import { ComponentProps } from "react";
2
2
  //#region src/components/main/main.d.ts
3
- declare function Main({ className, ...props }: ComponentProps<"main">): import("react").JSX.Element;
4
- declare namespace Main {
5
- var displayName: string;
6
- }
3
+ /**
4
+ * A focusable `<main>` landmark for the page's primary content. Renders with
5
+ * `id="main"` and `tabIndex={-1}` so a skip link (or any programmatic focus
6
+ * call) can send keyboard users directly to the main content without exposing
7
+ * a visible focus ring on the region itself (`focus:outline-hidden`).
8
+ *
9
+ * Pair with the `<SkipToMainLink>` component at the top of the document.
10
+ *
11
+ * @see https://mantle.ngrok.com/components/primitives/main
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * <SkipToMainLink />
16
+ * <Header />
17
+ * <Main>
18
+ * <h1>Page title</h1>
19
+ * </Main>
20
+ * ```
21
+ */
22
+ declare const Main: ({ className, ...props }: ComponentProps<"main">) => import("react").JSX.Element;
7
23
  //#endregion
8
24
  export { Main };
package/dist/main.js CHANGED
@@ -1 +1 @@
1
- import{t as e}from"./cx-IiQEAKf5.js";import{jsx as t}from"react/jsx-runtime";const n=({className:n,...r})=>t(`main`,{...r,"data-slot":`main`,id:`main`,tabIndex:-1,className:e(`focus:outline-hidden`,n)});n.displayName=`Main`;export{n as Main};
1
+ import{t as e}from"./cx-IiQEAKf5.js";import{jsx as t}from"react/jsx-runtime";const n=({className:n,...r})=>t(`main`,{...r,"data-slot":`main`,id:`main`,tabIndex:-1,className:e(`focus:outline-hidden`,n)});export{n as Main};
@@ -284,6 +284,23 @@ MARK: DARK HICON DEFS
284
284
  --color-selected-menu-item: var(--color-accent-50);
285
285
  --color-active-selected-menu-item: var(--color-accent-100);
286
286
 
287
+ /* Chart series tokens — dark-high-contrast picks validated against the card
288
+ surface (#121212): CVD adjacency (worst ΔE 9.6), normal-vision floor
289
+ (15.1), chroma, and contrast (6.76:1–12.23:1, zero warns) all pass. The
290
+ standard dark lightness band (L ≤ 0.67) is unsatisfiable by construction
291
+ in this theme — its ramps are bimodal around the band, and every in-band
292
+ step fails 3:1 contrast — so these deliberately brighter marks are the
293
+ correct high-contrast trade-off. */
294
+ --color-chart-1: var(--color-blue-300);
295
+ --color-chart-2: var(--color-green-300);
296
+ --color-chart-3: var(--color-pink-600);
297
+ --color-chart-4: var(--color-red-300);
298
+ --color-chart-5: var(--color-teal-300);
299
+ --color-chart-6: var(--color-orange-300);
300
+ --color-chart-7: var(--color-violet-300);
301
+ --color-chart-8: var(--color-yellow-300);
302
+ --color-chart-other: var(--color-neutral-500);
303
+
287
304
  --text-color-strong: var(--color-black);
288
305
  --text-color-body: var(--color-neutral-950);
289
306
  --text-color-muted: --alpha(var(--color-black) / 0.75);
@@ -313,6 +313,19 @@ MARK: DARK DEFS
313
313
  --color-card-border-muted: var(--color-neutral-200);
314
314
  --color-separator: --alpha(var(--color-gray-600) / 0.2);
315
315
 
316
+ /* Chart series tokens — dark picks validated against the dark card surface
317
+ (neutral-100). Dark ramps mirror light (step N = light step 1000−N), so each
318
+ slot resolves to the same color as its light twin while staying on-token. */
319
+ --color-chart-1: var(--color-blue-500);
320
+ --color-chart-2: var(--color-green-300);
321
+ --color-chart-3: var(--color-pink-500);
322
+ --color-chart-4: var(--color-red-400);
323
+ --color-chart-5: var(--color-teal-400);
324
+ --color-chart-6: var(--color-orange-400);
325
+ --color-chart-7: var(--color-violet-500);
326
+ --color-chart-8: var(--color-yellow-300);
327
+ --color-chart-other: var(--color-neutral-500);
328
+
316
329
  --text-color-strong: #fff;
317
330
  --text-color-body: --alpha(#fff / 0.7);
318
331
  --text-color-muted: --alpha(#fff / 0.5);
@@ -283,6 +283,21 @@ MARK: LIGHT HICON DEFS
283
283
  --color-selected-menu-item: var(--color-accent-50);
284
284
  --color-active-selected-menu-item: var(--color-accent-100);
285
285
 
286
+ /* Chart series tokens — light-high-contrast picks validated against the white
287
+ card surface: all gates pass (worst adjacent CVD ΔE 11.6, normal-vision
288
+ floor 18.3, all slots ≥ 3.65:1). Pink and teal use the 300 step here (the
289
+ only steps clearing the chroma floor and adjacency gates in this theme's
290
+ compressed ramps); every other slot matches the base light picks. */
291
+ --color-chart-1: var(--color-blue-500);
292
+ --color-chart-2: var(--color-green-700);
293
+ --color-chart-3: var(--color-pink-300);
294
+ --color-chart-4: var(--color-red-600);
295
+ --color-chart-5: var(--color-teal-300);
296
+ --color-chart-6: var(--color-orange-600);
297
+ --color-chart-7: var(--color-violet-500);
298
+ --color-chart-8: var(--color-yellow-700);
299
+ --color-chart-other: var(--color-neutral-500);
300
+
286
301
  --text-color-strong: var(--color-black);
287
302
  --text-color-body: var(--color-neutral-950);
288
303
  --text-color-muted: --alpha(var(--color-black) / 0.75);
package/dist/mantle.css CHANGED
@@ -260,6 +260,21 @@ MARK: THEME
260
260
  --ring-color-focus-danger: var(--ring-color-focus-danger);
261
261
  --ring-color-focus-warning: var(--ring-color-focus-warning);
262
262
  --ring-color-focus-success: var(--ring-color-focus-success);
263
+
264
+ /* Chart series tokens — an ordered categorical palette for data visualization.
265
+ Each theme file picks the ramp step that passes the palette validation gates
266
+ (CVD-safe adjacency, normal-vision floor, >= 3:1 contrast on the card surface)
267
+ for that theme. Assign slots to series in order and never re-assign a series'
268
+ slot when others are filtered out; series beyond 8 use --color-chart-other. */
269
+ --color-chart-1: var(--color-chart-1);
270
+ --color-chart-2: var(--color-chart-2);
271
+ --color-chart-3: var(--color-chart-3);
272
+ --color-chart-4: var(--color-chart-4);
273
+ --color-chart-5: var(--color-chart-5);
274
+ --color-chart-6: var(--color-chart-6);
275
+ --color-chart-7: var(--color-chart-7);
276
+ --color-chart-8: var(--color-chart-8);
277
+ --color-chart-other: var(--color-chart-other);
263
278
  }
264
279
 
265
280
  /**
@@ -348,6 +363,20 @@ MARK: LIGHT DEFS
348
363
  --color-selected-menu-item: --alpha(var(--color-accent-500) / 0.1);
349
364
  --color-active-selected-menu-item: --alpha(var(--color-accent-500) / 0.15);
350
365
 
366
+ /* Chart series tokens — light picks validated against the white card surface:
367
+ worst adjacent CVD ΔE 14.0 (target ≥ 8), normal-vision floor 15.7 (≥ 15),
368
+ all slots ≥ 3:1 contrast. Semantic ramps (sky/emerald/rose/amber/purple) are
369
+ deliberately excluded so a series never impersonates a status color. */
370
+ --color-chart-1: var(--color-blue-500);
371
+ --color-chart-2: var(--color-green-700);
372
+ --color-chart-3: var(--color-pink-500);
373
+ --color-chart-4: var(--color-red-600);
374
+ --color-chart-5: var(--color-teal-600);
375
+ --color-chart-6: var(--color-orange-600);
376
+ --color-chart-7: var(--color-violet-500);
377
+ --color-chart-8: var(--color-yellow-700);
378
+ --color-chart-other: var(--color-neutral-500);
379
+
351
380
  --text-color-strong: var(--color-neutral-950);
352
381
  --text-color-body: --alpha(var(--color-neutral-950) / 0.75);
353
382
  --text-color-muted: --alpha(var(--color-neutral-950) / 0.6);
@@ -1,7 +1,21 @@
1
- import { t as WithAsChild } from "./as-child-CYEVu1WY.js";
1
+ import { n as WithAsChild } from "./as-child-D23mGo4f.js";
2
2
  import { ComponentProps } from "react";
3
3
  //#region src/components/media-object/media-object.d.ts
4
4
  type Props = ComponentProps<"div"> & WithAsChild;
5
+ /**
6
+ * The media object is an image/icon (media) to the left, with descriptive
7
+ * content (title and subtitle/description) to the right. This is the root
8
+ * component of the media object.
9
+ */
10
+ declare const Root: ({ asChild, className, children, style, ref }: Props) => import("react").JSX.Element;
11
+ /**
12
+ * The container for an image or icon to display in the media slot of the media object.
13
+ */
14
+ declare const Media: ({ asChild, className, children, style, ref }: Props) => import("react").JSX.Element;
15
+ /**
16
+ * The container for the content slot of a media object.
17
+ */
18
+ declare const Content: ({ asChild, className, children, style, ref }: Props) => import("react").JSX.Element;
5
19
  /**
6
20
  * A small, reusable layout primitive for "image/icon on one side,
7
21
  * descriptive content on the other" — the foundational
@@ -81,7 +95,7 @@ declare const MediaObject: {
81
95
  * </MediaObject.Root>
82
96
  * ```
83
97
  */
84
- readonly Root: import("react").ForwardRefExoticComponent<Omit<Props, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
98
+ readonly Root: typeof Root;
85
99
  /**
86
100
  * The container for an image or icon to display in the media slot of the media object.
87
101
  *
@@ -99,7 +113,7 @@ declare const MediaObject: {
99
113
  * </MediaObject.Root>
100
114
  * ```
101
115
  */
102
- readonly Media: import("react").ForwardRefExoticComponent<Omit<Props, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
116
+ readonly Media: typeof Media;
103
117
  /**
104
118
  * The container for the content slot of a media object.
105
119
  *
@@ -117,7 +131,7 @@ declare const MediaObject: {
117
131
  * </MediaObject.Root>
118
132
  * ```
119
133
  */
120
- readonly Content: import("react").ForwardRefExoticComponent<Omit<Props, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
134
+ readonly Content: typeof Content;
121
135
  };
122
136
  //#endregion
123
137
  export { MediaObject };
@@ -1 +1 @@
1
- import{t as e}from"./cx-IiQEAKf5.js";import{t}from"./slot-DmPrjM7N.js";import{forwardRef as n}from"react";import{jsx as r}from"react/jsx-runtime";const i=n(({asChild:n=!1,className:i,children:a,style:o},s)=>r(n?t:`div`,{ref:s,"data-slot":`media-object`,className:e(`flex gap-4`,i),style:o,children:a}));i.displayName=`MediaObject`;const a=n(({asChild:n=!1,className:i,children:a,style:o},s)=>r(n?t:`div`,{ref:s,"data-slot":`media-object-media`,className:e(`shrink-0 leading-none`,i),style:o,children:a}));a.displayName=`MediaObjectMedia`;const o=n(({asChild:n=!1,className:i,children:a,style:o},s)=>r(n?t:`div`,{ref:s,"data-slot":`media-object-content`,className:e(`min-w-0 flex-1`,i),style:o,children:a}));o.displayName=`MediaObject.Content`;const s={Root:i,Media:a,Content:o};export{s as MediaObject};
1
+ import{t as e}from"./cx-IiQEAKf5.js";import{t}from"./slot-CDk0Bb9z.js";import{jsx as n}from"react/jsx-runtime";const r={Root:({asChild:r=!1,className:i,children:a,style:o,ref:s})=>n(r?t:`div`,{ref:s,"data-slot":`media-object`,className:e(`flex gap-4`,i),style:o,children:a}),Media:({asChild:r=!1,className:i,children:a,style:o,ref:s})=>n(r?t:`div`,{ref:s,"data-slot":`media-object-media`,className:e(`shrink-0 leading-none`,i),style:o,children:a}),Content:({asChild:r=!1,className:i,children:a,style:o,ref:s})=>n(r?t:`div`,{ref:s,"data-slot":`media-object-content`,className:e(`min-w-0 flex-1`,i),style:o,children:a})};export{r as MediaObject};