@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/field.d.ts CHANGED
@@ -1,8 +1,10 @@
1
- import { t as WithAsChild } from "./as-child-CYEVu1WY.js";
2
- import { t as ButtonIntent } from "./intents-DdSKSj1c.js";
3
- import { n as IconButtonAppearance, r as IconButtonProps } from "./icon-button-BvQvT790.js";
4
- import { a as ValidationState, c as parseValidation, i as ValidationProp, l as resolveValidation, n as ParsedValidation, o as WithValidation, r as Validation, s as isAriaInvalid, t as AriaInvalid } from "./validation-7QeiTFwl.js";
5
- import { t as Slot } from "./index-Rv8RL7xy.js";
1
+ import { n as WithAsChild } from "./as-child-D23mGo4f.js";
2
+ import { t as ButtonIntent } from "./button-DdSKSj1c.js";
3
+ import { n as IconButtonProps, r as IconButtonAppearance } from "./button-C7vAl6lS.js";
4
+ import { a as ValidationState, c as parseValidation, i as ValidationProp, l as resolveValidation, n as ParsedValidation, o as WithValidation, r as Validation, s as isAriaInvalid, t as AriaInvalid } from "./field-7QeiTFwl.js";
5
+ import { t as Label } from "./label-C6YH9skg.js";
6
+ import { t as Popover } from "./popover-CE4OlWkd.js";
7
+ import { t as Slot } from "./slot-BtwKJTLq.js";
6
8
  import { ComponentProps, ReactElement, ReactNode } from "react";
7
9
  //#region src/components/field/field-context.d.ts
