@ngrok/mantle 0.79.3 → 0.80.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 (193) hide show
  1. package/dist/accordion.d.ts +169 -12
  2. package/dist/accordion.js +1 -1
  3. package/dist/agent.json +1 -1
  4. package/dist/alert-dialog.d.ts +496 -30
  5. package/dist/alert-dialog.js +1 -1
  6. package/dist/alert.d.ts +129 -9
  7. package/dist/alert.js +1 -1
  8. package/dist/anchor-_2meGDfj.js +1 -0
  9. package/dist/anchor.d.ts +2 -2
  10. package/dist/anchor.js +1 -1
  11. package/dist/as-child-D23mGo4f.d.ts +49 -0
  12. package/dist/badge.d.ts +44 -5
  13. package/dist/badge.js +1 -1
  14. package/dist/breadcrumb.d.ts +214 -14
  15. package/dist/breadcrumb.js +1 -1
  16. package/dist/button-5WsvzIQ6.js +1 -0
  17. package/dist/{button-DcXOWUYo.d.ts → button-BPMwa2jN.d.ts} +3 -3
  18. package/dist/button-D9n09xUg.js +1 -0
  19. package/dist/button.d.ts +3 -3
  20. package/dist/button.js +1 -1
  21. package/dist/calendar.d.ts +0 -3
  22. package/dist/calendar.js +1 -1
  23. package/dist/card.d.ts +146 -9
  24. package/dist/card.js +1 -1
  25. package/dist/centered-layout.d.ts +224 -8
  26. package/dist/centered-layout.js +1 -1
  27. package/dist/checkbox-Cq17y0-R.js +1 -0
  28. package/dist/checkbox.d.ts +12 -10
  29. package/dist/checkbox.js +1 -1
  30. package/dist/choice-Cc8dA5r8.js +1 -0
  31. package/dist/choice-Ct0KK8jw.d.ts +269 -0
  32. package/dist/choice.d.ts +1 -252
  33. package/dist/choice.js +1 -1
  34. package/dist/code-block.d.ts +270 -50
  35. package/dist/code-block.js +6 -6
  36. package/dist/code.d.ts +3 -2
  37. package/dist/code.js +1 -1
  38. package/dist/combobox.d.ts +190 -11
  39. package/dist/combobox.js +1 -1
  40. package/dist/command.d.ts +285 -81
  41. package/dist/command.js +1 -1
  42. package/dist/compose-refs-BdBMM9ga.js +1 -0
  43. package/dist/data-table.d.ts +33 -5
  44. package/dist/data-table.js +1 -1
  45. package/dist/description-list.d.ts +79 -6
  46. package/dist/description-list.js +1 -1
  47. package/dist/dialog-CQ2C6vkE.js +1 -0
  48. package/dist/dialog.d.ts +239 -18
  49. package/dist/dialog.js +1 -1
  50. package/dist/dropdown-menu-CSCDdA3K.js +1 -0
  51. package/dist/{dropdown-menu-DP_Ne9Mr.d.ts → dropdown-menu-CoyozLzy.d.ts} +170 -29
  52. package/dist/dropdown-menu.d.ts +2 -2
  53. package/dist/dropdown-menu.js +1 -1
  54. package/dist/empty.d.ts +1 -1
  55. package/dist/empty.js +1 -1
  56. package/dist/field.d.ts +596 -45
  57. package/dist/field.js +1 -1
  58. package/dist/flag.d.ts +0 -3
  59. package/dist/flag.js +1 -1
  60. package/dist/hooks.d.ts +3 -4
  61. package/dist/hooks.js +1 -1
  62. package/dist/hover-card.d.ts +54 -4
  63. package/dist/hover-card.js +1 -1
  64. package/dist/{icon-Cevjo93X.d.ts → icon-BDqpcZ-n.d.ts} +1 -1
  65. package/dist/icon-CGgMKpJg.js +1 -0
  66. package/dist/{icon-button-BvQvT790.d.ts → icon-button-C1AfGnQx.d.ts} +6 -60
  67. package/dist/icon-button-DiOhreJD.js +1 -0
  68. package/dist/icon.d.ts +2 -2
  69. package/dist/icon.js +1 -1
  70. package/dist/icons.d.ts +5 -13
  71. package/dist/icons.js +1 -1
  72. package/dist/{in-view-nkSOdED2.d.ts → in-view-DDEGUKDR.d.ts} +17 -9
  73. package/dist/index-B8mIWKIU.d.ts +211 -0
  74. package/dist/{index-Rv8RL7xy.d.ts → index-BtwKJTLq.d.ts} +1 -1
  75. package/dist/{index-BSAizFod.d.ts → index-C2jj8U4a.d.ts} +5 -5
  76. package/dist/index-CdPXa9h1.d.ts +1 -0
  77. package/dist/{index-D47aqlpz.d.ts → index-DA4ig3gj.d.ts} +1 -1
  78. package/dist/input-CVyAVbim.js +1 -0
  79. package/dist/{types-C19IR7jf.d.ts → input-DV9M6K4v.d.ts} +42 -2
  80. package/dist/input.d.ts +4 -55
  81. package/dist/input.js +1 -1
  82. package/dist/{label-v2-bv98k.d.ts → label-C6YH9skg.d.ts} +8 -6
  83. package/dist/label-D-D11mlp.js +1 -0
  84. package/dist/label.d.ts +1 -1
  85. package/dist/label.js +1 -1
  86. package/dist/list.d.ts +150 -6
  87. package/dist/list.js +1 -1
  88. package/dist/llms.txt +1 -1
  89. package/dist/main.d.ts +20 -4
  90. package/dist/main.js +1 -1
  91. package/dist/media-object.d.ts +27 -4
  92. package/dist/media-object.js +1 -1
  93. package/dist/multi-select.d.ts +312 -15
  94. package/dist/multi-select.js +1 -1
  95. package/dist/otp-input.d.ts +129 -5
  96. package/dist/otp-input.js +1 -1
  97. package/dist/pagination.d.ts +70 -6
  98. package/dist/pagination.js +1 -1
  99. package/dist/popover-CBMADtjV.js +1 -0
  100. package/dist/popover.d.ts +1 -181
  101. package/dist/popover.js +1 -1
  102. package/dist/primitive-CJRIlrLz.d.ts +31 -0
  103. package/dist/primitive-DCPHJsRs.js +1 -0
  104. package/dist/progress.js +1 -1
  105. package/dist/qr-code.d.ts +113 -5
  106. package/dist/qr-code.js +1 -1
  107. package/dist/radio-group.d.ts +128 -23
  108. package/dist/radio-group.js +1 -1
  109. package/dist/sandboxed-on-click.d.ts +2 -2
  110. package/dist/sandboxed-on-click.js +1 -1
  111. package/dist/select-SR_9-bxA.js +1 -0
  112. package/dist/select-idm1jy7y.d.ts +600 -0
  113. package/dist/select.d.ts +1 -1
  114. package/dist/select.js +1 -1
  115. package/dist/selectable-list.d.ts +252 -298
  116. package/dist/selectable-list.js +1 -1
  117. package/dist/separator-B5UmkVRL.d.ts +75 -0
  118. package/dist/separator-bpE_kooz.js +1 -0
  119. package/dist/separator.d.ts +1 -52
  120. package/dist/separator.js +1 -1
  121. package/dist/sheet.d.ts +295 -21
  122. package/dist/sheet.js +1 -1
  123. package/dist/skeleton-CsbUHbBA.js +1 -0
  124. package/dist/skeleton.d.ts +4 -7
  125. package/dist/skeleton.js +1 -1
  126. package/dist/skip-to-main-link.d.ts +24 -4
  127. package/dist/skip-to-main-link.js +1 -1
  128. package/dist/slot-CDk0Bb9z.js +1 -0
  129. package/dist/slot.d.ts +1 -1
  130. package/dist/slot.js +1 -1
  131. package/dist/{sort-BPX2Fk9t.js → sort-B_DDQcVD.js} +1 -1
  132. package/dist/split-button.d.ts +28 -13
  133. package/dist/split-button.js +1 -1
  134. package/dist/{svg-only-BFeFS1aa.d.ts → svg-only-CdI_v82i.d.ts} +1 -1
  135. package/dist/svg-only-d-nMCfAI.js +1 -0
  136. package/dist/switch.d.ts +9 -6
  137. package/dist/switch.js +1 -1
  138. package/dist/table-DUSvU_Jw.d.ts +875 -0
  139. package/dist/table-GDkapNFi.js +1 -0
  140. package/dist/table.d.ts +1 -1
  141. package/dist/table.js +1 -1
  142. package/dist/tabs.d.ts +135 -21
  143. package/dist/tabs.js +1 -1
  144. package/dist/text-area.d.ts +1 -1
  145. package/dist/text-area.js +1 -1
  146. package/dist/theme-provider-BftkIiZn.js +1 -0
  147. package/dist/theme-switcher.d.ts +110 -29
  148. package/dist/theme-switcher.js +1 -1
  149. package/dist/theme-wVnzzx2F.js +1 -0
  150. package/dist/theme.d.ts +53 -14
  151. package/dist/theme.js +1 -1
  152. package/dist/toast-DKgMRv4F.js +1 -0
  153. package/dist/toast.d.ts +98 -10
  154. package/dist/toast.js +1 -1
  155. package/dist/tooltip.d.ts +28 -1
  156. package/dist/tooltip.js +1 -1
  157. package/dist/{traffic-policy-file-0g5RXFqu.js → traffic-policy-file-CF1lbWtp.js} +1 -1
  158. package/dist/types.d.ts +2 -2
  159. package/dist/utils.d.ts +1 -1
  160. package/dist/utils.js +1 -1
  161. package/dist/virtual-UrzmaSQm.js +1 -0
  162. package/dist/well.d.ts +3 -3
  163. package/dist/well.js +1 -1
  164. package/package.json +3 -3
  165. package/dist/anchor-C_tjSVy6.js +0 -1
  166. package/dist/as-child-CYEVu1WY.d.ts +0 -23
  167. package/dist/button-5t6-JS_I.js +0 -1
  168. package/dist/button-ClC60Nzg.js +0 -1
  169. package/dist/checkbox-DJ2xl7Rc.js +0 -1
  170. package/dist/choice-DOdyNzFC.js +0 -1
  171. package/dist/compose-refs-Cjf2gfB8.js +0 -1
  172. package/dist/dialog-vxLIvB8M.js +0 -1
  173. package/dist/dropdown-menu-Bt1aKF1g.js +0 -1
  174. package/dist/icon-CDtYjF_H.js +0 -1
  175. package/dist/icon-button-DV2-GZHf.js +0 -1
  176. package/dist/index-g2rfwNCH.d.ts +0 -1
  177. package/dist/input-Ct1YOqSy.js +0 -1
  178. package/dist/label-BMlHW_2D.js +0 -1
  179. package/dist/popover-D5WxxnBY.js +0 -1
  180. package/dist/primitive-C64-m48O.d.ts +0 -13
  181. package/dist/primitive-IKruV2iB.js +0 -1
  182. package/dist/select-Bwt2YduR.d.ts +0 -345
  183. package/dist/select-D-5u0Blc.js +0 -1
  184. package/dist/separator-kBnnv3Cw.js +0 -1
  185. package/dist/skeleton-Bu3tgNcW.js +0 -1
  186. package/dist/slot-DmPrjM7N.js +0 -1
  187. package/dist/svg-only-DDx6FtJd.js +0 -1
  188. package/dist/table-CPH2md2-.js +0 -1
  189. package/dist/table-CwFHXC-G.d.ts +0 -414
  190. package/dist/theme-D3MDng6U.js +0 -1
  191. package/dist/theme-provider-C9zpDyJW.js +0 -1
  192. package/dist/toast-BsCjaMVS.js +0 -1
  193. package/dist/virtual-DZMBu7Ch.js +0 -1
