@usefidel/design-system 0.21.0 → 0.23.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.js CHANGED
@@ -1348,6 +1348,19 @@ function Stat({ label, value, children, className, ...rest }) {
1348
1348
  ] });
1349
1349
  }
1350
1350
 
1351
+ // src/components/Swatch/Swatch.tsx
1352
+ import { jsx as jsx25, jsxs as jsxs21 } from "react/jsx-runtime";
1353
+ function Swatch({ color, name, value, children, className, ...rest }) {
1354
+ return /* @__PURE__ */ jsxs21("div", { className: ["fds-swatch", className].filter(Boolean).join(" "), ...rest, children: [
1355
+ /* @__PURE__ */ jsx25("div", { className: "fds-swatch__color", style: { "--fds-swatch-color": color }, "aria-hidden": "true" }),
1356
+ /* @__PURE__ */ jsxs21("div", { className: "fds-swatch__body", children: [
1357
+ /* @__PURE__ */ jsx25("p", { className: "fds-swatch__name", children: name }),
1358
+ value != null && /* @__PURE__ */ jsx25("p", { className: "fds-swatch__value", children: value }),
1359
+ children != null && /* @__PURE__ */ jsx25("div", { className: "fds-swatch__detail", children })
1360
+ ] })
1361
+ ] });
1362
+ }
1363
+
1351
1364
  // src/components/Checkbox/Checkbox.tsx