8
10
  /**
@@ -43,6 +45,333 @@ type FieldControlAriaProps = {
43
45
  type FieldErrorMessage = string | null | undefined | false;
44
46
  //#endregion
45
47
  //#region src/components/field/field.d.ts
48
+ /**
49
+ * Renders a semantic `<fieldset>` for grouping related controls under a
50
+ * single accessible name. Resets the default browser fieldset chrome
51
+ * (border, padding, `min-width` quirk) so it composes cleanly with
52
+ * `Field.Legend` and `Field.Group`. Always renders a real `<fieldset>` so
53
+ * the grouping semantics cannot be accidentally removed.
54
+ *
55
+ * Reach for `Field.Set` when the grouping carries semantic weight — most
56
+ * commonly a `RadioGroup` (where the legend names the question the radios
57
+ * answer) or a set of related checkboxes. For laying out unrelated fields
58
+ * with consistent spacing, prefer `Field.Group` on its own.
59
+ *
60
+ * @see https://mantle.ngrok.com/components/forms/field
61
+ *
62
+ * @example
63
+ * ```tsx
64
+ * <Field.Set>
65
+ * <Field.Legend>Notification frequency</Field.Legend>
66
+ * <RadioGroup.Root name="frequency" defaultValue="daily">
67
+ * <RadioGroup.Item value="daily" id="freq-daily">…</RadioGroup.Item>
68
+ * <RadioGroup.Item value="weekly" id="freq-weekly">…</RadioGroup.Item>
69
+ * </RadioGroup.Root>
70
+ * </Field.Set>
71
+ * ```
72
+ */
73
+ declare const FieldSet: ({ className, ref, ...props }: ComponentProps<"fieldset">) => import("react").JSX.Element;
74
+ /**
75
+ * The caption for a `Field.Set`. Always renders a semantic `<legend>` styled
76
+ * to match the `Label` component so a fieldset reads like a section header,
77
+ * and gives screen readers an accessible name for the surrounding group
78
+ * (e.g. "Notification frequency, group, Daily").
79
+ *
80
+ * **Spacing.** Has a default `mb-1.5` so the legend sits 6px above the next
81
+ * sibling — matching the figma. We use a margin (not the parent `Field.Set`'s
82
+ * flex `gap`) because `<legend>` has special browser rendering inside a
83
+ * `<fieldset>` that ignores the parent's flex `gap`. Override the default
84
+ * with any `mb-*` utility on `Field.Legend`.
85
+ *
86
+ * @see https://mantle.ngrok.com/components/forms/field
87
+ *
88
+ * @example
89
+ * ```tsx
90
+ * <Field.Set>
91
+ * <Field.Legend>Notification frequency</Field.Legend>
92
+ * <RadioGroup.Root name="frequency" defaultValue="daily">
93
+ * <RadioGroup.Item value="daily" id="freq-daily">…</RadioGroup.Item>
94
+ * <RadioGroup.Item value="weekly" id="freq-weekly">…</RadioGroup.Item>
95
+ * </RadioGroup.Root>
96
+ * </Field.Set>
97
+ * ```
98
+ */
99
+ declare const Legend: ({ className, ref, ...props }: ComponentProps<"legend">) => import("react").JSX.Element;
100
+ /**
101
+ * Caption for a `Field.Item`. Renders the Mantle `Label` with the same
102
+ * `htmlFor`, click-to-focus, disabled, and typography behavior — but inside a
103
+ * `Field.Item`, the label-to-control association is automatic: `Field.Item`
104
+ * generates a stable control id, `Field.Control` splats that id onto its
105
+ * focusable child, and `Field.Label` consumes the same id as the default
106
+ * `htmlFor`. The required `name` on `Field.Item` is the single source of truth
107
+ * for the control's form name — no matching `htmlFor` / `id` pair, no separate
108
+ * `useId()` call.
109
+ *
110
+ * Pass an explicit `htmlFor` to opt out — for example when the focusable
111
+ * element is rendered outside of `Field.Control` and the auto-generated id
112
+ * never lands on it.
113
+ *
114
+ * @see https://mantle.ngrok.com/components/forms/field
115
+ *
116
+ * @example
117
+ * ```tsx
118
+ * // htmlFor is wired automatically from Field.Item's name.
119
+ * <Field.Item name="apiKey">
120
+ * <Field.Label>API key</Field.Label>
121
+ * <Field.Control>
122
+ * <Input />
123
+ * </Field.Control>
124
+ * </Field.Item>
125
+ *
126
+ * // Opt out with an explicit htmlFor when needed.
127
+ * <Field.Item name="legacy">
128
+ * <Field.Label htmlFor="legacy-control">Legacy field</Field.Label>
129
+ * <input id="legacy-control" />
130
+ * </Field.Item>
131
+ * ```
132
+ */
133
+ declare const FieldLabel: ({ htmlFor, ref, ...props }: ComponentProps<typeof Label>) => import("react").JSX.Element;
134
+ /**
135
+ * Static, label-styled text for a `Field.Item` row that does **not** caption a
136
+ * focusable form control. Renders a `<p>` (not a `<label>`) with the same
137
+ * typography as `Field.Label`, so a read-only row inside a sheet or details
138
+ * panel composes cleanly next to real form fields without misrepresenting
139
+ * itself as a control caption.
140
+ *
141
+ * **When to use**
142
+ * - A `Field.Item` row that displays a derived or system-managed value
143
+ * (owner, created-at, computed status) where there is no `<input>`,
144
+ * `<select>`, `<button>`, or other focusable target to label.
145
+ * - Read-only summary rows inside a sheet or detail panel that should
146
+ * visually align with sibling `Field.Item`s but have no editable control.
147
+ * - Anywhere you would otherwise hand-roll a `<p>` styled to mimic
148
+ * `Field.Label` typography — prefer this so intent is explicit at the call site.
149
+ *
150
+ * **When not to use**
151
+ * - The row has a focusable control (input, select, checkbox, switch,
152
+ * button trigger). Use `Field.Label` so the click-to-focus and
153
+ * accessible-name association are wired correctly.
154
+ * - For body copy, section headings, or any text whose typography happens
155
+ * to look similar by accident — use the appropriate heading or `<p>`
156
+ * directly. `Field.LabelText` exists specifically to slot into the
157
+ * `Field.Label` position of a `Field.Item`.
158
+ *
159
+ * @see https://mantle.ngrok.com/components/forms/field
160
+ *
161
+ * @example
162
+ * ```tsx
163
+ * <Field.Item name="owner">
164
+ * <Field.LabelText>Owner</Field.LabelText>
165
+ * <CredentialOwnerCard owner={owner} />
166
+ * <Field.Description>The user or service user that owns this API key.</Field.Description>
167
+ * </Field.Item>
168
+ * ```
169
+ */
170
+ declare const LabelText: ({ asChild, className, ref, ...props }: ComponentProps<"p"> & WithAsChild) => import("react").JSX.Element;
171
+ /**
172
+ * Horizontal layout container for the label area of a field. Aligns a
173
+ * `<Field.Label>` (which may contain `Field.Optional`) with adjacent affordances
174
+ * like a help-icon `Popover.Trigger` on a shared center line with a tight
175
+ * `gap-1`. Center-alignment is used (not baseline) so SVG icon buttons —
176
+ * which have no text baseline — sit visually centered next to the label
177
+ * text rather than dropping to the box bottom.
178
+ *
179
+ * Use this when the label needs sibling decorations that can't live inside
180
+ * the `<Field.Label>` itself (e.g. an interactive help button — clicking inside a
181
+ * `<label>` would forward focus to the associated control). For a label
182
+ * with only an `(Optional)` suffix, place `Field.Optional` directly inside
183
+ * the `<Field.Label>` instead — no `LabelRow` needed.
184
+ *
185
+ * @see https://mantle.ngrok.com/components/forms/field
186
+ *
187
+ * @example
188
+ * ```tsx
189
+ * <Field.Group>
190
+ * <Field.Item name="apiKey">
191
+ * <Field.LabelRow>
192
+ * <Field.Label>
193
+ * API key <Field.Optional />
194
+ * </Field.Label>
195
+ * <Field.Help>
196
+ * <Field.HelpTrigger label="What is an API key?" />
197
+ * <Field.HelpContent>Copy this from the dashboard.</Field.HelpContent>
198
+ * </Field.Help>
199
+ * </Field.LabelRow>
200
+ * <Field.Control>
201
+ * <Input />
202
+ * </Field.Control>
203
+ * <Field.Errors messages={["API key is required."]} />
204
+ * <Field.Description>You can find this in the ngrok dashboard.</Field.Description>
205
+ * </Field.Item>
206
+ * </Field.Group>
207
+ * ```
208
+ */
209
+ declare const LabelRow: ({ asChild, className, ref, ...props }: ComponentProps<"div"> & WithAsChild) => import("react").JSX.Element;
210
+ /**
211
+ * Props for the default help popover trigger. A contextual label is required
212
+ * so repeated help affordances do not all share the same accessible name.
213
+ */
214
+ type FieldHelpTriggerProps = Partial<Omit<IconButtonProps, "appearance" | "icon" | "intent" | "label">> & Pick<IconButtonProps, "label"> & {
215
+ /**
216
+ * The visual style of the trigger button. Optional here —
217
+ * `Field.HelpTrigger` defaults to `"ghost"` so the help affordance reads
218
+ * as subtle metadata next to the label.
219
+ *
220
+ * @default "ghost"
221
+ */
222
+ appearance?: IconButtonAppearance;
223
+ /**
224
+ * The icon to render inside the trigger button. Defaults to a Phosphor
225
+ * `QuestionIcon` so the most common case only needs a contextual label.
226
+ */
227
+ icon?: ReactNode;
228
+ /**
229
+ * The tone of the trigger button. Optional here — `Field.HelpTrigger`
230
+ * defaults to `"neutral"` because opening contextual help is a routine
231
+ * action.
232
+ *
233
+ * @default "neutral"
234
+ */
235
+ intent?: ButtonIntent;
236
+ };
237
+ /**
238
+ * The trigger for a `Field.Help` popover — a `Popover.Trigger` wired to a
239
+ * ghost-appearance `IconButton` with a default Phosphor `QuestionIcon`.
240
+ * Requires a contextual screen-reader label, and accepts `icon` or other
241
+ * `IconButton` props for visual customization.
242
+ *
243
+ * Pre-styled with `text-body` (matching the figma) so the icon reads as
244
+ * subtle metadata at rest; `IconButton`'s ghost `hover:text-strong` still
245
+ * brightens it on interaction. Carries a default `-my-0.5` so the 24px
246
+ * `xs` button keeps a full click target while contributing only 20px to
247
+ * the `Field.LabelRow` flex line — matching the label's text line-height
248
+ * so the label text is not pushed off-center.
249
+ *
250
+ * @see https://mantle.ngrok.com/components/forms/field
251
+ *
252
+ * @example
253
+ * ```tsx
254
+ * <Field.Group>
255
+ * <Field.Item name="apiKey">
256
+ * <Field.LabelRow>
257
+ * <Field.Label>
258
+ * API key <Field.Optional />
259
+ * </Field.Label>
260
+ * <Field.Help>
261
+ * <Field.HelpTrigger label="What is an API key?" />
262
+ * <Field.HelpContent>Copy this from the dashboard.</Field.HelpContent>
263
+ * </Field.Help>
264
+ * </Field.LabelRow>
265
+ * <Field.Control>
266
+ * <Input />
267
+ * </Field.Control>
268
+ * <Field.Errors messages={["API key is required."]} />
269
+ * <Field.Description>You can find this in the ngrok dashboard.</Field.Description>
270
+ * </Field.Item>
271
+ * </Field.Group>
272
+ * ```
273
+ */
274
+ declare const HelpTrigger: ({ appearance, className, icon, intent, label, ref, size, type, ...props }: FieldHelpTriggerProps) => import("react").JSX.Element;
275
+ /**
276
+ * The popover body for a `Field.Help`. Wraps `Popover.Content` so all
277
+ * positioning / sizing options (`side`, `align`, `preferredWidth`, etc.)
278
+ * work as expected, and overrides the inherited `data-slot` to
279
+ * `field-help-content` so consumers can target it as part of a `Field`
280
+ * subtree without colliding with other popovers.
281
+ *
282
+ * @see https://mantle.ngrok.com/components/forms/field
283
+ *
284
+ * @example
285
+ * ```tsx
286
+ * <Field.Group>
287
+ * <Field.Item name="apiKey">
288
+ * <Field.LabelRow>
289
+ * <Field.Label>
290
+ * API key <Field.Optional />
291
+ * </Field.Label>
292
+ * <Field.Help>
293
+ * <Field.HelpTrigger label="What is an API key?" />
294
+ * <Field.HelpContent>Copy this from the dashboard.</Field.HelpContent>
295
+ * </Field.Help>
296
+ * </Field.LabelRow>
297
+ * <Field.Control>
298
+ * <Input />
299
+ * </Field.Control>
300
+ * <Field.Errors messages={["API key is required."]} />
301
+ * <Field.Description>You can find this in the ngrok dashboard.</Field.Description>
302
+ * </Field.Item>
303
+ * </Field.Group>
304
+ * ```
305
+ */
306
+ declare const HelpContent: ({ ref, ...props }: ComponentProps<typeof Popover.Content>) => import("react").JSX.Element;
307
+ /**
308
+ * Inline "(Optional)" suffix to mark a field as optional. Defaults to the
309
+ * literal string `(Optional)` so the common case is `<Field.Optional />` with
310
+ * no children — pass children to translate or replace the text. Renders a
311
+ * `<span>` in `text-muted` at `text-sm` / `font-normal` so it reads as
312
+ * secondary metadata next to the bolder Label text.
313
+ *
314
+ * Place inside the `<Field.Label>` so screen readers announce it as part of the
315
+ * accessible name (e.g. "Email, Optional, edit text"). Pair with a small
316
+ * `gap` on the label's flex layout, or rely on the natural inline spacing.
317
+ *
318
+ * @see https://mantle.ngrok.com/components/forms/field
319
+ *
320
+ * @example
321
+ * ```tsx
322
+ * <Field.Group>
323
+ * <Field.Item name="apiKey">
324
+ * <Field.LabelRow>
325
+ * <Field.Label>
326
+ * API key <Field.Optional />
327
+ * </Field.Label>
328
+ * <Field.Help>
329
+ * <Field.HelpTrigger label="What is an API key?" />
330
+ * <Field.HelpContent>Copy this from the dashboard.</Field.HelpContent>
331
+ * </Field.Help>
332
+ * </Field.LabelRow>
333
+ * <Field.Control>
334
+ * <Input />
335
+ * </Field.Control>
336
+ * <Field.Errors messages={["API key is required."]} />
337
+ * <Field.Description>You can find this in the ngrok dashboard.</Field.Description>
338
+ * </Field.Item>
339
+ * </Field.Group>
340
+ * ```
341
+ */
342
+ declare const Optional: ({ asChild, children, className, ref, ...props }: ComponentProps<"span"> & WithAsChild) => import("react").JSX.Element;
343
+ /**
344
+ * Layout container that stacks multiple `Field.Item`s vertically with
345
+ * `gap-4` between them. This is the default way to compose multiple fields
346
+ * — most forms only need a `Field.Group` of `Field.Item`s. Reach for
347
+ * `Field.Set` + `Field.Legend` only when the grouping carries semantic
348
+ * weight (e.g. a `RadioGroup` or related checkboxes).
349
+ *
350
+ * @see https://mantle.ngrok.com/components/forms/field
351
+ *
352
+ * @example
353
+ * ```tsx
354
+ * <Field.Group>
355
+ * <Field.Item name="apiKey">
356
+ * <Field.LabelRow>
357
+ * <Field.Label>
358
+ * API key <Field.Optional />
359
+ * </Field.Label>
360
+ * <Field.Help>
361
+ * <Field.HelpTrigger label="What is an API key?" />
362
+ * <Field.HelpContent>Copy this from the dashboard.</Field.HelpContent>
363
+ * </Field.Help>
364
+ * </Field.LabelRow>
365
+ * <Field.Control>
366
+ * <Input />
367
+ * </Field.Control>
368
+ * <Field.Errors messages={["API key is required."]} />
369
+ * <Field.Description>You can find this in the ngrok dashboard.</Field.Description>
370
+ * </Field.Item>
371
+ * </Field.Group>
372
+ * ```
373
+ */
374
+ declare const Group: ({ asChild, className, ref, ...props }: ComponentProps<"div"> & WithAsChild) => import("react").JSX.Element;
46
375
  /**
47
376
  * A single form field — `Label`, a control (`Input`, `Select`, `Checkbox`,
48
377
  * etc.), and any `Field.Description`, `Field.Errors`, or `Field.ErrorList` siblings stacked
@@ -95,10 +424,11 @@ type FieldItemProps = ComponentProps<"div"> & WithAsChild & WithValidation & {
95
424
  */