package/dist/field.d.ts CHANGED
@@ -1,8 +1,10 @@
1
- import { t as WithAsChild } from "./as-child-CYEVu1WY.js";
1
+ import { n as WithAsChild } from "./as-child-D23mGo4f.js";
2
2
  import { t as ButtonIntent } from "./intents-DdSKSj1c.js";
3
- import { n as IconButtonAppearance, r as IconButtonProps } from "./icon-button-BvQvT790.js";
3
+ import { n as IconButtonAppearance, r as IconButtonProps } from "./icon-button-C1AfGnQx.js";
4
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";
5
+ import { t as Label } from "./label-C6YH9skg.js";
6
+ import { t as Popover } from "./index-B8mIWKIU.js";
7
+ import { t as Slot } from "./index-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,354 @@ 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: {
100
+ ({ className, ref, ...props }: ComponentProps<"legend">): import("react").JSX.Element;
101
+ displayName: string;
102
+ };
103
+ /**
104
+ * Caption for a `Field.Item`. Renders the Mantle `Label` with the same
105
+ * `htmlFor`, click-to-focus, disabled, and typography behavior — but inside a
106
+ * `Field.Item`, the label-to-control association is automatic: `Field.Item`
107
+ * generates a stable control id, `Field.Control` splats that id onto its
108
+ * focusable child, and `Field.Label` consumes the same id as the default
109
+ * `htmlFor`. The required `name` on `Field.Item` is the single source of truth
110
+ * for the control's form name — no matching `htmlFor` / `id` pair, no separate
111
+ * `useId()` call.
112
+ *
113
+ * Pass an explicit `htmlFor` to opt out — for example when the focusable
114
+ * element is rendered outside of `Field.Control` and the auto-generated id
115
+ * never lands on it.
116
+ *
117
+ * @see https://mantle.ngrok.com/components/forms/field
118
+ *
119
+ * @example
120
+ * ```tsx
121
+ * // htmlFor is wired automatically from Field.Item's name.
122
+ * <Field.Item name="apiKey">
123
+ * <Field.Label>API key</Field.Label>
124
+ * <Field.Control>
125
+ * <Input />
126
+ * </Field.Control>
127
+ * </Field.Item>
128
+ *
129
+ * // Opt out with an explicit htmlFor when needed.
130
+ * <Field.Item name="legacy">
131
+ * <Field.Label htmlFor="legacy-control">Legacy field</Field.Label>
132
+ * <input id="legacy-control" />
133
+ * </Field.Item>
134
+ * ```
135
+ */
136
+ declare const FieldLabel: ({ htmlFor, ref, ...props }: ComponentProps<typeof Label>) => import("react").JSX.Element;
137
+ /**
138
+ * Static, label-styled text for a `Field.Item` row that does **not** caption a
139
+ * focusable form control. Renders a `<p>` (not a `<label>`) with the same
140
+ * typography as `Field.Label`, so a read-only row inside a sheet or details
141
+ * panel composes cleanly next to real form fields without misrepresenting
142
+ * itself as a control caption.
143
+ *
144
+ * **When to use**
145
+ * - A `Field.Item` row that displays a derived or system-managed value
146
+ * (owner, created-at, computed status) where there is no `<input>`,
147
+ * `<select>`, `<button>`, or other focusable target to label.
148
+ * - Read-only summary rows inside a sheet or detail panel that should
149
+ * visually align with sibling `Field.Item`s but have no editable control.
150
+ * - Anywhere you would otherwise hand-roll a `<p>` styled to mimic
151
+ * `Field.Label` typography — prefer this so intent is explicit at the call site.
152
+ *
153
+ * **When not to use**
154
+ * - The row has a focusable control (input, select, checkbox, switch,
155
+ * button trigger). Use `Field.Label` so the click-to-focus and
156
+ * accessible-name association are wired correctly.
157
+ * - For body copy, section headings, or any text whose typography happens
158
+ * to look similar by accident — use the appropriate heading or `<p>`
159
+ * directly. `Field.LabelText` exists specifically to slot into the
160
+ * `Field.Label` position of a `Field.Item`.
161
+ *
162
+ * @see https://mantle.ngrok.com/components/forms/field
163
+ *
164
+ * @example
165
+ * ```tsx
166
+ * <Field.Item name="owner">
167
+ * <Field.LabelText>Owner</Field.LabelText>
168
+ * <CredentialOwnerCard owner={owner} />
169
+ * <Field.Description>The user or service user that owns this API key.</Field.Description>
170
+ * </Field.Item>
171
+ * ```
172
+ */
173
+ declare const LabelText: {
174
+ ({ asChild, className, ref, ...props }: ComponentProps<"p"> & WithAsChild): import("react").JSX.Element;
175
+ displayName: string;
176
+ };
177
+ /**
178
+ * Horizontal layout container for the label area of a field. Aligns a
179
+ * `<Field.Label>` (which may contain `Field.Optional`) with adjacent affordances
180
+ * like a help-icon `Popover.Trigger` on a shared center line with a tight
181
+ * `gap-1`. Center-alignment is used (not baseline) so SVG icon buttons —
182
+ * which have no text baseline — sit visually centered next to the label
183
+ * text rather than dropping to the box bottom.
184
+ *
185
+ * Use this when the label needs sibling decorations that can't live inside
186
+ * the `<Field.Label>` itself (e.g. an interactive help button — clicking inside a
187
+ * `<label>` would forward focus to the associated control). For a label
188
+ * with only an `(Optional)` suffix, place `Field.Optional` directly inside
189
+ * the `<Field.Label>` instead — no `LabelRow` needed.
190
+ *
191
+ * @see https://mantle.ngrok.com/components/forms/field
192
+ *
193
+ * @example
194
+ * ```tsx
195
+ * <Field.Group>
196
+ * <Field.Item name="apiKey">
197
+ * <Field.LabelRow>
198
+ * <Field.Label>
199
+ * API key <Field.Optional />
200
+ * </Field.Label>
201
+ * <Field.Help>
202
+ * <Field.HelpTrigger label="What is an API key?" />
203
+ * <Field.HelpContent>Copy this from the dashboard.</Field.HelpContent>
204
+ * </Field.Help>
205
+ * </Field.LabelRow>
206
+ * <Field.Control>
207
+ * <Input />
208
+ * </Field.Control>
209
+ * <Field.Errors messages={["API key is required."]} />
210
+ * <Field.Description>You can find this in the ngrok dashboard.</Field.Description>
211
+ * </Field.Item>
212
+ * </Field.Group>
213
+ * ```
214
+ */
215
+ declare const LabelRow: {
216
+ ({ asChild, className, ref, ...props }: ComponentProps<"div"> & WithAsChild): import("react").JSX.Element;
217
+ displayName: string;
218
+ };
219
+ /**
220
+ * Props for the default help popover trigger. A contextual label is required
221
+ * so repeated help affordances do not all share the same accessible name.
222
+ */
223
+ type FieldHelpTriggerProps = Partial<Omit<IconButtonProps, "appearance" | "icon" | "intent" | "label">> & Pick<IconButtonProps, "label"> & {
224
+ /**
225
+ * The visual style of the trigger button. Optional here —
226
+ * `Field.HelpTrigger` defaults to `"ghost"` so the help affordance reads
227
+ * as subtle metadata next to the label.
228
+ *
229
+ * @default "ghost"
230
+ */
231
+ appearance?: IconButtonAppearance;
232
+ /**
233
+ * The icon to render inside the trigger button. Defaults to a Phosphor
234
+ * `QuestionIcon` so the most common case only needs a contextual label.
235
+ */
236
+ icon?: ReactNode;
237
+ /**
238
+ * The tone of the trigger button. Optional here — `Field.HelpTrigger`
239
+ * defaults to `"neutral"` because opening contextual help is a routine
240
+ * action.
241
+ *
242
+ * @default "neutral"
243
+ */
244
+ intent?: ButtonIntent;
245
+ };
246
+ /**
247
+ * The trigger for a `Field.Help` popover — a `Popover.Trigger` wired to a
248
+ * ghost-appearance `IconButton` with a default Phosphor `QuestionIcon`.
249
+ * Requires a contextual screen-reader label, and accepts `icon` or other
250
+ * `IconButton` props for visual customization.
251
+ *
252
+ * Pre-styled with `text-body` (matching the figma) so the icon reads as
253
+ * subtle metadata at rest; `IconButton`'s ghost `hover:text-strong` still
254
+ * brightens it on interaction. Carries a default `-my-0.5` so the 24px
255
+ * `xs` button keeps a full click target while contributing only 20px to
256
+ * the `Field.LabelRow` flex line — matching the label's text line-height
257
+ * so the label text is not pushed off-center.
258
+ *
259
+ * @see https://mantle.ngrok.com/components/forms/field
260
+ *
261
+ * @example
262
+ * ```tsx
263
+ * <Field.Group>
264
+ * <Field.Item name="apiKey">
265
+ * <Field.LabelRow>
266
+ * <Field.Label>
267
+ * API key <Field.Optional />
268
+ * </Field.Label>
269
+ * <Field.Help>
270
+ * <Field.HelpTrigger label="What is an API key?" />
271
+ * <Field.HelpContent>Copy this from the dashboard.</Field.HelpContent>
272
+ * </Field.Help>
273
+ * </Field.LabelRow>
274
+ * <Field.Control>
275
+ * <Input />
276
+ * </Field.Control>
277
+ * <Field.Errors messages={["API key is required."]} />
278
+ * <Field.Description>You can find this in the ngrok dashboard.</Field.Description>
279
+ * </Field.Item>
280
+ * </Field.Group>
281
+ * ```
282
+ */
283
+ declare const HelpTrigger: {
284
+ ({ appearance, className, icon, intent, label, ref, size, type, ...props }: FieldHelpTriggerProps): import("react").JSX.Element;
285
+ displayName: string;
286
+ };
287
+ /**
288
+ * The popover body for a `Field.Help`. Wraps `Popover.Content` so all
289
+ * positioning / sizing options (`side`, `align`, `preferredWidth`, etc.)
290
+ * work as expected, and overrides the inherited `data-slot` to
291
+ * `field-help-content` so consumers can target it as part of a `Field`
292
+ * subtree without colliding with other popovers.
293
+ *
294
+ * @see https://mantle.ngrok.com/components/forms/field
295
+ *
296
+ * @example
297
+ * ```tsx
298
+ * <Field.Group>
299
+ * <Field.Item name="apiKey">
300
+ * <Field.LabelRow>
301
+ * <Field.Label>
302
+ * API key <Field.Optional />
303
+ * </Field.Label>
304
+ * <Field.Help>
305
+ * <Field.HelpTrigger label="What is an API key?" />
306
+ * <Field.HelpContent>Copy this from the dashboard.</Field.HelpContent>
307
+ * </Field.Help>
308
+ * </Field.LabelRow>
309
+ * <Field.Control>
310
+ * <Input />
311
+ * </Field.Control>
312
+ * <Field.Errors messages={["API key is required."]} />
313
+ * <Field.Description>You can find this in the ngrok dashboard.</Field.Description>
314
+ * </Field.Item>
315
+ * </Field.Group>
316
+ * ```
317
+ */
318
+ declare const HelpContent: {
319
+ ({ ref, ...props }: ComponentProps<typeof Popover.Content>): import("react").JSX.Element;
320
+ displayName: string;
321
+ };
322
+ /**
323
+ * Inline "(Optional)" suffix to mark a field as optional. Defaults to the
324
+ * literal string `(Optional)` so the common case is `<Field.Optional />` with
325
+ * no children — pass children to translate or replace the text. Renders a
326
+ * `<span>` in `text-muted` at `text-sm` / `font-normal` so it reads as
327
+ * secondary metadata next to the bolder Label text.
328
+ *
329
+ * Place inside the `<Field.Label>` so screen readers announce it as part of the
330
+ * accessible name (e.g. "Email, Optional, edit text"). Pair with a small
331
+ * `gap` on the label's flex layout, or rely on the natural inline spacing.
332
+ *
333
+ * @see https://mantle.ngrok.com/components/forms/field
334
+ *
335
+ * @example
336
+ * ```tsx
337
+ * <Field.Group>
338
+ * <Field.Item name="apiKey">
339
+ * <Field.LabelRow>
340
+ * <Field.Label>
341
+ * API key <Field.Optional />
342
+ * </Field.Label>
343
+ * <Field.Help>
344
+ * <Field.HelpTrigger label="What is an API key?" />
345
+ * <Field.HelpContent>Copy this from the dashboard.</Field.HelpContent>
346
+ * </Field.Help>
347
+ * </Field.LabelRow>
348
+ * <Field.Control>
349
+ * <Input />
350
+ * </Field.Control>
351
+ * <Field.Errors messages={["API key is required."]} />
352
+ * <Field.Description>You can find this in the ngrok dashboard.</Field.Description>
353
+ * </Field.Item>
354
+ * </Field.Group>
355
+ * ```
356
+ */
357
+ declare const Optional: {
358
+ ({ asChild, children, className, ref, ...props }: ComponentProps<"span"> & WithAsChild): import("react").JSX.Element;
359
+ displayName: string;
360
+ };
361
+ /**
362
+ * Layout container that stacks multiple `Field.Item`s vertically with
363
+ * `gap-4` between them. This is the default way to compose multiple fields
364
+ * — most forms only need a `Field.Group` of `Field.Item`s. Reach for
365
+ * `Field.Set` + `Field.Legend` only when the grouping carries semantic
366
+ * weight (e.g. a `RadioGroup` or related checkboxes).
367
+ *
368
+ * @see https://mantle.ngrok.com/components/forms/field
369
+ *
370
+ * @example
371
+ * ```tsx
372
+ * <Field.Group>
373
+ * <Field.Item name="apiKey">
374
+ * <Field.LabelRow>
375
+ * <Field.Label>
376
+ * API key <Field.Optional />
377
+ * </Field.Label>
378
+ * <Field.Help>
379
+ * <Field.HelpTrigger label="What is an API key?" />
380
+ * <Field.HelpContent>Copy this from the dashboard.</Field.HelpContent>
381
+ * </Field.Help>
382
+ * </Field.LabelRow>
383
+ * <Field.Control>
384
+ * <Input />
385
+ * </Field.Control>
386
+ * <Field.Errors messages={["API key is required."]} />
387
+ * <Field.Description>You can find this in the ngrok dashboard.</Field.Description>
388
+ * </Field.Item>
389
+ * </Field.Group>
390
+ * ```
391
+ */
392
+ declare const Group: {
393
+ ({ asChild, className, ref, ...props }: ComponentProps<"div"> & WithAsChild): import("react").JSX.Element;
394
+ displayName: string;
395
+ };
46
396
  /**
47
397
  * A single form field — `Label`, a control (`Input`, `Select`, `Checkbox`,
48
398
  * etc.), and any `Field.Description`, `Field.Errors`, or `Field.ErrorList` siblings stacked
@@ -95,10 +445,14 @@ type FieldItemProps = ComponentProps<"div"> & WithAsChild & WithValidation & {
95
445
  */
