@octavius2929-personal/design-system 0.12.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -62,6 +62,7 @@ __export(index_exports, {
62
62
  Switch: () => Switch,
63
63
  Table: () => Table,
64
64
  Tabs: () => Tabs,
65
+ TestIdProvider: () => TestIdProvider,
65
66
  TextField: () => TextField,
66
67
  ThemeProvider: () => ThemeProvider,
67
68
  Tooltip: () => Tooltip,
@@ -75,6 +76,7 @@ __export(index_exports, {
75
76
  theme: () => vars,
76
77
  themes: () => themes,
77
78
  usePrevious: () => usePrevious,
79
+ useTestId: () => useTestId,
78
80
  useTheme: () => useTheme,
79
81
  useToggle: () => useToggle
80
82
  });
@@ -106,7 +108,47 @@ function useToggle(initial = false) {
106
108
  }
107
109
 
108
110
  // src/components/container/index.tsx
111
+ var import_react5 = require("react");
112
+
113
+ // src/testing/use-test-id.ts
114
+ var import_react4 = require("react");
115
+
116
+ // src/testing/compose.ts
117
+ function normalizeSegment(seg) {
118
+ return seg.trim().replace(/([a-z0-9])([A-Z])/g, "$1-$2").replace(/[\s_]+/g, "-").toLowerCase();
119
+ }
120
+ function composeTestId(parts) {
121
+ return parts.filter((p) => typeof p === "string" && p.trim() !== "").map(normalizeSegment).join("__");
122
+ }
123
+
124
+ // src/testing/context/test-id-context.tsx
109
125
  var import_react3 = require("react");
126
+ var import_jsx_runtime = require("react/jsx-runtime");
127
+ var TestIdContext = (0, import_react3.createContext)([]);
128
+ function TestIdProvider({ context, children }) {
129
+ const parent = (0, import_react3.useContext)(TestIdContext);
130
+ const value = (0, import_react3.useMemo)(
131
+ () => [...parent, normalizeSegment(context)].filter((seg) => seg !== ""),
132
+ [parent, context]
133
+ );
134
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TestIdContext.Provider, { value, children });
135
+ }
136
+ function useTestIdContext() {
137
+ return (0, import_react3.useContext)(TestIdContext);
138
+ }
139
+
140
+ // src/testing/use-test-id.ts
141
+ function useTestId(type, ownTestId) {
142
+ const ctx = useTestIdContext();
143
+ const testId = composeTestId([type, ...ctx, ownTestId]);
144
+ return (0, import_react4.useMemo)(
145
+ () => ({
146
+ testId,
147
+ slot: (name) => `${testId}__${normalizeSegment(name)}`
148
+ }),
149
+ [testId]
150
+ );
151
+ }
110
152
 
111
153
  // src/theme/styles/sprinkles/index.css.ts
112
154
  var import_createRuntimeSprinkles = require("@vanilla-extract/sprinkles/createRuntimeSprinkles");
@@ -128,25 +170,26 @@ function useStyles(props) {
128
170
  }
129
171
 
130
172
  // src/components/container/index.tsx
131
- var import_jsx_runtime = require("react/jsx-runtime");
132
- function ContainerImpl({ as, ...props }, ref) {
173
+ var import_jsx_runtime2 = require("react/jsx-runtime");
174
+ function ContainerImpl({ as, testId, ...props }, ref) {
133
175
  const Component = as ?? "div";
134
176
  const { className, rest } = useStyles(props);
135
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Component, { ref, ...rest, className });
177
+ const { testId: dataTestId } = useTestId("layout", testId);
178
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(Component, { ref, "data-testid": dataTestId, ...rest, className });
136
179
  }
137
- var ContainerForwarded = (0, import_react3.forwardRef)(ContainerImpl);
180
+ var ContainerForwarded = (0, import_react5.forwardRef)(ContainerImpl);
138
181
  ContainerForwarded.displayName = "Container";
139
182
  var Container = ContainerForwarded;
140
183
 
141
184
  // src/components/typography/index.tsx
142
- var import_react6 = require("react");
185
+ var import_react8 = require("react");
143
186
 
144
187
  // src/components/typography/use-styles.ts
145
- var import_react5 = require("react");
188
+ var import_react7 = require("react");
146
189
 
147
190
  // src/theme/context/theme-context.tsx
148
- var import_react4 = require("react");
149
- var import_jsx_runtime2 = require("react/jsx-runtime");
191
+ var import_react6 = require("react");
192
+ var import_jsx_runtime3 = require("react/jsx-runtime");
150
193
  var noop = () => {
151
194
  };
152
195
  var DEFAULT_VALUE = {
@@ -159,7 +202,7 @@ var DEFAULT_VALUE = {
159
202
  toggleMode: noop,
160
203
  cycleMode: noop
161
204
  };
162
- var ThemeContext = (0, import_react4.createContext)(null);
205
+ var ThemeContext = (0, import_react6.createContext)(null);
163
206
  function resolveSystemMode() {
164
207
  if (typeof window === "undefined" || typeof window.matchMedia !== "function") return "light";
165
208
  if (window.matchMedia("(prefers-contrast: more)").matches) return "contrast";
@@ -189,14 +232,14 @@ function ThemeProvider({
189
232
  storageKey = "ds-theme",
190
233
  persist = true
191
234
  }) {
192
- const [schema, setSchema] = (0, import_react4.useState)(
235
+ const [schema, setSchema] = (0, import_react6.useState)(
193
236
  () => persist && readStored(storageKey)?.schema || defaultSchema
194
237
  );
195
- const [preference, setPreference] = (0, import_react4.useState)(
238
+ const [preference, setPreference] = (0, import_react6.useState)(
196
239
  () => (persist ? readStored(storageKey)?.preference : null) ?? defaultMode
197
240
  );
198
- const [systemMode, setSystemMode] = (0, import_react4.useState)(resolveSystemMode);
199
- (0, import_react4.useEffect)(() => {
241
+ const [systemMode, setSystemMode] = (0, import_react6.useState)(resolveSystemMode);
242
+ (0, import_react6.useEffect)(() => {
200
243
  if (preference !== "system") return;
201
244
  if (typeof window === "undefined" || typeof window.matchMedia !== "function") return;
202
245
  const mqls = ["(prefers-contrast: more)", "(prefers-color-scheme: dark)"].map(
@@ -210,10 +253,10 @@ function ThemeProvider({
210
253
  };
211
254
  }, [preference]);
212
255
  const mode = preference === "system" ? systemMode : preference;
213
- (0, import_react4.useEffect)(() => {
256
+ (0, import_react6.useEffect)(() => {
214
257
  if (persist) writeStored(storageKey, { schema, preference });
215
258
  }, [schema, preference, persist, storageKey]);
216
- const value = (0, import_react4.useMemo)(
259
+ const value = (0, import_react6.useMemo)(
217
260
  () => ({
218
261
  schema,
219
262
  mode,
@@ -229,10 +272,10 @@ function ThemeProvider({
229
272
  }),
230
273
  [schema, mode, preference]
231
274
  );
232
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(ThemeContext.Provider, { value, children });
275
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(ThemeContext.Provider, { value, children });
233
276
  }
234
277
  function useTheme() {
235
- return (0, import_react4.useContext)(ThemeContext) ?? DEFAULT_VALUE;
278
+ return (0, import_react6.useContext)(ThemeContext) ?? DEFAULT_VALUE;
236
279
  }
237
280
 
238
281
  // src/theme/typography.css.ts
@@ -250,7 +293,7 @@ function useStyles2({
250
293
  align: align2
251
294
  }) {
252
295
  const { themeClass } = useTheme();
253
- const className = (0, import_react5.useMemo)(
296
+ const className = (0, import_react7.useMemo)(
254
297
  () => [
255
298
  themeClass,
256
299
  base,
@@ -264,7 +307,7 @@ function useStyles2({
264
307
  }
265
308
 
266
309
  // src/components/typography/index.tsx
267
- var import_jsx_runtime3 = require("react/jsx-runtime");
310
+ var import_jsx_runtime4 = require("react/jsx-runtime");
268
311
  var defaultElement = {
269
312
  display: "h1",
270
313
  h1: "h1",
@@ -279,22 +322,29 @@ var defaultElement = {
279
322
  code: "code",
280
323
  blackletter: "span"
281
324
  };
282
- function TypographyInner({ variant: variant2, as, color: color2, align: align2, ...rest }, ref) {
325
+ function TypographyInner({ variant: variant2, as, color: color2, align: align2, testId, ...rest }, ref) {
283
326
  const Component = as ?? defaultElement[variant2];
284
327
  const { text: text2 } = useStyles2({ variant: variant2, color: color2, align: align2 });
285
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Component, { ref, ...rest, className: text2 });
328
+ const { testId: dataTestId } = useTestId("text", testId);
329
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Component, { ref, "data-testid": dataTestId, ...rest, className: text2 });
286
330
  }
287
- var TypographyForwarded = (0, import_react6.forwardRef)(
331
+ var TypographyForwarded = (0, import_react8.forwardRef)(
288
332
  TypographyInner
289
333
  );
290
334
  TypographyForwarded.displayName = "Typography";
291
335
  var Typography = TypographyForwarded;
292
336
 
293
337
  // src/components/button/index.tsx
294
- var import_react8 = require("react");
338
+ var import_react10 = require("react");
339
+
340
+ // src/testing/states.ts
341
+ function states(map) {
342
+ const active2 = Object.keys(map).filter((key) => map[key]);
343
+ return active2.length > 0 ? active2.join(" ") : void 0;
344
+ }
295
345
 
296
346
  // src/components/button/use-styles.ts
297
- var import_react7 = require("react");
347
+ var import_react9 = require("react");
298
348
 
299
349
  // src/components/button/use-styles.css.ts
300
350
  var full = "use-styles_full__1pbtill4";
@@ -315,7 +365,7 @@ function useStyles3({
315
365
  className
316
366
  }) {
317
367
  const { themeClass } = useTheme();
318
- const container = (0, import_react7.useMemo)(
368
+ const container = (0, import_react9.useMemo)(
319
369
  () => [
320
370
  themeClass,
321
371
  root,
@@ -330,9 +380,9 @@ function useStyles3({
330
380
  }
331
381
 
332
382
  // src/components/button/index.tsx
333
- var import_jsx_runtime4 = require("react/jsx-runtime");
383
+ var import_jsx_runtime5 = require("react/jsx-runtime");
334
384
  var ICON_SIZE = { sm: 14, md: 16, lg: 18 };
335
- var Button = (0, import_react8.forwardRef)(function Button2({
385
+ var Button = (0, import_react10.forwardRef)(function Button2({
336
386
  variant: variant2,
337
387
  tone: tone4,
338
388
  size: size3 = "md",
@@ -341,23 +391,36 @@ var Button = (0, import_react8.forwardRef)(function Button2({
341
391
  full: full2,
342
392
  className,
343
393
  type = "button",
394
+ testId,
344
395
  children,
345
396
  ...rest
346
397
  }, ref) {
347
398
  const { container } = useStyles3({ variant: variant2, tone: tone4, size: size3, full: full2, className });
399
+ const { testId: dataTestId } = useTestId("button", testId);
348
400
  const iconSize = ICON_SIZE[size3];
349
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)("button", { ref, type, className: container, ...rest, children: [
350
- StartIcon && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(StartIcon, { size: iconSize }),
351
- children,
352
- EndIcon && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(EndIcon, { size: iconSize })
353
- ] });
401
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
402
+ "button",
403
+ {
404
+ ref,
405
+ type,
406
+ className: container,
407
+ "data-testid": dataTestId,
408
+ "data-state": states({ disabled: rest.disabled }),
409
+ ...rest,
410
+ children: [
411
+ StartIcon && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(StartIcon, { size: iconSize }),
412
+ children,
413
+ EndIcon && /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(EndIcon, { size: iconSize })
414
+ ]
415
+ }
416
+ );
354
417
  });
355
418
 
356
419
  // src/components/divider/index.tsx
357
- var import_react10 = require("react");
420
+ var import_react12 = require("react");
358
421
 
359
422
  // src/components/divider/use-styles.ts
360
- var import_react9 = require("react");
423
+ var import_react11 = require("react");
361
424
 
362
425
  // src/components/divider/use-styles.css.ts
363
426
  var horizontal = "use-styles_horizontal__1n7v7yj1";
@@ -370,7 +433,7 @@ var vertical = "use-styles_vertical__1n7v7yj2";
370
433
  // src/components/divider/use-styles.ts
371
434
  function useStyles4({ vertical: vertical2, hasLabel }) {
372
435
  const { themeClass } = useTheme();
373
- const root24 = (0, import_react9.useMemo)(
436
+ const root24 = (0, import_react11.useMemo)(
374
437
  () => [
375
438
  themeClass,
376
439
  root2,
@@ -382,25 +445,26 @@ function useStyles4({ vertical: vertical2, hasLabel }) {
382
445
  }
383
446
 
384
447
  // src/components/divider/index.tsx
385
- var import_jsx_runtime5 = require("react/jsx-runtime");
386
- var Divider = (0, import_react10.forwardRef)(function Divider2({ vertical: vertical2, label: label7, ...rest }, ref) {
448
+ var import_jsx_runtime6 = require("react/jsx-runtime");
449
+ var Divider = (0, import_react12.forwardRef)(function Divider2({ vertical: vertical2, label: label7, testId, ...rest }, ref) {
387
450
  const hasLabel = label7 != null;
388
451
  const { root: root24, line: line2, label: labelClass } = useStyles4({ vertical: vertical2, hasLabel });
452
+ const { testId: dataTestId, slot } = useTestId("layout", testId);
389
453
  if (hasLabel) {
390
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { ref, role: "separator", className: root24, ...rest, children: [
391
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: line2 }),
392
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: labelClass, children: label7 }),
393
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("span", { className: line2 })
454
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)("div", { ref, role: "separator", className: root24, "data-testid": dataTestId, ...rest, children: [
455
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: line2 }),
456
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: labelClass, "data-testid": slot("label"), children: label7 }),
457
+ /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: line2 })
394
458
  ] });
395
459
  }
396
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { ref, role: "separator", className: root24, ...rest });
460
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { ref, role: "separator", className: root24, "data-testid": dataTestId, ...rest });
397
461
  });
398
462
 
399
463
  // src/components/avatar/index.tsx
400
- var import_react12 = require("react");
464
+ var import_react14 = require("react");
401
465
 
402
466
  // src/components/avatar/use-styles.ts
403
- var import_react11 = require("react");
467
+ var import_react13 = require("react");
404
468
 
405
469
  // src/components/avatar/use-styles.css.ts
406
470
  var root3 = "use-styles_root__1mn1rmu0";
@@ -414,7 +478,7 @@ function useStyles5({
414
478
  className
415
479
  }) {
416
480
  const { themeClass } = useTheme();
417
- const root24 = (0, import_react11.useMemo)(
481
+ const root24 = (0, import_react13.useMemo)(
418
482
  () => [
419
483
  themeClass,
420
484
  root3,
@@ -428,17 +492,18 @@ function useStyles5({
428
492
  }
429
493
 
430
494
  // src/components/avatar/index.tsx
431
- var import_jsx_runtime6 = require("react/jsx-runtime");
432
- var Avatar = (0, import_react12.forwardRef)(function Avatar2({ size: size3, filled, className, children, ...rest }, ref) {
495
+ var import_jsx_runtime7 = require("react/jsx-runtime");
496
+ var Avatar = (0, import_react14.forwardRef)(function Avatar2({ size: size3, filled, className, children, testId, ...rest }, ref) {
433
497
  const { root: root24 } = useStyles5({ size: size3, filled, className });
434
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { ref, className: root24, ...rest, children });
498
+ const { testId: dataTestId } = useTestId("media", testId);
499
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { ref, className: root24, "data-testid": dataTestId, ...rest, children });
435
500
  });
436
501
 
437
502
  // src/components/badge/index.tsx
438
- var import_react14 = require("react");
503
+ var import_react16 = require("react");
439
504
 
440
505
  // src/components/badge/use-styles.ts
441
- var import_react13 = require("react");
506
+ var import_react15 = require("react");
442
507
 
443
508
  // src/components/badge/use-styles.css.ts
444
509
  var dot = "use-styles_dot__1wpei6p1";
@@ -451,29 +516,30 @@ function useStyles6({
451
516
  className
452
517
  }) {
453
518
  const { themeClass } = useTheme();
454
- const root24 = (0, import_react13.useMemo)(
519
+ const root24 = (0, import_react15.useMemo)(
455
520
  () => [themeClass, root4, className].filter(Boolean).join(" "),
456
521
  [themeClass, className]
457
522
  );
458
- const dot3 = (0, import_react13.useMemo)(() => [dot, tone2[tone4]].join(" "), [tone4]);
523
+ const dot3 = (0, import_react15.useMemo)(() => [dot, tone2[tone4]].join(" "), [tone4]);
459
524
  return { root: root24, dot: dot3 };
460
525
  }
461
526
 
462
527
  // src/components/badge/index.tsx
463
- var import_jsx_runtime7 = require("react/jsx-runtime");
464
- var Badge = (0, import_react14.forwardRef)(function Badge2({ count, tone: tone4, className, children, ...rest }, ref) {
528
+ var import_jsx_runtime8 = require("react/jsx-runtime");
529
+ var Badge = (0, import_react16.forwardRef)(function Badge2({ count, tone: tone4, className, children, testId, ...rest }, ref) {
465
530
  const { root: root24, dot: dot3 } = useStyles6({ tone: tone4, className });
466
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("span", { ref, className: root24, ...rest, children: [
531
+ const { testId: dataTestId, slot } = useTestId("media", testId);
532
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)("span", { ref, className: root24, "data-testid": dataTestId, ...rest, children: [
467
533
  children,
468
- count != null && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: dot3, children: count })
534
+ count != null && /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: dot3, "data-testid": slot("dot"), children: count })
469
535
  ] });
470
536
  });
471
537
 
472
538
  // src/components/progress/index.tsx
473
- var import_react16 = require("react");
539
+ var import_react18 = require("react");
474
540
 
475
541
  // src/components/progress/use-styles.ts
476
- var import_react15 = require("react");
542
+ var import_react17 = require("react");
477
543
 
478
544
  // src/components/progress/use-styles.css.ts
479
545
  var bar = "use-styles_bar__kbop7v3";
@@ -489,7 +555,7 @@ function useStyles7({
489
555
  }) {
490
556
  const { themeClass } = useTheme();
491
557
  const indeterminate2 = value === void 0;
492
- return (0, import_react15.useMemo)(() => {
558
+ return (0, import_react17.useMemo)(() => {
493
559
  const root24 = (...classes) => [themeClass, ...classes, className].filter(Boolean).join(" ");
494
560
  if (variant2 === "circular") {
495
561
  return { track: "", bar: "", spinner: root24(spinner) };
@@ -503,12 +569,13 @@ function useStyles7({
503
569
  }
504
570
 
505
571
  // src/components/progress/index.tsx
506
- var import_jsx_runtime8 = require("react/jsx-runtime");
507
- var Progress = (0, import_react16.forwardRef)(function Progress2({ variant: variant2 = "linear", value, size: size3 = 20, className, ...rest }, ref) {
572
+ var import_jsx_runtime9 = require("react/jsx-runtime");
573
+ var Progress = (0, import_react18.forwardRef)(function Progress2({ variant: variant2 = "linear", value, size: size3 = 20, className, testId, ...rest }, ref) {
508
574
  const { track: track4, bar: bar2, spinner: spinner2 } = useStyles7({ variant: variant2, value, className });
509
575
  const indeterminate2 = value === void 0;
576
+ const { testId: dataTestId, slot } = useTestId("media", testId);
510
577
  if (variant2 === "circular") {
511
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
578
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
512
579
  "span",
513
580
  {
514
581
  ref,
@@ -518,11 +585,13 @@ var Progress = (0, import_react16.forwardRef)(function Progress2({ variant: vari
518
585
  "aria-valuemin": indeterminate2 ? void 0 : 0,
519
586
  "aria-valuemax": indeterminate2 ? void 0 : 100,
520
587
  style: { width: size3, height: size3 },
588
+ "data-testid": dataTestId,
589
+ "data-state": states({ indeterminate: indeterminate2 }),
521
590
  ...rest
522
591
  }
523
592
  );
524
593
  }
525
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
594
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
526
595
  "div",
527
596
  {
528
597
  ref,
@@ -531,19 +600,28 @@ var Progress = (0, import_react16.forwardRef)(function Progress2({ variant: vari
531
600
  "aria-valuenow": indeterminate2 ? void 0 : value,
532
601
  "aria-valuemin": indeterminate2 ? void 0 : 0,
533
602
  "aria-valuemax": indeterminate2 ? void 0 : 100,
603
+ "data-testid": dataTestId,
604
+ "data-state": states({ indeterminate: indeterminate2 }),
534
605
  ...rest,
535
- children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { className: bar2, style: indeterminate2 ? void 0 : { width: `${value}%` } })
606
+ children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
607
+ "div",
608
+ {
609
+ className: bar2,
610
+ style: indeterminate2 ? void 0 : { width: `${value}%` },
611
+ "data-testid": slot("bar")
612
+ }
613
+ )
536
614
  }
537
615
  );
538
616
  });
539
617
 
540
618
  // src/components/chip/index.tsx
541
- var import_react18 = require("react");
619
+ var import_react20 = require("react");
542
620
 
543
621
  // src/components/icons/x/index.tsx
544
- var import_jsx_runtime9 = require("react/jsx-runtime");
622
+ var import_jsx_runtime10 = require("react/jsx-runtime");
545
623
  function XIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
546
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
624
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
547
625
  "svg",
548
626
  {
549
627
  xmlns: "http://www.w3.org/2000/svg",
@@ -558,15 +636,15 @@ function XIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
558
636
  "aria-hidden": "true",
559
637
  ...rest,
560
638
  children: [
561
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { d: "M18 6 6 18" }),
562
- /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("path", { d: "m6 6 12 12" })
639
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", { d: "M18 6 6 18" }),
640
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", { d: "m6 6 12 12" })
563
641
  ]
564
642
  }
565
643
  );
566
644
  }
567
645
 
568
646
  // src/components/chip/use-styles.ts
569
- var import_react17 = require("react");
647
+ var import_react19 = require("react");
570
648
 
571
649
  // src/components/chip/use-styles.css.ts
572
650
  var clickable = "use-styles_clickable__1axilf44";
@@ -582,7 +660,7 @@ function useStyles8({
582
660
  clickable: clickable2
583
661
  }) {
584
662
  const { themeClass } = useTheme();
585
- const root24 = (0, import_react17.useMemo)(
663
+ const root24 = (0, import_react19.useMemo)(
586
664
  () => [
587
665
  themeClass,
588
666
  root5,
@@ -595,27 +673,49 @@ function useStyles8({
595
673
  }
596
674
 
597
675
  // src/components/chip/index.tsx
598
- var import_jsx_runtime10 = require("react/jsx-runtime");
599
- var Chip = (0, import_react18.forwardRef)(function Chip2({ selected: selected3, tone: tone4, onDelete, onClick, children, ...rest }, ref) {
676
+ var import_jsx_runtime11 = require("react/jsx-runtime");
677
+ var Chip = (0, import_react20.forwardRef)(function Chip2({ selected: selected3, tone: tone4, onDelete, onClick, children, testId, ...rest }, ref) {
600
678
  const clickable2 = Boolean(onClick);
601
679
  const { root: root24, deleteBtn: deleteBtn2 } = useStyles8({ selected: selected3, tone: tone4, clickable: clickable2 });
680
+ const { testId: dataTestId, slot } = useTestId("media", testId);
602
681
  const handleDelete = (event) => {
603
682
  event.stopPropagation();
604
683
  onDelete?.();
605
684
  };
606
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { ref, className: root24, onClick, ...rest, children: [
607
- children,
608
- onDelete && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("button", { type: "button", className: deleteBtn2, "aria-label": "Remove", onClick: handleDelete, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(XIcon, { size: 13 }) })
609
- ] });
685
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
686
+ "span",
687
+ {
688
+ ref,
689
+ className: root24,
690
+ onClick,
691
+ "data-testid": dataTestId,
692
+ "data-state": states({ selected: selected3 }),
693
+ ...rest,
694
+ children: [
695
+ children,
696
+ onDelete && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
697
+ "button",
698
+ {
699
+ type: "button",
700
+ className: deleteBtn2,
701
+ "aria-label": "Remove",
702
+ onClick: handleDelete,
703
+ "data-testid": slot("delete"),
704
+ children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(XIcon, { size: 13 })
705
+ }
706
+ )
707
+ ]
708
+ }
709
+ );
610
710
  });
611
711
 
612
712
  // src/components/checkbox/index.tsx
613
- var import_react20 = require("react");
713
+ var import_react22 = require("react");
614
714
 
615
715
  // src/components/icons/check/index.tsx
616
- var import_jsx_runtime11 = require("react/jsx-runtime");
716
+ var import_jsx_runtime12 = require("react/jsx-runtime");
617
717
  function CheckIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
618
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
718
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
619
719
  "svg",
620
720
  {
621
721
  xmlns: "http://www.w3.org/2000/svg",
@@ -629,13 +729,13 @@ function CheckIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
629
729
  strokeLinejoin: "round",
630
730
  "aria-hidden": "true",
631
731
  ...rest,
632
- children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("path", { d: "M20 6 9 17l-5-5" })
732
+ children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("path", { d: "M20 6 9 17l-5-5" })
633
733
  }
634
734
  );
635
735
  }
636
736
 
637
737
  // src/components/checkbox/use-styles.ts
638
- var import_react19 = require("react");
738
+ var import_react21 = require("react");
639
739
 
640
740
  // src/components/checkbox/use-styles.css.ts
641
741
  var box = "use-styles_box__9zoga91";
@@ -648,11 +748,11 @@ var root6 = "use-styles_root__9zoga90";
648
748
  // src/components/checkbox/use-styles.ts
649
749
  function useStyles9({ checked, disabled: disabled3 }) {
650
750
  const { themeClass } = useTheme();
651
- const root24 = (0, import_react19.useMemo)(
751
+ const root24 = (0, import_react21.useMemo)(
652
752
  () => [themeClass, root6, disabled3 && disabled].filter(Boolean).join(" "),
653
753
  [themeClass, disabled3]
654
754
  );
655
- const box2 = (0, import_react19.useMemo)(
755
+ const box2 = (0, import_react21.useMemo)(
656
756
  () => [box, checked && boxChecked].filter(Boolean).join(" "),
657
757
  [checked]
658
758
  );
@@ -660,15 +760,16 @@ function useStyles9({ checked, disabled: disabled3 }) {
660
760
  }
661
761
 
662
762
  // src/components/checkbox/index.tsx
663
- var import_jsx_runtime12 = require("react/jsx-runtime");
664
- var Checkbox = (0, import_react20.forwardRef)(function Checkbox2({ checked = false, onChange, label: label7, disabled: disabled3 = false, id, ...rest }, ref) {
763
+ var import_jsx_runtime13 = require("react/jsx-runtime");
764
+ var Checkbox = (0, import_react22.forwardRef)(function Checkbox2({ checked = false, onChange, label: label7, disabled: disabled3 = false, id, testId, ...rest }, ref) {
665
765
  const { root: root24, input: input6, box: box2, check: check2 } = useStyles9({ checked, disabled: disabled3 });
766
+ const { testId: dataTestId } = useTestId("toggle", testId);
666
767
  const handleChange = (e) => {
667
768
  if (disabled3) return;
668
769
  onChange?.(e.target.checked);
669
770
  };
670
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("label", { className: root24, children: [
671
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
771
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("label", { className: root24, "data-testid": dataTestId, "data-state": states({ checked, disabled: disabled3 }), children: [
772
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
672
773
  "input",
673
774
  {
674
775
  ref,
@@ -681,16 +782,16 @@ var Checkbox = (0, import_react20.forwardRef)(function Checkbox2({ checked = fal
681
782
  ...rest
682
783
  }
683
784
  ),
684
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: box2, children: checked && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(CheckIcon, { size: 12, className: check2 }) }),
785
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: box2, children: checked && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(CheckIcon, { size: 12, className: check2 }) }),
685
786
  label7
686
787
  ] });
687
788
  });
688
789
 
689
790
  // src/components/radio/index.tsx
690
- var import_react22 = require("react");
791
+ var import_react24 = require("react");
691
792
 
692
793
  // src/components/radio/use-styles.ts
693
- var import_react21 = require("react");
794
+ var import_react23 = require("react");
694
795
 
695
796
  // src/components/radio/use-styles.css.ts
696
797
  var circle = "use-styles_circle__vy61b42";
@@ -706,7 +807,7 @@ function useStyles10({
706
807
  className
707
808
  }) {
708
809
  const { themeClass } = useTheme();
709
- const root24 = (0, import_react21.useMemo)(
810
+ const root24 = (0, import_react23.useMemo)(
710
811
  () => [themeClass, root7, disabled3 && disabled2, className].filter(Boolean).join(" "),
711
812
  [themeClass, disabled3, className]
712
813
  );
@@ -720,11 +821,12 @@ function useStyles10({
720
821
  }
721
822
 
722
823
  // src/components/radio/index.tsx
723
- var import_jsx_runtime13 = require("react/jsx-runtime");
724
- var Radio = (0, import_react22.forwardRef)(function Radio2({ checked, onChange, label: label7, name, value, disabled: disabled3, ...rest }, ref) {
824
+ var import_jsx_runtime14 = require("react/jsx-runtime");
825
+ var Radio = (0, import_react24.forwardRef)(function Radio2({ checked, onChange, label: label7, name, value, disabled: disabled3, testId, ...rest }, ref) {
725
826
  const { root: root24, input: input6, circle: circle2, dot: dot3, label: labelClass } = useStyles10({ disabled: disabled3 });
726
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("label", { className: root24, children: [
727
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
827
+ const { testId: dataTestId } = useTestId("toggle", testId);
828
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("label", { className: root24, "data-testid": dataTestId, "data-state": states({ checked, disabled: disabled3 }), children: [
829
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
728
830
  "input",
729
831
  {
730
832
  ref,
@@ -738,16 +840,16 @@ var Radio = (0, import_react22.forwardRef)(function Radio2({ checked, onChange,
738
840
  ...rest
739
841
  }
740
842
  ),
741
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: circle2, children: checked && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: dot3 }) }),
742
- label7 != null && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: labelClass, children: label7 })
843
+ /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: circle2, children: checked && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: dot3 }) }),
844
+ label7 != null && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: labelClass, children: label7 })
743
845
  ] });
744
846
  });
745
847
 
746
848
  // src/components/switch/index.tsx
747
- var import_react24 = require("react");
849
+ var import_react26 = require("react");
748
850
 
749
851
  // src/components/switch/use-styles.ts
750
- var import_react23 = require("react");
852
+ var import_react25 = require("react");
751
853
 
752
854
  // src/components/switch/use-styles.css.ts
753
855
  var input3 = "surfaces_srOnly__1qa7atn0";
@@ -761,7 +863,7 @@ var trackChecked = "use-styles_trackChecked__1r6kem72";
761
863
  // src/components/switch/use-styles.ts
762
864
  function useStyles11({ checked }) {
763
865
  const { themeClass } = useTheme();
764
- return (0, import_react23.useMemo)(
866
+ return (0, import_react25.useMemo)(
765
867
  () => ({
766
868
  root: [themeClass, root8].filter(Boolean).join(" "),
767
869
  input: input3,
@@ -774,11 +876,12 @@ function useStyles11({ checked }) {
774
876
  }
775
877
 
776
878
  // src/components/switch/index.tsx
777
- var import_jsx_runtime14 = require("react/jsx-runtime");
778
- var Switch = (0, import_react24.forwardRef)(function Switch2({ checked = false, onChange, label: label7, disabled: disabled3, ...rest }, ref) {
879
+ var import_jsx_runtime15 = require("react/jsx-runtime");
880
+ var Switch = (0, import_react26.forwardRef)(function Switch2({ checked = false, onChange, label: label7, disabled: disabled3, testId, ...rest }, ref) {
779
881
  const { root: root24, input: input6, track: track4, knob: knob2, label: labelClass } = useStyles11({ checked });
780
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("label", { className: root24, children: [
781
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
882
+ const { testId: dataTestId } = useTestId("toggle", testId);
883
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("label", { className: root24, "data-testid": dataTestId, "data-state": states({ checked, disabled: disabled3 }), children: [
884
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
782
885
  "input",
783
886
  {
784
887
  ref,
@@ -795,19 +898,19 @@ var Switch = (0, import_react24.forwardRef)(function Switch2({ checked = false,
795
898
  ...rest
796
899
  }
797
900
  ),
798
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: track4, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: knob2 }) }),
799
- label7 != null && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: labelClass, children: label7 })
901
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: track4, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: knob2 }) }),
902
+ label7 != null && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: labelClass, children: label7 })
800
903
  ] });
801
904
  });
802
905
 
803
906
  // src/components/text-field/index.tsx
804
- var import_react27 = require("react");
907
+ var import_react29 = require("react");
805
908
 
806
909
  // src/components/base-field/index.tsx
807
- var import_react26 = require("react");
910
+ var import_react28 = require("react");
808
911
 
809
912
  // src/components/base-field/use-styles.ts
810
- var import_react25 = require("react");
913
+ var import_react27 = require("react");
811
914
 
812
915
  // src/components/base-field/use-styles.css.ts
813
916
  var field = "use-styles_field__1c3cgd3";
@@ -826,7 +929,7 @@ var trailingSlot = "use-styles_trailingSlot__1c3cgdb";
826
929
  // src/components/base-field/use-styles.ts
827
930
  function useStyles12({ error, hasStartIcon, hasTrailing, className }) {
828
931
  const { themeClass } = useTheme();
829
- return (0, import_react25.useMemo)(() => {
932
+ return (0, import_react27.useMemo)(() => {
830
933
  const root24 = [themeClass, root9].filter(Boolean).join(" ");
831
934
  const labelText2 = [labelText, error && labelTextError].filter(Boolean).join(" ");
832
935
  const input6 = [
@@ -850,9 +953,9 @@ function useStyles12({ error, hasStartIcon, hasTrailing, className }) {
850
953
  }
851
954
 
852
955
  // src/components/base-field/index.tsx
853
- var import_jsx_runtime15 = require("react/jsx-runtime");
854
- var BaseField = (0, import_react26.forwardRef)(function BaseField2({ label: label7, help, error, startIcon: StartIcon, trailing: trailing2, id, className, children }, ref) {
855
- const autoId = (0, import_react26.useId)();
956
+ var import_jsx_runtime16 = require("react/jsx-runtime");
957
+ var BaseField = (0, import_react28.forwardRef)(function BaseField2({ label: label7, help, error, startIcon: StartIcon, trailing: trailing2, id, className, testId, children }, ref) {
958
+ const autoId = (0, import_react28.useId)();
856
959
  const controlId = id ?? autoId;
857
960
  const errorMessage = error != null && error !== false && error !== true && error !== "" ? error : null;
858
961
  const hasError = error === true || errorMessage != null;
@@ -864,27 +967,30 @@ var BaseField = (0, import_react26.forwardRef)(function BaseField2({ label: labe
864
967
  hasTrailing: trailing2 != null,
865
968
  className
866
969
  });
970
+ const { testId: rootTestId, slot } = useTestId("field", testId);
867
971
  const control = {
868
972
  id: controlId,
869
973
  className: classes.input,
870
974
  ref,
871
975
  "aria-describedby": messageId,
872
- "aria-invalid": hasError ? true : void 0
976
+ "aria-invalid": hasError ? true : void 0,
977
+ "data-testid": slot("input")
873
978
  };
874
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: classes.root, children: [
875
- label7 != null && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("label", { htmlFor: controlId, className: classes.labelText, children: label7 }),
876
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: classes.field, children: [
877
- StartIcon != null && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: classes.startIconSlot, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(StartIcon, { size: 18 }) }),
979
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: classes.root, "data-testid": rootTestId, "data-state": states({ error: hasError }), children: [
980
+ label7 != null && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("label", { htmlFor: controlId, className: classes.labelText, "data-testid": slot("label"), children: label7 }),
981
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { className: classes.field, children: [
982
+ StartIcon != null && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: classes.startIconSlot, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(StartIcon, { size: 18 }) }),
878
983
  children(control),
879
- trailing2 != null && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: classes.trailingSlot, children: trailing2 })
984
+ trailing2 != null && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: classes.trailingSlot, children: trailing2 })
880
985
  ] }),
881
986
  message2 != null && // `aria-live` solo cuando el mensaje es un error: anuncia la validación al aparecer.
882
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
987
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
883
988
  "span",
884
989
  {
885
990
  id: messageId,
886
991
  className: classes.helpText,
887
992
  "aria-live": errorMessage ? "polite" : void 0,
993
+ "data-testid": slot("message"),
888
994
  children: message2
889
995
  }
890
996
  )
@@ -892,12 +998,12 @@ var BaseField = (0, import_react26.forwardRef)(function BaseField2({ label: labe
892
998
  });
893
999
 
894
1000
  // src/components/text-field/index.tsx
895
- var import_jsx_runtime16 = (
1001
+ var import_jsx_runtime17 = (
896
1002
  // En multiline el control es un <textarea>: no reenviamos `controlRef` porque el
897
1003
  // tipo público de la ref es HTMLInputElement (la ref aplica solo a la rama <input>).
898
1004
  require("react/jsx-runtime")
899
1005
  );
900
- var TextField = (0, import_react27.forwardRef)(function TextField2({
1006
+ var TextField = (0, import_react29.forwardRef)(function TextField2({
901
1007
  label: label7,
902
1008
  help,
903
1009
  error,
@@ -908,9 +1014,11 @@ var TextField = (0, import_react27.forwardRef)(function TextField2({
908
1014
  onChange,
909
1015
  className,
910
1016
  id,
1017
+ testId,
911
1018
  ...rest
912
1019
  }, ref) {
913
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1020
+ const rawTestId = rest["data-testid"];
1021
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
914
1022
  BaseField,
915
1023
  {
916
1024
  ref,
@@ -920,19 +1028,22 @@ var TextField = (0, import_react27.forwardRef)(function TextField2({
920
1028
  startIcon,
921
1029
  id,
922
1030
  className,
923
- children: ({ ref: controlRef, ...control }) => multiline ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1031
+ testId,
1032
+ children: ({ ref: controlRef, ...control }) => multiline ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
924
1033
  "textarea",
925
1034
  {
926
1035
  ...rest,
927
1036
  ...control,
1037
+ "data-testid": rawTestId ?? control["data-testid"],
928
1038
  rows: rows ?? 4,
929
1039
  onChange: (e) => onChange?.(e.target.value)
930
1040
  }
931
- ) : /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1041
+ ) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
932
1042
  "input",
933
1043
  {
934
1044
  ...rest,
935
1045
  ...control,
1046
+ "data-testid": rawTestId ?? control["data-testid"],
936
1047
  ref: controlRef,
937
1048
  type,
938
1049
  onChange: (e) => onChange?.(e.target.value)
@@ -943,12 +1054,12 @@ var TextField = (0, import_react27.forwardRef)(function TextField2({
943
1054
  });
944
1055
 
945
1056
  // src/components/password-field/index.tsx
946
- var import_react29 = require("react");
1057
+ var import_react31 = require("react");
947
1058
 
948
1059
  // src/components/icons/eye/index.tsx
949
- var import_jsx_runtime17 = require("react/jsx-runtime");
1060
+ var import_jsx_runtime18 = require("react/jsx-runtime");
950
1061
  function EyeIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
951
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1062
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
952
1063
  "svg",
953
1064
  {
954
1065
  xmlns: "http://www.w3.org/2000/svg",
@@ -963,17 +1074,17 @@ function EyeIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
963
1074
  "aria-hidden": "true",
964
1075
  ...rest,
965
1076
  children: [
966
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("path", { d: "M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z" }),
967
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("circle", { cx: "12", cy: "12", r: "3" })
1077
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("path", { d: "M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z" }),
1078
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("circle", { cx: "12", cy: "12", r: "3" })
968
1079
  ]
969
1080
  }
970
1081
  );
971
1082
  }
972
1083
 
973
1084
  // src/components/icons/eye-off/index.tsx
974
- var import_jsx_runtime18 = require("react/jsx-runtime");
1085
+ var import_jsx_runtime19 = require("react/jsx-runtime");
975
1086
  function EyeOffIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
976
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1087
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
977
1088
  "svg",
978
1089
  {
979
1090
  xmlns: "http://www.w3.org/2000/svg",
@@ -988,31 +1099,31 @@ function EyeOffIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
988
1099
  "aria-hidden": "true",
989
1100
  ...rest,
990
1101
  children: [
991
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("path", { d: "M9.88 9.88a3 3 0 1 0 4.24 4.24" }),
992
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("path", { d: "M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68" }),
993
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("path", { d: "M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61" }),
994
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("path", { d: "m2 2 20 20" })
1102
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("path", { d: "M9.88 9.88a3 3 0 1 0 4.24 4.24" }),
1103
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("path", { d: "M10.73 5.08A10.43 10.43 0 0 1 12 5c7 0 10 7 10 7a13.16 13.16 0 0 1-1.67 2.68" }),
1104
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("path", { d: "M6.61 6.61A13.526 13.526 0 0 0 2 12s3 7 10 7a9.74 9.74 0 0 0 5.39-1.61" }),
1105
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("path", { d: "m2 2 20 20" })
995
1106
  ]
996
1107
  }
997
1108
  );
998
1109
  }
999
1110
 
1000
1111
  // src/components/password-field/use-styles.ts
1001
- var import_react28 = require("react");
1112
+ var import_react30 = require("react");
1002
1113
 
1003
1114
  // src/components/password-field/use-styles.css.ts
1004
1115
  var revealButton = "use-styles_revealButton__rsu9d50";
1005
1116
 
1006
1117
  // src/components/password-field/use-styles.ts
1007
1118
  function useStyles13() {
1008
- return (0, import_react28.useMemo)(() => ({ revealButton }), []);
1119
+ return (0, import_react30.useMemo)(() => ({ revealButton }), []);
1009
1120
  }
1010
1121
 
1011
1122
  // src/components/password-field/index.tsx
1012
- var import_jsx_runtime19 = require("react/jsx-runtime");
1013
- var PasswordField = (0, import_react29.forwardRef)(
1123
+ var import_jsx_runtime20 = require("react/jsx-runtime");
1124
+ var PasswordField = (0, import_react31.forwardRef)(
1014
1125
  function PasswordField2({ label: label7, help, error, startIcon, onChange, id, className, ...rest }, ref) {
1015
- const [reveal, setReveal] = (0, import_react29.useState)(false);
1126
+ const [reveal, setReveal] = (0, import_react31.useState)(false);
1016
1127
  const classes = useStyles13();
1017
1128
  const handleChange = (e) => {
1018
1129
  onChange?.(e.target.value);
@@ -1020,7 +1131,7 @@ var PasswordField = (0, import_react29.forwardRef)(
1020
1131
  const handleToggleMouseDown = (e) => {
1021
1132
  e.preventDefault();
1022
1133
  };
1023
- const toggleButton = /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1134
+ const toggleButton = /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1024
1135
  "button",
1025
1136
  {
1026
1137
  type: "button",
@@ -1029,10 +1140,10 @@ var PasswordField = (0, import_react29.forwardRef)(
1029
1140
  "aria-label": reveal ? "Ocultar contrase\xF1a" : "Mostrar contrase\xF1a",
1030
1141
  onMouseDown: handleToggleMouseDown,
1031
1142
  onClick: () => setReveal((r) => !r),
1032
- children: reveal ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(EyeOffIcon, { size: 18 }) : /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(EyeIcon, { size: 18 })
1143
+ children: reveal ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(EyeOffIcon, { size: 18 }) : /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(EyeIcon, { size: 18 })
1033
1144
  }
1034
1145
  );
1035
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1146
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1036
1147
  BaseField,
1037
1148
  {
1038
1149
  ref,
@@ -1043,7 +1154,7 @@ var PasswordField = (0, import_react29.forwardRef)(
1043
1154
  trailing: toggleButton,
1044
1155
  id,
1045
1156
  className,
1046
- children: (control) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1157
+ children: (control) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1047
1158
  "input",
1048
1159
  {
1049
1160
  ...rest,
@@ -1058,15 +1169,15 @@ var PasswordField = (0, import_react29.forwardRef)(
1058
1169
  );
1059
1170
 
1060
1171
  // src/components/money-field/index.tsx
1061
- var import_react30 = require("react");
1062
- var import_jsx_runtime20 = require("react/jsx-runtime");
1172
+ var import_react32 = require("react");
1173
+ var import_jsx_runtime21 = require("react/jsx-runtime");
1063
1174
  function parseAmount(raw) {
1064
1175
  const cleaned = raw.replace(/[^0-9.-]/g, "");
1065
1176
  if (cleaned === "" || cleaned === "-" || cleaned === ".") return null;
1066
1177
  const n = Number.parseFloat(cleaned);
1067
1178
  return Number.isNaN(n) ? null : n;
1068
1179
  }
1069
- var MoneyField = (0, import_react30.forwardRef)(function MoneyField2({
1180
+ var MoneyField = (0, import_react32.forwardRef)(function MoneyField2({
1070
1181
  value,
1071
1182
  onChange,
1072
1183
  currency = "USD",
@@ -1081,9 +1192,9 @@ var MoneyField = (0, import_react30.forwardRef)(function MoneyField2({
1081
1192
  onBlur,
1082
1193
  ...rest
1083
1194
  }, ref) {
1084
- const [focused, setFocused] = (0, import_react30.useState)(false);
1085
- const [draft, setDraft] = (0, import_react30.useState)("");
1086
- const formatter = (0, import_react30.useMemo)(
1195
+ const [focused, setFocused] = (0, import_react32.useState)(false);
1196
+ const [draft, setDraft] = (0, import_react32.useState)("");
1197
+ const formatter = (0, import_react32.useMemo)(
1087
1198
  () => new Intl.NumberFormat(locale, { style: "currency", currency }),
1088
1199
  [locale, currency]
1089
1200
  );
@@ -1099,7 +1210,7 @@ var MoneyField = (0, import_react30.forwardRef)(function MoneyField2({
1099
1210
  onChange?.(parseAmount(draft));
1100
1211
  onBlur?.(e);
1101
1212
  };
1102
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1213
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1103
1214
  BaseField,
1104
1215
  {
1105
1216
  ref,
@@ -1109,7 +1220,7 @@ var MoneyField = (0, import_react30.forwardRef)(function MoneyField2({
1109
1220
  startIcon,
1110
1221
  id,
1111
1222
  className,
1112
- children: (control) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1223
+ children: (control) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1113
1224
  "input",
1114
1225
  {
1115
1226
  ...rest,
@@ -1126,10 +1237,10 @@ var MoneyField = (0, import_react30.forwardRef)(function MoneyField2({
1126
1237
  });
1127
1238
 
1128
1239
  // src/components/icon-button/index.tsx
1129
- var import_react32 = require("react");
1240
+ var import_react34 = require("react");
1130
1241
 
1131
1242
  // src/components/icon-button/use-styles.ts
1132
- var import_react31 = require("react");
1243
+ var import_react33 = require("react");
1133
1244
 
1134
1245
  // src/components/icon-button/use-styles.css.ts
1135
1246
  var accent = "use-styles_accent__18np0q02";
@@ -1142,7 +1253,7 @@ function useStyles14({
1142
1253
  tone: tone4 = "ink"
1143
1254
  }) {
1144
1255
  const { themeClass } = useTheme();
1145
- const root24 = (0, import_react31.useMemo)(
1256
+ const root24 = (0, import_react33.useMemo)(
1146
1257
  () => [themeClass, root10, tone4 === "accent" && accent, active2 && active].filter(Boolean).join(" "),
1147
1258
  [themeClass, active2, tone4]
1148
1259
  );
@@ -1150,8 +1261,8 @@ function useStyles14({
1150
1261
  }
1151
1262
 
1152
1263
  // src/components/icon-button/index.tsx
1153
- var import_jsx_runtime21 = require("react/jsx-runtime");
1154
- var IconButton = (0, import_react32.forwardRef)(function IconButton2({ icon: Icon, active: active2, tone: tone4, title, type = "button", ...rest }, ref) {
1264
+ var import_jsx_runtime22 = require("react/jsx-runtime");
1265
+ var IconButton = (0, import_react34.forwardRef)(function IconButton2({ icon: Icon, active: active2, tone: tone4, title, type = "button", testId, ...rest }, ref) {
1155
1266
  if (typeof process !== "undefined" && process.env.NODE_ENV !== "production") {
1156
1267
  const restProps = rest;
1157
1268
  const hasName = title.trim() !== "" || restProps["aria-label"] != null || restProps["aria-labelledby"] != null;
@@ -1160,14 +1271,28 @@ var IconButton = (0, import_react32.forwardRef)(function IconButton2({ icon: Ico
1160
1271
  }
1161
1272
  }
1162
1273
  const { root: root24 } = useStyles14({ active: active2, tone: tone4 });
1163
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("button", { ref, type, className: root24, "aria-label": title, title, ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Icon, { size: 18 }) });
1274
+ const { testId: dataTestId } = useTestId("button", testId);
1275
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1276
+ "button",
1277
+ {
1278
+ ref,
1279
+ type,
1280
+ className: root24,
1281
+ "aria-label": title,
1282
+ title,
1283
+ "data-testid": dataTestId,
1284
+ "data-state": states({ active: active2, disabled: rest.disabled }),
1285
+ ...rest,
1286
+ children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Icon, { size: 18 })
1287
+ }
1288
+ );
1164
1289
  });
1165
1290
 
1166
1291
  // src/components/card/index.tsx
1167
- var import_react34 = require("react");
1292
+ var import_react36 = require("react");
1168
1293
 
1169
1294
  // src/components/card/use-styles.ts
1170
- var import_react33 = require("react");
1295
+ var import_react35 = require("react");
1171
1296
 
1172
1297
  // src/components/card/use-styles.css.ts
1173
1298
  var body = "use-styles_body__1fuvd022";
@@ -1178,27 +1303,28 @@ var root11 = "use-styles_root__1fuvd020";
1178
1303
  // src/components/card/use-styles.ts
1179
1304
  function useStyles15() {
1180
1305
  const { themeClass } = useTheme();
1181
- const root24 = (0, import_react33.useMemo)(() => `${themeClass} ${root11}`, [themeClass]);
1306
+ const root24 = (0, import_react35.useMemo)(() => `${themeClass} ${root11}`, [themeClass]);
1182
1307
  return { root: root24, header, body, footer };
1183
1308
  }
1184
1309
 
1185
1310
  // src/components/card/index.tsx
1186
- var import_jsx_runtime22 = require("react/jsx-runtime");
1187
- var CardRoot = (0, import_react34.forwardRef)(function Card({ children, ...rest }, ref) {
1311
+ var import_jsx_runtime23 = require("react/jsx-runtime");
1312
+ var CardRoot = (0, import_react36.forwardRef)(function Card({ children, testId, ...rest }, ref) {
1188
1313
  const { root: root24 } = useStyles15();
1189
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { ref, className: root24, ...rest, children });
1314
+ const { testId: dataTestId } = useTestId("layout", testId);
1315
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { ref, className: root24, "data-testid": dataTestId, ...rest, children });
1190
1316
  });
1191
1317
  function CardHeader({ children, ...rest }) {
1192
1318
  const { header: header3 } = useStyles15();
1193
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: header3, ...rest, children });
1319
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: header3, ...rest, children });
1194
1320
  }
1195
1321
  function CardBody({ children, ...rest }) {
1196
1322
  const { body: body3 } = useStyles15();
1197
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: body3, ...rest, children });
1323
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: body3, ...rest, children });
1198
1324
  }
1199
1325
  function CardFooter({ children, ...rest }) {
1200
1326
  const { footer: footer2 } = useStyles15();
1201
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: footer2, ...rest, children });
1327
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: footer2, ...rest, children });
1202
1328
  }
1203
1329
  CardRoot.displayName = "Card";
1204
1330
  CardHeader.displayName = "Card.Header";
@@ -1211,12 +1337,12 @@ var Card2 = Object.assign(CardRoot, {
1211
1337
  });
1212
1338
 
1213
1339
  // src/components/alert/index.tsx
1214
- var import_react36 = require("react");
1340
+ var import_react38 = require("react");
1215
1341
 
1216
1342
  // src/components/icons/circle-check/index.tsx
1217
- var import_jsx_runtime23 = require("react/jsx-runtime");
1343
+ var import_jsx_runtime24 = require("react/jsx-runtime");
1218
1344
  function CircleCheckIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
1219
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1345
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1220
1346
  "svg",
1221
1347
  {
1222
1348
  xmlns: "http://www.w3.org/2000/svg",
@@ -1231,17 +1357,17 @@ function CircleCheckIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
1231
1357
  "aria-hidden": "true",
1232
1358
  ...rest,
1233
1359
  children: [
1234
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
1235
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { d: "m9 12 2 2 4-4" })
1360
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
1361
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("path", { d: "m9 12 2 2 4-4" })
1236
1362
  ]
1237
1363
  }
1238
1364
  );
1239
1365
  }
1240
1366
 
1241
1367
  // src/components/icons/circle-x/index.tsx
1242
- var import_jsx_runtime24 = require("react/jsx-runtime");
1368
+ var import_jsx_runtime25 = require("react/jsx-runtime");
1243
1369
  function CircleXIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
1244
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1370
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
1245
1371
  "svg",
1246
1372
  {
1247
1373
  xmlns: "http://www.w3.org/2000/svg",
@@ -1256,18 +1382,18 @@ function CircleXIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
1256
1382
  "aria-hidden": "true",
1257
1383
  ...rest,
1258
1384
  children: [
1259
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
1260
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("path", { d: "m15 9-6 6" }),
1261
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("path", { d: "m9 9 6 6" })
1385
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
1386
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("path", { d: "m15 9-6 6" }),
1387
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("path", { d: "m9 9 6 6" })
1262
1388
  ]
1263
1389
  }
1264
1390
  );
1265
1391
  }
1266
1392
 
1267
1393
  // src/components/icons/info/index.tsx
1268
- var import_jsx_runtime25 = require("react/jsx-runtime");
1394
+ var import_jsx_runtime26 = require("react/jsx-runtime");
1269
1395
  function InfoIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
1270
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
1396
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1271
1397
  "svg",
1272
1398
  {
1273
1399
  xmlns: "http://www.w3.org/2000/svg",
@@ -1282,18 +1408,18 @@ function InfoIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
1282
1408
  "aria-hidden": "true",
1283
1409
  ...rest,
1284
1410
  children: [
1285
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
1286
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("path", { d: "M12 16v-4" }),
1287
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("path", { d: "M12 8h.01" })
1411
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("circle", { cx: "12", cy: "12", r: "10" }),
1412
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("path", { d: "M12 16v-4" }),
1413
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("path", { d: "M12 8h.01" })
1288
1414
  ]
1289
1415
  }
1290
1416
  );
1291
1417
  }
1292
1418
 
1293
1419
  // src/components/icons/triangle-alert/index.tsx
1294
- var import_jsx_runtime26 = require("react/jsx-runtime");
1420
+ var import_jsx_runtime27 = require("react/jsx-runtime");
1295
1421
  function TriangleAlertIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
1296
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1422
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
1297
1423
  "svg",
1298
1424
  {
1299
1425
  xmlns: "http://www.w3.org/2000/svg",
@@ -1308,16 +1434,16 @@ function TriangleAlertIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
1308
1434
  "aria-hidden": "true",
1309
1435
  ...rest,
1310
1436
  children: [
1311
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("path", { d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z" }),
1312
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("path", { d: "M12 9v4" }),
1313
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("path", { d: "M12 17h.01" })
1437
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("path", { d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z" }),
1438
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("path", { d: "M12 9v4" }),
1439
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("path", { d: "M12 17h.01" })
1314
1440
  ]
1315
1441
  }
1316
1442
  );
1317
1443
  }
1318
1444
 
1319
1445
  // src/components/alert/use-styles.ts
1320
- var import_react35 = require("react");
1446
+ var import_react37 = require("react");
1321
1447
 
1322
1448
  // src/components/alert/use-styles.css.ts
1323
1449
  var content = "use-styles_content__ivsh6u6";
@@ -1331,7 +1457,7 @@ function useStyles16({
1331
1457
  className
1332
1458
  }) {
1333
1459
  const { themeClass } = useTheme();
1334
- const root24 = (0, import_react35.useMemo)(
1460
+ const root24 = (0, import_react37.useMemo)(
1335
1461
  () => [themeClass, root12, severity[severity2], className].filter(Boolean).join(" "),
1336
1462
  [themeClass, severity2, className]
1337
1463
  );
@@ -1343,30 +1469,31 @@ function useStyles16({
1343
1469
  }
1344
1470
 
1345
1471
  // src/components/alert/index.tsx
1346
- var import_jsx_runtime27 = require("react/jsx-runtime");
1472
+ var import_jsx_runtime28 = require("react/jsx-runtime");
1347
1473
  var defaultIcons = {
1348
1474
  info: InfoIcon,
1349
1475
  ok: CircleCheckIcon,
1350
1476
  warn: TriangleAlertIcon,
1351
1477
  danger: CircleXIcon
1352
1478
  };
1353
- var Alert = (0, import_react36.forwardRef)(function Alert2({ severity: severity2 = "info", title, icon, className, children, ...rest }, ref) {
1479
+ var Alert = (0, import_react38.forwardRef)(function Alert2({ severity: severity2 = "info", title, icon, className, testId, children, ...rest }, ref) {
1354
1480
  const styles = useStyles16({ severity: severity2, className });
1481
+ const { testId: dataTestId, slot } = useTestId("feedback", testId);
1355
1482
  const IconComponent = icon ?? defaultIcons[severity2];
1356
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { ref, role: "alert", className: styles.root, ...rest, children: [
1357
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: styles.iconSlot, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(IconComponent, {}) }),
1358
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: styles.content, children: [
1359
- title != null && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Typography, { variant: "h4", children: title }),
1360
- children != null && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Typography, { variant: "body", color: "fg2", children })
1483
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { ref, role: "alert", className: styles.root, "data-testid": dataTestId, ...rest, children: [
1484
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: styles.iconSlot, "data-testid": slot("icon"), children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(IconComponent, {}) }),
1485
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: styles.content, "data-testid": slot("content"), children: [
1486
+ title != null && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Typography, { variant: "h4", children: title }),
1487
+ children != null && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Typography, { variant: "body", color: "fg2", children })
1361
1488
  ] })
1362
1489
  ] });
1363
1490
  });
1364
1491
 
1365
1492
  // src/components/tooltip/index.tsx
1366
- var import_react38 = require("react");
1493
+ var import_react40 = require("react");
1367
1494
 
1368
1495
  // src/components/tooltip/use-styles.ts
1369
- var import_react37 = require("react");
1496
+ var import_react39 = require("react");
1370
1497
 
1371
1498
  // src/components/tooltip/use-styles.css.ts
1372
1499
  var bubble = "use-styles_bubble__h9kvh1 surfaces_inkySurface__1qa7atn2";
@@ -1378,11 +1505,11 @@ function useStyles17({
1378
1505
  placement: placement2 = "top"
1379
1506
  }) {
1380
1507
  const { themeClass } = useTheme();
1381
- const wrapper4 = (0, import_react37.useMemo)(
1508
+ const wrapper4 = (0, import_react39.useMemo)(
1382
1509
  () => [themeClass, wrapper].filter(Boolean).join(" "),
1383
1510
  [themeClass]
1384
1511
  );
1385
- const bubble2 = (0, import_react37.useMemo)(
1512
+ const bubble2 = (0, import_react39.useMemo)(
1386
1513
  () => [bubble, placement[placement2]].filter(Boolean).join(" "),
1387
1514
  [placement2]
1388
1515
  );
@@ -1390,13 +1517,14 @@ function useStyles17({
1390
1517
  }
1391
1518
 
1392
1519
  // src/components/tooltip/index.tsx
1393
- var import_jsx_runtime28 = require("react/jsx-runtime");
1520
+ var import_jsx_runtime29 = require("react/jsx-runtime");
1394
1521
  var HIDE_DELAY = 120;
1395
- var Tooltip = (0, import_react38.forwardRef)(function Tooltip2({ label: label7, children, placement: placement2 }, ref) {
1396
- const [open, setOpen] = (0, import_react38.useState)(false);
1397
- const tooltipId = (0, import_react38.useId)();
1522
+ var Tooltip = (0, import_react40.forwardRef)(function Tooltip2({ label: label7, children, placement: placement2, testId }, ref) {
1523
+ const [open, setOpen] = (0, import_react40.useState)(false);
1524
+ const tooltipId = (0, import_react40.useId)();
1398
1525
  const { wrapper: wrapper4, bubble: bubble2 } = useStyles17({ placement: placement2 });
1399
- const hideTimer = (0, import_react38.useRef)(null);
1526
+ const { testId: dataTestId, slot } = useTestId("feedback", testId);
1527
+ const hideTimer = (0, import_react40.useRef)(null);
1400
1528
  const clearHide = () => {
1401
1529
  if (hideTimer.current) {
1402
1530
  clearTimeout(hideTimer.current);
@@ -1415,7 +1543,7 @@ var Tooltip = (0, import_react38.forwardRef)(function Tooltip2({ label: label7,
1415
1543
  clearHide();
1416
1544
  setOpen(false);
1417
1545
  };
1418
- (0, import_react38.useEffect)(() => {
1546
+ (0, import_react40.useEffect)(() => {
1419
1547
  return () => {
1420
1548
  if (hideTimer.current) clearTimeout(hideTimer.current);
1421
1549
  };
@@ -1428,12 +1556,13 @@ var Tooltip = (0, import_react38.forwardRef)(function Tooltip2({ label: label7,
1428
1556
  };
1429
1557
  const previousDescribedBy = children.props["aria-describedby"];
1430
1558
  const describedBy = open ? [previousDescribedBy, tooltipId].filter(Boolean).join(" ") : previousDescribedBy;
1431
- const trigger2 = (0, import_react38.cloneElement)(children, { "aria-describedby": describedBy });
1432
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
1559
+ const trigger2 = (0, import_react40.cloneElement)(children, { "aria-describedby": describedBy });
1560
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
1433
1561
  "span",
1434
1562
  {
1435
1563
  ref,
1436
1564
  className: wrapper4,
1565
+ "data-testid": dataTestId,
1437
1566
  onMouseEnter: show,
1438
1567
  onMouseLeave: scheduleHide,
1439
1568
  onFocus: show,
@@ -1441,12 +1570,13 @@ var Tooltip = (0, import_react38.forwardRef)(function Tooltip2({ label: label7,
1441
1570
  onKeyDown: handleKeyDown,
1442
1571
  children: [
1443
1572
  trigger2,
1444
- open && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1573
+ open && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1445
1574
  "span",
1446
1575
  {
1447
1576
  id: tooltipId,
1448
1577
  role: "tooltip",
1449
1578
  className: bubble2,
1579
+ "data-testid": slot("bubble"),
1450
1580
  onMouseEnter: show,
1451
1581
  onMouseLeave: scheduleHide,
1452
1582
  children: label7
@@ -1458,12 +1588,12 @@ var Tooltip = (0, import_react38.forwardRef)(function Tooltip2({ label: label7,
1458
1588
  });
1459
1589
 
1460
1590
  // src/components/select/index.tsx
1461
- var import_react40 = require("react");
1591
+ var import_react42 = require("react");
1462
1592
 
1463
1593
  // src/components/icons/chevron-down/index.tsx
1464
- var import_jsx_runtime29 = require("react/jsx-runtime");
1594
+ var import_jsx_runtime30 = require("react/jsx-runtime");
1465
1595
  function ChevronDownIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
1466
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1596
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1467
1597
  "svg",
1468
1598
  {
1469
1599
  xmlns: "http://www.w3.org/2000/svg",
@@ -1477,13 +1607,13 @@ function ChevronDownIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
1477
1607
  strokeLinejoin: "round",
1478
1608
  "aria-hidden": "true",
1479
1609
  ...rest,
1480
- children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("path", { d: "m6 9 6 6 6-6" })
1610
+ children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("path", { d: "m6 9 6 6 6-6" })
1481
1611
  }
1482
1612
  );
1483
1613
  }
1484
1614
 
1485
1615
  // src/components/select/use-styles.ts
1486
- var import_react39 = require("react");
1616
+ var import_react41 = require("react");
1487
1617
 
1488
1618
  // src/components/select/use-styles.css.ts
1489
1619
  var chevron = "use-styles_chevron__1w1czpb4";
@@ -1502,7 +1632,7 @@ function useStyles18({
1502
1632
  open = false
1503
1633
  }) {
1504
1634
  const { themeClass } = useTheme();
1505
- return (0, import_react39.useMemo)(() => {
1635
+ return (0, import_react41.useMemo)(() => {
1506
1636
  const chevron3 = [chevron, open && chevronOpen].filter(Boolean).join(" ");
1507
1637
  return {
1508
1638
  root: [themeClass, root13].filter(Boolean).join(" "),
@@ -1517,17 +1647,17 @@ function useStyles18({
1517
1647
  }
1518
1648
 
1519
1649
  // src/components/select/index.tsx
1520
- var import_jsx_runtime30 = require("react/jsx-runtime");
1521
- var Select = (0, import_react40.forwardRef)(function Select2({ options, value, onChange, placeholder: placeholder2, label: label7, disabled: disabled3, ...rest }, ref) {
1522
- const [open, setOpen] = (0, import_react40.useState)(false);
1523
- const [activeIndex, setActiveIndex] = (0, import_react40.useState)(0);
1524
- const rootRef = (0, import_react40.useRef)(null);
1650
+ var import_jsx_runtime31 = require("react/jsx-runtime");
1651
+ var Select = (0, import_react42.forwardRef)(function Select2({ options, value, onChange, placeholder: placeholder2, label: label7, disabled: disabled3, ...rest }, ref) {
1652
+ const [open, setOpen] = (0, import_react42.useState)(false);
1653
+ const [activeIndex, setActiveIndex] = (0, import_react42.useState)(0);
1654
+ const rootRef = (0, import_react42.useRef)(null);
1525
1655
  const setRootRef = (node) => {
1526
1656
  rootRef.current = node;
1527
1657
  if (typeof ref === "function") ref(node);
1528
1658
  else if (ref) ref.current = node;
1529
1659
  };
1530
- const baseId = (0, import_react40.useId)();
1660
+ const baseId = (0, import_react42.useId)();
1531
1661
  const labelId = `${baseId}-label`;
1532
1662
  const optionId = (index) => `${baseId}-option-${index}`;
1533
1663
  const {
@@ -1539,7 +1669,7 @@ var Select = (0, import_react40.forwardRef)(function Select2({ options, value, o
1539
1669
  menu: menu2,
1540
1670
  optionClass
1541
1671
  } = useStyles18({ open });
1542
- (0, import_react40.useEffect)(() => {
1672
+ (0, import_react42.useEffect)(() => {
1543
1673
  if (!open) return;
1544
1674
  const onPointerDown = (event) => {
1545
1675
  if (rootRef.current && !rootRef.current.contains(event.target)) {
@@ -1599,9 +1729,9 @@ var Select = (0, import_react40.forwardRef)(function Select2({ options, value, o
1599
1729
  break;
1600
1730
  }
1601
1731
  };
1602
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { ref: setRootRef, className: root24, ...rest, children: [
1603
- label7 && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { id: labelId, className: labelClass, children: label7 }),
1604
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
1732
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { ref: setRootRef, className: root24, ...rest, children: [
1733
+ label7 && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { id: labelId, className: labelClass, children: label7 }),
1734
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
1605
1735
  "button",
1606
1736
  {
1607
1737
  type: "button",
@@ -1621,17 +1751,17 @@ var Select = (0, import_react40.forwardRef)(function Select2({ options, value, o
1621
1751
  },
1622
1752
  onKeyDown: handleKeyDown,
1623
1753
  children: [
1624
- selected3 ? selected3.label : /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: placeholderClass, children: placeholder2 }),
1625
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: chevron3, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(ChevronDownIcon, { size: 18 }) })
1754
+ selected3 ? selected3.label : /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: placeholderClass, children: placeholder2 }),
1755
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: chevron3, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(ChevronDownIcon, { size: 18 }) })
1626
1756
  ]
1627
1757
  }
1628
1758
  ),
1629
- open && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: menu2, role: "listbox", children: options.map((option2, index) => {
1759
+ open && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: menu2, role: "listbox", children: options.map((option2, index) => {
1630
1760
  const isSelected = option2.value === value;
1631
1761
  const isActive = index === activeIndex;
1632
1762
  return (
1633
1763
  // biome-ignore lint/a11y/useKeyWithClickEvents: keyboard nav lives on the trigger via aria-activedescendant; options are not focusable.
1634
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1764
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1635
1765
  "div",
1636
1766
  {
1637
1767
  id: optionId(index),
@@ -1650,10 +1780,10 @@ var Select = (0, import_react40.forwardRef)(function Select2({ options, value, o
1650
1780
  });
1651
1781
 
1652
1782
  // src/components/slider/index.tsx
1653
- var import_react42 = require("react");
1783
+ var import_react44 = require("react");
1654
1784
 
1655
1785
  // src/components/slider/use-styles.ts
1656
- var import_react41 = require("react");
1786
+ var import_react43 = require("react");
1657
1787
 
1658
1788
  // src/components/slider/use-styles.css.ts
1659
1789
  var input5 = "use-styles_input__okw59n3";
@@ -1667,7 +1797,7 @@ var wrapper2 = "use-styles_wrapper__okw59n6";
1667
1797
  // src/components/slider/use-styles.ts
1668
1798
  function useStyles19() {
1669
1799
  const { themeClass } = useTheme();
1670
- return (0, import_react41.useMemo)(() => {
1800
+ return (0, import_react43.useMemo)(() => {
1671
1801
  const root24 = [themeClass, root14].filter(Boolean).join(" ");
1672
1802
  return {
1673
1803
  wrapper: wrapper2,
@@ -1682,8 +1812,8 @@ function useStyles19() {
1682
1812
  }
1683
1813
 
1684
1814
  // src/components/slider/index.tsx
1685
- var import_jsx_runtime31 = require("react/jsx-runtime");
1686
- var Slider = (0, import_react42.forwardRef)(function Slider2({ value = 0, onChange, min = 0, max = 100, step: step2 = 1, disabled: disabled3, label: label7, ...rest }, ref) {
1815
+ var import_jsx_runtime32 = require("react/jsx-runtime");
1816
+ var Slider = (0, import_react44.forwardRef)(function Slider2({ value = 0, onChange, min = 0, max = 100, step: step2 = 1, disabled: disabled3, label: label7, ...rest }, ref) {
1687
1817
  const { wrapper: wrapper4, label: labelClass, root: root24, track: track4, range: range2, thumb: thumb2, input: input6 } = useStyles19();
1688
1818
  const span = max - min;
1689
1819
  const percent = span > 0 ? (value - min) / span * 100 : 0;
@@ -1691,12 +1821,12 @@ var Slider = (0, import_react42.forwardRef)(function Slider2({ value = 0, onChan
1691
1821
  const handleChange = (e) => {
1692
1822
  onChange?.(Number(e.target.value));
1693
1823
  };
1694
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("span", { className: wrapper4, children: [
1695
- label7 ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: labelClass, children: label7 }) : null,
1696
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("span", { className: root24, children: [
1697
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: track4 }),
1698
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: range2, style: { width: `${clamped}%` } }),
1699
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1824
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("span", { className: wrapper4, children: [
1825
+ label7 ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: labelClass, children: label7 }) : null,
1826
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("span", { className: root24, children: [
1827
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: track4 }),
1828
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: range2, style: { width: `${clamped}%` } }),
1829
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1700
1830
  "input",
1701
1831
  {
1702
1832
  ref,
@@ -1711,16 +1841,16 @@ var Slider = (0, import_react42.forwardRef)(function Slider2({ value = 0, onChan
1711
1841
  ...rest
1712
1842
  }
1713
1843
  ),
1714
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: thumb2, style: { left: `${clamped}%` } })
1844
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: thumb2, style: { left: `${clamped}%` } })
1715
1845
  ] })
1716
1846
  ] });
1717
1847
  });
1718
1848
 
1719
1849
  // src/components/accordion/index.tsx
1720
- var import_react44 = require("react");
1850
+ var import_react46 = require("react");
1721
1851
 
1722
1852
  // src/components/accordion/use-styles.ts
1723
- var import_react43 = require("react");
1853
+ var import_react45 = require("react");
1724
1854
 
1725
1855
  // src/components/accordion/use-styles.css.ts
1726
1856
  var chevron2 = "use-styles_chevron__1cjrdh93";
@@ -1733,7 +1863,7 @@ var root15 = "use-styles_root__1cjrdh90";
1733
1863
  // src/components/accordion/use-styles.ts
1734
1864
  function useStyles20({ className }) {
1735
1865
  const { themeClass } = useTheme();
1736
- return (0, import_react43.useMemo)(
1866
+ return (0, import_react45.useMemo)(
1737
1867
  () => ({
1738
1868
  root: [themeClass, root15, className].filter(Boolean).join(" "),
1739
1869
  item,
@@ -1746,10 +1876,11 @@ function useStyles20({ className }) {
1746
1876
  }
1747
1877
 
1748
1878
  // src/components/accordion/index.tsx
1749
- var import_jsx_runtime32 = require("react/jsx-runtime");
1750
- var Accordion = (0, import_react44.forwardRef)(function Accordion2({ items, multiple = false, defaultOpen = [], className }, ref) {
1751
- const [open, setOpen] = (0, import_react44.useState)(defaultOpen);
1879
+ var import_jsx_runtime33 = require("react/jsx-runtime");
1880
+ var Accordion = (0, import_react46.forwardRef)(function Accordion2({ items, multiple = false, defaultOpen = [], className, testId }, ref) {
1881
+ const [open, setOpen] = (0, import_react46.useState)(defaultOpen);
1752
1882
  const { root: root24, item: item3, header: header3, chevronFor, panel: panel3 } = useStyles20({ className });
1883
+ const { testId: dataTestId, slot } = useTestId("layout", testId);
1753
1884
  const toggle = (id) => {
1754
1885
  setOpen((current2) => {
1755
1886
  const isOpen = current2.includes(id);
@@ -1757,38 +1888,59 @@ var Accordion = (0, import_react44.forwardRef)(function Accordion2({ items, mult
1757
1888
  return multiple ? [...current2, id] : [id];
1758
1889
  });
1759
1890
  };
1760
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { ref, className: root24, children: items.map((it) => {
1891
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { ref, className: root24, "data-testid": dataTestId, children: items.map((it) => {
1761
1892
  const isOpen = open.includes(it.id);
1762
1893
  const panelId = `accordion-panel-${it.id}`;
1763
1894
  const headerId = `accordion-header-${it.id}`;
1764
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: item3, children: [
1765
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
1766
- "button",
1767
- {
1768
- type: "button",
1769
- id: headerId,
1770
- className: header3,
1771
- "aria-expanded": isOpen,
1772
- "aria-controls": panelId,
1773
- onClick: () => toggle(it.id),
1774
- children: [
1775
- it.title,
1776
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(ChevronDownIcon, { className: chevronFor(isOpen) })
1777
- ]
1778
- }
1779
- ),
1780
- isOpen && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { id: panelId, className: panel3, role: "region", "aria-labelledby": headerId, children: it.content })
1781
- ] }, it.id);
1895
+ const itemSlot = slot(`item-${it.id}`);
1896
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
1897
+ "div",
1898
+ {
1899
+ className: item3,
1900
+ "data-testid": itemSlot,
1901
+ "data-state": states({ expanded: isOpen }),
1902
+ children: [
1903
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
1904
+ "button",
1905
+ {
1906
+ type: "button",
1907
+ id: headerId,
1908
+ className: header3,
1909
+ "aria-expanded": isOpen,
1910
+ "aria-controls": panelId,
1911
+ "data-testid": `${itemSlot}__trigger`,
1912
+ onClick: () => toggle(it.id),
1913
+ children: [
1914
+ it.title,
1915
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(ChevronDownIcon, { className: chevronFor(isOpen) })
1916
+ ]
1917
+ }
1918
+ ),
1919
+ isOpen && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1920
+ "div",
1921
+ {
1922
+ id: panelId,
1923
+ className: panel3,
1924
+ role: "region",
1925
+ "aria-labelledby": headerId,
1926
+ "data-testid": `${itemSlot}__panel`,
1927
+ children: it.content
1928
+ }
1929
+ )
1930
+ ]
1931
+ },
1932
+ it.id
1933
+ );
1782
1934
  }) });
1783
1935
  });
1784
1936
 
1785
1937
  // src/components/breadcrumbs/index.tsx
1786
- var import_react46 = require("react");
1938
+ var import_react48 = require("react");
1787
1939
 
1788
1940
  // src/components/icons/chevron-right/index.tsx
1789
- var import_jsx_runtime33 = require("react/jsx-runtime");
1941
+ var import_jsx_runtime34 = require("react/jsx-runtime");
1790
1942
  function ChevronRightIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
1791
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1943
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1792
1944
  "svg",
1793
1945
  {
1794
1946
  xmlns: "http://www.w3.org/2000/svg",
@@ -1802,13 +1954,13 @@ function ChevronRightIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
1802
1954
  strokeLinejoin: "round",
1803
1955
  "aria-hidden": "true",
1804
1956
  ...rest,
1805
- children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("path", { d: "m9 18 6-6-6-6" })
1957
+ children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("path", { d: "m9 18 6-6-6-6" })
1806
1958
  }
1807
1959
  );
1808
1960
  }
1809
1961
 
1810
1962
  // src/components/breadcrumbs/use-styles.ts
1811
- var import_react45 = require("react");
1963
+ var import_react47 = require("react");
1812
1964
 
1813
1965
  // src/components/breadcrumbs/use-styles.css.ts
1814
1966
  var crumb = "use-styles_crumb__7u0du61";
@@ -1819,7 +1971,7 @@ var separator = "use-styles_separator__7u0du63";
1819
1971
  // src/components/breadcrumbs/use-styles.ts
1820
1972
  function useStyles21({ className }) {
1821
1973
  const { themeClass } = useTheme();
1822
- const root24 = (0, import_react45.useMemo)(
1974
+ const root24 = (0, import_react47.useMemo)(
1823
1975
  () => [themeClass, root16, className].filter(Boolean).join(" "),
1824
1976
  [themeClass, className]
1825
1977
  );
@@ -1827,26 +1979,27 @@ function useStyles21({ className }) {
1827
1979
  }
1828
1980
 
1829
1981
  // src/components/breadcrumbs/index.tsx
1830
- var import_jsx_runtime34 = require("react/jsx-runtime");
1831
- var Breadcrumbs = (0, import_react46.forwardRef)(function Breadcrumbs2({ items, className, ...rest }, ref) {
1982
+ var import_jsx_runtime35 = require("react/jsx-runtime");
1983
+ var Breadcrumbs = (0, import_react48.forwardRef)(function Breadcrumbs2({ items, className, testId, ...rest }, ref) {
1832
1984
  const { root: root24, crumb: crumb2, current: current2, separator: separator2 } = useStyles21({ className });
1833
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("nav", { ref, "aria-label": "Breadcrumb", className: root24, ...rest, children: items.map((item3, index) => {
1985
+ const { testId: dataTestId, slot } = useTestId("nav", testId);
1986
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("nav", { ref, "aria-label": "Breadcrumb", className: root24, "data-testid": dataTestId, ...rest, children: items.map((item3, index) => {
1834
1987
  const isLast = index === items.length - 1;
1835
1988
  const key = index;
1836
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_react46.Fragment, { children: [
1837
- isLast ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: current2, "aria-current": "page", children: item3.label }) : item3.href ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("a", { className: crumb2, href: item3.href, children: item3.label }) : /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: crumb2, children: item3.label }),
1838
- !isLast && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: separator2, children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(ChevronRightIcon, { size: 14 }) })
1989
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_react48.Fragment, { children: [
1990
+ isLast ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: current2, "aria-current": "page", "data-testid": slot(`crumb-${index}`), children: item3.label }) : item3.href ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("a", { className: crumb2, href: item3.href, "data-testid": slot(`crumb-${index}`), children: item3.label }) : /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: crumb2, "data-testid": slot(`crumb-${index}`), children: item3.label }),
1991
+ !isLast && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: separator2, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(ChevronRightIcon, { size: 14 }) })
1839
1992
  ] }, key);
1840
1993
  }) });
1841
1994
  });
1842
1995
 
1843
1996
  // src/components/pagination/index.tsx
1844
- var import_react48 = require("react");
1997
+ var import_react50 = require("react");
1845
1998
 
1846
1999
  // src/components/icons/chevron-left/index.tsx
1847
- var import_jsx_runtime35 = require("react/jsx-runtime");
2000
+ var import_jsx_runtime36 = require("react/jsx-runtime");
1848
2001
  function ChevronLeftIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
1849
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2002
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
1850
2003
  "svg",
1851
2004
  {
1852
2005
  xmlns: "http://www.w3.org/2000/svg",
@@ -1860,13 +2013,13 @@ function ChevronLeftIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
1860
2013
  strokeLinejoin: "round",
1861
2014
  "aria-hidden": "true",
1862
2015
  ...rest,
1863
- children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("path", { d: "m15 18-6-6 6-6" })
2016
+ children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("path", { d: "m15 18-6-6 6-6" })
1864
2017
  }
1865
2018
  );
1866
2019
  }
1867
2020
 
1868
2021
  // src/components/pagination/use-styles.ts
1869
- var import_react47 = require("react");
2022
+ var import_react49 = require("react");
1870
2023
 
1871
2024
  // src/components/pagination/use-styles.css.ts
1872
2025
  var ellipsis = "use-styles_ellipsis__1azgzoh3";
@@ -1878,7 +2031,7 @@ var root17 = "use-styles_root__1azgzoh0";
1878
2031
  // src/components/pagination/use-styles.ts
1879
2032
  function useStyles22() {
1880
2033
  const { themeClass } = useTheme();
1881
- return (0, import_react47.useMemo)(
2034
+ return (0, import_react49.useMemo)(
1882
2035
  () => ({
1883
2036
  root: [themeClass, root17].filter(Boolean).join(" "),
1884
2037
  pageBtnFor: (active2) => [pageBtn, active2 && pageActive].filter(Boolean).join(" "),
@@ -1890,7 +2043,7 @@ function useStyles22() {
1890
2043
  }
1891
2044
 
1892
2045
  // src/components/pagination/index.tsx
1893
- var import_jsx_runtime36 = require("react/jsx-runtime");
2046
+ var import_jsx_runtime37 = require("react/jsx-runtime");
1894
2047
  function buildItems(count, page, siblingCount) {
1895
2048
  const total = Math.max(1, count);
1896
2049
  const first = 1;
@@ -1904,59 +2057,68 @@ function buildItems(count, page, siblingCount) {
1904
2057
  if (last > first) items.push(last);
1905
2058
  return items;
1906
2059
  }
1907
- var Pagination = (0, import_react48.forwardRef)(function Pagination2({ count, page = 1, onChange, siblingCount = 1, ...rest }, ref) {
2060
+ var Pagination = (0, import_react50.forwardRef)(function Pagination2({ count, page = 1, onChange, siblingCount = 1, testId, ...rest }, ref) {
1908
2061
  const { root: root24, pageBtnFor, ellipsis: ellipsis2, nav: nav2 } = useStyles22();
2062
+ const { testId: dataTestId, slot } = useTestId("nav", testId);
1909
2063
  const total = Math.max(1, count);
1910
2064
  const current2 = Math.min(Math.max(1, page), total);
1911
2065
  const items = buildItems(total, current2, siblingCount);
1912
2066
  const go = (n) => onChange?.(Math.min(Math.max(1, n), total));
1913
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("nav", { ref, className: root24, "aria-label": "Pagination", ...rest, children: [
1914
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2067
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("nav", { ref, className: root24, "aria-label": "Pagination", "data-testid": dataTestId, ...rest, children: [
2068
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1915
2069
  "button",
1916
2070
  {
1917
2071
  type: "button",
1918
2072
  className: nav2,
1919
2073
  "aria-label": "Previous page",
1920
2074
  disabled: current2 <= 1,
2075
+ "data-testid": slot("prev"),
1921
2076
  onClick: () => go(current2 - 1),
1922
- children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(ChevronLeftIcon, { size: 18 })
2077
+ children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(ChevronLeftIcon, { size: 18 })
1923
2078
  }
1924
2079
  ),
1925
2080
  items.map(
1926
- (item3, index) => item3 === "ellipsis" ? (
1927
- // biome-ignore lint/suspicious/noArrayIndexKey: ellipsis position is stable per render
1928
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: ellipsis2, children: "\u2026" }, `ellipsis-${index}`)
1929
- ) : /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2081
+ (item3, index) => item3 === "ellipsis" ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2082
+ "span",
2083
+ {
2084
+ className: ellipsis2,
2085
+ "data-testid": slot(`ellipsis-${index}`),
2086
+ children: "\u2026"
2087
+ },
2088
+ `ellipsis-${index}`
2089
+ ) : /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1930
2090
  "button",
1931
2091
  {
1932
2092
  type: "button",
1933
2093
  className: pageBtnFor(item3 === current2),
1934
2094
  "aria-current": item3 === current2 ? "page" : void 0,
2095
+ "data-testid": slot(`page-${item3}`),
1935
2096
  onClick: () => go(item3),
1936
2097
  children: item3
1937
2098
  },
1938
2099
  item3
1939
2100
  )
1940
2101
  ),
1941
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2102
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1942
2103
  "button",
1943
2104
  {
1944
2105
  type: "button",
1945
2106
  className: nav2,
1946
2107
  "aria-label": "Next page",
1947
2108
  disabled: current2 >= total,
2109
+ "data-testid": slot("next"),
1948
2110
  onClick: () => go(current2 + 1),
1949
- children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(ChevronRightIcon, { size: 18 })
2111
+ children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(ChevronRightIcon, { size: 18 })
1950
2112
  }
1951
2113
  )
1952
2114
  ] });
1953
2115
  });
1954
2116
 
1955
2117
  // src/components/stepper/index.tsx
1956
- var import_react50 = require("react");
2118
+ var import_react52 = require("react");
1957
2119
 
1958
2120
  // src/components/stepper/use-styles.ts
1959
- var import_react49 = require("react");
2121
+ var import_react51 = require("react");
1960
2122
 
1961
2123
  // src/components/stepper/use-styles.css.ts
1962
2124
  var connector = "use-styles_connector__79pt4e7";
@@ -1971,7 +2133,7 @@ var step = "use-styles_step__79pt4e1";
1971
2133
  // src/components/stepper/use-styles.ts
1972
2134
  function useStyles23({ className }) {
1973
2135
  const { themeClass } = useTheme();
1974
- return (0, import_react49.useMemo)(() => {
2136
+ return (0, import_react51.useMemo)(() => {
1975
2137
  const root24 = [themeClass, root18, className].filter(Boolean).join(" ");
1976
2138
  const markerFor = (state) => [
1977
2139
  marker,
@@ -1984,30 +2146,40 @@ function useStyles23({ className }) {
1984
2146
  }
1985
2147
 
1986
2148
  // src/components/stepper/index.tsx
1987
- var import_jsx_runtime37 = require("react/jsx-runtime");
1988
- var Stepper = (0, import_react50.forwardRef)(function Stepper2({ steps, active: active2 = 0, className, ...rest }, ref) {
2149
+ var import_jsx_runtime38 = require("react/jsx-runtime");
2150
+ var Stepper = (0, import_react52.forwardRef)(function Stepper2({ steps, active: active2 = 0, className, testId, ...rest }, ref) {
1989
2151
  const { root: root24, step: step2, connector: connector2, markerFor, labelFor } = useStyles23({ className });
1990
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { ref, className: root24, ...rest, children: steps.map((s, index) => {
2152
+ const { testId: dataTestId, slot } = useTestId("nav", testId);
2153
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { ref, className: root24, "data-testid": dataTestId, ...rest, children: steps.map((s, index) => {
1991
2154
  const state = index < active2 ? "done" : index === active2 ? "active" : "upcoming";
1992
2155
  const isActive = state === "active";
1993
2156
  return (
1994
2157
  // biome-ignore lint/suspicious/noArrayIndexKey: steps are a static, ordered list with no stable id.
1995
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_react50.Fragment, { children: [
1996
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: step2, "aria-current": isActive ? "step" : void 0, children: [
1997
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: markerFor(state), children: state === "done" ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(CheckIcon, { size: 14 }) : index + 1 }),
1998
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: labelFor(isActive), children: s.label })
1999
- ] }),
2000
- index < steps.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { "data-part": "connector", className: connector2 })
2158
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_react52.Fragment, { children: [
2159
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
2160
+ "div",
2161
+ {
2162
+ className: step2,
2163
+ "aria-current": isActive ? "step" : void 0,
2164
+ "data-testid": slot(`step-${index}`),
2165
+ "data-state": states({ done: state === "done", active: isActive }),
2166
+ children: [
2167
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: markerFor(state), children: state === "done" ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(CheckIcon, { size: 14 }) : index + 1 }),
2168
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: labelFor(isActive), children: s.label })
2169
+ ]
2170
+ }
2171
+ ),
2172
+ index < steps.length - 1 && /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { "data-part": "connector", className: connector2 })
2001
2173
  ] }, index)
2002
2174
  );
2003
2175
  }) });
2004
2176
  });
2005
2177
 
2006
2178
  // src/components/tabs/index.tsx
2007
- var import_react52 = require("react");
2179
+ var import_react54 = require("react");
2008
2180
 
2009
2181
  // src/components/tabs/use-styles.ts
2010
- var import_react51 = require("react");
2182
+ var import_react53 = require("react");
2011
2183
 
2012
2184
  // src/components/tabs/use-styles.css.ts
2013
2185
  var panel2 = "use-styles_panel__1l4m7t43";
@@ -2018,7 +2190,7 @@ var tabActive = "use-styles_tabActive__1l4m7t42";
2018
2190
  // src/components/tabs/use-styles.ts
2019
2191
  function useStyles24() {
2020
2192
  const { themeClass } = useTheme();
2021
- return (0, import_react51.useMemo)(() => {
2193
+ return (0, import_react53.useMemo)(() => {
2022
2194
  const root24 = [themeClass, root19].filter(Boolean).join(" ");
2023
2195
  const tabClass = (active2) => [tab, active2 && tabActive].filter(Boolean).join(" ");
2024
2196
  return { root: root24, tab, tabClass, panel: panel2 };
@@ -2026,11 +2198,12 @@ function useStyles24() {
2026
2198
  }
2027
2199
 
2028
2200
  // src/components/tabs/index.tsx
2029
- var import_jsx_runtime38 = require("react/jsx-runtime");
2030
- var Tabs = (0, import_react52.forwardRef)(function Tabs2({ items, value, onChange, ...rest }, ref) {
2201
+ var import_jsx_runtime39 = require("react/jsx-runtime");
2202
+ var Tabs = (0, import_react54.forwardRef)(function Tabs2({ items, value, onChange, testId, ...rest }, ref) {
2031
2203
  const { root: root24, tabClass, panel: panel3 } = useStyles24();
2032
- const baseId = (0, import_react52.useId)();
2033
- const tabRefs = (0, import_react52.useRef)([]);
2204
+ const { testId: dataTestId, slot } = useTestId("nav", testId);
2205
+ const baseId = (0, import_react54.useId)();
2206
+ const tabRefs = (0, import_react54.useRef)([]);
2034
2207
  const hasPanels = items.some((item3) => item3.content !== void 0);
2035
2208
  const activeIndex = items.findIndex((item3) => item3.value === value);
2036
2209
  const tabId = (v) => `${baseId}-tab-${v}`;
@@ -2062,11 +2235,11 @@ var Tabs = (0, import_react52.forwardRef)(function Tabs2({ items, value, onChang
2062
2235
  break;
2063
2236
  }
2064
2237
  };
2065
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
2066
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { ref, role: "tablist", className: root24, ...rest, children: items.map((item3, index) => {
2238
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_jsx_runtime39.Fragment, { children: [
2239
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { ref, role: "tablist", className: root24, "data-testid": dataTestId, ...rest, children: items.map((item3, index) => {
2067
2240
  const active2 = item3.value === value;
2068
2241
  const tabbable = active2 || activeIndex === -1 && index === 0;
2069
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2242
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2070
2243
  "button",
2071
2244
  {
2072
2245
  ref: (el) => {
@@ -2079,6 +2252,8 @@ var Tabs = (0, import_react52.forwardRef)(function Tabs2({ items, value, onChang
2079
2252
  "aria-controls": hasPanels ? panelId(item3.value) : void 0,
2080
2253
  tabIndex: tabbable ? 0 : -1,
2081
2254
  className: tabClass(active2),
2255
+ "data-testid": slot(`tab-${index}`),
2256
+ "data-state": states({ selected: active2 }),
2082
2257
  onClick: () => onChange?.(item3.value),
2083
2258
  onKeyDown: (event) => onKeyDown(event, index),
2084
2259
  children: item3.label
@@ -2086,7 +2261,7 @@ var Tabs = (0, import_react52.forwardRef)(function Tabs2({ items, value, onChang
2086
2261
  item3.value
2087
2262
  );
2088
2263
  }) }),
2089
- hasPanels && items.map((item3) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2264
+ hasPanels && items.map((item3) => /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2090
2265
  "div",
2091
2266
  {
2092
2267
  role: "tabpanel",
@@ -2095,6 +2270,7 @@ var Tabs = (0, import_react52.forwardRef)(function Tabs2({ items, value, onChang
2095
2270
  hidden: item3.value !== value,
2096
2271
  tabIndex: 0,
2097
2272
  className: panel3,
2273
+ "data-testid": slot(`panel-${item3.value}`),
2098
2274
  children: item3.content
2099
2275
  },
2100
2276
  item3.value
@@ -2103,10 +2279,10 @@ var Tabs = (0, import_react52.forwardRef)(function Tabs2({ items, value, onChang
2103
2279
  });
2104
2280
 
2105
2281
  // src/components/menu/index.tsx
2106
- var import_react54 = require("react");
2282
+ var import_react56 = require("react");
2107
2283
 
2108
2284
  // src/components/menu/use-styles.ts
2109
- var import_react53 = require("react");
2285
+ var import_react55 = require("react");
2110
2286
 
2111
2287
  // src/components/menu/use-styles.css.ts
2112
2288
  var danger = "use-styles_danger__1uyxaj3";
@@ -2117,7 +2293,7 @@ var wrapper3 = "use-styles_wrapper__1uyxaj0";
2117
2293
  // src/components/menu/use-styles.ts
2118
2294
  function useStyles25() {
2119
2295
  const { themeClass } = useTheme();
2120
- return (0, import_react53.useMemo)(
2296
+ return (0, import_react55.useMemo)(
2121
2297
  () => ({
2122
2298
  wrapper: [themeClass, wrapper3].filter(Boolean).join(" "),
2123
2299
  list,
@@ -2129,22 +2305,23 @@ function useStyles25() {
2129
2305
  }
2130
2306
 
2131
2307
  // src/components/menu/index.tsx
2132
- var import_jsx_runtime39 = require("react/jsx-runtime");
2308
+ var import_jsx_runtime40 = require("react/jsx-runtime");
2133
2309
  function assignRef(ref, value) {
2134
2310
  if (typeof ref === "function") ref(value);
2135
2311
  else if (ref) ref.current = value;
2136
2312
  }
2137
- var Menu = (0, import_react54.forwardRef)(function Menu2({ trigger: trigger2, items }, ref) {
2313
+ var Menu = (0, import_react56.forwardRef)(function Menu2({ trigger: trigger2, items, testId }, ref) {
2138
2314
  const { wrapper: wrapper4, list: list2, item: item3, dangerItem } = useStyles25();
2139
- const [open, setOpen] = (0, import_react54.useState)(false);
2140
- const [alignEnd, setAlignEnd] = (0, import_react54.useState)(false);
2141
- const rootRef = (0, import_react54.useRef)(null);
2315
+ const { testId: rootTestId, slot } = useTestId("menu", testId);
2316
+ const [open, setOpen] = (0, import_react56.useState)(false);
2317
+ const [alignEnd, setAlignEnd] = (0, import_react56.useState)(false);
2318
+ const rootRef = (0, import_react56.useRef)(null);
2142
2319
  const setRootRef = (node) => {
2143
2320
  rootRef.current = node;
2144
2321
  assignRef(ref, node);
2145
2322
  };
2146
- const listRef = (0, import_react54.useRef)(null);
2147
- const triggerRef = (0, import_react54.useRef)(null);
2323
+ const listRef = (0, import_react56.useRef)(null);
2324
+ const triggerRef = (0, import_react56.useRef)(null);
2148
2325
  const getMenuItems = () => Array.from(listRef.current?.querySelectorAll('[role="menuitem"]') ?? []);
2149
2326
  const focusItemAt = (index) => {
2150
2327
  const menuItems = getMenuItems();
@@ -2156,7 +2333,7 @@ var Menu = (0, import_react54.forwardRef)(function Menu2({ trigger: trigger2, it
2156
2333
  setOpen(false);
2157
2334
  triggerRef.current?.focus();
2158
2335
  };
2159
- (0, import_react54.useLayoutEffect)(() => {
2336
+ (0, import_react56.useLayoutEffect)(() => {
2160
2337
  if (!open) {
2161
2338
  setAlignEnd(false);
2162
2339
  return;
@@ -2168,7 +2345,7 @@ var Menu = (0, import_react54.forwardRef)(function Menu2({ trigger: trigger2, it
2168
2345
  const viewport = document.documentElement.clientWidth;
2169
2346
  setAlignEnd(rootLeft + listEl.offsetWidth > viewport);
2170
2347
  }, [open]);
2171
- (0, import_react54.useEffect)(() => {
2348
+ (0, import_react56.useEffect)(() => {
2172
2349
  if (!open) return;
2173
2350
  listRef.current?.querySelector('[role="menuitem"]')?.focus();
2174
2351
  const onDocMouseDown = (event) => {
@@ -2224,7 +2401,7 @@ var Menu = (0, import_react54.forwardRef)(function Menu2({ trigger: trigger2, it
2224
2401
  triggerRef.current = node;
2225
2402
  assignRef(consumerRef, node);
2226
2403
  };
2227
- const clonedTrigger = (0, import_react54.cloneElement)(trigger2, {
2404
+ const clonedTrigger = (0, import_react56.cloneElement)(trigger2, {
2228
2405
  ref: mergedTriggerRef,
2229
2406
  "aria-haspopup": "menu",
2230
2407
  "aria-expanded": open,
@@ -2233,42 +2410,53 @@ var Menu = (0, import_react54.forwardRef)(function Menu2({ trigger: trigger2, it
2233
2410
  setOpen((prev) => !prev);
2234
2411
  }
2235
2412
  });
2236
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { ref: setRootRef, className: wrapper4, children: [
2237
- clonedTrigger,
2238
- open && /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2239
- "div",
2240
- {
2241
- ref: listRef,
2242
- role: "menu",
2243
- className: list2,
2244
- "data-align": alignEnd ? "end" : "start",
2245
- onKeyDown: onMenuKeyDown,
2246
- children: items.map((entry, index) => /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2247
- "button",
2413
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
2414
+ "div",
2415
+ {
2416
+ ref: setRootRef,
2417
+ className: wrapper4,
2418
+ "data-testid": rootTestId,
2419
+ "data-state": open ? "open" : "closed",
2420
+ children: [
2421
+ clonedTrigger,
2422
+ open && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2423
+ "div",
2248
2424
  {
2249
- type: "button",
2250
- role: "menuitem",
2251
- tabIndex: -1,
2252
- className: entry.danger ? dangerItem : item3,
2253
- onClick: () => {
2254
- entry.onClick?.();
2255
- setOpen(false);
2256
- },
2257
- children: entry.label
2258
- },
2259
- index
2260
- ))
2261
- }
2262
- )
2263
- ] });
2425
+ ref: listRef,
2426
+ role: "menu",
2427
+ className: list2,
2428
+ "data-align": alignEnd ? "end" : "start",
2429
+ "data-testid": slot("list"),
2430
+ onKeyDown: onMenuKeyDown,
2431
+ children: items.map((entry, index) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2432
+ "button",
2433
+ {
2434
+ type: "button",
2435
+ role: "menuitem",
2436
+ tabIndex: -1,
2437
+ className: entry.danger ? dangerItem : item3,
2438
+ "data-testid": slot(`item-${index}`),
2439
+ onClick: () => {
2440
+ entry.onClick?.();
2441
+ setOpen(false);
2442
+ },
2443
+ children: entry.label
2444
+ },
2445
+ index
2446
+ ))
2447
+ }
2448
+ )
2449
+ ]
2450
+ }
2451
+ );
2264
2452
  });
2265
2453
 
2266
2454
  // src/components/dialog/index.tsx
2267
- var import_react56 = require("react");
2455
+ var import_react58 = require("react");
2268
2456
  var import_react_dom = require("react-dom");
2269
2457
 
2270
2458
  // src/components/dialog/use-styles.ts
2271
- var import_react55 = require("react");
2459
+ var import_react57 = require("react");
2272
2460
 
2273
2461
  // src/components/dialog/use-styles.css.ts
2274
2462
  var actions = "use-styles_actions__5tstu83";
@@ -2279,7 +2467,7 @@ var surface = "use-styles_surface__5tstu81";
2279
2467
  // src/components/dialog/use-styles.ts
2280
2468
  function useStyles26() {
2281
2469
  const { themeClass } = useTheme();
2282
- return (0, import_react55.useMemo)(
2470
+ return (0, import_react57.useMemo)(
2283
2471
  () => ({
2284
2472
  overlay: [themeClass, overlay].filter(Boolean).join(" "),
2285
2473
  surface,
@@ -2291,23 +2479,24 @@ function useStyles26() {
2291
2479
  }
2292
2480
 
2293
2481
  // src/components/dialog/index.tsx
2294
- var import_jsx_runtime40 = require("react/jsx-runtime");
2482
+ var import_jsx_runtime41 = require("react/jsx-runtime");
2295
2483
  var FOCUSABLE = 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex="-1"])';
2296
2484
  function assignRef2(ref, value) {
2297
2485
  if (typeof ref === "function") ref(value);
2298
2486
  else if (ref) ref.current = value;
2299
2487
  }
2300
- var Dialog = (0, import_react56.forwardRef)(function Dialog2({ open, onClose, title, actions: actions3, children }, ref) {
2488
+ var Dialog = (0, import_react58.forwardRef)(function Dialog2({ open, onClose, title, actions: actions3, children, testId }, ref) {
2301
2489
  const { overlay: overlay2, surface: surface2, body: body3, actions: actionsClass } = useStyles26();
2302
- const surfaceRef = (0, import_react56.useRef)(null);
2490
+ const { testId: rootTestId, slot } = useTestId("dialog", testId);
2491
+ const surfaceRef = (0, import_react58.useRef)(null);
2303
2492
  const setSurfaceRef = (node) => {
2304
2493
  surfaceRef.current = node;
2305
2494
  assignRef2(ref, node);
2306
2495
  };
2307
- const previouslyFocused = (0, import_react56.useRef)(null);
2308
- const generatedId = (0, import_react56.useId)();
2496
+ const previouslyFocused = (0, import_react58.useRef)(null);
2497
+ const generatedId = (0, import_react58.useId)();
2309
2498
  const titleId = title != null ? generatedId : void 0;
2310
- (0, import_react56.useEffect)(() => {
2499
+ (0, import_react58.useEffect)(() => {
2311
2500
  if (!open) return;
2312
2501
  const onKeyDown = (event) => {
2313
2502
  if (event.key === "Escape") onClose();
@@ -2315,13 +2504,13 @@ var Dialog = (0, import_react56.forwardRef)(function Dialog2({ open, onClose, ti
2315
2504
  document.addEventListener("keydown", onKeyDown);
2316
2505
  return () => document.removeEventListener("keydown", onKeyDown);
2317
2506
  }, [open, onClose]);
2318
- (0, import_react56.useEffect)(() => {
2507
+ (0, import_react58.useEffect)(() => {
2319
2508
  if (!open) return;
2320
2509
  previouslyFocused.current = document.activeElement;
2321
2510
  surfaceRef.current?.focus();
2322
2511
  return () => previouslyFocused.current?.focus?.();
2323
2512
  }, [open]);
2324
- (0, import_react56.useEffect)(() => {
2513
+ (0, import_react58.useEffect)(() => {
2325
2514
  if (!open) return;
2326
2515
  const previousOverflow = document.body.style.overflow;
2327
2516
  document.body.style.overflow = "hidden";
@@ -2359,7 +2548,7 @@ var Dialog = (0, import_react56.forwardRef)(function Dialog2({ open, onClose, ti
2359
2548
  };
2360
2549
  return (0, import_react_dom.createPortal)(
2361
2550
  // biome-ignore lint/a11y/useKeyWithClickEvents: ESC handled by a document keydown listener.
2362
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: overlay2, "data-testid": "dialog-overlay", onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
2551
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: overlay2, "data-testid": slot("overlay"), onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
2363
2552
  "div",
2364
2553
  {
2365
2554
  ref: setSurfaceRef,
@@ -2368,12 +2557,13 @@ var Dialog = (0, import_react56.forwardRef)(function Dialog2({ open, onClose, ti
2368
2557
  "aria-modal": "true",
2369
2558
  "aria-labelledby": titleId,
2370
2559
  tabIndex: -1,
2560
+ "data-testid": rootTestId,
2371
2561
  onClick: stop,
2372
2562
  onKeyDown: onSurfaceKeyDown,
2373
2563
  children: [
2374
- title != null && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Typography, { variant: "h3", as: "h2", id: titleId, children: title }),
2375
- children != null && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: body3, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Typography, { variant: "body", color: "fg2", children }) }),
2376
- actions3 != null && /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: actionsClass, children: actions3 })
2564
+ title != null && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Typography, { variant: "h3", as: "h2", id: titleId, children: title }),
2565
+ children != null && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: body3, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Typography, { variant: "body", color: "fg2", children }) }),
2566
+ actions3 != null && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: actionsClass, children: actions3 })
2377
2567
  ]
2378
2568
  }
2379
2569
  ) }),
@@ -2382,11 +2572,11 @@ var Dialog = (0, import_react56.forwardRef)(function Dialog2({ open, onClose, ti
2382
2572
  });
2383
2573
 
2384
2574
  // src/components/snackbar/index.tsx
2385
- var import_react58 = require("react");
2575
+ var import_react60 = require("react");
2386
2576
  var import_react_dom2 = require("react-dom");
2387
2577
 
2388
2578
  // src/components/snackbar/use-styles.ts
2389
- var import_react57 = require("react");
2579
+ var import_react59 = require("react");
2390
2580
 
2391
2581
  // src/components/snackbar/use-styles.css.ts
2392
2582
  var closeBtn = "use-styles_closeBtn__ihzsep2";
@@ -2396,7 +2586,7 @@ var root20 = "use-styles_root__ihzsep0 surfaces_inkySurface__1qa7atn2";
2396
2586
  // src/components/snackbar/use-styles.ts
2397
2587
  function useStyles27() {
2398
2588
  const { themeClass } = useTheme();
2399
- return (0, import_react57.useMemo)(
2589
+ return (0, import_react59.useMemo)(
2400
2590
  () => ({
2401
2591
  root: [themeClass, root20].filter(Boolean).join(" "),
2402
2592
  message,
@@ -2407,25 +2597,36 @@ function useStyles27() {
2407
2597
  }
2408
2598
 
2409
2599
  // src/components/snackbar/index.tsx
2410
- var import_jsx_runtime41 = require("react/jsx-runtime");
2411
- var Snackbar = (0, import_react58.forwardRef)(function Snackbar2({ open, message: message2, action, onClose }, ref) {
2600
+ var import_jsx_runtime42 = require("react/jsx-runtime");
2601
+ var Snackbar = (0, import_react60.forwardRef)(function Snackbar2({ open, message: message2, action, onClose, testId }, ref) {
2412
2602
  const { root: root24, message: messageClass, closeBtn: closeBtn2 } = useStyles27();
2603
+ const { testId: dataTestId, slot } = useTestId("feedback", testId);
2413
2604
  if (!open || typeof document === "undefined") return null;
2414
2605
  return (0, import_react_dom2.createPortal)(
2415
- /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { ref, role: "status", className: root24, children: [
2416
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: messageClass, children: message2 }),
2606
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { ref, role: "status", className: root24, "data-testid": dataTestId, children: [
2607
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: messageClass, "data-testid": slot("message"), children: message2 }),
2417
2608
  action,
2418
- onClose && /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("button", { type: "button", "aria-label": "Close", className: closeBtn2, onClick: onClose, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(XIcon, { size: 18 }) })
2609
+ onClose && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
2610
+ "button",
2611
+ {
2612
+ type: "button",
2613
+ "aria-label": "Close",
2614
+ className: closeBtn2,
2615
+ "data-testid": slot("close"),
2616
+ onClick: onClose,
2617
+ children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(XIcon, { size: 18 })
2618
+ }
2619
+ )
2419
2620
  ] }),
2420
2621
  document.body
2421
2622
  );
2422
2623
  });
2423
2624
 
2424
2625
  // src/components/table/index.tsx
2425
- var import_react60 = require("react");
2626
+ var import_react62 = require("react");
2426
2627
 
2427
2628
  // src/components/table/use-styles.ts
2428
- var import_react59 = require("react");
2629
+ var import_react61 = require("react");
2429
2630
 
2430
2631
  // src/components/table/use-styles.css.ts
2431
2632
  var alignRight = "use-styles_alignRight__1n2cz6i3";
@@ -2437,7 +2638,7 @@ var th = "use-styles_th__1n2cz6i1";
2437
2638
  // src/components/table/use-styles.ts
2438
2639
  function useStyles28({ className }) {
2439
2640
  const { themeClass } = useTheme();
2440
- const root24 = (0, import_react59.useMemo)(
2641
+ const root24 = (0, import_react61.useMemo)(
2441
2642
  () => [themeClass, root21, className].filter(Boolean).join(" "),
2442
2643
  [themeClass, className]
2443
2644
  );
@@ -2451,26 +2652,27 @@ function useStyles28({ className }) {
2451
2652
  }
2452
2653
 
2453
2654
  // src/components/table/index.tsx
2454
- var import_jsx_runtime42 = require("react/jsx-runtime");
2455
- function TableInner({ columns, rows, getRowKey, className, caption: caption2, ...rest }, ref) {
2655
+ var import_jsx_runtime43 = require("react/jsx-runtime");
2656
+ function TableInner({ columns, rows, getRowKey, className, caption: caption2, testId, ...rest }, ref) {
2456
2657
  const { root: root24, th: th2, td: td2, alignRight: alignRight2, caption: captionClass } = useStyles28({ className });
2658
+ const { testId: dataTestId, slot } = useTestId("list", testId);
2457
2659
  const headClass = (column) => column.align === "right" ? `${th2} ${alignRight2}` : th2;
2458
2660
  const cellClass = (column) => column.align === "right" ? `${td2} ${alignRight2}` : td2;
2459
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("table", { ref, className: root24, ...rest, children: [
2460
- caption2 != null && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("caption", { className: captionClass, children: caption2 }),
2461
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("tr", { children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("th", { scope: "col", className: headClass(column), children: column.header }, column.key)) }) }),
2462
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("tbody", { children: rows.map((row, index) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("tr", { children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("td", { className: cellClass(column), children: column.render ? column.render(row) : String(row[column.key]) }, column.key)) }, getRowKey ? getRowKey(row, index) : index)) })
2661
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("table", { ref, className: root24, "data-testid": dataTestId, ...rest, children: [
2662
+ caption2 != null && /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("caption", { className: captionClass, children: caption2 }),
2663
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("tr", { children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("th", { scope: "col", className: headClass(column), children: column.header }, column.key)) }) }),
2664
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("tbody", { children: rows.map((row, index) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("tr", { "data-testid": slot(`row-${index}`), children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("td", { className: cellClass(column), children: column.render ? column.render(row) : String(row[column.key]) }, column.key)) }, getRowKey ? getRowKey(row, index) : index)) })
2463
2665
  ] });
2464
2666
  }
2465
- var TableForwarded = (0, import_react60.forwardRef)(TableInner);
2667
+ var TableForwarded = (0, import_react62.forwardRef)(TableInner);
2466
2668
  TableForwarded.displayName = "Table";
2467
2669
  var Table = TableForwarded;
2468
2670
 
2469
2671
  // src/components/app-bar/index.tsx
2470
- var import_react62 = require("react");
2672
+ var import_react64 = require("react");
2471
2673
 
2472
2674
  // src/components/app-bar/use-styles.ts
2473
- var import_react61 = require("react");
2675
+ var import_react63 = require("react");
2474
2676
 
2475
2677
  // src/components/app-bar/use-styles.css.ts
2476
2678
  var actions2 = "use-styles_actions__1h133nh2";
@@ -2480,7 +2682,7 @@ var root22 = "use-styles_root__1h133nh0";
2480
2682
  // src/components/app-bar/use-styles.ts
2481
2683
  function useStyles29({ className }) {
2482
2684
  const { themeClass } = useTheme();
2483
- const root24 = (0, import_react61.useMemo)(
2685
+ const root24 = (0, import_react63.useMemo)(
2484
2686
  () => [themeClass, root22, className].filter(Boolean).join(" "),
2485
2687
  [themeClass, className]
2486
2688
  );
@@ -2488,21 +2690,22 @@ function useStyles29({ className }) {
2488
2690
  }
2489
2691
 
2490
2692
  // src/components/app-bar/index.tsx
2491
- var import_jsx_runtime43 = require("react/jsx-runtime");
2492
- var AppBar = (0, import_react62.forwardRef)(function AppBar2({ brand: brand2, actions: actions3, className, children, ...rest }, ref) {
2693
+ var import_jsx_runtime44 = require("react/jsx-runtime");
2694
+ var AppBar = (0, import_react64.forwardRef)(function AppBar2({ brand: brand2, actions: actions3, className, children, testId, ...rest }, ref) {
2493
2695
  const styles = useStyles29({ className });
2494
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("header", { ref, className: styles.root, ...rest, children: [
2495
- brand2 !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: styles.brand, children: brand2 }) : null,
2696
+ const { testId: dataTestId, slot } = useTestId("nav", testId);
2697
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("header", { ref, className: styles.root, "data-testid": dataTestId, ...rest, children: [
2698
+ brand2 !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: styles.brand, "data-testid": slot("brand"), children: brand2 }) : null,
2496
2699
  children,
2497
- actions3 !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: styles.actions, children: actions3 }) : null
2700
+ actions3 !== void 0 ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: styles.actions, "data-testid": slot("actions"), children: actions3 }) : null
2498
2701
  ] });
2499
2702
  });
2500
2703
 
2501
2704
  // src/components/list-item/index.tsx
2502
- var import_react64 = require("react");
2705
+ var import_react66 = require("react");
2503
2706
 
2504
2707
  // src/components/list-item/use-styles.ts
2505
- var import_react63 = require("react");
2708
+ var import_react65 = require("react");
2506
2709
 
2507
2710
  // src/components/list-item/use-styles.css.ts
2508
2711
  var content2 = "use-styles_content__kbreq13";
@@ -2517,7 +2720,7 @@ function useStyles30({
2517
2720
  className
2518
2721
  }) {
2519
2722
  const { themeClass } = useTheme();
2520
- const root24 = (0, import_react63.useMemo)(
2723
+ const root24 = (0, import_react65.useMemo)(
2521
2724
  () => [themeClass, root23, selected3 && selected2, className].filter(Boolean).join(" "),
2522
2725
  [themeClass, selected3, className]
2523
2726
  );
@@ -2525,20 +2728,31 @@ function useStyles30({
2525
2728
  }
2526
2729
 
2527
2730
  // src/components/list-item/index.tsx
2528
- var import_jsx_runtime44 = require("react/jsx-runtime");
2529
- var ListItem = (0, import_react64.forwardRef)(function ListItem2({ leading: leading2, trailing: trailing2, selected: selected3, className, children, ...rest }, ref) {
2731
+ var import_jsx_runtime45 = require("react/jsx-runtime");
2732
+ var ListItem = (0, import_react66.forwardRef)(function ListItem2({ leading: leading2, trailing: trailing2, selected: selected3, className, testId, children, ...rest }, ref) {
2530
2733
  const styles = useStyles30({ selected: selected3, className });
2531
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { ref, className: styles.root, ...rest, children: [
2532
- leading2 != null && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: styles.leading, children: leading2 }),
2533
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: styles.content, children }),
2534
- trailing2 != null && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: styles.trailing, children: trailing2 })
2535
- ] });
2734
+ const { testId: dataTestId, slot } = useTestId("list", testId);
2735
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
2736
+ "div",
2737
+ {
2738
+ ref,
2739
+ className: styles.root,
2740
+ "data-testid": dataTestId,
2741
+ "data-state": states({ selected: selected3 }),
2742
+ ...rest,
2743
+ children: [
2744
+ leading2 != null && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: styles.leading, "data-testid": slot("leading"), children: leading2 }),
2745
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: styles.content, "data-testid": slot("content"), children }),
2746
+ trailing2 != null && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: styles.trailing, "data-testid": slot("trailing"), children: trailing2 })
2747
+ ]
2748
+ }
2749
+ );
2536
2750
  });
2537
2751
 
2538
2752
  // src/components/icons/chevron-up/index.tsx
2539
- var import_jsx_runtime45 = require("react/jsx-runtime");
2753
+ var import_jsx_runtime46 = require("react/jsx-runtime");
2540
2754
  function ChevronUpIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
2541
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
2755
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
2542
2756
  "svg",
2543
2757
  {
2544
2758
  xmlns: "http://www.w3.org/2000/svg",
@@ -2552,15 +2766,15 @@ function ChevronUpIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
2552
2766
  strokeLinejoin: "round",
2553
2767
  "aria-hidden": "true",
2554
2768
  ...rest,
2555
- children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("path", { d: "m18 15-6-6-6 6" })
2769
+ children: /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("path", { d: "m18 15-6-6-6 6" })
2556
2770
  }
2557
2771
  );
2558
2772
  }
2559
2773
 
2560
2774
  // src/components/icons/search/index.tsx
2561
- var import_jsx_runtime46 = require("react/jsx-runtime");
2775
+ var import_jsx_runtime47 = require("react/jsx-runtime");
2562
2776
  function SearchIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
2563
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
2777
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
2564
2778
  "svg",
2565
2779
  {
2566
2780
  xmlns: "http://www.w3.org/2000/svg",
@@ -2575,17 +2789,17 @@ function SearchIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
2575
2789
  "aria-hidden": "true",
2576
2790
  ...rest,
2577
2791
  children: [
2578
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("circle", { cx: "11", cy: "11", r: "8" }),
2579
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("path", { d: "m21 21-4.3-4.3" })
2792
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("circle", { cx: "11", cy: "11", r: "8" }),
2793
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("path", { d: "m21 21-4.3-4.3" })
2580
2794
  ]
2581
2795
  }
2582
2796
  );
2583
2797
  }
2584
2798
 
2585
2799
  // src/components/icons/plus/index.tsx
2586
- var import_jsx_runtime47 = require("react/jsx-runtime");
2800
+ var import_jsx_runtime48 = require("react/jsx-runtime");
2587
2801
  function PlusIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
2588
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(
2802
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
2589
2803
  "svg",
2590
2804
  {
2591
2805
  xmlns: "http://www.w3.org/2000/svg",
@@ -2600,17 +2814,17 @@ function PlusIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
2600
2814
  "aria-hidden": "true",
2601
2815
  ...rest,
2602
2816
  children: [
2603
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("path", { d: "M5 12h14" }),
2604
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("path", { d: "M12 5v14" })
2817
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("path", { d: "M5 12h14" }),
2818
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("path", { d: "M12 5v14" })
2605
2819
  ]
2606
2820
  }
2607
2821
  );
2608
2822
  }
2609
2823
 
2610
2824
  // src/components/icons/minus/index.tsx
2611
- var import_jsx_runtime48 = require("react/jsx-runtime");
2825
+ var import_jsx_runtime49 = require("react/jsx-runtime");
2612
2826
  function MinusIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
2613
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
2827
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
2614
2828
  "svg",
2615
2829
  {
2616
2830
  xmlns: "http://www.w3.org/2000/svg",
@@ -2624,15 +2838,15 @@ function MinusIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
2624
2838
  strokeLinejoin: "round",
2625
2839
  "aria-hidden": "true",
2626
2840
  ...rest,
2627
- children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("path", { d: "M5 12h14" })
2841
+ children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("path", { d: "M5 12h14" })
2628
2842
  }
2629
2843
  );
2630
2844
  }
2631
2845
 
2632
2846
  // src/components/icons/more-horizontal/index.tsx
2633
- var import_jsx_runtime49 = require("react/jsx-runtime");
2847
+ var import_jsx_runtime50 = require("react/jsx-runtime");
2634
2848
  function MoreHorizontalIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
2635
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
2849
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
2636
2850
  "svg",
2637
2851
  {
2638
2852
  xmlns: "http://www.w3.org/2000/svg",
@@ -2647,9 +2861,9 @@ function MoreHorizontalIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
2647
2861
  "aria-hidden": "true",
2648
2862
  ...rest,
2649
2863
  children: [
2650
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("circle", { cx: "12", cy: "12", r: "1" }),
2651
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("circle", { cx: "19", cy: "12", r: "1" }),
2652
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("circle", { cx: "5", cy: "12", r: "1" })
2864
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("circle", { cx: "12", cy: "12", r: "1" }),
2865
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("circle", { cx: "19", cy: "12", r: "1" }),
2866
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("circle", { cx: "5", cy: "12", r: "1" })
2653
2867
  ]
2654
2868
  }
2655
2869
  );
@@ -2698,6 +2912,7 @@ function MoreHorizontalIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
2698
2912
  Switch,
2699
2913
  Table,
2700
2914
  Tabs,
2915
+ TestIdProvider,
2701
2916
  TextField,
2702
2917
  ThemeProvider,
2703
2918
  Tooltip,
@@ -2711,6 +2926,7 @@ function MoreHorizontalIcon({ size: size3 = 20, strokeWidth = 1.75, ...rest }) {
2711
2926
  theme,
2712
2927
  themes,
2713
2928
  usePrevious,
2929
+ useTestId,
2714
2930
  useTheme,
2715
2931
  useToggle
2716
2932
  });