96
425
  name: string;
97
426
  };
427
+ declare const Item: ({ asChild, children, className, name, ref, validation: validationProp, ...props }: FieldItemProps) => import("react").JSX.Element;
98
428
  type FieldControlSlotProps = Omit<ComponentProps<typeof Slot>, "aria-describedby" | "aria-errormessage" | "aria-invalid" | "children">;
99
429
  /**
100
430
  * Element-child form of `Field.Control`. Renders via `Slot`, so it accepts
101
- * any HTML/Slot props and a forwarded ref — those land on the single child
431
+ * any HTML/Slot props, including `ref` — those land on the single child
102
432
  * element along with the generated ARIA props.
103
433
  */
104
434
  type FieldControlElementProps = FieldControlSlotProps & {
@@ -122,6 +452,147 @@ type FieldControlRenderProps = {
122
452
  */
123
453
  children: (props: FieldControlAriaProps) => ReactNode;
124
454
  } & { [K in keyof FieldControlSlotProps]?: never; };
455
+ /**
456
+ * Props for `Field.Control`. A discriminated union over how the caller
457
+ * supplies the focusable element:
458
+ *
459
+ * - `FieldControlElementProps` — pass a single React element child and
460
+ * `Field.Control` clones the generated ARIA props onto it via `Slot`.
461
+ * Accepts the full Slot prop surface, including `ref`.
462
+ * - `FieldControlRenderProps` — pass a render function that receives the
463
+ * ARIA props and places them on a control of the caller's choosing. The
464
+ * caller owns the rendered element, so DOM/Slot props and `ref` are
465
+ * excluded from this variant at the type level.
466
+ *
467
+ * @example
468
+ * ```tsx
469
+ * // Element form — Slot splats id, name, and ARIA props onto <Input/>
470
+ * <Field.Item name="email">
471
+ * <Field.Control>
472
+ * <Input type="email" />
473
+ * </Field.Control>
474
+ * </Field.Item>
475
+ *
476
+ * // Render-prop form — caller spreads the props onto its own element
477
+ * <Field.Item name="acceptTerms">
478
+ * <Field.Control>
479
+ * {(controlProps) => (
480
+ * <label>
481
+ * Accept terms
482
+ * <input type="checkbox" {...controlProps} />
483
+ * </label>
484
+ * )}
485
+ * </Field.Control>
486
+ * </Field.Item>
487
+ * ```
488
+ */
489
+ type FieldControlProps = FieldControlElementProps | FieldControlRenderProps;
490
+ /**
491
+ * Applies `Field.Item` description, error, and validation state to a single
492
+ * focusable control. It always behaves like an `asChild` slot: pass one child
493
+ * element to receive the generated ARIA props, or use a function child to
494
+ * place those props manually. Mantle compound controls that consume
495
+ * `FieldControlContext` can be wrapped at the root when their docs show that
496
+ * composition; otherwise use the render-prop form to place the generated props
497
+ * on the actual focusable element.
498
+ *
499
+ * `Field.Item` owns the full control contract — `id`, `name`, `aria-*`, and
500
+ * `validation` all flow down from the surrounding `Field.Item` and overwrite
501
+ * anything passed on the child. To override these values, set them on
502
+ * `Field.Item` itself (e.g. `<Field.Item validation="error">`); to opt out of
503
+ * the contract entirely, render your control without `Field.Control`.
504
+ *
505
+ * @see https://mantle.ngrok.com/components/forms/field
506
+ *
507
+ * @example
508
+ * ```tsx
509
+ * <Field.Group>
510
+ * <Field.Item name="apiKey">
511
+ * <Field.LabelRow>
512
+ * <Field.Label>
513
+ * API key <Field.Optional />
514
+ * </Field.Label>
515
+ * <Field.Help>
516
+ * <Field.HelpTrigger label="What is an API key?" />
517
+ * <Field.HelpContent>Copy this from the dashboard.</Field.HelpContent>
518
+ * </Field.Help>
519
+ * </Field.LabelRow>
520
+ * <Field.Control>
521
+ * <Input />
522
+ * </Field.Control>
523
+ * <Field.Errors messages={["API key is required."]} />
524
+ * <Field.Description>You can find this in the ngrok dashboard.</Field.Description>
525
+ * </Field.Item>
526
+ * </Field.Group>
527
+ * ```
528
+ */
529
+ declare const Control: ({ children, ref, ...props }: FieldControlProps) => import("react").JSX.Element;
530
+ /**
531
+ * Helper / hint text. Renders a `<p>` in the muted body color so it reads
532
+ * as secondary to the bolder content above it. Use inside `Field.Item`, below
533
+ * the control, to clarify expected format or constraints for that single field.
534
+ *
535
+ * **At most one per `Field.Item`.** `Field.Item` owns a single description
536
+ * slot ID and applies it via context, so a second `Field.Description` would
537
+ * duplicate that `id` in the DOM.
538
+ *
539
+ * **Auto-tighten.** When this description sits directly after rendered
540
+ * `Field.Errors` or `Field.ErrorList` output, the parent's `gap-1.5`
541
+ * collapses via a matching negative top margin so error list + helper read as
542
+ * one tight block. Pass any margin utility (`mt-1`, `mt-0`, etc.) to override
543
+ * — the rule's specificity is flattened to `(0,1,0)` so a single user class wins.
544
+ *
545
+ * @see https://mantle.ngrok.com/components/forms/field
546
+ *
547
+ * @example
548
+ * ```tsx
549
+ * <Field.Group>
550
+ * <Field.Item name="apiKey">
551
+ * <Field.LabelRow>
552
+ * <Field.Label>
553
+ * API key <Field.Optional />
554
+ * </Field.Label>
555
+ * <Field.Help>
556
+ * <Field.HelpTrigger label="What is an API key?" />
557
+ * <Field.HelpContent>Copy this from the dashboard.</Field.HelpContent>
558
+ * </Field.Help>
559
+ * </Field.LabelRow>
560
+ * <Field.Control>
561
+ * <Input />
562
+ * </Field.Control>
563
+ * <Field.Errors messages={["API key is required."]} />
564
+ * <Field.Description>You can find this in the ngrok dashboard.</Field.Description>
565
+ * </Field.Item>
566
+ * </Field.Group>
567
+ * ```
568
+ */
569
+ declare const Description: ({ asChild, className, ref, ...props }: Omit<ComponentProps<"p">, "id"> & WithAsChild) => import("react").JSX.Element;
570
+ /**
571
+ * A single error message list item for a field. Renders an `<li>` in
572
+ * `text-danger-600` so it stands out from a sibling `Field.Description`.
573
+ * Must be rendered inside a `Field.ErrorList`. Empty or blank children render
574
+ * nothing so message-less validator results do not produce empty list items.
575
+ *
576
+ * @see https://mantle.ngrok.com/components/forms/field
577
+ *
578
+ * @example
579
+ * ```tsx
580
+ * <Field.Group>
581
+ * <Field.Item name="username">
582
+ * <Field.Label>Username</Field.Label>
583
+ * <Field.Control>
584
+ * <Input />
585
+ * </Field.Control>
586
+ * <Field.ErrorList>
587
+ * <Field.ErrorItem>Must be at least 3 characters.</Field.ErrorItem>
588
+ * <Field.ErrorItem>Use letters, numbers, hyphens, or underscores.</Field.ErrorItem>
589
+ * </Field.ErrorList>
590
+ * <Field.Description>Pick something memorable.</Field.Description>
591
+ * </Field.Item>
592
+ * </Field.Group>
593
+ * ```
594
+ */
595
+ declare const FieldErrorItem: ({ children, className, ref, ...props }: ComponentProps<"li">) => import("react").JSX.Element | null;
125
596
  /**
126
597
  * Props for the `Field.Errors` convenience renderer. It owns its generated
127
598
  * children, so use `Field.ErrorList` / `Field.ErrorItem` directly when custom
@@ -134,6 +605,82 @@ type FieldErrorsProps = Omit<ComponentProps<"ul">, "children" | "id"> & {
134
605
  */
135
606
  messages?: readonly FieldErrorMessage[];
136
607
  };