96
446
  name: string;
97
447
  };
448
+ declare const Item: {
449
+ ({ asChild, children, className, name, ref, validation: validationProp, ...props }: FieldItemProps): import("react").JSX.Element;
450
+ displayName: string;
451
+ };
98
452
  type FieldControlSlotProps = Omit<ComponentProps<typeof Slot>, "aria-describedby" | "aria-errormessage" | "aria-invalid" | "children">;
99
453
  /**
100
454
  * 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
455
+ * any HTML/Slot props, including `ref` — those land on the single child
102
456
  * element along with the generated ARIA props.
103
457
  */
104
458
  type FieldControlElementProps = FieldControlSlotProps & {
@@ -122,6 +476,153 @@ type FieldControlRenderProps = {
122
476
  */
123
477
  children: (props: FieldControlAriaProps) => ReactNode;
124
478
  } & { [K in keyof FieldControlSlotProps]?: never; };
479
+ /**
480
+ * Props for `Field.Control`. A discriminated union over how the caller
481
+ * supplies the focusable element:
482
+ *
483
+ * - `FieldControlElementProps` — pass a single React element child and
484
+ * `Field.Control` clones the generated ARIA props onto it via `Slot`.
485
+ * Accepts the full Slot prop surface, including `ref`.
486
+ * - `FieldControlRenderProps` — pass a render function that receives the
487
+ * ARIA props and places them on a control of the caller's choosing. The
488
+ * caller owns the rendered element, so DOM/Slot props and `ref` are
489
+ * excluded from this variant at the type level.
490
+ *
491
+ * @example
492
+ * ```tsx
493
+ * // Element form — Slot splats id, name, and ARIA props onto <Input/>
494
+ * <Field.Item name="email">
495
+ * <Field.Control>
496
+ * <Input type="email" />
497
+ * </Field.Control>
498
+ * </Field.Item>
499
+ *
500
+ * // Render-prop form — caller spreads the props onto its own element
501
+ * <Field.Item name="acceptTerms">
502
+ * <Field.Control>
503
+ * {(controlProps) => (
504
+ * <label>
505
+ * Accept terms
506
+ * <input type="checkbox" {...controlProps} />
507
+ * </label>
508
+ * )}
509
+ * </Field.Control>
510
+ * </Field.Item>
511
+ * ```
512
+ */
513
+ type FieldControlProps = FieldControlElementProps | FieldControlRenderProps;
514
+ /**
515
+ * Applies `Field.Item` description, error, and validation state to a single
516
+ * focusable control. It always behaves like an `asChild` slot: pass one child
517
+ * element to receive the generated ARIA props, or use a function child to
518
+ * place those props manually. Mantle compound controls that consume
519
+ * `FieldControlContext` can be wrapped at the root when their docs show that
520
+ * composition; otherwise use the render-prop form to place the generated props
521
+ * on the actual focusable element.
522
+ *
523
+ * `Field.Item` owns the full control contract — `id`, `name`, `aria-*`, and
524
+ * `validation` all flow down from the surrounding `Field.Item` and overwrite
525
+ * anything passed on the child. To override these values, set them on
526
+ * `Field.Item` itself (e.g. `<Field.Item validation="error">`); to opt out of
527
+ * the contract entirely, render your control without `Field.Control`.
528
+ *
529
+ * @see https://mantle.ngrok.com/components/forms/field
530
+ *
531
+ * @example
532
+ * ```tsx
533
+ * <Field.Group>
534
+ * <Field.Item name="apiKey">
535
+ * <Field.LabelRow>
536
+ * <Field.Label>
537
+ * API key <Field.Optional />
538
+ * </Field.Label>
539
+ * <Field.Help>
540
+ * <Field.HelpTrigger label="What is an API key?" />
541
+ * <Field.HelpContent>Copy this from the dashboard.</Field.HelpContent>
542
+ * </Field.Help>
543
+ * </Field.LabelRow>
544
+ * <Field.Control>
545
+ * <Input />
546
+ * </Field.Control>
547
+ * <Field.Errors messages={["API key is required."]} />
548
+ * <Field.Description>You can find this in the ngrok dashboard.</Field.Description>
549
+ * </Field.Item>
550
+ * </Field.Group>
551
+ * ```
552
+ */
553
+ declare const Control: {
554
+ ({ children, ref, ...props }: FieldControlProps): import("react").JSX.Element;
555
+ displayName: string;
556
+ };
557
+ /**
558
+ * Helper / hint text. Renders a `<p>` in the muted body color so it reads
559
+ * as secondary to the bolder content above it. Use inside `Field.Item`, below
560
+ * the control, to clarify expected format or constraints for that single field.
561
+ *
562
+ * **At most one per `Field.Item`.** `Field.Item` owns a single description
563
+ * slot ID and applies it via context, so a second `Field.Description` would
564
+ * duplicate that `id` in the DOM.
565
+ *
566
+ * **Auto-tighten.** When this description sits directly after rendered
567
+ * `Field.Errors` or `Field.ErrorList` output, the parent's `gap-1.5`
568
+ * collapses via a matching negative top margin so error list + helper read as
569
+ * one tight block. Pass any margin utility (`mt-1`, `mt-0`, etc.) to override
570
+ * — the rule's specificity is flattened to `(0,1,0)` so a single user class wins.
571
+ *
572
+ * @see https://mantle.ngrok.com/components/forms/field
573
+ *
574
+ * @example
575
+ * ```tsx
576
+ * <Field.Group>
577
+ * <Field.Item name="apiKey">
578
+ * <Field.LabelRow>
579
+ * <Field.Label>
580
+ * API key <Field.Optional />
581
+ * </Field.Label>
582
+ * <Field.Help>
583
+ * <Field.HelpTrigger label="What is an API key?" />
584
+ * <Field.HelpContent>Copy this from the dashboard.</Field.HelpContent>
585
+ * </Field.Help>
586
+ * </Field.LabelRow>
587
+ * <Field.Control>
588
+ * <Input />
589
+ * </Field.Control>
590
+ * <Field.Errors messages={["API key is required."]} />
591
+ * <Field.Description>You can find this in the ngrok dashboard.</Field.Description>
592
+ * </Field.Item>
593
+ * </Field.Group>
594
+ * ```
595
+ */
596
+ declare const Description: {
597
+ ({ asChild, className, ref, ...props }: Omit<ComponentProps<"p">, "id"> & WithAsChild): import("react").JSX.Element;
598
+ displayName: string;
599
+ };
600
+ /**
601
+ * A single error message list item for a field. Renders an `<li>` in
602
+ * `text-danger-600` so it stands out from a sibling `Field.Description`.
603
+ * Must be rendered inside a `Field.ErrorList`. Empty or blank children render
604
+ * nothing so message-less validator results do not produce empty list items.
605
+ *
606
+ * @see https://mantle.ngrok.com/components/forms/field
607
+ *
608
+ * @example
609
+ * ```tsx
610
+ * <Field.Group>
611
+ * <Field.Item name="username">
612
+ * <Field.Label>Username</Field.Label>
613
+ * <Field.Control>
614
+ * <Input />
615
+ * </Field.Control>
616
+ * <Field.ErrorList>
617
+ * <Field.ErrorItem>Must be at least 3 characters.</Field.ErrorItem>
618
+ * <Field.ErrorItem>Use letters, numbers, hyphens, or underscores.</Field.ErrorItem>
619
+ * </Field.ErrorList>
620
+ * <Field.Description>Pick something memorable.</Field.Description>
621
+ * </Field.Item>
622
+ * </Field.Group>
623
+ * ```
624
+ */
625
+ declare const FieldErrorItem: ({ children, className, ref, ...props }: ComponentProps<"li">) => import("react").JSX.Element | null;
125
626
  /**
126
627
  * Props for the `Field.Errors` convenience renderer. It owns its generated
127
628
  * children, so use `Field.ErrorList` / `Field.ErrorItem` directly when custom
@@ -134,6 +635,82 @@ type FieldErrorsProps = Omit<ComponentProps<"ul">, "children" | "id"> & {
134
635
  */
135
636
  messages?: readonly FieldErrorMessage[];
136
637
  };
