@ngrok/mantle 0.79.2 → 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.
- package/dist/accordion.d.ts +169 -12
- package/dist/accordion.js +1 -1
- package/dist/agent.json +1 -1
- package/dist/alert-dialog.d.ts +496 -30
- package/dist/alert-dialog.js +1 -1
- package/dist/alert.d.ts +129 -9
- package/dist/alert.js +1 -1
- package/dist/anchor-_2meGDfj.js +1 -0
- package/dist/anchor.d.ts +2 -2
- package/dist/anchor.js +1 -1
- package/dist/as-child-D23mGo4f.d.ts +49 -0
- package/dist/badge.d.ts +44 -5
- package/dist/badge.js +1 -1
- package/dist/breadcrumb.d.ts +214 -14
- package/dist/breadcrumb.js +1 -1
- package/dist/button-5WsvzIQ6.js +1 -0
- package/dist/{button-DcXOWUYo.d.ts → button-BPMwa2jN.d.ts} +3 -3
- package/dist/button-D9n09xUg.js +1 -0
- package/dist/button.d.ts +3 -3
- package/dist/button.js +1 -1
- package/dist/calendar.d.ts +0 -3
- package/dist/calendar.js +1 -1
- package/dist/card.d.ts +146 -9
- package/dist/card.js +1 -1
- package/dist/centered-layout.d.ts +224 -8
- package/dist/centered-layout.js +1 -1
- package/dist/checkbox-Cq17y0-R.js +1 -0
- package/dist/checkbox.d.ts +12 -10
- package/dist/checkbox.js +1 -1
- package/dist/choice-Cc8dA5r8.js +1 -0
- package/dist/choice-Ct0KK8jw.d.ts +269 -0
- package/dist/choice.d.ts +1 -252
- package/dist/choice.js +1 -1
- package/dist/code-block.d.ts +270 -50
- package/dist/code-block.js +6 -6
- package/dist/code-block_highlight-utils.js +1 -1
- package/dist/code.d.ts +3 -2
- package/dist/code.js +1 -1
- package/dist/combobox.d.ts +190 -11
- package/dist/combobox.js +1 -1
- package/dist/command.d.ts +285 -81
- package/dist/command.js +1 -1
- package/dist/compose-refs-BdBMM9ga.js +1 -0
- package/dist/data-table.d.ts +33 -5
- package/dist/data-table.js +1 -1
- package/dist/description-list.d.ts +79 -6
- package/dist/description-list.js +1 -1
- package/dist/dialog-CQ2C6vkE.js +1 -0
- package/dist/dialog.d.ts +239 -18
- package/dist/dialog.js +1 -1
- package/dist/dropdown-menu-CSCDdA3K.js +1 -0
- package/dist/{dropdown-menu-DP_Ne9Mr.d.ts → dropdown-menu-CoyozLzy.d.ts} +170 -29
- package/dist/dropdown-menu.d.ts +2 -2
- package/dist/dropdown-menu.js +1 -1
- package/dist/empty.d.ts +1 -1
- package/dist/empty.js +1 -1
- package/dist/field.d.ts +596 -45
- package/dist/field.js +1 -1
- package/dist/flag.d.ts +0 -3
- package/dist/flag.js +1 -1
- package/dist/hooks.d.ts +3 -4
- package/dist/hooks.js +1 -1
- package/dist/hover-card.d.ts +54 -4
- package/dist/hover-card.js +1 -1
- package/dist/{icon-Cevjo93X.d.ts → icon-BDqpcZ-n.d.ts} +1 -1
- package/dist/icon-CGgMKpJg.js +1 -0
- package/dist/{icon-button-B7uEj1qq.d.ts → icon-button-C1AfGnQx.d.ts} +11 -60
- package/dist/icon-button-DiOhreJD.js +1 -0
- package/dist/icon.d.ts +2 -2
- package/dist/icon.js +1 -1
- package/dist/icons.d.ts +5 -13
- package/dist/icons.js +1 -1
- package/dist/{in-view-nkSOdED2.d.ts → in-view-DDEGUKDR.d.ts} +17 -9
- package/dist/index-B8mIWKIU.d.ts +211 -0
- package/dist/{index-Rv8RL7xy.d.ts → index-BtwKJTLq.d.ts} +1 -1
- package/dist/{index-BivvYYs-.d.ts → index-C2jj8U4a.d.ts} +8 -5
- package/dist/index-CdPXa9h1.d.ts +1 -0
- package/dist/{index-D47aqlpz.d.ts → index-DA4ig3gj.d.ts} +1 -1
- package/dist/input-CVyAVbim.js +1 -0
- package/dist/{types-C19IR7jf.d.ts → input-DV9M6K4v.d.ts} +42 -2
- package/dist/input.d.ts +4 -55
- package/dist/input.js +1 -1
- package/dist/{label-v2-bv98k.d.ts → label-C6YH9skg.d.ts} +8 -6
- package/dist/label-D-D11mlp.js +1 -0
- package/dist/label.d.ts +1 -1
- package/dist/label.js +1 -1
- package/dist/list.d.ts +150 -6
- package/dist/list.js +1 -1
- package/dist/llms.txt +1 -1
- package/dist/main.d.ts +20 -4
- package/dist/main.js +1 -1
- package/dist/mantle.css +21 -7
- package/dist/media-object.d.ts +27 -4
- package/dist/media-object.js +1 -1
- package/dist/multi-select.d.ts +312 -15
- package/dist/multi-select.js +1 -1
- package/dist/otp-input.d.ts +129 -5
- package/dist/otp-input.js +1 -1
- package/dist/pagination.d.ts +70 -6
- package/dist/pagination.js +1 -1
- package/dist/popover-CBMADtjV.js +1 -0
- package/dist/popover.d.ts +1 -181
- package/dist/popover.js +1 -1
- package/dist/primitive-CJRIlrLz.d.ts +31 -0
- package/dist/primitive-DCPHJsRs.js +1 -0
- package/dist/progress.js +1 -1
- package/dist/qr-code.d.ts +113 -5
- package/dist/qr-code.js +1 -1
- package/dist/radio-group.d.ts +128 -23
- package/dist/radio-group.js +1 -1
- package/dist/{resolve-pre-rendered-props-C3e5Auo3.js → resolve-pre-rendered-props-C9uaM9-V.js} +1 -1
- package/dist/sandboxed-on-click.d.ts +2 -2
- package/dist/sandboxed-on-click.js +1 -1
- package/dist/select-SR_9-bxA.js +1 -0
- package/dist/select-idm1jy7y.d.ts +600 -0
- package/dist/select.d.ts +1 -1
- package/dist/select.js +1 -1
- package/dist/selectable-list.d.ts +252 -298
- package/dist/selectable-list.js +1 -1
- package/dist/separator-B5UmkVRL.d.ts +75 -0
- package/dist/separator-bpE_kooz.js +1 -0
- package/dist/separator.d.ts +1 -52
- package/dist/separator.js +1 -1
- package/dist/sheet.d.ts +295 -21
- package/dist/sheet.js +1 -1
- package/dist/skeleton-CsbUHbBA.js +1 -0
- package/dist/skeleton.d.ts +4 -7
- package/dist/skeleton.js +1 -1
- package/dist/skip-to-main-link.d.ts +24 -4
- package/dist/skip-to-main-link.js +1 -1
- package/dist/slot-CDk0Bb9z.js +1 -0
- package/dist/slot.d.ts +1 -1
- package/dist/slot.js +1 -1
- package/dist/{sort-BPX2Fk9t.js → sort-B_DDQcVD.js} +1 -1
- package/dist/split-button.d.ts +28 -13
- package/dist/split-button.js +1 -1
- package/dist/{svg-only-BFeFS1aa.d.ts → svg-only-CdI_v82i.d.ts} +1 -1
- package/dist/svg-only-d-nMCfAI.js +1 -0
- package/dist/switch.d.ts +9 -6
- package/dist/switch.js +1 -1
- package/dist/table-DUSvU_Jw.d.ts +875 -0
- package/dist/table-GDkapNFi.js +1 -0
- package/dist/table.d.ts +1 -1
- package/dist/table.js +1 -1
- package/dist/tabs.d.ts +139 -12
- package/dist/tabs.js +1 -1
- package/dist/text-area.d.ts +1 -1
- package/dist/text-area.js +1 -1
- package/dist/theme-provider-BftkIiZn.js +1 -0
- package/dist/theme-switcher.d.ts +110 -29
- package/dist/theme-switcher.js +1 -1
- package/dist/theme-wVnzzx2F.js +1 -0
- package/dist/theme.d.ts +53 -14
- package/dist/theme.js +1 -1
- package/dist/toast-DKgMRv4F.js +1 -0
- package/dist/toast.d.ts +98 -10
- package/dist/toast.js +1 -1
- package/dist/tooltip.d.ts +28 -1
- package/dist/tooltip.js +1 -1
- package/dist/{traffic-policy-file-0g5RXFqu.js → traffic-policy-file-CF1lbWtp.js} +1 -1
- package/dist/types.d.ts +2 -2
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +1 -1
- package/dist/virtual-UrzmaSQm.js +1 -0
- package/dist/well.d.ts +3 -3
- package/dist/well.js +1 -1
- package/package.json +5 -5
- package/dist/anchor-C_tjSVy6.js +0 -1
- package/dist/as-child-CYEVu1WY.d.ts +0 -23
- package/dist/button-5t6-JS_I.js +0 -1
- package/dist/button-ClC60Nzg.js +0 -1
- package/dist/checkbox-DJ2xl7Rc.js +0 -1
- package/dist/choice-DOdyNzFC.js +0 -1
- package/dist/compose-refs-Cjf2gfB8.js +0 -1
- package/dist/dialog-ZCgG41hx.js +0 -1
- package/dist/dropdown-menu-Bt1aKF1g.js +0 -1
- package/dist/icon-CDtYjF_H.js +0 -1
- package/dist/icon-button-DV2-GZHf.js +0 -1
- package/dist/index-g2rfwNCH.d.ts +0 -1
- package/dist/input-Ct1YOqSy.js +0 -1
- package/dist/label-BMlHW_2D.js +0 -1
- package/dist/popover-D5WxxnBY.js +0 -1
- package/dist/primitive-C64-m48O.d.ts +0 -13
- package/dist/primitive-M-kZdNIS.js +0 -1
- package/dist/select-Bwt2YduR.d.ts +0 -345
- package/dist/select-D-5u0Blc.js +0 -1
- package/dist/separator-kBnnv3Cw.js +0 -1
- package/dist/skeleton-Bu3tgNcW.js +0 -1
- package/dist/slot-DmPrjM7N.js +0 -1
- package/dist/svg-only-DDx6FtJd.js +0 -1
- package/dist/table-CPH2md2-.js +0 -1
- package/dist/table-CwFHXC-G.d.ts +0 -414
- package/dist/theme-D8kZCOzM.js +0 -1
- package/dist/theme-provider-Djj_jBo6.js +0 -1
- package/dist/toast-D3ntBmn4.js +0 -1
- package/dist/virtual-DZMBu7Ch.js +0 -1
package/dist/field.d.ts
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import {
|
|
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-
|
|
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
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
1211
|
+
readonly ErrorItem: typeof FieldErrorItem;
|
|
661
1212
|
};
|
|
662
1213
|
//#endregion
|
|
663
1214
|
//#region src/components/field/field-error-messages.d.ts
|