608
+ /**
609
+ * Convenience renderer for string validation messages. Trims each message,
610
+ * filters empty values, and renders a semantic `Field.ErrorList` containing
611
+ * one `Field.ErrorItem` per remaining message.
612
+ *
613
+ * Accepts strings directly so product code can map any validation library's
614
+ * error shape into messages without coupling Mantle to that library.
615
+ * Deliberately does not support `asChild` because it owns the generated list
616
+ * items; use `Field.ErrorList` with `asChild` for custom list markup.
617
+ *
618
+ * **At most one per `Field.Item`.** `Field.Errors` renders a `Field.ErrorList`
619
+ * under the hood, and `Field.Item` owns a single errors slot ID. Use either
620
+ * `Field.Errors` *or* `Field.ErrorList` per item, not both, and pass multiple
621
+ * messages to one `Field.Errors` instead of rendering it twice.
622
+ *
623
+ * @see https://mantle.ngrok.com/components/forms/field
624
+ *
625
+ * @example
626
+ * ```tsx
627
+ * <Field.Group>
628
+ * <Field.Item name="apiKey">
629
+ * <Field.LabelRow>
630
+ * <Field.Label>
631
+ * API key <Field.Optional />
632
+ * </Field.Label>
633
+ * <Field.Help>
634
+ * <Field.HelpTrigger label="What is an API key?" />
635
+ * <Field.HelpContent>Copy this from the dashboard.</Field.HelpContent>
636
+ * </Field.Help>
637
+ * </Field.LabelRow>
638
+ * <Field.Control>
639
+ * <Input />
640
+ * </Field.Control>
641
+ * <Field.Errors messages={["API key is required."]} />
642
+ * <Field.Description>You can find this in the ngrok dashboard.</Field.Description>
643
+ * </Field.Item>
644
+ * </Field.Group>
645
+ * ```
646
+ */
647
+ declare const FieldErrors: ({ messages, ref, ...props }: FieldErrorsProps) => import("react").JSX.Element;
648
+ /**
649
+ * Wraps one or more `Field.ErrorItem` children in a semantic `<ul>` with
650
+ * `role="list"` so a list of validation errors is announced as a list by
651
+ * screen readers, including Safari/VoiceOver combinations that drop list
652
+ * semantics when list styling is removed. Renders nothing when no children are
653
+ * passed, or when all `Field.ErrorItem` children are empty.
654
+ *
655
+ * The list strips its default browser styling (`list-none`, `p-0`, `m-0`) and
656
+ * stacks items as a flex column with no gap so consecutive errors read as a
657
+ * single tight block.
658
+ *
659
+ * **At most one per `Field.Item`.** `Field.Item` owns a single errors slot ID
660
+ * and applies it via context. Use either `Field.ErrorList` *or* `Field.Errors`
661
+ * per item, not both, and put multiple `Field.ErrorItem` children inside the
662
+ * single list instead of rendering two `Field.ErrorList`s.
663
+ *
664
+ * @see https://mantle.ngrok.com/components/forms/field
665
+ *
666
+ * @example
667
+ * ```tsx
668
+ * <Field.Group>
669
+ * <Field.Item name="username">
670
+ * <Field.Label>Username</Field.Label>
671
+ * <Field.Control>
672
+ * <Input />
673
+ * </Field.Control>
674
+ * <Field.ErrorList>
675
+ * <Field.ErrorItem>Must be at least 3 characters.</Field.ErrorItem>
676
+ * <Field.ErrorItem>Use letters, numbers, hyphens, or underscores.</Field.ErrorItem>
677
+ * </Field.ErrorList>
678
+ * <Field.Description>Pick something memorable.</Field.Description>
679
+ * </Field.Item>
680
+ * </Field.Group>
681
+ * ```
682
+ */
683
+ declare const FieldErrorList: ({ asChild, children, className, ref, ...props }: Omit<ComponentProps<"ul">, "id"> & WithAsChild) => import("react").JSX.Element | null;
137
684
  /**
138
685
  * Compound component for semantic, accessible form fields. Composes a
139
686
  * `Field.Label`, control (`Input`, `Select`, etc.), `Field.Description`, and
@@ -214,7 +761,7 @@ declare const Field: {
214
761
  * </Field.Group>
215
762
  * ```
216
763
  */