638
+ /**
639
+ * Convenience renderer for string validation messages. Trims each message,
640
+ * filters empty values, and renders a semantic `Field.ErrorList` containing
641
+ * one `Field.ErrorItem` per remaining message.
642
+ *
643
+ * Accepts strings directly so product code can map any validation library's
644
+ * error shape into messages without coupling Mantle to that library.
645
+ * Deliberately does not support `asChild` because it owns the generated list
646
+ * items; use `Field.ErrorList` with `asChild` for custom list markup.
647
+ *
648
+ * **At most one per `Field.Item`.** `Field.Errors` renders a `Field.ErrorList`
649
+ * under the hood, and `Field.Item` owns a single errors slot ID. Use either
650
+ * `Field.Errors` *or* `Field.ErrorList` per item, not both, and pass multiple
651
+ * messages to one `Field.Errors` instead of rendering it twice.
652
+ *
653
+ * @see https://mantle.ngrok.com/components/forms/field
654
+ *
655
+ * @example
656
+ * ```tsx
657
+ * <Field.Group>
658
+ * <Field.Item name="apiKey">
659
+ * <Field.LabelRow>
660
+ * <Field.Label>
661
+ * API key <Field.Optional />
662
+ * </Field.Label>
663
+ * <Field.Help>
664
+ * <Field.HelpTrigger label="What is an API key?" />
665
+ * <Field.HelpContent>Copy this from the dashboard.</Field.HelpContent>
666
+ * </Field.Help>
667
+ * </Field.LabelRow>
668
+ * <Field.Control>
669
+ * <Input />
670
+ * </Field.Control>
671
+ * <Field.Errors messages={["API key is required."]} />
672
+ * <Field.Description>You can find this in the ngrok dashboard.</Field.Description>
673
+ * </Field.Item>
674
+ * </Field.Group>
675
+ * ```
676
+ */
677
+ declare const FieldErrors: ({ messages, ref, ...props }: FieldErrorsProps) => import("react").JSX.Element;
678
+ /**
679
+ * Wraps one or more `Field.ErrorItem` children in a semantic `<ul>` with
680
+ * `role="list"` so a list of validation errors is announced as a list by
681
+ * screen readers, including Safari/VoiceOver combinations that drop list
682
+ * semantics when list styling is removed. Renders nothing when no children are
683
+ * passed, or when all `Field.ErrorItem` children are empty.
684
+ *
685
+ * The list strips its default browser styling (`list-none`, `p-0`, `m-0`) and
686
+ * stacks items as a flex column with no gap so consecutive errors read as a
687
+ * single tight block.
688
+ *
689
+ * **At most one per `Field.Item`.** `Field.Item` owns a single errors slot ID
690
+ * and applies it via context. Use either `Field.ErrorList` *or* `Field.Errors`
691
+ * per item, not both, and put multiple `Field.ErrorItem` children inside the
692
+ * single list instead of rendering two `Field.ErrorList`s.
693
+ *
694
+ * @see https://mantle.ngrok.com/components/forms/field
695
+ *
696
+ * @example
697
+ * ```tsx
698
+ * <Field.Group>
699
+ * <Field.Item name="username">
700
+ * <Field.Label>Username</Field.Label>
701
+ * <Field.Control>
702
+ * <Input />
703
+ * </Field.Control>
704
+ * <Field.ErrorList>
705
+ * <Field.ErrorItem>Must be at least 3 characters.</Field.ErrorItem>
706
+ * <Field.ErrorItem>Use letters, numbers, hyphens, or underscores.</Field.ErrorItem>
707
+ * </Field.ErrorList>
708
+ * <Field.Description>Pick something memorable.</Field.Description>
709
+ * </Field.Item>
710
+ * </Field.Group>
711
+ * ```
712
+ */
713
+ declare const FieldErrorList: ({ asChild, children, className, ref, ...props }: Omit<ComponentProps<"ul">, "id"> & WithAsChild) => import("react").JSX.Element | null;
137
714
  /**
138
715
  * Compound component for semantic, accessible form fields. Composes a
139
716
  * `Field.Label`, control (`Input`, `Select`, etc.), `Field.Description`, and
@@ -214,7 +791,7 @@ declare const Field: {
214
791
  * </Field.Group>
215
792
  * ```
216
793
  */
