@launchpad-ui/form 0.15.14 → 0.15.15
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/index.es.js +32 -121
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +44 -152
- package/dist/index.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/useNumberField.d.ts +1 -2
- package/dist/useNumberField.d.ts.map +1 -1
- package/package.json +11 -17
package/dist/index.js
CHANGED
|
@@ -1,35 +1,16 @@
|
|
|
1
1
|
require('./style.css');
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
return to;
|
|
17
|
-
};
|
|
18
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
19
|
-
value: mod,
|
|
20
|
-
enumerable: true
|
|
21
|
-
}) : target, mod));
|
|
22
|
-
const react = __toESM(require("react"));
|
|
23
|
-
const classix = __toESM(require("classix"));
|
|
24
|
-
const react_jsx_runtime = __toESM(require("react/jsx-runtime"));
|
|
25
|
-
const __launchpad_ui_icons = __toESM(require("@launchpad-ui/icons"));
|
|
26
|
-
const __launchpad_ui_button = __toESM(require("@launchpad-ui/button"));
|
|
27
|
-
const __launchpad_ui_tooltip = __toESM(require("@launchpad-ui/tooltip"));
|
|
28
|
-
const __react_aria_visually_hidden = __toESM(require("@react-aria/visually-hidden"));
|
|
29
|
-
const __react_aria_button = __toESM(require("@react-aria/button"));
|
|
30
|
-
const __react_aria_i18n = __toESM(require("@react-aria/i18n"));
|
|
31
|
-
const __react_aria_numberfield = __toESM(require("@react-aria/numberfield"));
|
|
32
|
-
const __react_stately_numberfield = __toESM(require("@react-stately/numberfield"));
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
let react = require("react");
|
|
4
|
+
let classix = require("classix");
|
|
5
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
6
|
+
let __launchpad_ui_icons = require("@launchpad-ui/icons");
|
|
7
|
+
let __launchpad_ui_button = require("@launchpad-ui/button");
|
|
8
|
+
let __launchpad_ui_tooltip = require("@launchpad-ui/tooltip");
|
|
9
|
+
let react_aria_VisuallyHidden = require("react-aria/VisuallyHidden");
|
|
10
|
+
let react_aria_I18nProvider = require("react-aria/I18nProvider");
|
|
11
|
+
let react_aria_useButton = require("react-aria/useButton");
|
|
12
|
+
let react_aria_useNumberField = require("react-aria/useNumberField");
|
|
13
|
+
let react_stately_useNumberFieldState = require("react-stately/useNumberFieldState");
|
|
33
14
|
const checkbox = "QJPOUG_checkbox";
|
|
34
15
|
const compactTextField = "QJPOUG_compactTextField";
|
|
35
16
|
const field = "QJPOUG_field";
|
|
@@ -97,12 +78,7 @@ var Form_module_default = {
|
|
|
97
78
|
suffix,
|
|
98
79
|
suffixContainer
|
|
99
80
|
};
|
|
100
|
-
|
|
101
|
-
* @deprecated use `Label` from `@launchpad-ui/components` instead
|
|
102
|
-
*
|
|
103
|
-
* https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs
|
|
104
|
-
*/
|
|
105
|
-
const RequiredAsterisk = ({ className, "data-test-id": testId = "required-asterisk",...rest }) => {
|
|
81
|
+
var RequiredAsterisk = ({ className, "data-test-id": testId = "required-asterisk", ...rest }) => {
|
|
106
82
|
const classes = (0, classix.cx)(Form_module_default.requiredAsterisk, className);
|
|
107
83
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
108
84
|
...rest,
|
|
@@ -111,12 +87,7 @@ const RequiredAsterisk = ({ className, "data-test-id": testId = "required-asteri
|
|
|
111
87
|
children: "*"
|
|
112
88
|
});
|
|
113
89
|
};
|
|
114
|
-
|
|
115
|
-
* @deprecated use `Label` from `@launchpad-ui/components` instead
|
|
116
|
-
*
|
|
117
|
-
* https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs
|
|
118
|
-
*/
|
|
119
|
-
const Label = ({ disabled, className, children, required = false, optional = false, "data-test-id": testId = "label",...rest }) => {
|
|
90
|
+
var Label = ({ disabled, className, children, required = false, optional = false, "data-test-id": testId = "label", ...rest }) => {
|
|
120
91
|
const classes = (0, classix.cx)(Form_module_default.label, className, disabled && Form_module_default.labelDisabled);
|
|
121
92
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
|
|
122
93
|
...rest,
|
|
@@ -132,14 +103,8 @@ const Label = ({ disabled, className, children, required = false, optional = fal
|
|
|
132
103
|
]
|
|
133
104
|
});
|
|
134
105
|
};
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
*
|
|
138
|
-
* https://launchpad.launchdarkly.com/?path=/docs/components-forms-checkbox--docs
|
|
139
|
-
*/
|
|
140
|
-
const Checkbox = /* @__PURE__ */ (0, react.forwardRef)(({ "aria-label": ariaLabel, "aria-labelledby": ariaLabelledby, children, disabled, checked, labelClassName, "data-test-id": testId = "checkbox",...rest }, ref) => {
|
|
141
|
-
const hasAriaLabel = ariaLabel !== void 0 || ariaLabelledby !== void 0;
|
|
142
|
-
if (!children && !hasAriaLabel) console.warn("If you do not provide children, you must specify an aria-label for accessibility");
|
|
106
|
+
var Checkbox = /* @__PURE__ */ (0, react.forwardRef)(({ "aria-label": ariaLabel, "aria-labelledby": ariaLabelledby, children, disabled, checked, labelClassName, "data-test-id": testId = "checkbox", ...rest }, ref) => {
|
|
107
|
+
if (!children && !(ariaLabel !== void 0 || ariaLabelledby !== void 0)) console.warn("If you do not provide children, you must specify an aria-label for accessibility");
|
|
143
108
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(Label, {
|
|
144
109
|
className: labelClassName,
|
|
145
110
|
children: [
|
|
@@ -164,7 +129,7 @@ const Checkbox = /* @__PURE__ */ (0, react.forwardRef)(({ "aria-label": ariaLabe
|
|
|
164
129
|
});
|
|
165
130
|
});
|
|
166
131
|
Checkbox.displayName = "Checkbox";
|
|
167
|
-
|
|
132
|
+
var createFieldErrorId = (fieldIdentifier) => fieldIdentifier ? `${[...fieldIdentifier].join("")}-err` : void 0;
|
|
168
133
|
function hasObjectChanged(obj1, obj2) {
|
|
169
134
|
return Object.keys(obj1).length !== Object.keys(obj2).length || Object.keys(obj1).some((k) => {
|
|
170
135
|
const key = k;
|
|
@@ -178,12 +143,7 @@ function useObjectMemo(obj) {
|
|
|
178
143
|
return objRef.current;
|
|
179
144
|
}, [obj]);
|
|
180
145
|
}
|
|
181
|
-
|
|
182
|
-
* @deprecated use `TextField` from `@launchpad-ui/components` instead
|
|
183
|
-
*
|
|
184
|
-
* https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs
|
|
185
|
-
*/
|
|
186
|
-
const TextField = /* @__PURE__ */ (0, react.forwardRef)(({ className, type = "text", tiny = false, readOnly, tabIndex = 0, suffix: suffix$1, overrideWidth, "data-test-id": testId = "text-field", autoComplete,...rest }, ref) => {
|
|
146
|
+
var TextField = /* @__PURE__ */ (0, react.forwardRef)(({ className, type = "text", tiny = false, readOnly, tabIndex = 0, suffix: suffix$1, overrideWidth, "data-test-id": testId = "text-field", autoComplete, ...rest }, ref) => {
|
|
187
147
|
const classes = overrideWidth ? className : (0, classix.cx)(Form_module_default.formInput, tiny && Form_module_default.formInputTiny, className);
|
|
188
148
|
const disablePasswordManagers = autoComplete === "off";
|
|
189
149
|
if (suffix$1) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
@@ -218,12 +178,7 @@ const TextField = /* @__PURE__ */ (0, react.forwardRef)(({ className, type = "te
|
|
|
218
178
|
});
|
|
219
179
|
});
|
|
220
180
|
TextField.displayName = "TextField";
|
|
221
|
-
|
|
222
|
-
* @deprecated use `TextField` from `@launchpad-ui/components` instead
|
|
223
|
-
*
|
|
224
|
-
* https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs
|
|
225
|
-
*/
|
|
226
|
-
const CompactTextField = /* @__PURE__ */ (0, react.forwardRef)(({ className, id, label: label$1, needsErrorFeedback, value, onFocus, onBlur, "data-test-id": testId = "compact-text-field",...rest }, ref) => {
|
|
181
|
+
var CompactTextField = /* @__PURE__ */ (0, react.forwardRef)(({ className, id, label: label$1, needsErrorFeedback, value, onFocus, onBlur, "data-test-id": testId = "compact-text-field", ...rest }, ref) => {
|
|
227
182
|
const [isActive$1, setIsActive] = (0, react.useState)((typeof value === "boolean" || value ? value.toString() : "").trim().length !== 0);
|
|
228
183
|
const isActiveState = isActive$1 || needsErrorFeedback;
|
|
229
184
|
const classes = (0, classix.cx)(Form_module_default.compactTextField, className, isActiveState && Form_module_default.isActive);
|
|
@@ -233,8 +188,7 @@ const CompactTextField = /* @__PURE__ */ (0, react.forwardRef)(({ className, id,
|
|
|
233
188
|
if (onFocus) onFocus(event);
|
|
234
189
|
};
|
|
235
190
|
const handleBlur = (event) => {
|
|
236
|
-
|
|
237
|
-
setIsActive(value$1.trim().length !== 0);
|
|
191
|
+
setIsActive((event.target.value || "").trim().length !== 0);
|
|
238
192
|
if (onBlur) onBlur(event);
|
|
239
193
|
};
|
|
240
194
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
|
|
@@ -255,12 +209,7 @@ const CompactTextField = /* @__PURE__ */ (0, react.forwardRef)(({ className, id,
|
|
|
255
209
|
});
|
|
256
210
|
});
|
|
257
211
|
CompactTextField.displayName = "CompactTextField";
|
|
258
|
-
|
|
259
|
-
* @deprecated use `FieldError` from `@launchpad-ui/components` instead
|
|
260
|
-
*
|
|
261
|
-
* https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs
|
|
262
|
-
*/
|
|
263
|
-
const FieldError = ({ name, errorMessage, className, "data-test-id": testId = "field-error",...rest }) => {
|
|
212
|
+
var FieldError = ({ name, errorMessage, className, "data-test-id": testId = "field-error", ...rest }) => {
|
|
264
213
|
if (!errorMessage) return null;
|
|
265
214
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
266
215
|
...rest,
|
|
@@ -279,12 +228,7 @@ const FieldError = ({ name, errorMessage, className, "data-test-id": testId = "f
|
|
|
279
228
|
]
|
|
280
229
|
});
|
|
281
230
|
};
|
|
282
|
-
|
|
283
|
-
* @deprecated use `FieldGroup` from `@launchpad-ui/components` instead
|
|
284
|
-
*
|
|
285
|
-
* https://launchpad.launchdarkly.com/?path=/docs/components-forms-fieldgroup--docs
|
|
286
|
-
*/
|
|
287
|
-
const FieldSet = ({ children, className, "data-test-id": testId = "field-set",...rest }) => {
|
|
231
|
+
var FieldSet = ({ children, className, "data-test-id": testId = "field-set", ...rest }) => {
|
|
288
232
|
const classes = (0, classix.cx)(Form_module_default.fieldSet, className);
|
|
289
233
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("fieldset", {
|
|
290
234
|
"data-test-id": testId,
|
|
@@ -293,13 +237,8 @@ const FieldSet = ({ children, className, "data-test-id": testId = "field-set",..
|
|
|
293
237
|
children
|
|
294
238
|
});
|
|
295
239
|
};
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
*
|
|
299
|
-
* https://launchpad.launchdarkly.com/?path=/docs/components-forms-form--docs
|
|
300
|
-
*/
|
|
301
|
-
const Form = (props) => {
|
|
302
|
-
const { className, inline, children, hasIncreasedErrorMargin, "data-test-id": testId = "form",...rest } = props;
|
|
240
|
+
var Form = (props) => {
|
|
241
|
+
const { className, inline, children, hasIncreasedErrorMargin, "data-test-id": testId = "form", ...rest } = props;
|
|
303
242
|
const classes = (0, classix.cx)(Form_module_default.form, className, inline && Form_module_default.formInline, !!hasIncreasedErrorMargin && Form_module_default.formIncreasedErrorMargin);
|
|
304
243
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("form", {
|
|
305
244
|
...rest,
|
|
@@ -308,27 +247,16 @@ const Form = (props) => {
|
|
|
308
247
|
children
|
|
309
248
|
});
|
|
310
249
|
};
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
*
|
|
314
|
-
* https://launchpad.launchdarkly.com/?path=/docs/components-forms-fieldgroup--docs
|
|
315
|
-
*/
|
|
316
|
-
const FormGroup = (props) => {
|
|
317
|
-
const { className, name, ignoreValidation, isInvalid: isInvalid$1, children, "data-test-id": testId = "form-group",...rest } = props;
|
|
318
|
-
const classes = (0, classix.cx)(Form_module_default.formGroup, className, !ignoreValidation && isInvalid$1 && Form_module_default.isInvalid);
|
|
250
|
+
var FormGroup = (props) => {
|
|
251
|
+
const { className, name, ignoreValidation, isInvalid: isInvalid$1, children, "data-test-id": testId = "form-group", ...rest } = props;
|
|
319
252
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("fieldset", {
|
|
320
|
-
className:
|
|
253
|
+
className: (0, classix.cx)(Form_module_default.formGroup, className, !ignoreValidation && isInvalid$1 && Form_module_default.isInvalid),
|
|
321
254
|
"data-test-id": testId,
|
|
322
255
|
...rest,
|
|
323
256
|
children
|
|
324
257
|
});
|
|
325
258
|
};
|
|
326
|
-
|
|
327
|
-
* @deprecated use `Text` with `[slot='description']` from `@launchpad-ui/components` instead
|
|
328
|
-
*
|
|
329
|
-
* https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs
|
|
330
|
-
*/
|
|
331
|
-
const FormHint = ({ className, children, "data-test-id": testId = "form-hint",...rest }) => {
|
|
259
|
+
var FormHint = ({ className, children, "data-test-id": testId = "form-hint", ...rest }) => {
|
|
332
260
|
const classes = (0, classix.cx)(Form_module_default.hint, className);
|
|
333
261
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
334
262
|
...rest,
|
|
@@ -337,12 +265,7 @@ const FormHint = ({ className, children, "data-test-id": testId = "form-hint",..
|
|
|
337
265
|
children
|
|
338
266
|
});
|
|
339
267
|
};
|
|
340
|
-
|
|
341
|
-
* @deprecated use form elements from `@launchpad-ui/components` instead
|
|
342
|
-
*
|
|
343
|
-
* https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs
|
|
344
|
-
*/
|
|
345
|
-
const FormField = ({ isRequired, label: label$1, name, htmlFor, hint: hint$1, errorMessage, ignoreValidation, isInvalid: isInvalid$1, children, className, onBlur, "data-test-id": testId = "form-field", LabelProps = {}, FormHintProps = {}, FieldErrorProps = {} }) => {
|
|
268
|
+
var FormField = ({ isRequired, label: label$1, name, htmlFor, hint: hint$1, errorMessage, ignoreValidation, isInvalid: isInvalid$1, children, className, onBlur, "data-test-id": testId = "form-field", LabelProps = {}, FormHintProps = {}, FieldErrorProps = {} }) => {
|
|
346
269
|
const handleBlur = () => {
|
|
347
270
|
onBlur?.(name);
|
|
348
271
|
};
|
|
@@ -375,12 +298,7 @@ const FormField = ({ isRequired, label: label$1, name, htmlFor, hint: hint$1, er
|
|
|
375
298
|
]
|
|
376
299
|
});
|
|
377
300
|
};
|
|
378
|
-
|
|
379
|
-
* @deprecated use `Group` from `@launchpad-ui/components` instead
|
|
380
|
-
*
|
|
381
|
-
* https://launchpad.launchdarkly.com/?path=/docs/components-content-group--docs
|
|
382
|
-
*/
|
|
383
|
-
const IconField = ({ icon, children, className, "data-test-id": testId = "icon-field", tooltip, renderIconLast = false, ariaLabel = "More info",...rest }) => {
|
|
301
|
+
var IconField = ({ icon, children, className, "data-test-id": testId = "icon-field", tooltip, renderIconLast = false, ariaLabel = "More info", ...rest }) => {
|
|
384
302
|
const iconElement = /* @__PURE__ */ (0, react.cloneElement)(icon, {
|
|
385
303
|
size: "small",
|
|
386
304
|
className: (0, classix.cx)(Form_module_default.iconFieldIcon, Form_module_default.iconFieldIconFill)
|
|
@@ -408,14 +326,8 @@ const IconField = ({ icon, children, className, "data-test-id": testId = "icon-f
|
|
|
408
326
|
]
|
|
409
327
|
});
|
|
410
328
|
};
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
*
|
|
414
|
-
* https://launchpad.launchdarkly.com/?path=/docs/components-forms-radiogroup--docs
|
|
415
|
-
*/
|
|
416
|
-
const Radio = ({ "aria-label": ariaLabel, "aria-labelledby": ariaLabelledby, checked = false, children, className, disabled = false, id, labelClassName, labelStyle, "data-test-id": testId = "radio",...rest }) => {
|
|
417
|
-
const hasAriaLabel = ariaLabel !== void 0 || ariaLabelledby !== void 0;
|
|
418
|
-
if (!children && !hasAriaLabel) console.warn("If you do not provide children, you must specify an aria-label for accessibility");
|
|
329
|
+
var Radio = ({ "aria-label": ariaLabel, "aria-labelledby": ariaLabelledby, checked = false, children, className, disabled = false, id, labelClassName, labelStyle, "data-test-id": testId = "radio", ...rest }) => {
|
|
330
|
+
if (!children && !(ariaLabel !== void 0 || ariaLabelledby !== void 0)) console.warn("If you do not provide children, you must specify an aria-label for accessibility");
|
|
419
331
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
|
|
420
332
|
...rest,
|
|
421
333
|
"aria-label": ariaLabel,
|
|
@@ -436,13 +348,8 @@ const Radio = ({ "aria-label": ariaLabel, "aria-labelledby": ariaLabelledby, che
|
|
|
436
348
|
}) : children
|
|
437
349
|
})] });
|
|
438
350
|
};
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
*
|
|
442
|
-
* https://launchpad.launchdarkly.com/?path=/docs/components-forms-radiogroup--docs
|
|
443
|
-
*/
|
|
444
|
-
const RadioGroup = (props) => {
|
|
445
|
-
const { name, value, onChange, children, disabled, legend, "data-test-id": testId = "radio-group",...rest } = props;
|
|
351
|
+
var RadioGroup = (props) => {
|
|
352
|
+
const { name, value, onChange, children, disabled, legend, "data-test-id": testId = "radio-group", ...rest } = props;
|
|
446
353
|
const fieldsetRef = (0, react.useRef)(null);
|
|
447
354
|
function updateRadioElems(elem) {
|
|
448
355
|
if (!/* @__PURE__ */ (0, react.isValidElement)(elem)) return elem;
|
|
@@ -471,18 +378,13 @@ const RadioGroup = (props) => {
|
|
|
471
378
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("fieldset", {
|
|
472
379
|
"data-test-id": testId,
|
|
473
380
|
ref: fieldsetRef,
|
|
474
|
-
children: [legend && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("legend", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(
|
|
381
|
+
children: [legend && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("legend", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_aria_VisuallyHidden.VisuallyHidden, { children: legend }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
475
382
|
...rest,
|
|
476
383
|
children: radios
|
|
477
384
|
})]
|
|
478
385
|
});
|
|
479
386
|
};
|
|
480
|
-
|
|
481
|
-
* @deprecated use `Select` from `@launchpad-ui/components` instead
|
|
482
|
-
*
|
|
483
|
-
* https://launchpad.launchdarkly.com/?path=/docs/components-pickers-select--docs
|
|
484
|
-
*/
|
|
485
|
-
const SelectField = /* @__PURE__ */ (0, react.forwardRef)(({ className, children, "data-test-id": testId = "select",...rest }, ref) => {
|
|
387
|
+
var SelectField = /* @__PURE__ */ (0, react.forwardRef)(({ className, children, "data-test-id": testId = "select", ...rest }, ref) => {
|
|
486
388
|
const classes = (0, classix.cx)(Form_module_default.formInput, className);
|
|
487
389
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("select", {
|
|
488
390
|
...rest,
|
|
@@ -493,12 +395,7 @@ const SelectField = /* @__PURE__ */ (0, react.forwardRef)(({ className, children
|
|
|
493
395
|
});
|
|
494
396
|
});
|
|
495
397
|
SelectField.displayName = "SelectField";
|
|
496
|
-
|
|
497
|
-
* @deprecated use `TextArea` from `@launchpad-ui/components` instead
|
|
498
|
-
*
|
|
499
|
-
* https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs#multi%20line
|
|
500
|
-
*/
|
|
501
|
-
const TextArea = /* @__PURE__ */ (0, react.forwardRef)(({ className, "data-test-id": testId = "text-area",...props }, ref) => {
|
|
398
|
+
var TextArea = /* @__PURE__ */ (0, react.forwardRef)(({ className, "data-test-id": testId = "text-area", ...props }, ref) => {
|
|
502
399
|
const onKeyDown = (e) => {
|
|
503
400
|
if (e.key === "ArrowRight" || e.key === "ArrowDown" || e.key === "ArrowUp" || e.key === "ArrowLeft") e.stopPropagation();
|
|
504
401
|
if (e.key === "Escape") e.nativeEvent.stopImmediatePropagation();
|
|
@@ -513,25 +410,20 @@ const TextArea = /* @__PURE__ */ (0, react.forwardRef)(({ className, "data-test-
|
|
|
513
410
|
});
|
|
514
411
|
});
|
|
515
412
|
TextArea.displayName = "TextArea";
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
* @deprecated use `NumberField` from `@launchpad-ui/components` instead
|
|
519
|
-
*
|
|
520
|
-
* https://launchpad.launchdarkly.com/?path=/docs/components-forms-numberfield--docs
|
|
521
|
-
*/
|
|
522
|
-
const useNumberField = ({ className, "data-test-id": testId = "input", id, name,...otherProps } = {}) => {
|
|
413
|
+
var defaultFormatOptions = { maximumFractionDigits: 6 };
|
|
414
|
+
var useNumberField = ({ className, "data-test-id": testId = "input", id, name, ...otherProps } = {}) => {
|
|
523
415
|
const formatOptions = useObjectMemo({
|
|
524
416
|
...defaultFormatOptions,
|
|
525
417
|
...otherProps.formatOptions
|
|
526
418
|
});
|
|
527
|
-
const { locale } = (0,
|
|
528
|
-
const numberFieldState = (0,
|
|
419
|
+
const { locale } = (0, react_aria_I18nProvider.useLocale)();
|
|
420
|
+
const numberFieldState = (0, react_stately_useNumberFieldState.useNumberFieldState)({
|
|
529
421
|
...otherProps,
|
|
530
422
|
locale,
|
|
531
423
|
formatOptions
|
|
532
424
|
});
|
|
533
425
|
const inputRef = (0, react.useRef)(null);
|
|
534
|
-
const { descriptionProps: formHintProps, errorMessageProps: fieldErrorProps, labelProps, groupProps, inputProps, incrementButtonProps, decrementButtonProps } = (0,
|
|
426
|
+
const { descriptionProps: formHintProps, errorMessageProps: fieldErrorProps, labelProps, groupProps, inputProps, incrementButtonProps, decrementButtonProps } = (0, react_aria_useNumberField.useNumberField)({
|
|
535
427
|
...otherProps,
|
|
536
428
|
formatOptions,
|
|
537
429
|
id
|
|
@@ -562,9 +454,9 @@ const useNumberField = ({ className, "data-test-id": testId = "input", id, name,
|
|
|
562
454
|
})
|
|
563
455
|
};
|
|
564
456
|
};
|
|
565
|
-
|
|
457
|
+
var Stepper = (props) => {
|
|
566
458
|
const buttonRef = (0, react.useRef)(null);
|
|
567
|
-
const { buttonProps } = (0,
|
|
459
|
+
const { buttonProps } = (0, react_aria_useButton.useButton)(props, buttonRef);
|
|
568
460
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
569
461
|
type: "button",
|
|
570
462
|
...buttonProps,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["fieldIdentifier?: FieldPath","obj1: T","obj2: T","obj: T","event: FocusEvent<HTMLInputElement>","props: FormProps","props: FormGroupProps","props: RadioGroupProps","elem: ReactNode","e: KeyboardEvent<HTMLTextAreaElement>","defaultFormatOptions: Intl.NumberFormatOptions","props: AriaButtonProps"],"sources":["../src/styles/Form.module.css","../src/RequiredAsterisk.tsx","../src/Label.tsx","../src/Checkbox.tsx","../src/utils/index.ts","../src/TextField.tsx","../src/CompactTextField.tsx","../src/FieldError.tsx","../src/FieldSet.tsx","../src/Form.tsx","../src/FormGroup.tsx","../src/FormHint.tsx","../src/FormField.tsx","../src/IconField.tsx","../src/Radio.tsx","../src/RadioGroup.tsx","../src/SelectField.tsx","../src/TextArea.tsx","../src/useNumberField.tsx"],"sourcesContent":[":root,\n[data-theme='default'] {\n\t--lp-component-form-color-text-label-disabled: var(--lp-color-gray-800);\n}\n\n[data-theme='dark'] {\n\t--lp-component-form-color-text-label-disabled: var(--lp-color-gray-400);\n}\n\n.formGroup {\n\tmargin: 1.25rem 0;\n\tpadding: 0;\n\tborder: none;\n}\n\n/* The margin for .formGroup and the min-height of .form-fieldError\n should be equal to avoid content shift when errors are shown */\n.formIncreasedErrorMargin .formGroup {\n\tmargin: 1.75rem 0;\n}\n\n.formInline .formGroup {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n\tmargin: 0;\n}\n\n.form .formGroup:first-child {\n\tmargin-top: 0;\n}\n\n.form .formGroup:last-child {\n\tmargin-bottom: 0;\n}\n\n.formInput {\n\tdisplay: block;\n\twidth: 100%;\n\tpadding: 0.375rem 0.625rem;\n\tfont-size: 0.8125rem;\n\tfont-family: var(--lp-font-family-base);\n\tline-height: var(--lp-line-height-300);\n\tbackground-color: var(--lp-color-bg-field-base);\n\tcolor: var(--lp-color-text-ui-primary-base);\n\tborder: 1px solid var(--lp-color-border-field-base);\n\tborder-radius: var(--lp-border-radius-regular);\n\ttransition: all var(--lp-duration-100) linear;\n\theight: 2rem;\n}\n\n.formInput:placeholder-shown {\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n\n.formInput.isFocused,\n.formInput:focus {\n\toutline: 0;\n\tborder-color: var(--lp-color-border-field-focus);\n\tbox-shadow: 0 0 0 3px hsl(231.5 100% 62.5% / 0.1);\n}\n\nselect.formInput {\n\tappearance: none;\n\tbackground: transparent;\n\tbackground-image: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M7.41 8.84L12 13.42l4.59-4.58L18 10.25l-6 6-6-6 1.41-1.41z' fill='%23646f7a'/></svg>\");\n\tbackground-size: 1.25rem;\n\tbackground-repeat: no-repeat;\n\tbackground-position:\n\t\tright 0.4em top 50%,\n\t\t0 0;\n\tpadding-right: 1.25rem;\n}\n\n.suffixContainer .formInput {\n\tborder: none;\n\tborder-radius: var(--lp-border-radius-regular) 0 0 var(--lp-border-radius-regular);\n}\n\n.isInvalid .formInput,\n.form .isInvalid :global(.Select-control),\n.form .isInvalid :global(.CustomSelect) > div,\n.form .isInvalid .formInput {\n\tborder-color: var(--lp-color-border-field-error);\n}\n\n.iconField:global(.IconBefore) .formInput {\n\tpadding-left: 1.875rem;\n}\n\n.iconField:global(.IconAfter) .formInput {\n\tpadding-right: 1.875rem;\n}\n\n.iconFieldIcon {\n\tposition: absolute;\n\ttop: 50%;\n\ttransform: translateY(-50%);\n}\n\n.iconField:global(.IconBefore) .iconFieldIcon {\n\tleft: 0.625rem;\n}\n\n.iconField:global(.IconAfter) .iconFieldIcon {\n\tright: 0.625rem;\n}\n\n.suffixContainer .formInput:focus {\n\tbox-shadow: none;\n}\n\n.inlineForm .formGroup + .formGroup,\n.inlineForm .formGroup + :global([class*='_Button']) {\n\tmargin-left: 0.625rem;\n}\n\n.label {\n\tfont-size: 0.8125rem;\n\tfont-family: var(--lp-font-family-base);\n\tword-break: break-word;\n}\n\n.labelDisabled {\n\tcolor: var(--lp-component-form-color-text-label-disabled);\n}\n\n.labelOptional {\n\tmargin-left: 0.4em;\n\tcolor: var(--lp-color-text-ui-secondary);\n\tfill: var(--lp-color-text-ui-secondary);\n}\n\n.compactTextField .label {\n\tposition: absolute;\n\ttop: -2px;\n\tleft: 10px;\n\tpadding: 0 3px;\n\tcolor: var(--lp-color-text-ui-primary-base);\n\topacity: 0;\n\tpointer-events: none;\n\tbackground-color: var(--lp-color-bg-ui-primary);\n\ttransform-origin: 0 0; /* preserve left alignment after scaling */\n\ttransition: all var(--lp-duration-100) ease-in-out;\n\tz-index: 1; /* Fixes layout issue in Firefox */\n}\n\n.formGroup .label {\n\tdisplay: flex;\n\talign-items: center;\n\tmargin-bottom: 0.125rem;\n}\n\n.formGroup .label + .label {\n\tmargin-top: 0.3125rem;\n}\n\n.fieldError {\n\tcolor: var(--lp-color-text-feedback-error);\n\tfont-size: 0.8125rem;\n\n\t& svg {\n\t\ttransform: translateY(-1px);\n\t}\n}\n\n/* The margin for .formGroup and the min-height of .form-fieldError\n should be equal to avoid content shift when errors are shown */\n.formIncreasedErrorMargin .fieldError {\n\tmin-height: 1.75rem;\n}\n\n.label .fieldError {\n\tfloat: right;\n}\n\n.form:not(.inlineForm) .fieldError {\n\tdisplay: block;\n\tpadding-top: 0.3125rem;\n\ttext-align: left;\n}\n\n.formIncreasedErrorMargin:not(.inlineForm) .fieldError {\n\tpadding-top: 0.0625rem;\n\tpadding-bottom: 0.3125rem;\n}\n\n.form .isInvalid .label {\n\tcolor: var(--lp-color-text-feedback-error);\n}\n\n.formInput::placeholder {\n\tcolor: var(--lp-color-text-field-placeholder);\n}\n\n.formIncreasedErrorMargin .formGroup.isInvalid {\n\tmargin-bottom: 0;\n}\n\n.formIncreasedErrorMargin .formGroup.isInvalid + .formGroup {\n\tmargin-top: 0;\n}\n\n.hint {\n\tdisplay: block;\n\tmargin-top: 0.1875rem;\n\tfont-size: 0.8125rem;\n\tfont-weight: var(--lp-font-weight-regular);\n\tcolor: var(--lp-color-text-ui-secondary);\n}\n\n.field .hint {\n\tmargin: 0;\n\tfont-size: 0.8125rem;\n\tcolor: var(--lp-color-text-ui-secondary);\n\tfill: var(--lp-color-text-ui-secondary);\n}\n\n.form .field label,\n.form .field .isInvalid label {\n\tcolor: var(--lp-color-text-ui-primary-base);\n}\n\n.fieldErrorMessage {\n\tcolor: var(--lp-color-text-feedback-error);\n\tfont-size: 0.8125rem;\n}\n\n.field.formGroup {\n\tmargin: 0.625rem 0;\n}\n\n.field.formGroup:first-child {\n\tmargin-top: 0;\n}\n\n.formInput.isDisabled,\ninput.formInput:disabled,\nselect.formInput:disabled,\ninput.formInput:read-only {\n\topacity: 1;\n\tbackground-color: var(--lp-color-bg-field-disabled);\n\tcolor: var(--lp-color-text-field-disabled);\n\tborder-color: var(--lp-color-border-field-disabled);\n}\n\n.formInput.isDisabled:hover,\n.formInput:disabled:hover {\n\tcursor: not-allowed;\n}\n\ntextarea.formInput {\n\tmin-height: 2.5em;\n\theight: auto;\n\tresize: none;\n}\n\ntextarea.formInput:disabled,\ntextarea.formInput:read-only {\n\topacity: 1;\n\tcolor: var(--lp-color-text-field-disabled);\n\tbackground-color: var(--lp-color-bg-field-disabled);\n\tborder-color: var(--lp-color-border-field-disabled);\n}\n\ninput.formInput::-webkit-autofill {\n\tbox-shadow: 0 0 0 50px var(--lp-color-bg-field-base) inset;\n}\n\n/* Hide the type=search cancel button in Webkit for consistency */\ninput[type='search']::-webkit-search-decoration,\ninput[type='search']::-webkit-search-cancel-button,\ninput[type='search']::-webkit-search-results-button,\ninput[type='search']::-webkit-search-results-decoration {\n\tdisplay: none;\n}\n\n/* Hide the type=search cancel button in IE for consistency */\ninput[type='text']::-ms-clear,\ninput[type='text']::-ms-reveal {\n\tdisplay: none;\n\twidth: 0;\n\theight: 0;\n}\n\ninput[type='search']::-ms-clear,\ninput[type='search']::-ms-reveal {\n\tdisplay: none;\n\twidth: 0;\n\theight: 0;\n}\n\ninput[type='checkbox']:disabled {\n\tpointer-events: none;\n}\n\n.formInput[readonly],\n.formInput[readonly]:focus {\n\tcolor: var(--lp-color-text-ui-secondary);\n\tborder-color: var(--lp-color-gray-500);\n\tbox-shadow: none;\n}\n\n.checkbox {\n\talign-self: flex-start; /* Default for .label is center, but this looks bad on multi-line checkbox labels */\n\tflex-shrink: 0; /* Make sure the input itself doesn't shrink in flex layouts */\n\tmargin-right: 0.3125rem;\n\tmargin-top: 0.25rem;\n}\n\n.radio {\n\tmargin-right: 0.3125rem;\n}\n\n.number {\n\tmin-width: 2.8125rem;\n}\n\n.suffixContainer {\n\tdisplay: inline-flex;\n\tborder: 1px solid var(--lp-color-border-field-base);\n\tborder-radius: var(--lp-border-radius-regular);\n\toverflow: hidden;\n\ttransition: all 0.1s linear;\n}\n\n.suffixContainer:focus-within {\n\tborder-color: var(--lp-color-border-field-focus);\n\tbox-shadow: 0 0 0 3px hsl(231.5 100% 62.5% / 0.1);\n}\n\n.suffixContainer .suffix {\n\tpadding: 0 2px;\n\tbackground-color: light-dark(var(--lp-color-bg-ui-secondary), var(--lp-color-bg-ui-primary));\n\tcolor: var(--lp-color-text-ui-secondary);\n\tcursor: text;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tposition: initial;\n}\n\n.suffix::-webkit-outer-spin-button,\n.suffix::-webkit-inner-spin-button {\n\tappearance: none;\n\tmargin: 0;\n}\n\n/* Firefox */\n.suffix[type='number'] {\n\tappearance: textfield;\n}\n\n.iconFieldIconFill {\n\tfill: var(--lp-color-fill-field-base);\n}\n\n[class*='_Popover-target'].iconFieldButton {\n\tdisplay: block;\n}\n\n.formInputTiny {\n\tpadding: 0.0625rem 0.375rem;\n\theight: 1.5rem;\n}\n\n.iconField {\n\tposition: relative;\n}\n\n.requiredAsterisk {\n\tcolor: var(--lp-color-text-feedback-error);\n}\n\n.fieldSet {\n\tborder: none;\n\tmargin: 1.25rem 0;\n\tpadding: 0;\n}\n\n.compactTextField {\n\tposition: relative;\n\twidth: 100%;\n}\n\n.compactTextField.isActive .label {\n\tborder-radius: var(--lp-border-radius-regular);\n\topacity: 1;\n\tpointer-events: auto;\n\ttransform: translate(0, -8px) scale(0.9); /* 2d transform to avoid webkit blurry text */\n}\n\n.numberField {\n\tdisplay: flex;\n\tposition: relative;\n\n\t& .numberField-input {\n\t\tpadding-right: 1.5rem;\n\t}\n\n\t& .numberField-stepperContainer {\n\t\tdisplay: flex;\n\t\topacity: 0;\n\t\tflex-direction: column;\n\t\tposition: absolute;\n\t\twidth: 1.5rem;\n\t\ttop: 1px;\n\t\tbottom: 1px;\n\t\tright: 1px;\n\t\ttransition: all var(--lp-duration-100) linear;\n\n\t\t& .numberField-stepper {\n\t\t\t--numberField-stepper-padding: 0.25rem;\n\t\t\t--numberField-stepper-border-radius: calc(var(--lp-border-radius-regular) - 0.0625rem);\n\n\t\t\tbackground-color: var(--lp-color-bg-field-base);\n\t\t\tflex: auto;\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: center;\n\t\t\talign-items: center;\n\t\t\tcursor: pointer;\n\t\t\tpadding: 0 var(--numberField-stepper-padding);\n\t\t\tborder: none;\n\t\t\tborder-radius: 0;\n\t\t\tmin-height: 1px;\n\t\t\toverflow: hidden;\n\n\t\t\t&:first-child {\n\t\t\t\tborder-top-right-radius: var(--numberField-stepper-border-radius);\n\t\t\t\tpadding-top: var(--numberField-stepper-padding);\n\t\t\t}\n\n\t\t\t&:last-child {\n\t\t\t\tborder-bottom-right-radius: var(--numberField-stepper-border-radius);\n\t\t\t\tpadding-bottom: var(--numberField-stepper-padding);\n\t\t\t}\n\n\t\t\t&:hover {\n\t\t\t\tbackground-color: var(--lp-color-bg-interactive-secondary-hover);\n\t\t\t}\n\n\t\t\t&:active {\n\t\t\t\tbackground-color: var(--lp-color-bg-interactive-secondary-active);\n\t\t\t}\n\n\t\t\t& span:has(svg) {\n\t\t\t\twidth: 100%;\n\t\t\t\tcolor: var(--lp-color-text-ui-primary-base);\n\t\t\t}\n\t\t}\n\t}\n\n\t&:hover,\n\t&:has(input:focus) {\n\t\t& .numberField-stepperContainer {\n\t\t\topacity: 1;\n\t\t}\n\t}\n}\n","import type { ComponentProps } from 'react';\n\nimport { cx } from 'classix';\n\nimport styles from './styles/Form.module.css';\n\ntype RequiredAsteriskProps = ComponentProps<'span'> & {\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `Label` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs\n */\nconst RequiredAsterisk = ({\n\tclassName,\n\t'data-test-id': testId = 'required-asterisk',\n\t...rest\n}: RequiredAsteriskProps) => {\n\tconst classes = cx(styles.requiredAsterisk, className);\n\n\treturn (\n\t\t<span {...rest} data-test-id={testId} className={classes}>\n\t\t\t*\n\t\t</span>\n\t);\n};\n\nexport { RequiredAsterisk };\nexport type { RequiredAsteriskProps };\n","import type { ComponentProps } from 'react';\n\nimport { cx } from 'classix';\n\nimport { RequiredAsterisk } from './RequiredAsterisk';\nimport styles from './styles/Form.module.css';\n\ntype LabelProps = ComponentProps<'label'> & {\n\trequired?: boolean;\n\toptional?: boolean;\n\tdisabled?: boolean;\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `Label` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs\n */\nconst Label = ({\n\tdisabled,\n\tclassName,\n\tchildren,\n\trequired = false,\n\toptional = false,\n\t'data-test-id': testId = 'label',\n\t...rest\n}: LabelProps) => {\n\tconst classes = cx(styles.label, className, disabled && styles.labelDisabled);\n\n\treturn (\n\t\t<label {...rest} data-test-id={testId} className={classes}>\n\t\t\t{children}\n\t\t\t{optional && !required && <small className={styles.labelOptional}>(optional)</small>}\n\t\t\t{required && !optional && <RequiredAsterisk />}\n\t\t</label>\n\t);\n};\n\nexport { Label };\nexport type { LabelProps };\n","import type { ComponentProps } from 'react';\n\nimport { forwardRef } from 'react';\n\nimport { Label } from './Label';\nimport styles from './styles/Form.module.css';\n\ntype CheckboxProps = ComponentProps<'input'> & {\n\t/**\n\t * The className to pass into the Checkbox's Label component\n\t */\n\tlabelClassName?: string;\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `Checkbox` or `CheckboxGroup` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-checkbox--docs\n */\nconst Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n\t(\n\t\t{\n\t\t\t'aria-label': ariaLabel,\n\t\t\t'aria-labelledby': ariaLabelledby,\n\t\t\tchildren,\n\t\t\tdisabled,\n\t\t\tchecked,\n\t\t\tlabelClassName,\n\t\t\t'data-test-id': testId = 'checkbox',\n\t\t\t...rest\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst hasAriaLabel = ariaLabel !== undefined || ariaLabelledby !== undefined;\n\t\tif (!children && !hasAriaLabel) {\n\t\t\tconsole.warn(\n\t\t\t\t'If you do not provide children, you must specify an aria-label for accessibility',\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<Label className={labelClassName}>\n\t\t\t\t<input\n\t\t\t\t\t{...rest}\n\t\t\t\t\tref={ref}\n\t\t\t\t\tchecked={checked}\n\t\t\t\t\taria-checked={checked ? 'true' : 'false'}\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-labelledby={ariaLabelledby}\n\t\t\t\t\tclassName={styles.checkbox}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\tdata-test-id={testId}\n\t\t\t\t/>{' '}\n\t\t\t\t{disabled ? <span className={styles.labelDisabled}>{children}</span> : children}\n\t\t\t</Label>\n\t\t);\n\t},\n);\n\nCheckbox.displayName = 'Checkbox';\n\nexport { Checkbox };\nexport type { CheckboxProps };\n","import { useMemo, useRef } from 'react';\n\ntype FieldPath = string | string[];\n\nconst createFieldErrorId = (fieldIdentifier?: FieldPath) =>\n\tfieldIdentifier ? `${[...fieldIdentifier].join('')}-err` : undefined;\n\nfunction hasObjectChanged<T extends object>(obj1: T, obj2: T): boolean {\n\treturn (\n\t\tObject.keys(obj1).length !== Object.keys(obj2).length ||\n\t\tObject.keys(obj1).some((k) => {\n\t\t\tconst key = k as keyof T;\n\t\t\treturn typeof obj1[key] === 'object' && typeof obj2[key] === 'object'\n\t\t\t\t? hasObjectChanged(obj1[key] as T, obj2[key] as T)\n\t\t\t\t: obj1[key] !== obj2[key];\n\t\t})\n\t);\n}\n\nfunction useObjectMemo<T extends object>(obj: T) {\n\tconst objRef = useRef(obj);\n\n\treturn useMemo(() => {\n\t\tif (hasObjectChanged(obj, objRef.current)) {\n\t\t\tobjRef.current = obj;\n\t\t}\n\n\t\treturn objRef.current;\n\t}, [obj]);\n}\n\nexport { createFieldErrorId, useObjectMemo };\nexport type { FieldPath };\n","import type { ComponentProps } from 'react';\n\nimport { cx } from 'classix';\nimport { forwardRef } from 'react';\n\nimport styles from './styles/Form.module.css';\nimport { createFieldErrorId } from './utils';\n\ntype TextFieldProps = ComponentProps<'input'> & {\n\tsuffix?: string;\n\ttiny?: boolean;\n\toverrideWidth?: string;\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `TextField` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs\n */\nconst TextField = forwardRef<HTMLInputElement, TextFieldProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\ttype = 'text',\n\t\t\ttiny = false,\n\t\t\treadOnly,\n\t\t\ttabIndex = 0,\n\t\t\tsuffix,\n\t\t\toverrideWidth,\n\t\t\t'data-test-id': testId = 'text-field',\n\t\t\tautoComplete,\n\t\t\t...rest\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst classes = overrideWidth\n\t\t\t? className\n\t\t\t: cx(styles.formInput, tiny && styles.formInputTiny, className);\n\n\t\tconst disablePasswordManagers = autoComplete === 'off';\n\n\t\tif (suffix) {\n\t\t\treturn (\n\t\t\t\t<div className={styles.suffixContainer}>\n\t\t\t\t\t<input\n\t\t\t\t\t\t{...rest}\n\t\t\t\t\t\ttype={type}\n\t\t\t\t\t\tdata-test-id={testId}\n\t\t\t\t\t\tautoComplete={autoComplete}\n\t\t\t\t\t\tclassName={classes}\n\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\taria-describedby={rest['aria-describedby'] || createFieldErrorId(rest.id)}\n\t\t\t\t\t/>\n\t\t\t\t\t<label className={styles.suffix} htmlFor={rest.id}>\n\t\t\t\t\t\t{suffix}\n\t\t\t\t\t</label>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<input\n\t\t\t\t{...rest}\n\t\t\t\tdata-1p-ignore={disablePasswordManagers} // \"data-1p-ignore\" is added to prevent 1Password from injecting a password autofill icon\n\t\t\t\ttype={type}\n\t\t\t\tclassName={classes}\n\t\t\t\treadOnly={readOnly}\n\t\t\t\ttabIndex={tabIndex}\n\t\t\t\tautoComplete={autoComplete}\n\t\t\t\tref={ref}\n\t\t\t\tdata-test-id={testId}\n\t\t\t\tstyle={\n\t\t\t\t\toverrideWidth\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\twidth: overrideWidth,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t\taria-describedby={rest['aria-describedby'] || createFieldErrorId(rest.id)}\n\t\t\t/>\n\t\t);\n\t},\n);\n\nTextField.displayName = 'TextField';\n\nexport { TextField };\nexport type { TextFieldProps };\n","import type { FocusEvent } from 'react';\nimport type { TextFieldProps } from './TextField';\n\nimport { cx } from 'classix';\nimport { forwardRef, useState } from 'react';\n\nimport { Label } from './Label';\nimport styles from './styles/Form.module.css';\nimport { TextField } from './TextField';\n\ntype CompactTextFieldProps = TextFieldProps & {\n\tlabel: string;\n\tneedsErrorFeedback?: boolean;\n};\n\n/**\n * @deprecated use `TextField` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs\n */\nconst CompactTextField = forwardRef<HTMLInputElement, CompactTextFieldProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tid,\n\t\t\tlabel,\n\t\t\tneedsErrorFeedback,\n\t\t\tvalue,\n\t\t\tonFocus,\n\t\t\tonBlur,\n\t\t\t'data-test-id': testId = 'compact-text-field',\n\t\t\t...rest\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst [isActive, setIsActive] = useState(\n\t\t\t(typeof value === 'boolean' || value ? value.toString() : '').trim().length !== 0,\n\t\t);\n\n\t\tconst isActiveState = isActive || needsErrorFeedback;\n\n\t\tconst classes = cx(styles.compactTextField, className, isActiveState && styles.isActive);\n\n\t\tconst placeholder = isActiveState ? '' : label;\n\n\t\tconst handleFocus = (event: FocusEvent<HTMLInputElement>) => {\n\t\t\tsetIsActive(true);\n\t\t\tif (onFocus) {\n\t\t\t\tonFocus(event);\n\t\t\t}\n\t\t};\n\n\t\tconst handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n\t\t\tconst value = event.target.value || '';\n\t\t\tsetIsActive(value.trim().length !== 0);\n\t\t\tif (onBlur) {\n\t\t\t\tonBlur(event);\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t<div className={classes} data-test-id={testId}>\n\t\t\t\t<Label htmlFor={id}>{label}</Label>\n\t\t\t\t<TextField\n\t\t\t\t\t{...rest}\n\t\t\t\t\tid={id}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tref={ref}\n\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nCompactTextField.displayName = 'CompactTextField';\n\nexport { CompactTextField };\nexport type { CompactTextFieldProps };\n","import type { ComponentProps } from 'react';\nimport type { FieldPath } from './utils';\n\nimport { Icon } from '@launchpad-ui/icons';\nimport { cx } from 'classix';\n\nimport styles from './styles/Form.module.css';\nimport { createFieldErrorId } from './utils';\n\ntype FieldErrorProps = ComponentProps<'span'> & {\n\tname: FieldPath;\n\terrorMessage?: string;\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `FieldError` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs\n */\nconst FieldError = ({\n\tname,\n\terrorMessage,\n\tclassName,\n\t'data-test-id': testId = 'field-error',\n\t...rest\n}: FieldErrorProps) => {\n\tif (!errorMessage) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t// biome-ignore lint/a11y/useAriaPropsSupportedByRole: ignore\n\t\t<span\n\t\t\t{...rest}\n\t\t\tclassName={cx(styles.fieldError, className)}\n\t\t\taria-live=\"polite\"\n\t\t\tdata-test-id={testId}\n\t\t\taria-label=\"Error\"\n\t\t\tid={createFieldErrorId(name)}\n\t\t>\n\t\t\t<Icon name=\"alert-rhombus\" size=\"small\" /> {errorMessage}\n\t\t</span>\n\t);\n};\n\nexport { FieldError };\nexport type { FieldErrorProps };\n","import type { ComponentProps } from 'react';\n\nimport { cx } from 'classix';\n\nimport styles from './styles/Form.module.css';\n\ntype FieldSetProps = ComponentProps<'fieldset'> & {\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `FieldGroup` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-fieldgroup--docs\n */\nconst FieldSet = ({\n\tchildren,\n\tclassName,\n\t'data-test-id': testId = 'field-set',\n\t...rest\n}: FieldSetProps) => {\n\tconst classes = cx(styles.fieldSet, className);\n\n\treturn (\n\t\t<fieldset data-test-id={testId} className={classes} {...rest}>\n\t\t\t{children}\n\t\t</fieldset>\n\t);\n};\n\nexport { FieldSet };\nexport type { FieldSetProps };\n","import type { ComponentProps } from 'react';\n\nimport { cx } from 'classix';\n\nimport styles from './styles/Form.module.css';\n\ntype FormProps = ComponentProps<'form'> & {\n\tinline?: boolean;\n\t// Increases margin between form fields to make room for error messages.\n\t// This prevents the form from shifting when rendering a field error.\n\t// This may be desired when the form contains external links that will\n\t// shift while clicking if the form shifts from validation.\n\thasIncreasedErrorMargin?: boolean;\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `Form` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-form--docs\n */\nconst Form = (props: FormProps) => {\n\tconst {\n\t\tclassName,\n\t\tinline,\n\t\tchildren,\n\t\thasIncreasedErrorMargin,\n\t\t'data-test-id': testId = 'form',\n\t\t...rest\n\t} = props;\n\n\tconst classes = cx(\n\t\tstyles.form,\n\t\tclassName,\n\t\tinline && styles.formInline,\n\t\t!!hasIncreasedErrorMargin && styles.formIncreasedErrorMargin,\n\t);\n\n\treturn (\n\t\t<form {...rest} data-test-id={testId} className={classes}>\n\t\t\t{children}\n\t\t</form>\n\t);\n};\n\nexport { Form };\nexport type { FormProps };\n","import type { ComponentProps } from 'react';\n\nimport { cx } from 'classix';\n\nimport styles from './styles/Form.module.css';\n\ntype FormGroupProps = ComponentProps<'fieldset'> & {\n\tname?: string | string[];\n\tignoreValidation?: boolean;\n\tisInvalid?: boolean;\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `FieldGroup` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-fieldgroup--docs\n */\nconst FormGroup = (props: FormGroupProps) => {\n\tconst {\n\t\tclassName,\n\t\t// biome-ignore lint/correctness/noUnusedVariables: ignore\n\t\tname,\n\t\tignoreValidation,\n\t\tisInvalid,\n\t\tchildren,\n\t\t'data-test-id': testId = 'form-group',\n\t\t...rest\n\t} = props;\n\n\tconst classes = cx(\n\t\tstyles.formGroup,\n\t\tclassName,\n\t\t!ignoreValidation && isInvalid && styles.isInvalid,\n\t);\n\n\treturn (\n\t\t<fieldset className={classes} data-test-id={testId} {...rest}>\n\t\t\t{children}\n\t\t</fieldset>\n\t);\n};\n\nexport { FormGroup };\nexport type { FormGroupProps };\n","import type { ComponentProps } from 'react';\n\nimport { cx } from 'classix';\n\nimport styles from './styles/Form.module.css';\n\ntype FormHintProps = ComponentProps<'div'> & {\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `Text` with `[slot='description']` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs\n */\nconst FormHint = ({\n\tclassName,\n\tchildren,\n\t'data-test-id': testId = 'form-hint',\n\t...rest\n}: FormHintProps) => {\n\tconst classes = cx(styles.hint, className);\n\n\treturn (\n\t\t<div {...rest} data-test-id={testId} className={classes}>\n\t\t\t{children}\n\t\t</div>\n\t);\n};\n\nexport { FormHint };\nexport type { FormHintProps };\n","import type { JSX } from 'react';\nimport type { FieldErrorProps } from './FieldError';\nimport type { FormHintProps } from './FormHint';\nimport type { LabelProps } from './Label';\n\nimport { cx } from 'classix';\n\nimport { FieldError } from './FieldError';\nimport { FormGroup } from './FormGroup';\nimport { FormHint } from './FormHint';\nimport { Label } from './Label';\nimport styles from './styles/Form.module.css';\n\ntype FormFieldProps = {\n\tisRequired: boolean;\n\tlabel?: string;\n\tname: string;\n\thtmlFor: string;\n\thint?: string;\n\terrorMessage?: string;\n\tignoreValidation?: boolean;\n\tisInvalid?: boolean;\n\tchildren: JSX.Element;\n\tclassName?: string;\n\tonBlur?: (field: string) => void;\n\t'data-test-id'?: string;\n\tLabelProps?: Partial<LabelProps>;\n\tFormHintProps?: Partial<FormHintProps>;\n\tFieldErrorProps?: Partial<FieldErrorProps>;\n};\n\n/**\n * @deprecated use form elements from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs\n */\nconst FormField = ({\n\tisRequired,\n\tlabel,\n\tname,\n\thtmlFor,\n\thint,\n\terrorMessage,\n\tignoreValidation,\n\tisInvalid,\n\tchildren,\n\tclassName,\n\tonBlur,\n\t'data-test-id': testId = 'form-field',\n\tLabelProps = {},\n\tFormHintProps = {},\n\tFieldErrorProps = {},\n}: FormFieldProps) => {\n\tconst handleBlur = () => {\n\t\tonBlur?.(name);\n\t};\n\n\treturn (\n\t\t<FormGroup\n\t\t\tclassName={cx(styles.field, className)}\n\t\t\tname={name}\n\t\t\tignoreValidation={ignoreValidation}\n\t\t\tisInvalid={isInvalid}\n\t\t\tonBlur={handleBlur}\n\t\t\tdata-test-id={testId}\n\t\t>\n\t\t\t{label && (\n\t\t\t\t<Label htmlFor={htmlFor} required={isRequired} {...LabelProps}>\n\t\t\t\t\t{label}\n\t\t\t\t</Label>\n\t\t\t)}\n\t\t\t{hint && (\n\t\t\t\t<FormHint className={styles.hint} {...FormHintProps}>\n\t\t\t\t\t{hint}\n\t\t\t\t</FormHint>\n\t\t\t)}\n\t\t\t{children}\n\t\t\t<FieldError\n\t\t\t\tclassName={styles.fieldErrorMessage}\n\t\t\t\tname={name}\n\t\t\t\terrorMessage={errorMessage}\n\t\t\t\t{...FieldErrorProps}\n\t\t\t/>\n\t\t</FormGroup>\n\t);\n};\n\nexport type { FormFieldProps };\nexport { FormField };\n","import type { IconProps } from '@launchpad-ui/icons';\nimport type { ComponentProps, JSX, ReactElement } from 'react';\n\nimport { IconButton } from '@launchpad-ui/button';\nimport { Tooltip } from '@launchpad-ui/tooltip';\nimport { cx } from 'classix';\nimport { cloneElement } from 'react';\n\nimport styles from './styles/Form.module.css';\n\ntype IconFieldProps = ComponentProps<'div'> & {\n\ticon: ReactElement<IconProps>;\n\tchildren: JSX.Element | JSX.Element[];\n\t'data-test-id'?: string;\n\ttooltip?: string | JSX.Element;\n\trenderIconLast?: boolean;\n\tariaLabel?: string;\n};\n\n/**\n * @deprecated use `Group` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-content-group--docs\n */\nconst IconField = ({\n\ticon,\n\tchildren,\n\tclassName,\n\t'data-test-id': testId = 'icon-field',\n\ttooltip,\n\trenderIconLast = false,\n\tariaLabel = 'More info',\n\t...rest\n}: IconFieldProps) => {\n\tconst iconElement = cloneElement(icon, {\n\t\tsize: 'small',\n\t\tclassName: cx(styles.iconFieldIcon, styles.iconFieldIconFill),\n\t});\n\n\tconst classes = cx(styles.iconField, renderIconLast ? 'IconAfter' : 'IconBefore', className);\n\n\tconst renderIcon = tooltip ? (\n\t\t<Tooltip content={tooltip} targetClassName={styles.iconFieldButton}>\n\t\t\t<IconButton\n\t\t\t\ticon={cloneElement(icon, {\n\t\t\t\t\tclassName: styles.iconFieldIconFill,\n\t\t\t\t})}\n\t\t\t\tsize=\"small\"\n\t\t\t\tclassName={styles.iconFieldIcon}\n\t\t\t\tstyle={renderIconLast ? { right: '0.313rem' } : { left: '0.313rem' }}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t/>\n\t\t</Tooltip>\n\t) : (\n\t\ticonElement\n\t);\n\n\treturn (\n\t\t<div className={classes} data-test-id={testId} {...rest}>\n\t\t\t{!renderIconLast && renderIcon}\n\t\t\t{children}\n\t\t\t{renderIconLast && renderIcon}\n\t\t</div>\n\t);\n};\n\nexport { IconField };\nexport type { IconFieldProps };\n","import type { ComponentProps, CSSProperties } from 'react';\n\nimport { cx } from 'classix';\n\nimport { Label } from './Label';\nimport styles from './styles/Form.module.css';\n\ntype RadioProps = Omit<ComponentProps<'input'>, 'type'> & {\n\tlabelClassName?: string;\n\tlabelStyle?: CSSProperties;\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `RadioGroup` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-radiogroup--docs\n */\nconst Radio = ({\n\t'aria-label': ariaLabel,\n\t'aria-labelledby': ariaLabelledby,\n\tchecked = false,\n\tchildren,\n\tclassName,\n\tdisabled = false,\n\tid,\n\tlabelClassName,\n\tlabelStyle,\n\t'data-test-id': testId = 'radio',\n\t...rest\n}: RadioProps) => {\n\tconst hasAriaLabel = ariaLabel !== undefined || ariaLabelledby !== undefined;\n\n\tif (!children && !hasAriaLabel) {\n\t\tconsole.warn(\n\t\t\t'If you do not provide children, you must specify an aria-label for accessibility',\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<input\n\t\t\t\t{...rest}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\taria-labelledby={ariaLabelledby}\n\t\t\t\tclassName={cx(styles.radio, className)}\n\t\t\t\tchecked={checked}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tid={id}\n\t\t\t\tdata-test-id={testId}\n\t\t\t\ttype=\"radio\"\n\t\t\t/>\n\t\t\t<Label className={labelClassName} htmlFor={id} style={labelStyle}>\n\t\t\t\t{disabled ? <span className={styles.labelDisabled}>{children}</span> : children}\n\t\t\t</Label>\n\t\t</>\n\t);\n};\n\nexport { Radio };\nexport type { RadioProps };\n","import type { ChangeEvent, FormEvent, ReactElement, ReactNode } from 'react';\n\nimport { VisuallyHidden } from '@react-aria/visually-hidden';\nimport { Children, cloneElement, isValidElement, useRef } from 'react';\n\nimport { Label } from './Label';\nimport { Radio } from './Radio';\n\ntype RadioGroupProps = {\n\t/**\n\t * The legend that describes this groups of radio buttons. The legend\n\t * is important for screen reader users.\n\t */\n\tlegend?: string;\n\t/**\n\t * The children passed into the RadioGroup.\n\t */\n\tchildren?: ReactNode;\n\t/**\n\t * Custom classname(s) passed to the fieldset inner div.\n\t */\n\tclassName?: string;\n\t/**\n\t * Set the underlying Radio to disabled if the Radio's disabled prop is undefined.\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * The RadioGroup's id.\n\t */\n\tid?: string;\n\t/**\n\t * Name to apply to the underlying Radio. The same name value is passed to each Radio when grouping in a RadioGroup for screen reader support.\n\t */\n\tname: string;\n\t/**\n\t * This function is passed into each Radio onChange synthetic event handler.\n\t */\n\tonChange?(e: ChangeEvent | FormEvent<HTMLInputElement>): void;\n\t/**\n\t * The value to compare against the Radio's value to determine if the Radio will be checked.\n\t */\n\tvalue: string;\n\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `RadioGroup` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-radiogroup--docs\n */\nconst RadioGroup = (props: RadioGroupProps) => {\n\tconst {\n\t\tname,\n\t\tvalue,\n\t\tonChange,\n\t\tchildren,\n\t\tdisabled,\n\t\tlegend,\n\t\t'data-test-id': testId = 'radio-group',\n\t\t...rest\n\t} = props;\n\tconst fieldsetRef = useRef<HTMLFieldSetElement>(null);\n\n\tfunction updateRadioElems(elem: ReactNode): ReactNode {\n\t\tif (!isValidElement(elem)) {\n\t\t\treturn elem;\n\t\t}\n\n\t\t// biome-ignore lint/suspicious/noExplicitAny: ignore\n\t\tconst item = elem as ReactElement<any>;\n\n\t\tif (item?.type && item.type === Radio) {\n\t\t\treturn cloneElement(item, {\n\t\t\t\t...item.props,\n\t\t\t\tname,\n\t\t\t\tchecked: item.props.value === value,\n\t\t\t\tonChange,\n\t\t\t\tdisabled: typeof item.props?.disabled !== 'undefined' ? item.props.disabled : disabled,\n\t\t\t});\n\t\t}\n\n\t\tif (item?.type && item.type === Label) {\n\t\t\treturn cloneElement(item, {\n\t\t\t\t...item.props,\n\t\t\t\tonChange,\n\t\t\t\tdisabled,\n\t\t\t});\n\t\t}\n\n\t\tconst elemChildren = item?.props?.children;\n\t\tif (elemChildren) {\n\t\t\tif (Array.isArray(elemChildren)) {\n\t\t\t\treturn cloneElement(item, {\n\t\t\t\t\tchildren: Children.map(elemChildren, (elemChild) => updateRadioElems(elemChild)),\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn cloneElement(item, {\n\t\t\t\tchildren: updateRadioElems(elemChildren),\n\t\t\t});\n\t\t}\n\n\t\tif (item?.type && item.type !== Radio && item.type !== Label) {\n\t\t\treturn item;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tconst radios = Children.map(children, (child) => updateRadioElems(child));\n\treturn (\n\t\t<fieldset data-test-id={testId} ref={fieldsetRef}>\n\t\t\t{legend && (\n\t\t\t\t<legend>\n\t\t\t\t\t<VisuallyHidden>{legend}</VisuallyHidden>\n\t\t\t\t</legend>\n\t\t\t)}\n\t\t\t<div {...rest}>{radios}</div>\n\t\t</fieldset>\n\t);\n};\n\nexport { RadioGroup };\nexport type { RadioGroupProps };\n","import type { ComponentProps } from 'react';\n\nimport { cx } from 'classix';\nimport { forwardRef } from 'react';\n\nimport styles from './styles/Form.module.css';\n\ntype SelectFieldProps = ComponentProps<'select'> & {\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `Select` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-pickers-select--docs\n */\nconst SelectField = forwardRef<HTMLSelectElement, SelectFieldProps>(\n\t({ className, children, 'data-test-id': testId = 'select', ...rest }: SelectFieldProps, ref) => {\n\t\tconst classes = cx(styles.formInput, className);\n\n\t\treturn (\n\t\t\t<select {...rest} data-test-id={testId} className={classes} ref={ref}>\n\t\t\t\t{children}\n\t\t\t</select>\n\t\t);\n\t},\n);\n\nSelectField.displayName = 'SelectField';\n\nexport { SelectField };\nexport type { SelectFieldProps };\n","import type { ComponentProps, KeyboardEvent } from 'react';\n\nimport { cx } from 'classix';\nimport { forwardRef } from 'react';\n\nimport styles from './styles/Form.module.css';\nimport { createFieldErrorId } from './utils';\n\ntype TextAreaProps = ComponentProps<'textarea'> & {\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `TextArea` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs#multi%20line\n */\nconst TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(\n\t({ className, 'data-test-id': testId = 'text-area', ...props }, ref) => {\n\t\tconst onKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n\t\t\tif (\n\t\t\t\te.key === 'ArrowRight' ||\n\t\t\t\te.key === 'ArrowDown' ||\n\t\t\t\te.key === 'ArrowUp' ||\n\t\t\t\te.key === 'ArrowLeft'\n\t\t\t) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t\tif (e.key === 'Escape') {\n\t\t\t\te.nativeEvent.stopImmediatePropagation();\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t<textarea\n\t\t\t\t{...props}\n\t\t\t\tclassName={cx(styles.formInput, className)}\n\t\t\t\tref={ref}\n\t\t\t\tdata-test-id={testId}\n\t\t\t\taria-describedby={props['aria-describedby'] || createFieldErrorId(props.id)}\n\t\t\t\tonKeyDown={onKeyDown}\n\t\t\t/>\n\t\t);\n\t},\n);\n\nTextArea.displayName = 'TextArea';\n\nexport { TextArea };\nexport type { TextAreaProps };\n","import type { AriaButtonProps } from '@react-aria/button';\nimport type { AriaNumberFieldProps } from '@react-aria/numberfield';\nimport type { JSX } from 'react';\n\nimport { Icon } from '@launchpad-ui/icons';\nimport { useButton } from '@react-aria/button';\nimport { useLocale } from '@react-aria/i18n';\nimport { useNumberField as useReactAriaNumberField } from '@react-aria/numberfield';\nimport { useNumberFieldState } from '@react-stately/numberfield';\nimport { cx } from 'classix';\nimport { useRef } from 'react';\n\nimport styles from './styles/Form.module.css';\nimport { useObjectMemo } from './utils';\n\ntype UseNumberFieldProps = AriaNumberFieldProps & {\n\tclassName?: string;\n\t'data-test-id'?: string;\n\tid?: string;\n\tname?: string;\n};\n\nconst defaultFormatOptions: Intl.NumberFormatOptions = {\n\tmaximumFractionDigits: 6,\n};\n\n/**\n * @deprecated use `NumberField` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-numberfield--docs\n */\nconst useNumberField = ({\n\tclassName,\n\t'data-test-id': testId = 'input',\n\tid,\n\tname,\n\t...otherProps\n}: UseNumberFieldProps = {}): {\n\tfieldErrorProps: ReturnType<typeof useReactAriaNumberField>['errorMessageProps'];\n\tformHintProps: ReturnType<typeof useReactAriaNumberField>['descriptionProps'];\n\tlabelProps: ReturnType<typeof useReactAriaNumberField>['labelProps'];\n\trenderNumberField: () => JSX.Element;\n} => {\n\t// @react-aria's hooks have a state-updating effect somewhere that depends on \"formatOptions\",\n\t// so we need to memoize it to prevent an infinite render loop.\n\tconst formatOptions = useObjectMemo({\n\t\t...defaultFormatOptions,\n\t\t...otherProps.formatOptions,\n\t});\n\tconst { locale } = useLocale();\n\tconst numberFieldState = useNumberFieldState({ ...otherProps, locale, formatOptions });\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\tconst {\n\t\tdescriptionProps: formHintProps,\n\t\terrorMessageProps: fieldErrorProps,\n\t\tlabelProps,\n\t\tgroupProps,\n\t\tinputProps,\n\t\tincrementButtonProps,\n\t\tdecrementButtonProps,\n\t} = useReactAriaNumberField({ ...otherProps, formatOptions, id }, numberFieldState, inputRef);\n\n\treturn {\n\t\tfieldErrorProps,\n\t\tformHintProps,\n\t\tlabelProps,\n\t\trenderNumberField: () => (\n\t\t\t<div {...groupProps} className={styles.numberField}>\n\t\t\t\t<input\n\t\t\t\t\t{...inputProps}\n\t\t\t\t\tclassName={cx(styles.formInput, styles['numberField-input'])}\n\t\t\t\t\tdata-test-id={testId}\n\t\t\t\t\tname={name}\n\t\t\t\t\tref={inputRef}\n\t\t\t\t/>\n\t\t\t\t<div className={styles['numberField-stepperContainer']}>\n\t\t\t\t\t<Stepper {...incrementButtonProps}>\n\t\t\t\t\t\t<Icon name=\"chevron-up\" />\n\t\t\t\t\t</Stepper>\n\t\t\t\t\t<Stepper {...decrementButtonProps}>\n\t\t\t\t\t\t<Icon name=\"chevron-down\" />\n\t\t\t\t\t</Stepper>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t),\n\t};\n};\n\nconst Stepper = (props: AriaButtonProps) => {\n\tconst buttonRef = useRef<HTMLButtonElement>(null);\n\tconst { buttonProps } = useButton(props, buttonRef);\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\t{...buttonProps}\n\t\t\tclassName={styles['numberField-stepper']}\n\t\t\tref={buttonRef}\n\t\t>\n\t\t\t{props.children}\n\t\t</button>\n\t);\n};\n\nexport { useNumberField };\nexport type { UseNumberFieldProps };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["defaultFormatOptions: Intl.NumberFormatOptions"],"sources":["../src/styles/Form.module.css","../src/RequiredAsterisk.tsx","../src/Label.tsx","../src/Checkbox.tsx","../src/utils/index.ts","../src/TextField.tsx","../src/CompactTextField.tsx","../src/FieldError.tsx","../src/FieldSet.tsx","../src/Form.tsx","../src/FormGroup.tsx","../src/FormHint.tsx","../src/FormField.tsx","../src/IconField.tsx","../src/Radio.tsx","../src/RadioGroup.tsx","../src/SelectField.tsx","../src/TextArea.tsx","../src/useNumberField.tsx"],"sourcesContent":[":root,\n[data-theme='default'] {\n\t--lp-component-form-color-text-label-disabled: var(--lp-color-gray-800);\n}\n\n[data-theme='dark'] {\n\t--lp-component-form-color-text-label-disabled: var(--lp-color-gray-400);\n}\n\n.formGroup {\n\tmargin: 1.25rem 0;\n\tpadding: 0;\n\tborder: none;\n}\n\n/* The margin for .formGroup and the min-height of .form-fieldError\n should be equal to avoid content shift when errors are shown */\n.formIncreasedErrorMargin .formGroup {\n\tmargin: 1.75rem 0;\n}\n\n.formInline .formGroup {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n\tmargin: 0;\n}\n\n.form .formGroup:first-child {\n\tmargin-top: 0;\n}\n\n.form .formGroup:last-child {\n\tmargin-bottom: 0;\n}\n\n.formInput {\n\tdisplay: block;\n\twidth: 100%;\n\tpadding: 0.375rem 0.625rem;\n\tfont-size: 0.8125rem;\n\tfont-family: var(--lp-font-family-base);\n\tline-height: var(--lp-line-height-300);\n\tbackground-color: var(--lp-color-bg-field-base);\n\tcolor: var(--lp-color-text-ui-primary-base);\n\tborder: 1px solid var(--lp-color-border-field-base);\n\tborder-radius: var(--lp-border-radius-regular);\n\ttransition: all var(--lp-duration-100) linear;\n\theight: 2rem;\n}\n\n.formInput:placeholder-shown {\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n\n.formInput.isFocused,\n.formInput:focus {\n\toutline: 0;\n\tborder-color: var(--lp-color-border-field-focus);\n\tbox-shadow: 0 0 0 3px hsl(231.5 100% 62.5% / 0.1);\n}\n\nselect.formInput {\n\tappearance: none;\n\tbackground: transparent;\n\tbackground-image: url(\"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><path d='M7.41 8.84L12 13.42l4.59-4.58L18 10.25l-6 6-6-6 1.41-1.41z' fill='%23646f7a'/></svg>\");\n\tbackground-size: 1.25rem;\n\tbackground-repeat: no-repeat;\n\tbackground-position:\n\t\tright 0.4em top 50%,\n\t\t0 0;\n\tpadding-right: 1.25rem;\n}\n\n.suffixContainer .formInput {\n\tborder: none;\n\tborder-radius: var(--lp-border-radius-regular) 0 0 var(--lp-border-radius-regular);\n}\n\n.isInvalid .formInput,\n.form .isInvalid :global(.Select-control),\n.form .isInvalid :global(.CustomSelect) > div,\n.form .isInvalid .formInput {\n\tborder-color: var(--lp-color-border-field-error);\n}\n\n.iconField:global(.IconBefore) .formInput {\n\tpadding-left: 1.875rem;\n}\n\n.iconField:global(.IconAfter) .formInput {\n\tpadding-right: 1.875rem;\n}\n\n.iconFieldIcon {\n\tposition: absolute;\n\ttop: 50%;\n\ttransform: translateY(-50%);\n}\n\n.iconField:global(.IconBefore) .iconFieldIcon {\n\tleft: 0.625rem;\n}\n\n.iconField:global(.IconAfter) .iconFieldIcon {\n\tright: 0.625rem;\n}\n\n.suffixContainer .formInput:focus {\n\tbox-shadow: none;\n}\n\n.inlineForm .formGroup + .formGroup,\n.inlineForm .formGroup + :global([class*='_Button']) {\n\tmargin-left: 0.625rem;\n}\n\n.label {\n\tfont-size: 0.8125rem;\n\tfont-family: var(--lp-font-family-base);\n\tword-break: break-word;\n}\n\n.labelDisabled {\n\tcolor: var(--lp-component-form-color-text-label-disabled);\n}\n\n.labelOptional {\n\tmargin-left: 0.4em;\n\tcolor: var(--lp-color-text-ui-secondary);\n\tfill: var(--lp-color-text-ui-secondary);\n}\n\n.compactTextField .label {\n\tposition: absolute;\n\ttop: -2px;\n\tleft: 10px;\n\tpadding: 0 3px;\n\tcolor: var(--lp-color-text-ui-primary-base);\n\topacity: 0;\n\tpointer-events: none;\n\tbackground-color: var(--lp-color-bg-ui-primary);\n\ttransform-origin: 0 0; /* preserve left alignment after scaling */\n\ttransition: all var(--lp-duration-100) ease-in-out;\n\tz-index: 1; /* Fixes layout issue in Firefox */\n}\n\n.formGroup .label {\n\tdisplay: flex;\n\talign-items: center;\n\tmargin-bottom: 0.125rem;\n}\n\n.formGroup .label + .label {\n\tmargin-top: 0.3125rem;\n}\n\n.fieldError {\n\tcolor: var(--lp-color-text-feedback-error);\n\tfont-size: 0.8125rem;\n\n\t& svg {\n\t\ttransform: translateY(-1px);\n\t}\n}\n\n/* The margin for .formGroup and the min-height of .form-fieldError\n should be equal to avoid content shift when errors are shown */\n.formIncreasedErrorMargin .fieldError {\n\tmin-height: 1.75rem;\n}\n\n.label .fieldError {\n\tfloat: right;\n}\n\n.form:not(.inlineForm) .fieldError {\n\tdisplay: block;\n\tpadding-top: 0.3125rem;\n\ttext-align: left;\n}\n\n.formIncreasedErrorMargin:not(.inlineForm) .fieldError {\n\tpadding-top: 0.0625rem;\n\tpadding-bottom: 0.3125rem;\n}\n\n.form .isInvalid .label {\n\tcolor: var(--lp-color-text-feedback-error);\n}\n\n.formInput::placeholder {\n\tcolor: var(--lp-color-text-field-placeholder);\n}\n\n.formIncreasedErrorMargin .formGroup.isInvalid {\n\tmargin-bottom: 0;\n}\n\n.formIncreasedErrorMargin .formGroup.isInvalid + .formGroup {\n\tmargin-top: 0;\n}\n\n.hint {\n\tdisplay: block;\n\tmargin-top: 0.1875rem;\n\tfont-size: 0.8125rem;\n\tfont-weight: var(--lp-font-weight-regular);\n\tcolor: var(--lp-color-text-ui-secondary);\n}\n\n.field .hint {\n\tmargin: 0;\n\tfont-size: 0.8125rem;\n\tcolor: var(--lp-color-text-ui-secondary);\n\tfill: var(--lp-color-text-ui-secondary);\n}\n\n.form .field label,\n.form .field .isInvalid label {\n\tcolor: var(--lp-color-text-ui-primary-base);\n}\n\n.fieldErrorMessage {\n\tcolor: var(--lp-color-text-feedback-error);\n\tfont-size: 0.8125rem;\n}\n\n.field.formGroup {\n\tmargin: 0.625rem 0;\n}\n\n.field.formGroup:first-child {\n\tmargin-top: 0;\n}\n\n.formInput.isDisabled,\ninput.formInput:disabled,\nselect.formInput:disabled,\ninput.formInput:read-only {\n\topacity: 1;\n\tbackground-color: var(--lp-color-bg-field-disabled);\n\tcolor: var(--lp-color-text-field-disabled);\n\tborder-color: var(--lp-color-border-field-disabled);\n}\n\n.formInput.isDisabled:hover,\n.formInput:disabled:hover {\n\tcursor: not-allowed;\n}\n\ntextarea.formInput {\n\tmin-height: 2.5em;\n\theight: auto;\n\tresize: none;\n}\n\ntextarea.formInput:disabled,\ntextarea.formInput:read-only {\n\topacity: 1;\n\tcolor: var(--lp-color-text-field-disabled);\n\tbackground-color: var(--lp-color-bg-field-disabled);\n\tborder-color: var(--lp-color-border-field-disabled);\n}\n\ninput.formInput::-webkit-autofill {\n\tbox-shadow: 0 0 0 50px var(--lp-color-bg-field-base) inset;\n}\n\n/* Hide the type=search cancel button in Webkit for consistency */\ninput[type='search']::-webkit-search-decoration,\ninput[type='search']::-webkit-search-cancel-button,\ninput[type='search']::-webkit-search-results-button,\ninput[type='search']::-webkit-search-results-decoration {\n\tdisplay: none;\n}\n\n/* Hide the type=search cancel button in IE for consistency */\ninput[type='text']::-ms-clear,\ninput[type='text']::-ms-reveal {\n\tdisplay: none;\n\twidth: 0;\n\theight: 0;\n}\n\ninput[type='search']::-ms-clear,\ninput[type='search']::-ms-reveal {\n\tdisplay: none;\n\twidth: 0;\n\theight: 0;\n}\n\ninput[type='checkbox']:disabled {\n\tpointer-events: none;\n}\n\n.formInput[readonly],\n.formInput[readonly]:focus {\n\tcolor: var(--lp-color-text-ui-secondary);\n\tborder-color: var(--lp-color-gray-500);\n\tbox-shadow: none;\n}\n\n.checkbox {\n\talign-self: flex-start; /* Default for .label is center, but this looks bad on multi-line checkbox labels */\n\tflex-shrink: 0; /* Make sure the input itself doesn't shrink in flex layouts */\n\tmargin-right: 0.3125rem;\n\tmargin-top: 0.25rem;\n}\n\n.radio {\n\tmargin-right: 0.3125rem;\n}\n\n.number {\n\tmin-width: 2.8125rem;\n}\n\n.suffixContainer {\n\tdisplay: inline-flex;\n\tborder: 1px solid var(--lp-color-border-field-base);\n\tborder-radius: var(--lp-border-radius-regular);\n\toverflow: hidden;\n\ttransition: all 0.1s linear;\n}\n\n.suffixContainer:focus-within {\n\tborder-color: var(--lp-color-border-field-focus);\n\tbox-shadow: 0 0 0 3px hsl(231.5 100% 62.5% / 0.1);\n}\n\n.suffixContainer .suffix {\n\tpadding: 0 2px;\n\tbackground-color: light-dark(var(--lp-color-bg-ui-secondary), var(--lp-color-bg-ui-primary));\n\tcolor: var(--lp-color-text-ui-secondary);\n\tcursor: text;\n\tdisplay: inline-flex;\n\talign-items: center;\n\tposition: initial;\n}\n\n.suffix::-webkit-outer-spin-button,\n.suffix::-webkit-inner-spin-button {\n\tappearance: none;\n\tmargin: 0;\n}\n\n/* Firefox */\n.suffix[type='number'] {\n\tappearance: textfield;\n}\n\n.iconFieldIconFill {\n\tfill: var(--lp-color-fill-field-base);\n}\n\n[class*='_Popover-target'].iconFieldButton {\n\tdisplay: block;\n}\n\n.formInputTiny {\n\tpadding: 0.0625rem 0.375rem;\n\theight: 1.5rem;\n}\n\n.iconField {\n\tposition: relative;\n}\n\n.requiredAsterisk {\n\tcolor: var(--lp-color-text-feedback-error);\n}\n\n.fieldSet {\n\tborder: none;\n\tmargin: 1.25rem 0;\n\tpadding: 0;\n}\n\n.compactTextField {\n\tposition: relative;\n\twidth: 100%;\n}\n\n.compactTextField.isActive .label {\n\tborder-radius: var(--lp-border-radius-regular);\n\topacity: 1;\n\tpointer-events: auto;\n\ttransform: translate(0, -8px) scale(0.9); /* 2d transform to avoid webkit blurry text */\n}\n\n.numberField {\n\tdisplay: flex;\n\tposition: relative;\n\n\t& .numberField-input {\n\t\tpadding-right: 1.5rem;\n\t}\n\n\t& .numberField-stepperContainer {\n\t\tdisplay: flex;\n\t\topacity: 0;\n\t\tflex-direction: column;\n\t\tposition: absolute;\n\t\twidth: 1.5rem;\n\t\ttop: 1px;\n\t\tbottom: 1px;\n\t\tright: 1px;\n\t\ttransition: all var(--lp-duration-100) linear;\n\n\t\t& .numberField-stepper {\n\t\t\t--numberField-stepper-padding: 0.25rem;\n\t\t\t--numberField-stepper-border-radius: calc(var(--lp-border-radius-regular) - 0.0625rem);\n\n\t\t\tbackground-color: var(--lp-color-bg-field-base);\n\t\t\tflex: auto;\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: center;\n\t\t\talign-items: center;\n\t\t\tcursor: pointer;\n\t\t\tpadding: 0 var(--numberField-stepper-padding);\n\t\t\tborder: none;\n\t\t\tborder-radius: 0;\n\t\t\tmin-height: 1px;\n\t\t\toverflow: hidden;\n\n\t\t\t&:first-child {\n\t\t\t\tborder-top-right-radius: var(--numberField-stepper-border-radius);\n\t\t\t\tpadding-top: var(--numberField-stepper-padding);\n\t\t\t}\n\n\t\t\t&:last-child {\n\t\t\t\tborder-bottom-right-radius: var(--numberField-stepper-border-radius);\n\t\t\t\tpadding-bottom: var(--numberField-stepper-padding);\n\t\t\t}\n\n\t\t\t&:hover {\n\t\t\t\tbackground-color: var(--lp-color-bg-interactive-secondary-hover);\n\t\t\t}\n\n\t\t\t&:active {\n\t\t\t\tbackground-color: var(--lp-color-bg-interactive-secondary-active);\n\t\t\t}\n\n\t\t\t& span:has(svg) {\n\t\t\t\twidth: 100%;\n\t\t\t\tcolor: var(--lp-color-text-ui-primary-base);\n\t\t\t}\n\t\t}\n\t}\n\n\t&:hover,\n\t&:has(input:focus) {\n\t\t& .numberField-stepperContainer {\n\t\t\topacity: 1;\n\t\t}\n\t}\n}\n","import type { ComponentProps } from 'react';\n\nimport { cx } from 'classix';\n\nimport styles from './styles/Form.module.css';\n\ntype RequiredAsteriskProps = ComponentProps<'span'> & {\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `Label` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs\n */\nconst RequiredAsterisk = ({\n\tclassName,\n\t'data-test-id': testId = 'required-asterisk',\n\t...rest\n}: RequiredAsteriskProps) => {\n\tconst classes = cx(styles.requiredAsterisk, className);\n\n\treturn (\n\t\t<span {...rest} data-test-id={testId} className={classes}>\n\t\t\t*\n\t\t</span>\n\t);\n};\n\nexport { RequiredAsterisk };\nexport type { RequiredAsteriskProps };\n","import type { ComponentProps } from 'react';\n\nimport { cx } from 'classix';\n\nimport { RequiredAsterisk } from './RequiredAsterisk';\nimport styles from './styles/Form.module.css';\n\ntype LabelProps = ComponentProps<'label'> & {\n\trequired?: boolean;\n\toptional?: boolean;\n\tdisabled?: boolean;\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `Label` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs\n */\nconst Label = ({\n\tdisabled,\n\tclassName,\n\tchildren,\n\trequired = false,\n\toptional = false,\n\t'data-test-id': testId = 'label',\n\t...rest\n}: LabelProps) => {\n\tconst classes = cx(styles.label, className, disabled && styles.labelDisabled);\n\n\treturn (\n\t\t<label {...rest} data-test-id={testId} className={classes}>\n\t\t\t{children}\n\t\t\t{optional && !required && <small className={styles.labelOptional}>(optional)</small>}\n\t\t\t{required && !optional && <RequiredAsterisk />}\n\t\t</label>\n\t);\n};\n\nexport { Label };\nexport type { LabelProps };\n","import type { ComponentProps } from 'react';\n\nimport { forwardRef } from 'react';\n\nimport { Label } from './Label';\nimport styles from './styles/Form.module.css';\n\ntype CheckboxProps = ComponentProps<'input'> & {\n\t/**\n\t * The className to pass into the Checkbox's Label component\n\t */\n\tlabelClassName?: string;\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `Checkbox` or `CheckboxGroup` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-checkbox--docs\n */\nconst Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n\t(\n\t\t{\n\t\t\t'aria-label': ariaLabel,\n\t\t\t'aria-labelledby': ariaLabelledby,\n\t\t\tchildren,\n\t\t\tdisabled,\n\t\t\tchecked,\n\t\t\tlabelClassName,\n\t\t\t'data-test-id': testId = 'checkbox',\n\t\t\t...rest\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst hasAriaLabel = ariaLabel !== undefined || ariaLabelledby !== undefined;\n\t\tif (!children && !hasAriaLabel) {\n\t\t\tconsole.warn(\n\t\t\t\t'If you do not provide children, you must specify an aria-label for accessibility',\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<Label className={labelClassName}>\n\t\t\t\t<input\n\t\t\t\t\t{...rest}\n\t\t\t\t\tref={ref}\n\t\t\t\t\tchecked={checked}\n\t\t\t\t\taria-checked={checked ? 'true' : 'false'}\n\t\t\t\t\taria-label={ariaLabel}\n\t\t\t\t\taria-labelledby={ariaLabelledby}\n\t\t\t\t\tclassName={styles.checkbox}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\tdata-test-id={testId}\n\t\t\t\t/>{' '}\n\t\t\t\t{disabled ? <span className={styles.labelDisabled}>{children}</span> : children}\n\t\t\t</Label>\n\t\t);\n\t},\n);\n\nCheckbox.displayName = 'Checkbox';\n\nexport { Checkbox };\nexport type { CheckboxProps };\n","import { useMemo, useRef } from 'react';\n\ntype FieldPath = string | string[];\n\nconst createFieldErrorId = (fieldIdentifier?: FieldPath) =>\n\tfieldIdentifier ? `${[...fieldIdentifier].join('')}-err` : undefined;\n\nfunction hasObjectChanged<T extends object>(obj1: T, obj2: T): boolean {\n\treturn (\n\t\tObject.keys(obj1).length !== Object.keys(obj2).length ||\n\t\tObject.keys(obj1).some((k) => {\n\t\t\tconst key = k as keyof T;\n\t\t\treturn typeof obj1[key] === 'object' && typeof obj2[key] === 'object'\n\t\t\t\t? hasObjectChanged(obj1[key] as T, obj2[key] as T)\n\t\t\t\t: obj1[key] !== obj2[key];\n\t\t})\n\t);\n}\n\nfunction useObjectMemo<T extends object>(obj: T) {\n\tconst objRef = useRef(obj);\n\n\treturn useMemo(() => {\n\t\tif (hasObjectChanged(obj, objRef.current)) {\n\t\t\tobjRef.current = obj;\n\t\t}\n\n\t\treturn objRef.current;\n\t}, [obj]);\n}\n\nexport { createFieldErrorId, useObjectMemo };\nexport type { FieldPath };\n","import type { ComponentProps } from 'react';\n\nimport { cx } from 'classix';\nimport { forwardRef } from 'react';\n\nimport styles from './styles/Form.module.css';\nimport { createFieldErrorId } from './utils';\n\ntype TextFieldProps = ComponentProps<'input'> & {\n\tsuffix?: string;\n\ttiny?: boolean;\n\toverrideWidth?: string;\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `TextField` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs\n */\nconst TextField = forwardRef<HTMLInputElement, TextFieldProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\ttype = 'text',\n\t\t\ttiny = false,\n\t\t\treadOnly,\n\t\t\ttabIndex = 0,\n\t\t\tsuffix,\n\t\t\toverrideWidth,\n\t\t\t'data-test-id': testId = 'text-field',\n\t\t\tautoComplete,\n\t\t\t...rest\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst classes = overrideWidth\n\t\t\t? className\n\t\t\t: cx(styles.formInput, tiny && styles.formInputTiny, className);\n\n\t\tconst disablePasswordManagers = autoComplete === 'off';\n\n\t\tif (suffix) {\n\t\t\treturn (\n\t\t\t\t<div className={styles.suffixContainer}>\n\t\t\t\t\t<input\n\t\t\t\t\t\t{...rest}\n\t\t\t\t\t\ttype={type}\n\t\t\t\t\t\tdata-test-id={testId}\n\t\t\t\t\t\tautoComplete={autoComplete}\n\t\t\t\t\t\tclassName={classes}\n\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\taria-describedby={rest['aria-describedby'] || createFieldErrorId(rest.id)}\n\t\t\t\t\t/>\n\t\t\t\t\t<label className={styles.suffix} htmlFor={rest.id}>\n\t\t\t\t\t\t{suffix}\n\t\t\t\t\t</label>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn (\n\t\t\t<input\n\t\t\t\t{...rest}\n\t\t\t\tdata-1p-ignore={disablePasswordManagers} // \"data-1p-ignore\" is added to prevent 1Password from injecting a password autofill icon\n\t\t\t\ttype={type}\n\t\t\t\tclassName={classes}\n\t\t\t\treadOnly={readOnly}\n\t\t\t\ttabIndex={tabIndex}\n\t\t\t\tautoComplete={autoComplete}\n\t\t\t\tref={ref}\n\t\t\t\tdata-test-id={testId}\n\t\t\t\tstyle={\n\t\t\t\t\toverrideWidth\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\twidth: overrideWidth,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t\taria-describedby={rest['aria-describedby'] || createFieldErrorId(rest.id)}\n\t\t\t/>\n\t\t);\n\t},\n);\n\nTextField.displayName = 'TextField';\n\nexport { TextField };\nexport type { TextFieldProps };\n","import type { FocusEvent } from 'react';\nimport type { TextFieldProps } from './TextField';\n\nimport { cx } from 'classix';\nimport { forwardRef, useState } from 'react';\n\nimport { Label } from './Label';\nimport styles from './styles/Form.module.css';\nimport { TextField } from './TextField';\n\ntype CompactTextFieldProps = TextFieldProps & {\n\tlabel: string;\n\tneedsErrorFeedback?: boolean;\n};\n\n/**\n * @deprecated use `TextField` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs\n */\nconst CompactTextField = forwardRef<HTMLInputElement, CompactTextFieldProps>(\n\t(\n\t\t{\n\t\t\tclassName,\n\t\t\tid,\n\t\t\tlabel,\n\t\t\tneedsErrorFeedback,\n\t\t\tvalue,\n\t\t\tonFocus,\n\t\t\tonBlur,\n\t\t\t'data-test-id': testId = 'compact-text-field',\n\t\t\t...rest\n\t\t},\n\t\tref,\n\t) => {\n\t\tconst [isActive, setIsActive] = useState(\n\t\t\t(typeof value === 'boolean' || value ? value.toString() : '').trim().length !== 0,\n\t\t);\n\n\t\tconst isActiveState = isActive || needsErrorFeedback;\n\n\t\tconst classes = cx(styles.compactTextField, className, isActiveState && styles.isActive);\n\n\t\tconst placeholder = isActiveState ? '' : label;\n\n\t\tconst handleFocus = (event: FocusEvent<HTMLInputElement>) => {\n\t\t\tsetIsActive(true);\n\t\t\tif (onFocus) {\n\t\t\t\tonFocus(event);\n\t\t\t}\n\t\t};\n\n\t\tconst handleBlur = (event: FocusEvent<HTMLInputElement>) => {\n\t\t\tconst value = event.target.value || '';\n\t\t\tsetIsActive(value.trim().length !== 0);\n\t\t\tif (onBlur) {\n\t\t\t\tonBlur(event);\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t<div className={classes} data-test-id={testId}>\n\t\t\t\t<Label htmlFor={id}>{label}</Label>\n\t\t\t\t<TextField\n\t\t\t\t\t{...rest}\n\t\t\t\t\tid={id}\n\t\t\t\t\tplaceholder={placeholder}\n\t\t\t\t\tvalue={value}\n\t\t\t\t\tref={ref}\n\t\t\t\t\tonFocus={handleFocus}\n\t\t\t\t\tonBlur={handleBlur}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nCompactTextField.displayName = 'CompactTextField';\n\nexport { CompactTextField };\nexport type { CompactTextFieldProps };\n","import type { ComponentProps } from 'react';\nimport type { FieldPath } from './utils';\n\nimport { Icon } from '@launchpad-ui/icons';\nimport { cx } from 'classix';\n\nimport styles from './styles/Form.module.css';\nimport { createFieldErrorId } from './utils';\n\ntype FieldErrorProps = ComponentProps<'span'> & {\n\tname: FieldPath;\n\terrorMessage?: string;\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `FieldError` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs\n */\nconst FieldError = ({\n\tname,\n\terrorMessage,\n\tclassName,\n\t'data-test-id': testId = 'field-error',\n\t...rest\n}: FieldErrorProps) => {\n\tif (!errorMessage) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t// biome-ignore lint/a11y/useAriaPropsSupportedByRole: ignore\n\t\t<span\n\t\t\t{...rest}\n\t\t\tclassName={cx(styles.fieldError, className)}\n\t\t\taria-live=\"polite\"\n\t\t\tdata-test-id={testId}\n\t\t\taria-label=\"Error\"\n\t\t\tid={createFieldErrorId(name)}\n\t\t>\n\t\t\t<Icon name=\"alert-rhombus\" size=\"small\" /> {errorMessage}\n\t\t</span>\n\t);\n};\n\nexport { FieldError };\nexport type { FieldErrorProps };\n","import type { ComponentProps } from 'react';\n\nimport { cx } from 'classix';\n\nimport styles from './styles/Form.module.css';\n\ntype FieldSetProps = ComponentProps<'fieldset'> & {\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `FieldGroup` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-fieldgroup--docs\n */\nconst FieldSet = ({\n\tchildren,\n\tclassName,\n\t'data-test-id': testId = 'field-set',\n\t...rest\n}: FieldSetProps) => {\n\tconst classes = cx(styles.fieldSet, className);\n\n\treturn (\n\t\t<fieldset data-test-id={testId} className={classes} {...rest}>\n\t\t\t{children}\n\t\t</fieldset>\n\t);\n};\n\nexport { FieldSet };\nexport type { FieldSetProps };\n","import type { ComponentProps } from 'react';\n\nimport { cx } from 'classix';\n\nimport styles from './styles/Form.module.css';\n\ntype FormProps = ComponentProps<'form'> & {\n\tinline?: boolean;\n\t// Increases margin between form fields to make room for error messages.\n\t// This prevents the form from shifting when rendering a field error.\n\t// This may be desired when the form contains external links that will\n\t// shift while clicking if the form shifts from validation.\n\thasIncreasedErrorMargin?: boolean;\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `Form` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-form--docs\n */\nconst Form = (props: FormProps) => {\n\tconst {\n\t\tclassName,\n\t\tinline,\n\t\tchildren,\n\t\thasIncreasedErrorMargin,\n\t\t'data-test-id': testId = 'form',\n\t\t...rest\n\t} = props;\n\n\tconst classes = cx(\n\t\tstyles.form,\n\t\tclassName,\n\t\tinline && styles.formInline,\n\t\t!!hasIncreasedErrorMargin && styles.formIncreasedErrorMargin,\n\t);\n\n\treturn (\n\t\t<form {...rest} data-test-id={testId} className={classes}>\n\t\t\t{children}\n\t\t</form>\n\t);\n};\n\nexport { Form };\nexport type { FormProps };\n","import type { ComponentProps } from 'react';\n\nimport { cx } from 'classix';\n\nimport styles from './styles/Form.module.css';\n\ntype FormGroupProps = ComponentProps<'fieldset'> & {\n\tname?: string | string[];\n\tignoreValidation?: boolean;\n\tisInvalid?: boolean;\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `FieldGroup` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-fieldgroup--docs\n */\nconst FormGroup = (props: FormGroupProps) => {\n\tconst {\n\t\tclassName,\n\t\t// biome-ignore lint/correctness/noUnusedVariables: ignore\n\t\tname,\n\t\tignoreValidation,\n\t\tisInvalid,\n\t\tchildren,\n\t\t'data-test-id': testId = 'form-group',\n\t\t...rest\n\t} = props;\n\n\tconst classes = cx(\n\t\tstyles.formGroup,\n\t\tclassName,\n\t\t!ignoreValidation && isInvalid && styles.isInvalid,\n\t);\n\n\treturn (\n\t\t<fieldset className={classes} data-test-id={testId} {...rest}>\n\t\t\t{children}\n\t\t</fieldset>\n\t);\n};\n\nexport { FormGroup };\nexport type { FormGroupProps };\n","import type { ComponentProps } from 'react';\n\nimport { cx } from 'classix';\n\nimport styles from './styles/Form.module.css';\n\ntype FormHintProps = ComponentProps<'div'> & {\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `Text` with `[slot='description']` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs\n */\nconst FormHint = ({\n\tclassName,\n\tchildren,\n\t'data-test-id': testId = 'form-hint',\n\t...rest\n}: FormHintProps) => {\n\tconst classes = cx(styles.hint, className);\n\n\treturn (\n\t\t<div {...rest} data-test-id={testId} className={classes}>\n\t\t\t{children}\n\t\t</div>\n\t);\n};\n\nexport { FormHint };\nexport type { FormHintProps };\n","import type { JSX } from 'react';\nimport type { FieldErrorProps } from './FieldError';\nimport type { FormHintProps } from './FormHint';\nimport type { LabelProps } from './Label';\n\nimport { cx } from 'classix';\n\nimport { FieldError } from './FieldError';\nimport { FormGroup } from './FormGroup';\nimport { FormHint } from './FormHint';\nimport { Label } from './Label';\nimport styles from './styles/Form.module.css';\n\ntype FormFieldProps = {\n\tisRequired: boolean;\n\tlabel?: string;\n\tname: string;\n\thtmlFor: string;\n\thint?: string;\n\terrorMessage?: string;\n\tignoreValidation?: boolean;\n\tisInvalid?: boolean;\n\tchildren: JSX.Element;\n\tclassName?: string;\n\tonBlur?: (field: string) => void;\n\t'data-test-id'?: string;\n\tLabelProps?: Partial<LabelProps>;\n\tFormHintProps?: Partial<FormHintProps>;\n\tFieldErrorProps?: Partial<FieldErrorProps>;\n};\n\n/**\n * @deprecated use form elements from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs\n */\nconst FormField = ({\n\tisRequired,\n\tlabel,\n\tname,\n\thtmlFor,\n\thint,\n\terrorMessage,\n\tignoreValidation,\n\tisInvalid,\n\tchildren,\n\tclassName,\n\tonBlur,\n\t'data-test-id': testId = 'form-field',\n\tLabelProps = {},\n\tFormHintProps = {},\n\tFieldErrorProps = {},\n}: FormFieldProps) => {\n\tconst handleBlur = () => {\n\t\tonBlur?.(name);\n\t};\n\n\treturn (\n\t\t<FormGroup\n\t\t\tclassName={cx(styles.field, className)}\n\t\t\tname={name}\n\t\t\tignoreValidation={ignoreValidation}\n\t\t\tisInvalid={isInvalid}\n\t\t\tonBlur={handleBlur}\n\t\t\tdata-test-id={testId}\n\t\t>\n\t\t\t{label && (\n\t\t\t\t<Label htmlFor={htmlFor} required={isRequired} {...LabelProps}>\n\t\t\t\t\t{label}\n\t\t\t\t</Label>\n\t\t\t)}\n\t\t\t{hint && (\n\t\t\t\t<FormHint className={styles.hint} {...FormHintProps}>\n\t\t\t\t\t{hint}\n\t\t\t\t</FormHint>\n\t\t\t)}\n\t\t\t{children}\n\t\t\t<FieldError\n\t\t\t\tclassName={styles.fieldErrorMessage}\n\t\t\t\tname={name}\n\t\t\t\terrorMessage={errorMessage}\n\t\t\t\t{...FieldErrorProps}\n\t\t\t/>\n\t\t</FormGroup>\n\t);\n};\n\nexport type { FormFieldProps };\nexport { FormField };\n","import type { IconProps } from '@launchpad-ui/icons';\nimport type { ComponentProps, JSX, ReactElement } from 'react';\n\nimport { IconButton } from '@launchpad-ui/button';\nimport { Tooltip } from '@launchpad-ui/tooltip';\nimport { cx } from 'classix';\nimport { cloneElement } from 'react';\n\nimport styles from './styles/Form.module.css';\n\ntype IconFieldProps = ComponentProps<'div'> & {\n\ticon: ReactElement<IconProps>;\n\tchildren: JSX.Element | JSX.Element[];\n\t'data-test-id'?: string;\n\ttooltip?: string | JSX.Element;\n\trenderIconLast?: boolean;\n\tariaLabel?: string;\n};\n\n/**\n * @deprecated use `Group` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-content-group--docs\n */\nconst IconField = ({\n\ticon,\n\tchildren,\n\tclassName,\n\t'data-test-id': testId = 'icon-field',\n\ttooltip,\n\trenderIconLast = false,\n\tariaLabel = 'More info',\n\t...rest\n}: IconFieldProps) => {\n\tconst iconElement = cloneElement(icon, {\n\t\tsize: 'small',\n\t\tclassName: cx(styles.iconFieldIcon, styles.iconFieldIconFill),\n\t});\n\n\tconst classes = cx(styles.iconField, renderIconLast ? 'IconAfter' : 'IconBefore', className);\n\n\tconst renderIcon = tooltip ? (\n\t\t<Tooltip content={tooltip} targetClassName={styles.iconFieldButton}>\n\t\t\t<IconButton\n\t\t\t\ticon={cloneElement(icon, {\n\t\t\t\t\tclassName: styles.iconFieldIconFill,\n\t\t\t\t})}\n\t\t\t\tsize=\"small\"\n\t\t\t\tclassName={styles.iconFieldIcon}\n\t\t\t\tstyle={renderIconLast ? { right: '0.313rem' } : { left: '0.313rem' }}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t/>\n\t\t</Tooltip>\n\t) : (\n\t\ticonElement\n\t);\n\n\treturn (\n\t\t<div className={classes} data-test-id={testId} {...rest}>\n\t\t\t{!renderIconLast && renderIcon}\n\t\t\t{children}\n\t\t\t{renderIconLast && renderIcon}\n\t\t</div>\n\t);\n};\n\nexport { IconField };\nexport type { IconFieldProps };\n","import type { ComponentProps, CSSProperties } from 'react';\n\nimport { cx } from 'classix';\n\nimport { Label } from './Label';\nimport styles from './styles/Form.module.css';\n\ntype RadioProps = Omit<ComponentProps<'input'>, 'type'> & {\n\tlabelClassName?: string;\n\tlabelStyle?: CSSProperties;\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `RadioGroup` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-radiogroup--docs\n */\nconst Radio = ({\n\t'aria-label': ariaLabel,\n\t'aria-labelledby': ariaLabelledby,\n\tchecked = false,\n\tchildren,\n\tclassName,\n\tdisabled = false,\n\tid,\n\tlabelClassName,\n\tlabelStyle,\n\t'data-test-id': testId = 'radio',\n\t...rest\n}: RadioProps) => {\n\tconst hasAriaLabel = ariaLabel !== undefined || ariaLabelledby !== undefined;\n\n\tif (!children && !hasAriaLabel) {\n\t\tconsole.warn(\n\t\t\t'If you do not provide children, you must specify an aria-label for accessibility',\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<input\n\t\t\t\t{...rest}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\taria-labelledby={ariaLabelledby}\n\t\t\t\tclassName={cx(styles.radio, className)}\n\t\t\t\tchecked={checked}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tid={id}\n\t\t\t\tdata-test-id={testId}\n\t\t\t\ttype=\"radio\"\n\t\t\t/>\n\t\t\t<Label className={labelClassName} htmlFor={id} style={labelStyle}>\n\t\t\t\t{disabled ? <span className={styles.labelDisabled}>{children}</span> : children}\n\t\t\t</Label>\n\t\t</>\n\t);\n};\n\nexport { Radio };\nexport type { RadioProps };\n","import type { ChangeEvent, FormEvent, ReactElement, ReactNode } from 'react';\n\nimport { Children, cloneElement, isValidElement, useRef } from 'react';\nimport { VisuallyHidden } from 'react-aria/VisuallyHidden';\n\nimport { Label } from './Label';\nimport { Radio } from './Radio';\n\ntype RadioGroupProps = {\n\t/**\n\t * The legend that describes this groups of radio buttons. The legend\n\t * is important for screen reader users.\n\t */\n\tlegend?: string;\n\t/**\n\t * The children passed into the RadioGroup.\n\t */\n\tchildren?: ReactNode;\n\t/**\n\t * Custom classname(s) passed to the fieldset inner div.\n\t */\n\tclassName?: string;\n\t/**\n\t * Set the underlying Radio to disabled if the Radio's disabled prop is undefined.\n\t */\n\tdisabled?: boolean;\n\t/**\n\t * The RadioGroup's id.\n\t */\n\tid?: string;\n\t/**\n\t * Name to apply to the underlying Radio. The same name value is passed to each Radio when grouping in a RadioGroup for screen reader support.\n\t */\n\tname: string;\n\t/**\n\t * This function is passed into each Radio onChange synthetic event handler.\n\t */\n\tonChange?(e: ChangeEvent | FormEvent<HTMLInputElement>): void;\n\t/**\n\t * The value to compare against the Radio's value to determine if the Radio will be checked.\n\t */\n\tvalue: string;\n\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `RadioGroup` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-radiogroup--docs\n */\nconst RadioGroup = (props: RadioGroupProps) => {\n\tconst {\n\t\tname,\n\t\tvalue,\n\t\tonChange,\n\t\tchildren,\n\t\tdisabled,\n\t\tlegend,\n\t\t'data-test-id': testId = 'radio-group',\n\t\t...rest\n\t} = props;\n\tconst fieldsetRef = useRef<HTMLFieldSetElement>(null);\n\n\tfunction updateRadioElems(elem: ReactNode): ReactNode {\n\t\tif (!isValidElement(elem)) {\n\t\t\treturn elem;\n\t\t}\n\n\t\t// biome-ignore lint/suspicious/noExplicitAny: ignore\n\t\tconst item = elem as ReactElement<any>;\n\n\t\tif (item?.type && item.type === Radio) {\n\t\t\treturn cloneElement(item, {\n\t\t\t\t...item.props,\n\t\t\t\tname,\n\t\t\t\tchecked: item.props.value === value,\n\t\t\t\tonChange,\n\t\t\t\tdisabled: typeof item.props?.disabled !== 'undefined' ? item.props.disabled : disabled,\n\t\t\t});\n\t\t}\n\n\t\tif (item?.type && item.type === Label) {\n\t\t\treturn cloneElement(item, {\n\t\t\t\t...item.props,\n\t\t\t\tonChange,\n\t\t\t\tdisabled,\n\t\t\t});\n\t\t}\n\n\t\tconst elemChildren = item?.props?.children;\n\t\tif (elemChildren) {\n\t\t\tif (Array.isArray(elemChildren)) {\n\t\t\t\treturn cloneElement(item, {\n\t\t\t\t\tchildren: Children.map(elemChildren, (elemChild) => updateRadioElems(elemChild)),\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn cloneElement(item, {\n\t\t\t\tchildren: updateRadioElems(elemChildren),\n\t\t\t});\n\t\t}\n\n\t\tif (item?.type && item.type !== Radio && item.type !== Label) {\n\t\t\treturn item;\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tconst radios = Children.map(children, (child) => updateRadioElems(child));\n\treturn (\n\t\t<fieldset data-test-id={testId} ref={fieldsetRef}>\n\t\t\t{legend && (\n\t\t\t\t<legend>\n\t\t\t\t\t<VisuallyHidden>{legend}</VisuallyHidden>\n\t\t\t\t</legend>\n\t\t\t)}\n\t\t\t<div {...rest}>{radios}</div>\n\t\t</fieldset>\n\t);\n};\n\nexport { RadioGroup };\nexport type { RadioGroupProps };\n","import type { ComponentProps } from 'react';\n\nimport { cx } from 'classix';\nimport { forwardRef } from 'react';\n\nimport styles from './styles/Form.module.css';\n\ntype SelectFieldProps = ComponentProps<'select'> & {\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `Select` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-pickers-select--docs\n */\nconst SelectField = forwardRef<HTMLSelectElement, SelectFieldProps>(\n\t({ className, children, 'data-test-id': testId = 'select', ...rest }: SelectFieldProps, ref) => {\n\t\tconst classes = cx(styles.formInput, className);\n\n\t\treturn (\n\t\t\t<select {...rest} data-test-id={testId} className={classes} ref={ref}>\n\t\t\t\t{children}\n\t\t\t</select>\n\t\t);\n\t},\n);\n\nSelectField.displayName = 'SelectField';\n\nexport { SelectField };\nexport type { SelectFieldProps };\n","import type { ComponentProps, KeyboardEvent } from 'react';\n\nimport { cx } from 'classix';\nimport { forwardRef } from 'react';\n\nimport styles from './styles/Form.module.css';\nimport { createFieldErrorId } from './utils';\n\ntype TextAreaProps = ComponentProps<'textarea'> & {\n\t'data-test-id'?: string;\n};\n\n/**\n * @deprecated use `TextArea` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-textfield--docs#multi%20line\n */\nconst TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(\n\t({ className, 'data-test-id': testId = 'text-area', ...props }, ref) => {\n\t\tconst onKeyDown = (e: KeyboardEvent<HTMLTextAreaElement>) => {\n\t\t\tif (\n\t\t\t\te.key === 'ArrowRight' ||\n\t\t\t\te.key === 'ArrowDown' ||\n\t\t\t\te.key === 'ArrowUp' ||\n\t\t\t\te.key === 'ArrowLeft'\n\t\t\t) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t\tif (e.key === 'Escape') {\n\t\t\t\te.nativeEvent.stopImmediatePropagation();\n\t\t\t}\n\t\t};\n\n\t\treturn (\n\t\t\t<textarea\n\t\t\t\t{...props}\n\t\t\t\tclassName={cx(styles.formInput, className)}\n\t\t\t\tref={ref}\n\t\t\t\tdata-test-id={testId}\n\t\t\t\taria-describedby={props['aria-describedby'] || createFieldErrorId(props.id)}\n\t\t\t\tonKeyDown={onKeyDown}\n\t\t\t/>\n\t\t);\n\t},\n);\n\nTextArea.displayName = 'TextArea';\n\nexport { TextArea };\nexport type { TextAreaProps };\n","import type { JSX } from 'react';\n\nimport { Icon } from '@launchpad-ui/icons';\nimport { cx } from 'classix';\nimport { useRef } from 'react';\nimport { useLocale } from 'react-aria/I18nProvider';\nimport { type AriaButtonProps, useButton } from 'react-aria/useButton';\nimport {\n\ttype AriaNumberFieldProps,\n\tuseNumberField as useReactAriaNumberField,\n} from 'react-aria/useNumberField';\nimport { useNumberFieldState } from 'react-stately/useNumberFieldState';\n\nimport styles from './styles/Form.module.css';\nimport { useObjectMemo } from './utils';\n\ntype UseNumberFieldProps = AriaNumberFieldProps & {\n\tclassName?: string;\n\t'data-test-id'?: string;\n\tid?: string;\n\tname?: string;\n};\n\nconst defaultFormatOptions: Intl.NumberFormatOptions = {\n\tmaximumFractionDigits: 6,\n};\n\n/**\n * @deprecated use `NumberField` from `@launchpad-ui/components` instead\n *\n * https://launchpad.launchdarkly.com/?path=/docs/components-forms-numberfield--docs\n */\nconst useNumberField = ({\n\tclassName,\n\t'data-test-id': testId = 'input',\n\tid,\n\tname,\n\t...otherProps\n}: UseNumberFieldProps = {}): {\n\tfieldErrorProps: ReturnType<typeof useReactAriaNumberField>['errorMessageProps'];\n\tformHintProps: ReturnType<typeof useReactAriaNumberField>['descriptionProps'];\n\tlabelProps: ReturnType<typeof useReactAriaNumberField>['labelProps'];\n\trenderNumberField: () => JSX.Element;\n} => {\n\t// @react-aria's hooks have a state-updating effect somewhere that depends on \"formatOptions\",\n\t// so we need to memoize it to prevent an infinite render loop.\n\tconst formatOptions = useObjectMemo({\n\t\t...defaultFormatOptions,\n\t\t...otherProps.formatOptions,\n\t});\n\tconst { locale } = useLocale();\n\tconst numberFieldState = useNumberFieldState({ ...otherProps, locale, formatOptions });\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\tconst {\n\t\tdescriptionProps: formHintProps,\n\t\terrorMessageProps: fieldErrorProps,\n\t\tlabelProps,\n\t\tgroupProps,\n\t\tinputProps,\n\t\tincrementButtonProps,\n\t\tdecrementButtonProps,\n\t} = useReactAriaNumberField({ ...otherProps, formatOptions, id }, numberFieldState, inputRef);\n\n\treturn {\n\t\tfieldErrorProps,\n\t\tformHintProps,\n\t\tlabelProps,\n\t\trenderNumberField: () => (\n\t\t\t<div {...groupProps} className={styles.numberField}>\n\t\t\t\t<input\n\t\t\t\t\t{...inputProps}\n\t\t\t\t\tclassName={cx(styles.formInput, styles['numberField-input'])}\n\t\t\t\t\tdata-test-id={testId}\n\t\t\t\t\tname={name}\n\t\t\t\t\tref={inputRef}\n\t\t\t\t/>\n\t\t\t\t<div className={styles['numberField-stepperContainer']}>\n\t\t\t\t\t<Stepper {...incrementButtonProps}>\n\t\t\t\t\t\t<Icon name=\"chevron-up\" />\n\t\t\t\t\t</Stepper>\n\t\t\t\t\t<Stepper {...decrementButtonProps}>\n\t\t\t\t\t\t<Icon name=\"chevron-down\" />\n\t\t\t\t\t</Stepper>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t),\n\t};\n};\n\nconst Stepper = (props: AriaButtonProps) => {\n\tconst buttonRef = useRef<HTMLButtonElement>(null);\n\tconst { buttonProps } = useButton(props, buttonRef);\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\t{...buttonProps}\n\t\t\tclassName={styles['numberField-stepper']}\n\t\t\tref={buttonRef}\n\t\t>\n\t\t\t{props.children}\n\t\t</button>\n\t);\n};\n\nexport { useNumberField };\nexport type { UseNumberFieldProps };\n"],"mappings":"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"}
|