217
- readonly Item: import("react").ForwardRefExoticComponent<Omit<FieldItemProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
764
+ readonly Item: typeof Item;
218
765
  /**
219
766
  * Applies generated field ARIA props and validation state to a single
220
767
  * focusable control. Accepts either a single React element child (cloned
@@ -254,7 +801,7 @@ declare const Field: {
254
801
  * </Field.Item>
255
802
  * ```
256
803
  */
257
- readonly Control: import("react").ForwardRefExoticComponent<(Omit<FieldControlElementProps, "ref"> | Omit<FieldControlRenderProps, "ref">) & import("react").RefAttributes<HTMLElement>>;
804
+ readonly Control: typeof Control;
258
805
  /**
259
806
  * Layout container that stacks multiple `Field.Item`s vertically.
260
807
  *
@@ -282,7 +829,7 @@ declare const Field: {
282
829
  * </Field.Group>
283
830
  * ```
284
831
  */
285
- readonly Group: import("react").ForwardRefExoticComponent<Omit<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & WithAsChild, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
832
+ readonly Group: typeof Group;
286
833
  /**
287
834
  * Semantic `<fieldset>` for related controls that share one accessible
288
835
  * name from `Field.Legend`.
@@ -300,7 +847,7 @@ declare const Field: {
300
847
  * </Field.Set>
301
848
  * ```
302
849
  */