217
- readonly Item: import("react").ForwardRefExoticComponent<Omit<FieldItemProps, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
794
+ readonly Item: typeof Item;
218
795
  /**
219
796
  * Applies generated field ARIA props and validation state to a single
220
797
  * focusable control. Accepts either a single React element child (cloned
@@ -254,7 +831,7 @@ declare const Field: {
254
831
  * </Field.Item>
255
832
  * ```
256
833
  */
257
- readonly Control: import("react").ForwardRefExoticComponent<(Omit<FieldControlElementProps, "ref"> | Omit<FieldControlRenderProps, "ref">) & import("react").RefAttributes<HTMLElement>>;
834
+ readonly Control: typeof Control;
258
835
  /**
259
836
  * Layout container that stacks multiple `Field.Item`s vertically.
260
837
  *
@@ -282,7 +859,7 @@ declare const Field: {
282
859
  * </Field.Group>
283
860
  * ```
284
861
  */
285
- readonly Group: import("react").ForwardRefExoticComponent<Omit<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & WithAsChild, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
862
+ readonly Group: typeof Group;
286
863
  /**
287
864
  * Semantic `<fieldset>` for related controls that share one accessible
288
865
  * name from `Field.Legend`.
@@ -300,7 +877,7 @@ declare const Field: {
300
877
  * </Field.Set>
301
878
  * ```
302
879
  */