1352
1365
  import {
1353
1366
  forwardRef as forwardRef4,
@@ -1356,7 +1369,7 @@ import {
1356
1369
  useImperativeHandle as useImperativeHandle2,
1357
1370
  useRef as useRef6
1358
1371
  } from "react";
1359
- import { jsx as jsx25, jsxs as jsxs21 } from "react/jsx-runtime";
1372
+ import { jsx as jsx26, jsxs as jsxs22 } from "react/jsx-runtime";
1360
1373
  var Checkbox = forwardRef4(function Checkbox2({ label, description, indeterminate = false, className, id, disabled, ...rest }, ref) {
1361
1374
  const generatedId = useId7();
1362
1375
  const inputId = id ?? generatedId;
@@ -1365,13 +1378,13 @@ var Checkbox = forwardRef4(function Checkbox2({ label, description, indeterminat
1365
1378
  useEffect5(() => {
1366
1379
  if (inputRef.current) inputRef.current.indeterminate = indeterminate;
1367
1380
  }, [indeterminate]);
1368
- return /* @__PURE__ */ jsxs21(
1381
+ return /* @__PURE__ */ jsxs22(
1369
1382
  "div",
1370
1383
  {
1371
1384
  className: ["fds-checkbox", className].filter(Boolean).join(" "),
1372
1385
  "data-disabled": disabled ? "" : void 0,
1373
1386
  children: [
1374
- /* @__PURE__ */ jsx25(
1387
+ /* @__PURE__ */ jsx26(
1375
1388
  "input",
1376
1389
  {
1377
1390
  ...rest,
@@ -1382,14 +1395,14 @@ var Checkbox = forwardRef4(function Checkbox2({ label, description, indeterminat
1382
1395
  className: "fds-checkbox__input"
1383
1396
  }
1384
1397
  ),
1385
- /* @__PURE__ */ jsxs21("label", { htmlFor: inputId, className: "fds-checkbox__control", children: [
1386
- /* @__PURE__ */ jsxs21("span", { className: "fds-checkbox__box", "aria-hidden": "true", children: [
1387
- /* @__PURE__ */ jsx25("svg", { className: "fds-checkbox__tick", viewBox: "0 0 12 12", fill: "none", children: /* @__PURE__ */ jsx25("path", { d: "M10 3L4.5 8.5 2 6", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round" }) }),
1388
- /* @__PURE__ */ jsx25("svg", { className: "fds-checkbox__dash", viewBox: "0 0 12 12", fill: "none", children: /* @__PURE__ */ jsx25("path", { d: "M3 6h6", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round" }) })
1398
+ /* @__PURE__ */ jsxs22("label", { htmlFor: inputId, className: "fds-checkbox__control", children: [
1399
+ /* @__PURE__ */ jsxs22("span", { className: "fds-checkbox__box", "aria-hidden": "true", children: [
1400
+ /* @__PURE__ */ jsx26("svg", { className: "fds-checkbox__tick", viewBox: "0 0 12 12", fill: "none", children: /* @__PURE__ */ jsx26("path", { d: "M10 3L4.5 8.5 2 6", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round" }) }),
1401
+ /* @__PURE__ */ jsx26("svg", { className: "fds-checkbox__dash", viewBox: "0 0 12 12", fill: "none", children: /* @__PURE__ */ jsx26("path", { d: "M3 6h6", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round" }) })
1389
1402
  ] }),
1390
- (label != null || description != null) && /* @__PURE__ */ jsxs21("span", { className: "fds-checkbox__text", children: [
1391
- label != null && /* @__PURE__ */ jsx25("span", { className: "fds-checkbox__label", children: label }),
1392
- description != null && /* @__PURE__ */ jsx25("span", { className: "fds-checkbox__description", children: description })
1403
+ (label != null || description != null) && /* @__PURE__ */ jsxs22("span", { className: "fds-checkbox__text", children: [
1404
+ label != null && /* @__PURE__ */ jsx26("span", { className: "fds-checkbox__label", children: label }),
1405
+ description != null && /* @__PURE__ */ jsx26("span", { className: "fds-checkbox__description", children: description })
1393
1406
  ] })
1394
1407
  ] })
1395
1408
  ]
@@ -1399,25 +1412,57 @@ var Checkbox = forwardRef4(function Checkbox2({ label, description, indeterminat
1399
1412
 
1400
1413
  // src/components/Radio/Radio.tsx
1401
1414
  import { forwardRef as forwardRef5, useId as useId8 } from "react";
1402
- import { jsx as jsx26, jsxs as jsxs22 } from "react/jsx-runtime";
1415
+ import { jsx as jsx27, jsxs as jsxs23 } from "react/jsx-runtime";
1403
1416
  var Radio = forwardRef5(function Radio2({ label, description, className, id, disabled, ...rest }, ref) {
1404
1417
  const generatedId = useId8();
1405
1418
  const inputId = id ?? generatedId;
1406
- return /* @__PURE__ */ jsxs22("div", { className: ["fds-radio", className].filter(Boolean).join(" "), "data-disabled": disabled ? "" : void 0, children: [
1407
- /* @__PURE__ */ jsx26("input", { ...rest, id: inputId, ref, type: "radio", disabled, className: "fds-radio__input" }),
1408
- /* @__PURE__ */ jsxs22("label", { htmlFor: inputId, className: "fds-radio__control", children: [
1409
- /* @__PURE__ */ jsx26("span", { className: "fds-radio__circle", "aria-hidden": "true" }),
1410
- (label != null || description != null) && /* @__PURE__ */ jsxs22("span", { className: "fds-radio__text", children: [
1411
- label != null && /* @__PURE__ */ jsx26("span", { className: "fds-radio__label", children: label }),
1412
- description != null && /* @__PURE__ */ jsx26("span", { className: "fds-radio__description", children: description })
1419
+ return /* @__PURE__ */ jsxs23("div", { className: ["fds-radio", className].filter(Boolean).join(" "), "data-disabled": disabled ? "" : void 0, children: [
1420
+ /* @__PURE__ */ jsx27("input", { ...rest, id: inputId, ref, type: "radio", disabled, className: "fds-radio__input" }),
1421
+ /* @__PURE__ */ jsxs23("label", { htmlFor: inputId, className: "fds-radio__control", children: [
1422
+ /* @__PURE__ */ jsx27("span", { className: "fds-radio__circle", "aria-hidden": "true" }),
1423
+ (label != null || description != null) && /* @__PURE__ */ jsxs23("span", { className: "fds-radio__text", children: [
1424
+ label != null && /* @__PURE__ */ jsx27("span", { className: "fds-radio__label", children: label }),
1425
+ description != null && /* @__PURE__ */ jsx27("span", { className: "fds-radio__description", children: description })
1413
1426
  ] })
1414
1427
  ] })
1415
1428
  ] });
1416
1429
  });
1417
1430
 
1431
+ // src/components/RadioCard/RadioCard.tsx
1432
+ import { forwardRef as forwardRef6, useId as useId9 } from "react";
1433
+ import { jsx as jsx28, jsxs as jsxs24 } from "react/jsx-runtime";
1434
+ var RadioCard = forwardRef6(function RadioCard2({ label, description, icon, meta, className, id, disabled, ...rest }, ref) {
1435
+ const generatedId = useId9();
1436
+ const inputId = id ?? generatedId;
1437
+ const descriptionId = description != null ? `${inputId}-description` : void 0;
1438
+ return /* @__PURE__ */ jsxs24("div", { className: ["fds-radio-card", className].filter(Boolean).join(" "), "data-disabled": disabled ? "" : void 0, children: [
1439
+ /* @__PURE__ */ jsx28(
1440
+ "input",
1441
+ {
1442
+ ...rest,
1443
+ id: inputId,
1444
+ ref,
1445
+ type: "radio",
1446
+ disabled,
1447
+ "aria-describedby": descriptionId,
1448
+ className: "fds-radio-card__input"
1449
+ }
1450
+ ),
1451
+ /* @__PURE__ */ jsxs24("label", { htmlFor: inputId, className: "fds-radio-card__body", children: [
1452
+ icon != null && /* @__PURE__ */ jsx28("span", { className: "fds-radio-card__icon", "aria-hidden": "true", children: icon }),
1453
+ /* @__PURE__ */ jsxs24("span", { className: "fds-radio-card__text", children: [
1454
+ /* @__PURE__ */ jsx28("span", { className: "fds-radio-card__label", children: label }),
1455
+ description != null && /* @__PURE__ */ jsx28("span", { id: descriptionId, className: "fds-radio-card__description", children: description }),
1456
+ meta != null && /* @__PURE__ */ jsx28("span", { className: "fds-radio-card__meta", children: meta })
1457
+ ] }),
1458
+ /* @__PURE__ */ jsx28("span", { className: "fds-radio-card__circle", "aria-hidden": "true" })
1459
+ ] })
1460
+ ] });
1461
+ });
1462
+
1418
1463
  // src/components/Accordion/Accordion.tsx
1419
- import { useId as useId9, useState as useState7 } from "react";
1420
- import { jsx as jsx27, jsxs as jsxs23 } from "react/jsx-runtime";
1464
+ import { useId as useId10, useState as useState7 } from "react";
1465
+ import { jsx as jsx29, jsxs as jsxs25 } from "react/jsx-runtime";
1421
1466
  function Accordion({
1422
1467
  summary,
1423
1468
  actions,
@@ -1430,21 +1475,21 @@ function Accordion({
1430
1475
  }) {
1431
1476
  const [openState, setOpenState] = useState7(defaultOpen);
1432
1477
  const open = openProp ?? openState;
1433
- const bodyId = useId9();
1478
+ const bodyId = useId10();
1434
1479
  const toggle = () => {
1435
1480
  const next = !open;
1436
1481
  if (openProp === void 0) setOpenState(next);
1437
1482
  onOpenChange?.(next);
1438
1483
  };
1439
- return /* @__PURE__ */ jsxs23(
1484
+ return /* @__PURE__ */ jsxs25(
1440
1485
  "div",
1441
1486
  {
1442
1487
  className: ["fds-accordion", className].filter(Boolean).join(" "),
1443
1488
  "data-open": open ? "" : void 0,
1444
1489
  ...rest,
1445
1490
  children: [
1446
- /* @__PURE__ */ jsxs23("div", { className: "fds-accordion__header", children: [
1447
- /* @__PURE__ */ jsx27(
1491
+ /* @__PURE__ */ jsxs25("div", { className: "fds-accordion__header", children: [
1492
+ /* @__PURE__ */ jsx29(
1448
1493
  "button",
1449
1494
  {
1450
1495
  type: "button",
@@ -1455,17 +1500,17 @@ function Accordion({
1455
1500
  children: summary
1456
1501
  }
1457
1502
  ),
1458
- actions != null && /* @__PURE__ */ jsx27("div", { className: "fds-accordion__actions", children: actions }),
1459
- /* @__PURE__ */ jsx27("span", { className: "fds-accordion__chevron", "aria-hidden": "true", onClick: toggle, children: /* @__PURE__ */ jsx27("svg", { viewBox: "0 0 24 24", width: "16", height: "16", fill: "none", children: /* @__PURE__ */ jsx27("path", { d: "M6 9l6 6 6-6", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) })
1503
+ actions != null && /* @__PURE__ */ jsx29("div", { className: "fds-accordion__actions", children: actions }),
1504
+ /* @__PURE__ */ jsx29("span", { className: "fds-accordion__chevron", "aria-hidden": "true", onClick: toggle, children: /* @__PURE__ */ jsx29("svg", { viewBox: "0 0 24 24", width: "16", height: "16", fill: "none", children: /* @__PURE__ */ jsx29("path", { d: "M6 9l6 6 6-6", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) })
1460
1505
  ] }),
1461
- /* @__PURE__ */ jsx27("div", { id: bodyId, className: "fds-accordion__body", hidden: !open, children })
1506
+ /* @__PURE__ */ jsx29("div", { id: bodyId, className: "fds-accordion__body", hidden: !open, children })
1462
1507
  ]
1463
1508
  }
1464
1509
  );
1465
1510
  }
1466
1511
 
1467
1512
  // src/components/StepList/StepList.tsx
1468
- import { jsx as jsx28, jsxs as jsxs24 } from "react/jsx-runtime";
1513
+ import { jsx as jsx30, jsxs as jsxs26 } from "react/jsx-runtime";
1469
1514
  var STATUS_TEXT = {
1470
1515
  done: "Done",
1471
1516
  active: "In progress",
@@ -1475,32 +1520,32 @@ var STATUS_TEXT = {
1475
1520
  function StepIcon({ status }) {
1476
1521
  const common = { viewBox: "0 0 24 24", width: 18, height: 18, fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round" };
1477
1522
  if (status === "done") {
1478
- return /* @__PURE__ */ jsxs24("svg", { ...common, children: [
1479
- /* @__PURE__ */ jsx28("circle", { cx: "12", cy: "12", r: "9" }),
1480
- /* @__PURE__ */ jsx28("path", { d: "M8 12.5l2.5 2.5 5-5.5" })
1523
+ return /* @__PURE__ */ jsxs26("svg", { ...common, children: [
1524
+ /* @__PURE__ */ jsx30("circle", { cx: "12", cy: "12", r: "9" }),
1525
+ /* @__PURE__ */ jsx30("path", { d: "M8 12.5l2.5 2.5 5-5.5" })
1481
1526
  ] });
1482
1527
  }
1483
1528
  if (status === "active") {
1484
- return /* @__PURE__ */ jsx28("svg", { ...common, className: "fds-steps__spinner", children: /* @__PURE__ */ jsx28("path", { d: "M12 3v3M12 18v3M3 12h3M18 12h3M5.6 5.6l2.1 2.1M16.3 16.3l2.1 2.1M5.6 18.4l2.1-2.1M16.3 7.7l2.1-2.1" }) });
1529
+ return /* @__PURE__ */ jsx30("svg", { ...common, className: "fds-steps__spinner", children: /* @__PURE__ */ jsx30("path", { d: "M12 3v3M12 18v3M3 12h3M18 12h3M5.6 5.6l2.1 2.1M16.3 16.3l2.1 2.1M5.6 18.4l2.1-2.1M16.3 7.7l2.1-2.1" }) });
1485
1530
  }
1486
1531
  if (status === "failed") {
1487
- return /* @__PURE__ */ jsxs24("svg", { ...common, children: [
1488
- /* @__PURE__ */ jsx28("circle", { cx: "12", cy: "12", r: "9" }),
1489
- /* @__PURE__ */ jsx28("path", { d: "M12 7.5v5.5M12 16.5v.01" })
1532
+ return /* @__PURE__ */ jsxs26("svg", { ...common, children: [
1533
+ /* @__PURE__ */ jsx30("circle", { cx: "12", cy: "12", r: "9" }),
1534
+ /* @__PURE__ */ jsx30("path", { d: "M12 7.5v5.5M12 16.5v.01" })
1490
1535
  ] });
1491
1536
  }
1492
- return /* @__PURE__ */ jsx28("svg", { ...common, children: /* @__PURE__ */ jsx28("circle", { cx: "12", cy: "12", r: "9" }) });
1537
+ return /* @__PURE__ */ jsx30("svg", { ...common, children: /* @__PURE__ */ jsx30("circle", { cx: "12", cy: "12", r: "9" }) });
1493
1538
  }
1494
1539
  function StepList({ steps, className, ...rest }) {
1495
- return /* @__PURE__ */ jsx28("ol", { className: ["fds-steps", className].filter(Boolean).join(" "), ...rest, children: steps.map((step) => /* @__PURE__ */ jsxs24(
1540
+ return /* @__PURE__ */ jsx30("ol", { className: ["fds-steps", className].filter(Boolean).join(" "), ...rest, children: steps.map((step) => /* @__PURE__ */ jsxs26(
1496
1541
  "li",
1497
1542
  {
1498
1543
  className: `fds-steps__step fds-steps__step--${step.status}`,
1499
1544
  "aria-current": step.status === "active" ? "step" : void 0,
1500
1545
  children: [
1501
- /* @__PURE__ */ jsx28("span", { className: "fds-steps__icon", "aria-hidden": "true", children: /* @__PURE__ */ jsx28(StepIcon, { status: step.status }) }),
1502
- /* @__PURE__ */ jsx28("span", { className: "fds-steps__label", children: step.label }),
1503
- /* @__PURE__ */ jsxs24("span", { className: "fds-steps__sr", children: [
1546
+ /* @__PURE__ */ jsx30("span", { className: "fds-steps__icon", "aria-hidden": "true", children: /* @__PURE__ */ jsx30(StepIcon, { status: step.status }) }),
1547
+ /* @__PURE__ */ jsx30("span", { className: "fds-steps__label", children: step.label }),
1548
+ /* @__PURE__ */ jsxs26("span", { className: "fds-steps__sr", children: [
1504
1549
  ", ",
1505
1550
  STATUS_TEXT[step.status]
1506
1551
  ] })
@@ -1511,10 +1556,10 @@ function StepList({ steps, className, ...rest }) {
1511
1556
  }
1512
1557
 
1513
1558
  // src/components/Input/Input.tsx
1514
- import { forwardRef as forwardRef6, useId as useId10 } from "react";
1515
- import { jsx as jsx29, jsxs as jsxs25 } from "react/jsx-runtime";
1516
- var Input = forwardRef6(function Input2({ label, hint, error, leadingIcon, trailing, id, className, containerClassName, readOnly, disabled, ...rest }, ref) {
1517
- const genId = useId10();
1559
+ import { forwardRef as forwardRef7, useId as useId11 } from "react";
1560
+ import { jsx as jsx31, jsxs as jsxs27 } from "react/jsx-runtime";
1561
+ var Input = forwardRef7(function Input2({ label, hint, error, leadingIcon, trailing, id, className, containerClassName, readOnly, disabled, ...rest }, ref) {
1562
+ const genId = useId11();
1518
1563
  const inputId = id ?? genId;
1519
1564
  const msgId = `${genId}-msg`;
1520
1565
  const message = error ?? hint;
@@ -1523,11 +1568,11 @@ var Input = forwardRef6(function Input2({ label, hint, error, leadingIcon, trail
1523
1568
  error ? "fds-input__box--error" : "",
1524
1569
  readOnly || disabled ? "fds-input__box--locked" : ""
1525
1570
  ].filter(Boolean).join(" ");
1526
- return /* @__PURE__ */ jsxs25("div", { className: ["fds-input", containerClassName].filter(Boolean).join(" "), children: [
1527
- label != null && /* @__PURE__ */ jsx29("label", { htmlFor: inputId, className: "fds-input__label", children: label }),
1528
- /* @__PURE__ */ jsxs25("div", { className: boxClasses, children: [
1529
- leadingIcon != null && /* @__PURE__ */ jsx29("span", { className: "fds-input__icon", "aria-hidden": "true", children: leadingIcon }),
1530
- /* @__PURE__ */ jsx29(
1571
+ return /* @__PURE__ */ jsxs27("div", { className: ["fds-input", containerClassName].filter(Boolean).join(" "), children: [
1572
+ label != null && /* @__PURE__ */ jsx31("label", { htmlFor: inputId, className: "fds-input__label", children: label }),
1573
+ /* @__PURE__ */ jsxs27("div", { className: boxClasses, children: [
1574
+ leadingIcon != null && /* @__PURE__ */ jsx31("span", { className: "fds-input__icon", "aria-hidden": "true", children: leadingIcon }),
1575
+ /* @__PURE__ */ jsx31(
1531
1576
  "input",
1532
1577
  {
1533
1578
  ref,
@@ -1540,14 +1585,14 @@ var Input = forwardRef6(function Input2({ label, hint, error, leadingIcon, trail
1540
1585
  ...rest
1541
1586
  }
1542
1587
  ),
1543
- trailing != null && /* @__PURE__ */ jsx29("span", { className: "fds-input__trailing", children: trailing })
1588
+ trailing != null && /* @__PURE__ */ jsx31("span", { className: "fds-input__trailing", children: trailing })
1544
1589
  ] }),
1545
- message != null && /* @__PURE__ */ jsx29("p", { id: msgId, className: error ? "fds-input__error" : "fds-input__hint", children: message })
1590
+ message != null && /* @__PURE__ */ jsx31("p", { id: msgId, className: error ? "fds-input__error" : "fds-input__hint", children: message })
1546
1591
  ] });
1547
1592
  });
1548
1593
 
1549
1594
  // src/components/IconButton/IconButton.tsx
1550
- import { jsx as jsx30 } from "react/jsx-runtime";
1595
+ import { jsx as jsx32 } from "react/jsx-runtime";
1551
1596
  function IconButton({
1552
1597
  icon,
1553
1598
  variant = "outlined",
@@ -1557,20 +1602,20 @@ function IconButton({
1557
1602
  ...rest
1558
1603
  }) {
1559
1604
  const classes = ["fds-icon-button", `fds-icon-button--${variant}`, `fds-icon-button--${size}`, className].filter(Boolean).join(" ");
1560
- return /* @__PURE__ */ jsx30("button", { type, className: classes, ...rest, children: /* @__PURE__ */ jsx30("span", { className: "fds-icon-button__icon", "aria-hidden": "true", children: icon }) });
1605
+ return /* @__PURE__ */ jsx32("button", { type, className: classes, ...rest, children: /* @__PURE__ */ jsx32("span", { className: "fds-icon-button__icon", "aria-hidden": "true", children: icon }) });
1561
1606
  }
1562
1607
 
1563
1608
  // src/components/Menu/Menu.tsx
1564
1609
  import {
1565
1610
  cloneElement,
1566
1611
  useEffect as useEffect6,
1567
- useId as useId11,
1612
+ useId as useId12,
1568
1613
  useRef as useRef7,
1569
1614
  useState as useState8
1570
1615
  } from "react";
1571
- import { jsx as jsx31, jsxs as jsxs26 } from "react/jsx-runtime";
1616
+ import { jsx as jsx33, jsxs as jsxs28 } from "react/jsx-runtime";
1572
1617
  function Menu({ trigger, items, align = "end", className }) {
1573
- const listId = useId11();
1618
+ const listId = useId12();
1574
1619
  const rootRef = useRef7(null);
1575
1620
  const listRef = useRef7(null);
1576
1621
  const [open, setOpen] = useState8(false);
@@ -1650,9 +1695,9 @@ function Menu({ trigger, items, align = "end", className }) {
1650
1695
  }
1651
1696
  }
1652
1697
  });
1653
- return /* @__PURE__ */ jsxs26("div", { ref: rootRef, className: ["fds-menu", className].filter(Boolean).join(" "), children: [
1698
+ return /* @__PURE__ */ jsxs28("div", { ref: rootRef, className: ["fds-menu", className].filter(Boolean).join(" "), children: [
1654
1699
  wired,
1655
- open && /* @__PURE__ */ jsx31(
1700
+ open && /* @__PURE__ */ jsx33(
1656
1701
  "div",
1657
1702
  {
1658
1703
  ref: listRef,
@@ -1662,7 +1707,7 @@ function Menu({ trigger, items, align = "end", className }) {
1662
1707
  className: `fds-menu__list fds-menu__list--${align}`,
1663
1708
  "aria-activedescendant": `${listId}-item-${active}`,
1664
1709
  onKeyDown: onListKeyDown,
1665
- children: items.map((it, i) => /* @__PURE__ */ jsxs26(
1710
+ children: items.map((it, i) => /* @__PURE__ */ jsxs28(
1666
1711
  "div",
1667
1712
  {
1668
1713
  id: `${listId}-item-${i}`,
@@ -1678,7 +1723,7 @@ function Menu({ trigger, items, align = "end", className }) {
1678
1723
  onMouseDown: (e) => e.preventDefault(),
1679
1724
  onClick: () => choose(i),
1680
1725
  children: [
1681
- it.icon != null && /* @__PURE__ */ jsx31("span", { className: "fds-menu__icon", "aria-hidden": "true", children: it.icon }),
1726
+ it.icon != null && /* @__PURE__ */ jsx33("span", { className: "fds-menu__icon", "aria-hidden": "true", children: it.icon }),
1682
1727
  it.label
1683
1728
  ]
1684
1729
  },
@@ -1690,10 +1735,10 @@ function Menu({ trigger, items, align = "end", className }) {
1690
1735
  }
1691
1736
 
1692
1737
  // src/components/Table/Table.tsx
1693
- import { jsx as jsx32, jsxs as jsxs27 } from "react/jsx-runtime";
1738
+ import { jsx as jsx34, jsxs as jsxs29 } from "react/jsx-runtime";
1694
1739
  function Table({ columns, rows, rowKey, empty, className, "aria-label": ariaLabel, ...rest }) {
1695
- return /* @__PURE__ */ jsx32("div", { className: ["fds-table", className].filter(Boolean).join(" "), ...rest, children: /* @__PURE__ */ jsxs27("table", { className: "fds-table__table", "aria-label": ariaLabel, children: [
1696
- /* @__PURE__ */ jsx32("thead", { children: /* @__PURE__ */ jsx32("tr", { children: columns.map((c) => /* @__PURE__ */ jsx32(
1740
+ return /* @__PURE__ */ jsx34("div", { className: ["fds-table", className].filter(Boolean).join(" "), ...rest, children: /* @__PURE__ */ jsxs29("table", { className: "fds-table__table", "aria-label": ariaLabel, children: [
1741
+ /* @__PURE__ */ jsx34("thead", { children: /* @__PURE__ */ jsx34("tr", { children: columns.map((c) => /* @__PURE__ */ jsx34(
1697
1742
  "th",
1698
1743
  {
1699
1744
  scope: "col",
@@ -1703,17 +1748,17 @@ function Table({ columns, rows, rowKey, empty, className, "aria-label": ariaLabe
1703
1748
  },
1704
1749
  c.key
1705
1750
  )) }) }),
1706
- /* @__PURE__ */ jsxs27("tbody", { children: [
1707
- rows.map((row) => /* @__PURE__ */ jsx32("tr", { children: columns.map((c) => /* @__PURE__ */ jsx32("td", { className: c.align === "end" ? "fds-table__cell--end" : void 0, children: c.cell(row) }, c.key)) }, rowKey(row))),
1708
- rows.length === 0 && empty != null && /* @__PURE__ */ jsx32("tr", { children: /* @__PURE__ */ jsx32("td", { colSpan: columns.length, className: "fds-table__empty", children: empty }) })
1751
+ /* @__PURE__ */ jsxs29("tbody", { children: [
1752
+ rows.map((row) => /* @__PURE__ */ jsx34("tr", { children: columns.map((c) => /* @__PURE__ */ jsx34("td", { className: c.align === "end" ? "fds-table__cell--end" : void 0, children: c.cell(row) }, c.key)) }, rowKey(row))),
1753
+ rows.length === 0 && empty != null && /* @__PURE__ */ jsx34("tr", { children: /* @__PURE__ */ jsx34("td", { colSpan: columns.length, className: "fds-table__empty", children: empty }) })
1709
1754
  ] })
1710
1755
  ] }) });
1711
1756
  }
1712
1757
 
1713
1758
  // src/components/PricingCard/PricingCard.tsx
1714
- import { jsx as jsx33, jsxs as jsxs28 } from "react/jsx-runtime";
1759
+ import { jsx as jsx35, jsxs as jsxs30 } from "react/jsx-runtime";
1715
1760
  function CheckIcon3() {
1716
- return /* @__PURE__ */ jsx33("svg", { viewBox: "0 0 16 16", width: "12", height: "12", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx33("path", { d: "M3.5 8.5l3 3 6-7", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round" }) });
1761
+ return /* @__PURE__ */ jsx35("svg", { viewBox: "0 0 16 16", width: "12", height: "12", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx35("path", { d: "M3.5 8.5l3 3 6-7", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round" }) });
1717
1762
  }
1718
1763
  function PricingCard({
1719
1764
  eyebrow,
@@ -1731,25 +1776,25 @@ function PricingCard({
1731
1776
  ...rest
1732
1777
  }) {
1733
1778
  const classes = ["fds-pricing-card", highlighted ? "fds-pricing-card--highlighted" : "", className].filter(Boolean).join(" ");
1734
- return /* @__PURE__ */ jsxs28("article", { className: classes, ...rest, children: [
1735
- /* @__PURE__ */ jsxs28("div", { className: "fds-pricing-card__top", children: [
1736
- eyebrow != null && /* @__PURE__ */ jsx33("span", { className: "fds-pricing-card__eyebrow", children: eyebrow }),
1737
- /* @__PURE__ */ jsxs28("h3", { className: "fds-pricing-card__title", children: [
1779
+ return /* @__PURE__ */ jsxs30("article", { className: classes, ...rest, children: [
1780
+ /* @__PURE__ */ jsxs30("div", { className: "fds-pricing-card__top", children: [
1781
+ eyebrow != null && /* @__PURE__ */ jsx35("span", { className: "fds-pricing-card__eyebrow", children: eyebrow }),
1782
+ /* @__PURE__ */ jsxs30("h3", { className: "fds-pricing-card__title", children: [
1738
1783
  title,
1739
1784
  badge
1740
1785
  ] }),
1741
- /* @__PURE__ */ jsxs28("p", { className: "fds-pricing-card__price", children: [
1742
- /* @__PURE__ */ jsx33("span", { className: "fds-pricing-card__amount", children: price }),
1743
- period != null && /* @__PURE__ */ jsx33("span", { className: "fds-pricing-card__period", children: period })
1786
+ /* @__PURE__ */ jsxs30("p", { className: "fds-pricing-card__price", children: [
1787
+ /* @__PURE__ */ jsx35("span", { className: "fds-pricing-card__amount", children: price }),
1788
+ period != null && /* @__PURE__ */ jsx35("span", { className: "fds-pricing-card__period", children: period })
1744
1789
  ] }),
1745
- description != null && /* @__PURE__ */ jsx33("p", { className: "fds-pricing-card__description", children: description }),
1746
- action != null && /* @__PURE__ */ jsx33("div", { className: "fds-pricing-card__action", children: action })
1790
+ description != null && /* @__PURE__ */ jsx35("p", { className: "fds-pricing-card__description", children: description }),
1791
+ action != null && /* @__PURE__ */ jsx35("div", { className: "fds-pricing-card__action", children: action })
1747
1792
  ] }),
1748
- features.length > 0 && /* @__PURE__ */ jsxs28("div", { className: "fds-pricing-card__features", children: [
1749
- /* @__PURE__ */ jsx33("p", { className: "fds-pricing-card__featuresTitle", children: featuresTitle }),
1750
- featuresIntro != null && /* @__PURE__ */ jsx33("p", { className: "fds-pricing-card__intro", children: featuresIntro }),
1751
- /* @__PURE__ */ jsx33("ul", { className: "fds-pricing-card__list", children: features.map((f, i) => /* @__PURE__ */ jsxs28("li", { className: "fds-pricing-card__feature", children: [
1752
- /* @__PURE__ */ jsx33("span", { className: "fds-pricing-card__check", children: /* @__PURE__ */ jsx33(CheckIcon3, {}) }),
1793
+ features.length > 0 && /* @__PURE__ */ jsxs30("div", { className: "fds-pricing-card__features", children: [
1794
+ /* @__PURE__ */ jsx35("p", { className: "fds-pricing-card__featuresTitle", children: featuresTitle }),
1795
+ featuresIntro != null && /* @__PURE__ */ jsx35("p", { className: "fds-pricing-card__intro", children: featuresIntro }),
1796
+ /* @__PURE__ */ jsx35("ul", { className: "fds-pricing-card__list", children: features.map((f, i) => /* @__PURE__ */ jsxs30("li", { className: "fds-pricing-card__feature", children: [
1797
+ /* @__PURE__ */ jsx35("span", { className: "fds-pricing-card__check", children: /* @__PURE__ */ jsx35(CheckIcon3, {}) }),
1753
1798
  f
1754
1799
  ] }, i)) })
1755
1800
  ] })
@@ -1777,6 +1822,7 @@ export {
1777
1822
  Pagination,
1778
1823
  PricingCard,
1779
1824
  Radio,
1825
+ RadioCard,
1780
1826
  SearchInput,
1781
1827
  SectionHeader,
1782
1828
  SegmentedControl,
@@ -1788,6 +1834,7 @@ export {
1788
1834
  StackedCardsIllustration,
1789
1835
  Stat,
1790
1836
  StepList,
1837
+ Swatch,
1791
1838
  TabNav,
1792
1839
  Table,
1793
1840
  Tag,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@usefidel/design-system",
3
- "version": "0.21.0",
3
+ "version": "0.23.0",
4
4
  "description": "Fidel brand design tokens + React component library — DTCG token source of truth, generated per-surface CSS + Tailwind-v4 parser-compatibility output, and on-brand React components (Button, MismatchCard, DiffSection).",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",