303
- readonly Set: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").FieldsetHTMLAttributes<HTMLFieldSetElement>, HTMLFieldSetElement>, "ref"> & import("react").RefAttributes<HTMLFieldSetElement>>;
850
+ readonly Set: typeof FieldSet;
304
851
  /**
305
852
  * Caption for `Field.Set`. Renders a semantic `<legend>`.
306
853
  *
@@ -317,7 +864,7 @@ declare const Field: {
317
864
  * </Field.Set>
318
865
  * ```
319
866
  */
320
- readonly Legend: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLLegendElement>, HTMLLegendElement>, "ref"> & import("react").RefAttributes<HTMLLegendElement>>;
867
+ readonly Legend: typeof Legend;
321
868
  /**
322
869
  * The Mantle `Label`, exposed on `Field` for field composition. Inside a
323
870
  * `Field.Item`, `htmlFor` defaults to the same stable id that `Field.Control`
@@ -352,9 +899,7 @@ declare const Field: {
352
899
  * </Field.Group>
353
900
  * ```
354
901
  */
355
- readonly Label: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").DetailedHTMLProps<import("react").LabelHTMLAttributes<HTMLLabelElement>, HTMLLabelElement>, "ref"> & {
356
- disabled?: boolean;
357
- } & import("react").RefAttributes<HTMLLabelElement>, "ref"> & import("react").RefAttributes<HTMLLabelElement>>;
902
+ readonly Label: typeof FieldLabel;
358
903
  /**
359
904
  * Static, label-styled text for a `Field.Item` row that has no focusable
360
905
  * control to caption. Renders a `<p>` with the same typography as
@@ -376,7 +921,7 @@ declare const Field: {
376
921
  * </Field.Item>
377
922
  * ```
378
923
  */