303
- readonly Set: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").FieldsetHTMLAttributes<HTMLFieldSetElement>, HTMLFieldSetElement>, "ref"> & import("react").RefAttributes<HTMLFieldSetElement>>;
880
+ readonly Set: typeof FieldSet;
304
881
  /**
305
882
  * Caption for `Field.Set`. Renders a semantic `<legend>`.
306
883
  *
@@ -317,7 +894,7 @@ declare const Field: {
317
894
  * </Field.Set>
318
895
  * ```
319
896
  */
320
- readonly Legend: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLLegendElement>, HTMLLegendElement>, "ref"> & import("react").RefAttributes<HTMLLegendElement>>;
897
+ readonly Legend: typeof Legend;
321
898
  /**
322
899
  * The Mantle `Label`, exposed on `Field` for field composition. Inside a
323
900
  * `Field.Item`, `htmlFor` defaults to the same stable id that `Field.Control`
@@ -352,9 +929,7 @@ declare const Field: {
352
929
  * </Field.Group>
353
930
  * ```
354
931
  */
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>>;
932
+ readonly Label: typeof FieldLabel;
358
933
  /**
359
934
  * Static, label-styled text for a `Field.Item` row that has no focusable
360
935
  * control to caption. Renders a `<p>` with the same typography as
@@ -376,7 +951,7 @@ declare const Field: {
376
951
  * </Field.Item>
377
952
  * ```
378
953
  */
379
- readonly LabelText: import("react").ForwardRefExoticComponent<Omit<import("react").ClassAttributes<HTMLParagraphElement> & import("react").HTMLAttributes<HTMLParagraphElement> & WithAsChild, "ref"> & import("react").RefAttributes<HTMLParagraphElement>>;
954
+ readonly LabelText: typeof LabelText;
380
955
  /**
381
956
  * Horizontal layout container for the label area of a field. Aligns a
382
957
  * `<Field.Label>` (which may contain `Field.Optional`) with adjacent affordances
@@ -406,7 +981,7 @@ declare const Field: {
406
981
  * </Field.Group>
407
982
  * ```
408
983
  */
409
- readonly LabelRow: import("react").ForwardRefExoticComponent<Omit<import("react").ClassAttributes<HTMLDivElement> & import("react").HTMLAttributes<HTMLDivElement> & WithAsChild, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
984
+ readonly LabelRow: typeof LabelRow;
410
985
  /**
411
986
  * `Popover.Root` re-export for the help-affordance pattern. Pair with
412
987
  * `Field.HelpTrigger` and `Field.HelpContent` to drop a `?` button next to
@@ -466,29 +1041,7 @@ declare const Field: {
466
1041
  * </Field.Group>
467
1042
  * ```
468
1043
  */
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>>;
1044
+ readonly HelpTrigger: typeof HelpTrigger;
492
1045
  /**
493
1046
  * Body of a `Field.Help` popover. Re-exports `Popover.Content` so all
494
1047
  * positioning / sizing options (`side`, `align`, `preferredWidth`, etc.)
@@ -518,9 +1071,7 @@ declare const Field: {
518
1071
  * </Field.Group>
519
1072
  * ```
520
1073
  */
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>>;
1074
+ readonly HelpContent: typeof HelpContent;
524
1075
  /**
525
1076
  * Inline "(Optional)" suffix to mark a field as optional. Default content
526
1077
  * is `(Optional)`; pass children to translate or replace it. Place inside
@@ -551,7 +1102,7 @@ declare const Field: {
551
1102
  * </Field.Group>
552
1103
  * ```
553
1104
  */