379
- readonly LabelText: import("react").ForwardRefExoticComponent<Omit<import("react").ClassAttributes<HTMLParagraphElement> & import("react").HTMLAttributes<HTMLParagraphElement> & WithAsChild, "ref"> & import("react").RefAttributes<HTMLParagraphElement>>;
924
+ readonly LabelText: typeof LabelText;
380
925
  /**
381
926
  * Horizontal layout container for the label area of a field. Aligns a
382
927
  * `<Field.Label>` (which may contain `Field.Optional`) with adjacent affordances
@@ -406,7 +951,7 @@ declare const Field: {
406
951
  * </Field.Group>
407
952
  * ```
408
953
  */
409
- readonly LabelRow: import("react").ForwardRefExoticComponent<Omit<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & WithAsChild, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
954
+ readonly LabelRow: typeof LabelRow;
410
955
  /**
411
956
  * `Popover.Root` re-export for the help-affordance pattern. Pair with
412
957
  * `Field.HelpTrigger` and `Field.HelpContent` to drop a `?` button next to
@@ -466,29 +1011,7 @@ declare const Field: {
466
1011
  * </Field.Group>
467
1012
  * ```
468
1013
  */
469
- readonly HelpTrigger: import("react").ForwardRefExoticComponent<Partial<Omit<IconButtonProps, "appearance" | "icon" | "intent" | "label">> & Pick<IconButtonProps, "label"> & {
470
- /**
471
- * The visual style of the trigger button. Optional here —
472
- * `Field.HelpTrigger` defaults to `"ghost"` so the help affordance reads
473
- * as subtle metadata next to the label.
474
- *
475
- * @default "ghost"
476
- */
477
- appearance?: IconButtonAppearance;
478
- /**
479
- * The icon to render inside the trigger button. Defaults to a Phosphor
480
- * `QuestionIcon` so the most common case only needs a contextual label.
481
- */
482
- icon?: ReactNode;
483
- /**
484
- * The tone of the trigger button. Optional here — `Field.HelpTrigger`
485
- * defaults to `"neutral"` because opening contextual help is a routine
486
- * action.
487
- *
488
- * @default "neutral"
489
- */
490
- intent?: ButtonIntent;
491
- } & import("react").RefAttributes<HTMLButtonElement>>;
1014
+ readonly HelpTrigger: typeof HelpTrigger;
492
1015
  /**
493
1016
  * Body of a `Field.Help` popover. Re-exports `Popover.Content` so all
494
1017
  * positioning / sizing options (`side`, `align`, `preferredWidth`, etc.)
@@ -518,9 +1041,7 @@ declare const Field: {
518
1041
  * </Field.Group>
519
1042
  * ```
520
1043
  */