554
- readonly Optional: import("react").ForwardRefExoticComponent<Omit<import("react").ClassAttributes<HTMLSpanElement> & import("react").HTMLAttributes<HTMLSpanElement> & WithAsChild, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
1105
+ readonly Optional: typeof Optional;
555
1106
  /**
556
1107
  * Helper / hint text rendered below the control in the muted body color.
557
1108
  *
@@ -579,7 +1130,7 @@ declare const Field: {
579
1130
  * </Field.Group>
580
1131
  * ```
581
1132
  */
582
- readonly Description: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLParagraphElement>, HTMLParagraphElement>, "id"> & WithAsChild, "ref"> & import("react").RefAttributes<HTMLParagraphElement>>;
1133
+ readonly Description: typeof Description;
583
1134
  /**
584
1135
  * Convenience renderer for validation messages. Trims string messages,
585
1136
  * filters empty values, and renders a `Field.ErrorList` with one
@@ -609,7 +1160,7 @@ declare const Field: {
609
1160
  * </Field.Group>
610
1161
  * ```
611
1162
  */
612
- readonly Errors: import("react").ForwardRefExoticComponent<Omit<FieldErrorsProps, "ref"> & import("react").RefAttributes<HTMLUListElement>>;
1163
+ readonly Errors: typeof FieldErrors;
613
1164
  /**
614
1165
  * Wraps one or more `Field.ErrorItem` children in a semantic `<ul>`.
615
1166
  * Renders nothing when given no renderable children.
@@ -633,7 +1184,7 @@ declare const Field: {
633
1184
  * </Field.Group>
634
1185
  * ```
635
1186
  */
636
- readonly ErrorList: import("react").ForwardRefExoticComponent<Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLUListElement>, HTMLUListElement>, "id"> & WithAsChild, "ref"> & import("react").RefAttributes<HTMLUListElement>>;
1187
+ readonly ErrorList: typeof FieldErrorList;
637
1188
  /**
638
1189
  * A single error message list item for a field. Renders an `<li>` in
639
1190
  * `text-danger-600` and must be nested inside a `Field.ErrorList`.
@@ -657,7 +1208,7 @@ declare const Field: {
657
1208
  * </Field.Group>
658
1209
  * ```
659
1210
  */
660
- readonly ErrorItem: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>, "ref"> & import("react").RefAttributes<HTMLLIElement>>;
1211
+ readonly ErrorItem: typeof FieldErrorItem;
661
1212
  };
662
1213
  //#endregion
663
1214
  //#region src/components/field/field-error-messages.d.ts