521
- readonly HelpContent: import("react").ForwardRefExoticComponent<Omit<Omit<import("@radix-ui/react-popover").PopoverContentProps & import("react").RefAttributes<HTMLDivElement>, "ref"> & {
522
- preferredWidth?: `max-w-${string}`;
523
- } & import("react").RefAttributes<HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
1044
+ readonly HelpContent: typeof HelpContent;
524
1045
  /**
525
1046
  * Inline "(Optional)" suffix to mark a field as optional. Default content
526
1047
  * is `(Optional)`; pass children to translate or replace it. Place inside
@@ -551,7 +1072,7 @@ declare const Field: {
551
1072
  * </Field.Group>
552
1073
  * ```
553
1074
  */
554
- readonly Optional: import("react").ForwardRefExoticComponent<Omit<import("react").ClassAttributes<HTMLSpanElement> & import("react").HTMLAttributes<HTMLSpanElement> & WithAsChild, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
1075
+ readonly Optional: typeof Optional;
555
1076
  /**
556
1077
  * Helper / hint text rendered below the control in the muted body color.
557
1078
  *
@@ -579,7 +1100,7 @@ declare const Field: {
579
1100
  * </Field.Group>
580
1101
  * ```
581
1102
  */
582
- readonly Description: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, "id"> & WithAsChild, "ref"> & import("react").RefAttributes<HTMLParagraphElement>>;
1103
+ readonly Description: typeof Description;
583
1104
  /**
584
1105
  * Convenience renderer for validation messages. Trims string messages,
585
1106
  * filters empty values, and renders a `Field.ErrorList` with one
@@ -609,7 +1130,7 @@ declare const Field: {
609
1130
  * </Field.Group>
610
1131
  * ```
611
1132
  */
612
- readonly Errors: import("react").ForwardRefExoticComponent<Omit<FieldErrorsProps, "ref"> & import("react").RefAttributes<HTMLUListElement>>;
1133
+ readonly Errors: typeof FieldErrors;
613
1134
  /**
614
1135
  * Wraps one or more `Field.ErrorItem` children in a semantic `<ul>`.
615
1136
  * Renders nothing when given no renderable children.
@@ -633,7 +1154,7 @@ declare const Field: {
633
1154
  * </Field.Group>
634
1155
  * ```
635
1156
  */
636
- readonly ErrorList: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLUListElement>, HTMLUListElement>, "id"> & WithAsChild, "ref"> & import("react").RefAttributes<HTMLUListElement>>;
1157
+ readonly ErrorList: typeof FieldErrorList;
637
1158
  /**
638
1159
  * A single error message list item for a field. Renders an `<li>` in
639
1160
  * `text-danger-600` and must be nested inside a `Field.ErrorList`.
@@ -657,7 +1178,7 @@ declare const Field: {
657
1178
  * </Field.Group>
658
1179
  * ```
659
1180
  */
660
- readonly ErrorItem: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>, "ref"> & import("react").RefAttributes<HTMLLIElement>>;
1181
+ readonly ErrorItem: typeof FieldErrorItem;
661
1182
  };
662
1183
  //#endregion
663
1184
  //#region src/components/field/field-error-messages.d.ts