@usefidel/design-system 0.23.1 → 0.25.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
@@ -21,9 +21,12 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
23
  Accordion: () => Accordion,
24
+ AppLayout: () => AppLayout,
24
25
  AppNav: () => AppNav,
25
26
  Avatar: () => Avatar,
27
+ AvatarLabelGroup: () => AvatarLabelGroup,
26
28
  Badge: () => Badge,
29
+ BrandButton: () => BrandButton,
27
30
  Button: () => Button,
28
31
  ButtonLink: () => ButtonLink,
29
32
  Callout: () => Callout,
@@ -31,13 +34,16 @@ __export(index_exports, {
31
34
  Checkbox: () => Checkbox,
32
35
  DiffPropertyList: () => DiffPropertyList,
33
36
  DiffSection: () => DiffSection,
37
+ Divider: () => Divider,
34
38
  EmptyState: () => EmptyState,
35
39
  IconButton: () => IconButton,
36
40
  Input: () => Input,
41
+ ListLabel: () => ListLabel,
37
42
  Menu: () => Menu,
38
43
  MismatchCard: () => MismatchCard,
39
44
  Modal: () => Modal,
40
45
  MultiSelect: () => MultiSelect,
46
+ PageHeader: () => PageHeader,
41
47
  Pagination: () => Pagination,
42
48
  PricingCard: () => PricingCard,
43
49
  Radio: () => Radio,
@@ -47,18 +53,28 @@ __export(index_exports, {
47
53
  SegmentedControl: () => SegmentedControl,
48
54
  Select: () => Select,
49
55
  SettingsSection: () => SettingsSection,
56
+ Sidebar: () => Sidebar,
57
+ SidebarItem: () => SidebarItem,
50
58
  Skeleton: () => Skeleton,
51
59
  SkeletonGroup: () => SkeletonGroup,
60
+ Spinner: () => Spinner,
52
61
  Split: () => Split,
53
62
  StackedCardsIllustration: () => StackedCardsIllustration,
54
63
  Stat: () => Stat,
64
+ StatusDot: () => StatusDot,
55
65
  StepList: () => StepList,
56
66
  Swatch: () => Swatch,
57
67
  TabNav: () => TabNav,
58
68
  Table: () => Table,
59
69
  Tag: () => Tag,
70
+ Toast: () => Toast,
71
+ ToastRegion: () => ToastRegion,
60
72
  Toggle: () => Toggle,
61
- breakpoints: () => breakpoints
73
+ Tooltip: () => Tooltip,
74
+ WorkspaceAvatar: () => WorkspaceAvatar,
75
+ WorkspaceSwitcher: () => WorkspaceSwitcher,
76
+ breakpoints: () => breakpoints,
77
+ useSidebar: () => useSidebar
62
78
  });
63
79
  module.exports = __toCommonJS(index_exports);
64
80
 
@@ -1387,39 +1403,63 @@ function SkeletonGroup({ label = "Loading", className, children, ...rest }) {
1387
1403
  return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { role: "status", "aria-busy": "true", "aria-label": label, className, ...rest, children });
1388
1404
  }
1389
1405
 
1390
- // src/components/Card/Card.tsx
1406
+ // src/components/Spinner/Spinner.tsx
1391
1407
  var import_jsx_runtime23 = require("react/jsx-runtime");
1408
+ function Spinner({ size = 24, label, className, ...rest }) {
1409
+ const a11y = label ? { role: "img", "aria-label": label } : { "aria-hidden": true };
1410
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1411
+ "svg",
1412
+ {
1413
+ className: ["fds-spinner", className].filter(Boolean).join(" "),
1414
+ width: size,
1415
+ height: size,
1416
+ viewBox: "0 0 24 24",
1417
+ fill: "none",
1418
+ strokeWidth: "2.5",
1419
+ strokeLinecap: "round",
1420
+ ...a11y,
1421
+ ...rest,
1422
+ children: [
1423
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("circle", { className: "fds-spinner__track", cx: "12", cy: "12", r: "10" }),
1424
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("path", { className: "fds-spinner__arc", d: "M12 2a10 10 0 0 1 10 10" })
1425
+ ]
1426
+ }
1427
+ );
1428
+ }
1429
+
1430
+ // src/components/Card/Card.tsx
1431
+ var import_jsx_runtime24 = require("react/jsx-runtime");
1392
1432
  function Card({ tone = "default", padding = "md", className, children, ...rest }) {
1393
1433
  const classes = ["fds-card", `fds-card--${tone}`, `fds-card--pad-${padding}`, className].filter(Boolean).join(" ");
1394
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: classes, ...rest, children });
1434
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: classes, ...rest, children });
1395
1435
  }
1396
1436
 
1397
1437
  // src/components/Stat/Stat.tsx
1398
- var import_jsx_runtime24 = require("react/jsx-runtime");
1438
+ var import_jsx_runtime25 = require("react/jsx-runtime");
1399
1439
  function Stat({ label, value, children, className, ...rest }) {
1400
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: ["fds-stat", className].filter(Boolean).join(" "), ...rest, children: [
1401
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "fds-stat__label", children: label }),
1402
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("p", { className: "fds-stat__value", children: value }),
1403
- children != null && /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "fds-stat__detail", children })
1440
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: ["fds-stat", className].filter(Boolean).join(" "), ...rest, children: [
1441
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "fds-stat__label", children: label }),
1442
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "fds-stat__value", children: value }),
1443
+ children != null && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "fds-stat__detail", children })
1404
1444
  ] });
1405
1445
  }
1406
1446
 
1407
1447
  // src/components/Swatch/Swatch.tsx
1408
- var import_jsx_runtime25 = require("react/jsx-runtime");
1448
+ var import_jsx_runtime26 = require("react/jsx-runtime");
1409
1449
  function Swatch({ color, name, value, children, className, ...rest }) {
1410
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: ["fds-swatch", className].filter(Boolean).join(" "), ...rest, children: [
1411
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "fds-swatch__color", style: { "--fds-swatch-color": color }, "aria-hidden": "true" }),
1412
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "fds-swatch__body", children: [
1413
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "fds-swatch__name", children: name }),
1414
- value != null && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("p", { className: "fds-swatch__value", children: value }),
1415
- children != null && /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "fds-swatch__detail", children })
1450
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: ["fds-swatch", className].filter(Boolean).join(" "), ...rest, children: [
1451
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "fds-swatch__color", style: { "--fds-swatch-color": color }, "aria-hidden": "true" }),
1452
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "fds-swatch__body", children: [
1453
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "fds-swatch__name", children: name }),
1454
+ value != null && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("p", { className: "fds-swatch__value", children: value }),
1455
+ children != null && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "fds-swatch__detail", children })
1416
1456
  ] })
1417
1457
  ] });
1418
1458
  }
1419
1459
 
1420
1460
  // src/components/Checkbox/Checkbox.tsx
1421
1461
  var import_react12 = require("react");
1422
- var import_jsx_runtime26 = require("react/jsx-runtime");
1462
+ var import_jsx_runtime27 = require("react/jsx-runtime");
1423
1463
  var Checkbox = (0, import_react12.forwardRef)(function Checkbox2({ label, description, indeterminate = false, className, id, disabled, ...rest }, ref) {
1424
1464
  const generatedId = (0, import_react12.useId)();
1425
1465
  const inputId = id ?? generatedId;
@@ -1428,13 +1468,13 @@ var Checkbox = (0, import_react12.forwardRef)(function Checkbox2({ label, descri
1428
1468
  (0, import_react12.useEffect)(() => {
1429
1469
  if (inputRef.current) inputRef.current.indeterminate = indeterminate;
1430
1470
  }, [indeterminate]);
1431
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1471
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
1432
1472
  "div",
1433
1473
  {
1434
1474
  className: ["fds-checkbox", className].filter(Boolean).join(" "),
1435
1475
  "data-disabled": disabled ? "" : void 0,
1436
1476
  children: [
1437
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1477
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1438
1478
  "input",
1439
1479
  {
1440
1480
  ...rest,
@@ -1445,14 +1485,14 @@ var Checkbox = (0, import_react12.forwardRef)(function Checkbox2({ label, descri
1445
1485
  className: "fds-checkbox__input"
1446
1486
  }
1447
1487
  ),
1448
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("label", { htmlFor: inputId, className: "fds-checkbox__control", children: [
1449
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("span", { className: "fds-checkbox__box", "aria-hidden": "true", children: [
1450
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("svg", { className: "fds-checkbox__tick", viewBox: "0 0 12 12", fill: "none", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("path", { d: "M10 3L4.5 8.5 2 6", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round" }) }),
1451
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("svg", { className: "fds-checkbox__dash", viewBox: "0 0 12 12", fill: "none", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("path", { d: "M3 6h6", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round" }) })
1488
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("label", { htmlFor: inputId, className: "fds-checkbox__control", children: [
1489
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("span", { className: "fds-checkbox__box", "aria-hidden": "true", children: [
1490
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("svg", { className: "fds-checkbox__tick", viewBox: "0 0 12 12", fill: "none", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("path", { d: "M10 3L4.5 8.5 2 6", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round" }) }),
1491
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("svg", { className: "fds-checkbox__dash", viewBox: "0 0 12 12", fill: "none", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("path", { d: "M3 6h6", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round" }) })
1452
1492
  ] }),
1453
- (label != null || description != null) && /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("span", { className: "fds-checkbox__text", children: [
1454
- label != null && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "fds-checkbox__label", children: label }),
1455
- description != null && /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "fds-checkbox__description", children: description })
1493
+ (label != null || description != null) && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("span", { className: "fds-checkbox__text", children: [
1494
+ label != null && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "fds-checkbox__label", children: label }),
1495
+ description != null && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "fds-checkbox__description", children: description })
1456
1496
  ] })
1457
1497
  ] })
1458
1498
  ]
@@ -1462,17 +1502,17 @@ var Checkbox = (0, import_react12.forwardRef)(function Checkbox2({ label, descri
1462
1502
 
1463
1503
  // src/components/Radio/Radio.tsx
1464
1504
  var import_react13 = require("react");
1465
- var import_jsx_runtime27 = require("react/jsx-runtime");
1505
+ var import_jsx_runtime28 = require("react/jsx-runtime");
1466
1506
  var Radio = (0, import_react13.forwardRef)(function Radio2({ label, description, className, id, disabled, ...rest }, ref) {
1467
1507
  const generatedId = (0, import_react13.useId)();
1468
1508
  const inputId = id ?? generatedId;
1469
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: ["fds-radio", className].filter(Boolean).join(" "), "data-disabled": disabled ? "" : void 0, children: [
1470
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("input", { ...rest, id: inputId, ref, type: "radio", disabled, className: "fds-radio__input" }),
1471
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("label", { htmlFor: inputId, className: "fds-radio__control", children: [
1472
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "fds-radio__circle", "aria-hidden": "true" }),
1473
- (label != null || description != null) && /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("span", { className: "fds-radio__text", children: [
1474
- label != null && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "fds-radio__label", children: label }),
1475
- description != null && /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "fds-radio__description", children: description })
1509
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: ["fds-radio", className].filter(Boolean).join(" "), "data-disabled": disabled ? "" : void 0, children: [
1510
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("input", { ...rest, id: inputId, ref, type: "radio", disabled, className: "fds-radio__input" }),
1511
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("label", { htmlFor: inputId, className: "fds-radio__control", children: [
1512
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "fds-radio__circle", "aria-hidden": "true" }),
1513
+ (label != null || description != null) && /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("span", { className: "fds-radio__text", children: [
1514
+ label != null && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "fds-radio__label", children: label }),
1515
+ description != null && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "fds-radio__description", children: description })
1476
1516
  ] })
1477
1517
  ] })
1478
1518
  ] });
@@ -1480,13 +1520,13 @@ var Radio = (0, import_react13.forwardRef)(function Radio2({ label, description,
1480
1520
 
1481
1521
  // src/components/RadioCard/RadioCard.tsx
1482
1522
  var import_react14 = require("react");
1483
- var import_jsx_runtime28 = require("react/jsx-runtime");
1523
+ var import_jsx_runtime29 = require("react/jsx-runtime");
1484
1524
  var RadioCard = (0, import_react14.forwardRef)(function RadioCard2({ label, description, icon, meta, className, id, disabled, ...rest }, ref) {
1485
1525
  const generatedId = (0, import_react14.useId)();
1486
1526
  const inputId = id ?? generatedId;
1487
1527
  const descriptionId = description != null ? `${inputId}-description` : void 0;
1488
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: ["fds-radio-card", className].filter(Boolean).join(" "), "data-disabled": disabled ? "" : void 0, children: [
1489
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1528
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: ["fds-radio-card", className].filter(Boolean).join(" "), "data-disabled": disabled ? "" : void 0, children: [
1529
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1490
1530
  "input",
1491
1531
  {
1492
1532
  ...rest,
@@ -1498,21 +1538,21 @@ var RadioCard = (0, import_react14.forwardRef)(function RadioCard2({ label, desc
1498
1538
  className: "fds-radio-card__input"
1499
1539
  }
1500
1540
  ),
1501
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("label", { htmlFor: inputId, className: "fds-radio-card__body", children: [
1502
- icon != null && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "fds-radio-card__icon", "aria-hidden": "true", children: icon }),
1503
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("span", { className: "fds-radio-card__text", children: [
1504
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "fds-radio-card__label", children: label }),
1505
- description != null && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { id: descriptionId, className: "fds-radio-card__description", children: description }),
1506
- meta != null && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "fds-radio-card__meta", children: meta })
1541
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("label", { htmlFor: inputId, className: "fds-radio-card__body", children: [
1542
+ icon != null && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "fds-radio-card__icon", "aria-hidden": "true", children: icon }),
1543
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("span", { className: "fds-radio-card__text", children: [
1544
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "fds-radio-card__label", children: label }),
1545
+ description != null && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { id: descriptionId, className: "fds-radio-card__description", children: description }),
1546
+ meta != null && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "fds-radio-card__meta", children: meta })
1507
1547
  ] }),
1508
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "fds-radio-card__circle", "aria-hidden": "true" })
1548
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "fds-radio-card__circle", "aria-hidden": "true" })
1509
1549
  ] })
1510
1550
  ] });
1511
1551
  });
1512
1552
 
1513
1553
  // src/components/Accordion/Accordion.tsx
1514
1554
  var import_react15 = require("react");
1515
- var import_jsx_runtime29 = require("react/jsx-runtime");
1555
+ var import_jsx_runtime30 = require("react/jsx-runtime");
1516
1556
  function Accordion({
1517
1557
  summary,
1518
1558
  actions,
@@ -1531,15 +1571,15 @@ function Accordion({
1531
1571
  if (openProp === void 0) setOpenState(next);
1532
1572
  onOpenChange?.(next);
1533
1573
  };
1534
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
1574
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
1535
1575
  "div",
1536
1576
  {
1537
1577
  className: ["fds-accordion", className].filter(Boolean).join(" "),
1538
1578
  "data-open": open ? "" : void 0,
1539
1579
  ...rest,
1540
1580
  children: [
1541
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "fds-accordion__header", children: [
1542
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1581
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "fds-accordion__header", children: [
1582
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1543
1583
  "button",
1544
1584
  {
1545
1585
  type: "button",
@@ -1550,17 +1590,17 @@ function Accordion({
1550
1590
  children: summary
1551
1591
  }
1552
1592
  ),
1553
- actions != null && /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "fds-accordion__actions", children: actions }),
1554
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "fds-accordion__chevron", "aria-hidden": "true", onClick: toggle, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("svg", { viewBox: "0 0 24 24", width: "16", height: "16", fill: "none", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("path", { d: "M6 9l6 6 6-6", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) })
1593
+ actions != null && /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "fds-accordion__actions", children: actions }),
1594
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "fds-accordion__chevron", "aria-hidden": "true", onClick: toggle, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("svg", { viewBox: "0 0 24 24", width: "16", height: "16", fill: "none", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("path", { d: "M6 9l6 6 6-6", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) })
1555
1595
  ] }),
1556
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { id: bodyId, className: "fds-accordion__body", hidden: !open, children })
1596
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { id: bodyId, className: "fds-accordion__body", hidden: !open, children })
1557
1597
  ]
1558
1598
  }
1559
1599
  );
1560
1600
  }
1561
1601
 
1562
1602
  // src/components/StepList/StepList.tsx
1563
- var import_jsx_runtime30 = require("react/jsx-runtime");
1603
+ var import_jsx_runtime31 = require("react/jsx-runtime");
1564
1604
  var STATUS_TEXT = {
1565
1605
  done: "Done",
1566
1606
  active: "In progress",
@@ -1570,32 +1610,32 @@ var STATUS_TEXT = {
1570
1610
  function StepIcon({ status }) {
1571
1611
  const common = { viewBox: "0 0 24 24", width: 18, height: 18, fill: "none", stroke: "currentColor", strokeWidth: 2, strokeLinecap: "round", strokeLinejoin: "round" };
1572
1612
  if (status === "done") {
1573
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("svg", { ...common, children: [
1574
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("circle", { cx: "12", cy: "12", r: "9" }),
1575
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("path", { d: "M8 12.5l2.5 2.5 5-5.5" })
1613
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("svg", { ...common, children: [
1614
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("circle", { cx: "12", cy: "12", r: "9" }),
1615
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("path", { d: "M8 12.5l2.5 2.5 5-5.5" })
1576
1616
  ] });
1577
1617
  }
1578
1618
  if (status === "active") {
1579
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("svg", { ...common, className: "fds-steps__spinner", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("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" }) });
1619
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("svg", { ...common, className: "fds-steps__spinner", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("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" }) });
1580
1620
  }
1581
1621
  if (status === "failed") {
1582
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("svg", { ...common, children: [
1583
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("circle", { cx: "12", cy: "12", r: "9" }),
1584
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("path", { d: "M12 7.5v5.5M12 16.5v.01" })
1622
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("svg", { ...common, children: [
1623
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("circle", { cx: "12", cy: "12", r: "9" }),
1624
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("path", { d: "M12 7.5v5.5M12 16.5v.01" })
1585
1625
  ] });
1586
1626
  }
1587
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("svg", { ...common, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("circle", { cx: "12", cy: "12", r: "9" }) });
1627
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("svg", { ...common, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("circle", { cx: "12", cy: "12", r: "9" }) });
1588
1628
  }
1589
1629
  function StepList({ steps, className, ...rest }) {
1590
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("ol", { className: ["fds-steps", className].filter(Boolean).join(" "), ...rest, children: steps.map((step) => /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
1630
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("ol", { className: ["fds-steps", className].filter(Boolean).join(" "), ...rest, children: steps.map((step) => /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
1591
1631
  "li",
1592
1632
  {
1593
1633
  className: `fds-steps__step fds-steps__step--${step.status}`,
1594
1634
  "aria-current": step.status === "active" ? "step" : void 0,
1595
1635
  children: [
1596
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "fds-steps__icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(StepIcon, { status: step.status }) }),
1597
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "fds-steps__label", children: step.label }),
1598
- /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("span", { className: "fds-steps__sr", children: [
1636
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "fds-steps__icon", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(StepIcon, { status: step.status }) }),
1637
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "fds-steps__label", children: step.label }),
1638
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("span", { className: "fds-steps__sr", children: [
1599
1639
  ", ",
1600
1640
  STATUS_TEXT[step.status]
1601
1641
  ] })
@@ -1607,7 +1647,7 @@ function StepList({ steps, className, ...rest }) {
1607
1647
 
1608
1648
  // src/components/Input/Input.tsx
1609
1649
  var import_react16 = require("react");
1610
- var import_jsx_runtime31 = require("react/jsx-runtime");
1650
+ var import_jsx_runtime32 = require("react/jsx-runtime");
1611
1651
  var Input = (0, import_react16.forwardRef)(function Input2({ label, hint, error, leadingIcon, trailing, id, className, containerClassName, readOnly, disabled, ...rest }, ref) {
1612
1652
  const genId = (0, import_react16.useId)();
1613
1653
  const inputId = id ?? genId;
@@ -1618,11 +1658,11 @@ var Input = (0, import_react16.forwardRef)(function Input2({ label, hint, error,
1618
1658
  error ? "fds-input__box--error" : "",
1619
1659
  readOnly || disabled ? "fds-input__box--locked" : ""
1620
1660
  ].filter(Boolean).join(" ");
1621
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: ["fds-input", containerClassName].filter(Boolean).join(" "), children: [
1622
- label != null && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("label", { htmlFor: inputId, className: "fds-input__label", children: label }),
1623
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: boxClasses, children: [
1624
- leadingIcon != null && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "fds-input__icon", "aria-hidden": "true", children: leadingIcon }),
1625
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1661
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: ["fds-input", containerClassName].filter(Boolean).join(" "), children: [
1662
+ label != null && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("label", { htmlFor: inputId, className: "fds-input__label", children: label }),
1663
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: boxClasses, children: [
1664
+ leadingIcon != null && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "fds-input__icon", "aria-hidden": "true", children: leadingIcon }),
1665
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1626
1666
  "input",
1627
1667
  {
1628
1668
  ref,
@@ -1635,14 +1675,14 @@ var Input = (0, import_react16.forwardRef)(function Input2({ label, hint, error,
1635
1675
  ...rest
1636
1676
  }
1637
1677
  ),
1638
- trailing != null && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "fds-input__trailing", children: trailing })
1678
+ trailing != null && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "fds-input__trailing", children: trailing })
1639
1679
  ] }),
1640
- message != null && /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("p", { id: msgId, className: error ? "fds-input__error" : "fds-input__hint", children: message })
1680
+ message != null && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("p", { id: msgId, className: error ? "fds-input__error" : "fds-input__hint", children: message })
1641
1681
  ] });
1642
1682
  });
1643
1683
 
1644
1684
  // src/components/IconButton/IconButton.tsx
1645
- var import_jsx_runtime32 = require("react/jsx-runtime");
1685
+ var import_jsx_runtime33 = require("react/jsx-runtime");
1646
1686
  function IconButton({
1647
1687
  icon,
1648
1688
  variant = "outlined",
@@ -1652,26 +1692,71 @@ function IconButton({
1652
1692
  ...rest
1653
1693
  }) {
1654
1694
  const classes = ["fds-icon-button", `fds-icon-button--${variant}`, `fds-icon-button--${size}`, className].filter(Boolean).join(" ");
1655
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("button", { type, className: classes, ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "fds-icon-button__icon", "aria-hidden": "true", children: icon }) });
1695
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("button", { type, className: classes, ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "fds-icon-button__icon", "aria-hidden": "true", children: icon }) });
1656
1696
  }
1657
1697
 
1658
1698
  // src/components/Menu/Menu.tsx
1659
1699
  var import_react17 = require("react");
1660
- var import_jsx_runtime33 = require("react/jsx-runtime");
1661
- function Menu({ trigger, items, align = "end", className }) {
1700
+ var import_lucide_react = require("lucide-react");
1701
+ var import_jsx_runtime34 = require("react/jsx-runtime");
1702
+ var isItem = (e) => !("type" in e);
1703
+ function searchText(it) {
1704
+ if (it.keywords) return it.keywords;
1705
+ return typeof it.label === "string" ? it.label : "";
1706
+ }
1707
+ function visibleEntries(items, query) {
1708
+ const q = query.trim().toLowerCase();
1709
+ if (!q) return items.map((_, i) => i);
1710
+ const matches = (i) => {
1711
+ const e = items[i];
1712
+ return isItem(e) && searchText(e).toLowerCase().includes(q);
1713
+ };
1714
+ const out = [];
1715
+ items.forEach((e, i) => {
1716
+ if (isItem(e)) {
1717
+ if (matches(i)) out.push(i);
1718
+ } else if (e.type === "label") {
1719
+ for (let j = i + 1; j < items.length && isItem(items[j]); j++) {
1720
+ if (matches(j)) {
1721
+ out.push(i);
1722
+ break;
1723
+ }
1724
+ }
1725
+ }
1726
+ });
1727
+ return out;
1728
+ }
1729
+ function Menu({
1730
+ trigger,
1731
+ items,
1732
+ align = "end",
1733
+ placement = "bottom",
1734
+ search,
1735
+ width = "auto",
1736
+ block = false,
1737
+ className
1738
+ }) {
1662
1739
  const listId = (0, import_react17.useId)();
1663
1740
  const rootRef = (0, import_react17.useRef)(null);
1664
1741
  const listRef = (0, import_react17.useRef)(null);
1742
+ const searchRef = (0, import_react17.useRef)(null);
1665
1743
  const [open, setOpen] = (0, import_react17.useState)(false);
1666
- const [active, setActive] = (0, import_react17.useState)(0);
1667
- const enabled = items.map((it, i) => it.disabled ? -1 : i).filter((i) => i >= 0);
1744
+ const [query, setQuery] = (0, import_react17.useState)("");
1745
+ const [active, setActive] = (0, import_react17.useState)(-1);
1746
+ const shown = visibleEntries(items, query);
1747
+ const enabled = shown.filter((i) => {
1748
+ const e = items[i];
1749
+ return isItem(e) && !e.disabled;
1750
+ });
1668
1751
  (0, import_react17.useEffect)(() => {
1669
1752
  if (!open) return;
1670
1753
  const onDown = (e) => {
1671
1754
  if (rootRef.current && !rootRef.current.contains(e.target)) setOpen(false);
1672
1755
  };
1673
1756
  document.addEventListener("mousedown", onDown);
1674
- const raf = requestAnimationFrame(() => listRef.current?.focus());
1757
+ const raf = requestAnimationFrame(
1758
+ () => (searchRef.current && !searchRef.current.disabled ? searchRef.current : listRef.current)?.focus()
1759
+ );
1675
1760
  return () => {
1676
1761
  document.removeEventListener("mousedown", onDown);
1677
1762
  cancelAnimationFrame(raf);
@@ -1682,20 +1767,26 @@ function Menu({ trigger, items, align = "end", className }) {
1682
1767
  setOpen(false);
1683
1768
  triggerEl()?.focus();
1684
1769
  };
1685
- const openAt = (index) => {
1686
- setActive(index);
1770
+ const openAt = (which) => {
1771
+ setQuery("");
1772
+ const all = visibleEntries(items, "").filter((i) => {
1773
+ const e = items[i];
1774
+ return isItem(e) && !e.disabled;
1775
+ });
1776
+ setActive((which === "first" ? all[0] : all[all.length - 1]) ?? -1);
1687
1777
  setOpen(true);
1688
1778
  };
1689
1779
  const choose = (i) => {
1690
- const it = items[i];
1691
- if (!it || it.disabled) return;
1780
+ const e = items[i];
1781
+ if (!e || !isItem(e) || e.disabled) return;
1692
1782
  close();
1693
- it.onSelect();
1783
+ e.onSelect();
1694
1784
  };
1695
1785
  const step = (dir) => {
1696
1786
  if (enabled.length === 0) return;
1697
1787
  const at = enabled.indexOf(active);
1698
- setActive(enabled[(at + dir + enabled.length) % enabled.length]);
1788
+ const next = at === -1 ? dir === 1 ? 0 : enabled.length - 1 : (at + dir + enabled.length) % enabled.length;
1789
+ setActive(enabled[next]);
1699
1790
  };
1700
1791
  const onListKeyDown = (e) => {
1701
1792
  if (e.key === "ArrowDown") {
@@ -1704,13 +1795,13 @@ function Menu({ trigger, items, align = "end", className }) {
1704
1795
  } else if (e.key === "ArrowUp") {
1705
1796
  e.preventDefault();
1706
1797
  step(-1);
1707
- } else if (e.key === "Home") {
1798
+ } else if (e.key === "Home" && !search) {
1708
1799
  e.preventDefault();
1709
- setActive(enabled[0] ?? 0);
1710
- } else if (e.key === "End") {
1800
+ setActive(enabled[0] ?? -1);
1801
+ } else if (e.key === "End" && !search) {
1711
1802
  e.preventDefault();
1712
- setActive(enabled[enabled.length - 1] ?? 0);
1713
- } else if (e.key === "Enter" || e.key === " ") {
1803
+ setActive(enabled[enabled.length - 1] ?? -1);
1804
+ } else if (e.key === "Enter" || e.key === " " && !search) {
1714
1805
  e.preventDefault();
1715
1806
  choose(active);
1716
1807
  } else if (e.key === "Escape") {
@@ -1718,6 +1809,14 @@ function Menu({ trigger, items, align = "end", className }) {
1718
1809
  close();
1719
1810
  } else if (e.key === "Tab") setOpen(false);
1720
1811
  };
1812
+ const onQuery = (value) => {
1813
+ setQuery(value);
1814
+ const first = visibleEntries(items, value).find((i) => {
1815
+ const e = items[i];
1816
+ return isItem(e) && !e.disabled;
1817
+ });
1818
+ setActive(first ?? -1);
1819
+ };
1721
1820
  const own = trigger.props;
1722
1821
  const wired = (0, import_react17.cloneElement)(trigger, {
1723
1822
  "aria-haspopup": "menu",
@@ -1726,63 +1825,110 @@ function Menu({ trigger, items, align = "end", className }) {
1726
1825
  onClick: (e) => {
1727
1826
  own.onClick?.(e);
1728
1827
  if (open) setOpen(false);
1729
- else openAt(enabled[0] ?? 0);
1828
+ else openAt("first");
1730
1829
  },
1731
1830
  onKeyDown: (e) => {
1732
1831
  own.onKeyDown?.(e);
1733
1832
  if (!open && (e.key === "ArrowDown" || e.key === "Enter" || e.key === " ")) {
1734
1833
  e.preventDefault();
1735
- openAt(enabled[0] ?? 0);
1834
+ openAt("first");
1736
1835
  } else if (!open && e.key === "ArrowUp") {
1737
1836
  e.preventDefault();
1738
- openAt(enabled[enabled.length - 1] ?? 0);
1837
+ openAt("last");
1739
1838
  }
1740
1839
  }
1741
1840
  });
1742
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { ref: rootRef, className: ["fds-menu", className].filter(Boolean).join(" "), children: [
1743
- wired,
1744
- open && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1745
- "div",
1746
- {
1747
- ref: listRef,
1748
- id: listId,
1749
- role: "menu",
1750
- tabIndex: -1,
1751
- className: `fds-menu__list fds-menu__list--${align}`,
1752
- "aria-activedescendant": `${listId}-item-${active}`,
1753
- onKeyDown: onListKeyDown,
1754
- children: items.map((it, i) => /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
1755
- "div",
1756
- {
1757
- id: `${listId}-item-${i}`,
1758
- role: "menuitem",
1759
- "aria-disabled": it.disabled || void 0,
1760
- className: [
1761
- "fds-menu__item",
1762
- it.tone === "danger" ? "fds-menu__item--danger" : "",
1763
- i === active ? "fds-menu__item--active" : "",
1764
- it.disabled ? "fds-menu__item--disabled" : ""
1765
- ].filter(Boolean).join(" "),
1766
- onMouseEnter: () => !it.disabled && setActive(i),
1767
- onMouseDown: (e) => e.preventDefault(),
1768
- onClick: () => choose(i),
1769
- children: [
1770
- it.icon != null && /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "fds-menu__icon", "aria-hidden": "true", children: it.icon }),
1771
- it.label
1772
- ]
1773
- },
1774
- i
1775
- ))
1776
- }
1777
- )
1778
- ] });
1841
+ const listClasses = [
1842
+ "fds-menu__list",
1843
+ `fds-menu__list--${placement}`,
1844
+ placement === "right" ? "" : `fds-menu__list--${align}`,
1845
+ width === "wide" ? "fds-menu__list--wide" : ""
1846
+ ].filter(Boolean).join(" ");
1847
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
1848
+ "div",
1849
+ {
1850
+ ref: rootRef,
1851
+ className: ["fds-menu", block ? "fds-menu--block" : "", className].filter(Boolean).join(" "),
1852
+ children: [
1853
+ wired,
1854
+ open && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: listClasses, onKeyDown: onListKeyDown, children: [
1855
+ search && /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { className: "fds-menu__search", children: [
1856
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react.Search, { "aria-hidden": "true" }),
1857
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1858
+ "input",
1859
+ {
1860
+ ref: searchRef,
1861
+ type: "text",
1862
+ value: query,
1863
+ placeholder: search.placeholder,
1864
+ disabled: search.disabled,
1865
+ "aria-label": search.placeholder,
1866
+ "aria-controls": listId,
1867
+ "aria-activedescendant": active >= 0 ? `${listId}-item-${active}` : void 0,
1868
+ onChange: (e) => onQuery(e.target.value)
1869
+ }
1870
+ )
1871
+ ] }),
1872
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
1873
+ "div",
1874
+ {
1875
+ ref: listRef,
1876
+ id: listId,
1877
+ role: "menu",
1878
+ tabIndex: -1,
1879
+ className: "fds-menu__items",
1880
+ "aria-activedescendant": (!search || search.disabled) && active >= 0 ? `${listId}-item-${active}` : void 0,
1881
+ children: [
1882
+ shown.length === 0 && search && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "fds-menu__empty", children: search.emptyLabel }),
1883
+ shown.map((i) => {
1884
+ const e = items[i];
1885
+ if (!isItem(e)) {
1886
+ return e.type === "label" ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "fds-menu__label", role: "presentation", children: e.label }, i) : /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: "fds-menu__divider", role: "separator" }, i);
1887
+ }
1888
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
1889
+ "div",
1890
+ {
1891
+ id: `${listId}-item-${i}`,
1892
+ role: "menuitem",
1893
+ "aria-disabled": e.disabled || void 0,
1894
+ "aria-current": e.selected || void 0,
1895
+ className: [
1896
+ "fds-menu__item",
1897
+ e.tone === "danger" ? "fds-menu__item--danger" : "",
1898
+ i === active ? "fds-menu__item--active" : "",
1899
+ e.disabled ? "fds-menu__item--disabled" : ""
1900
+ ].filter(Boolean).join(" "),
1901
+ onMouseEnter: () => !e.disabled && setActive(i),
1902
+ onMouseDown: (ev) => ev.preventDefault(),
1903
+ onClick: () => choose(i),
1904
+ children: [
1905
+ e.avatar != null && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "fds-menu__avatar", "aria-hidden": "true", children: e.avatar }),
1906
+ e.icon != null && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "fds-menu__icon", "aria-hidden": "true", children: e.icon }),
1907
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: "fds-menu__text", children: [
1908
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "fds-menu__title", children: e.label }),
1909
+ e.description != null && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "fds-menu__description", children: e.description })
1910
+ ] }),
1911
+ e.trailing != null && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "fds-menu__trailing", children: e.trailing }),
1912
+ e.selected && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_lucide_react.Check, { className: "fds-menu__check", "aria-hidden": "true" })
1913
+ ]
1914
+ },
1915
+ i
1916
+ );
1917
+ })
1918
+ ]
1919
+ }
1920
+ )
1921
+ ] })
1922
+ ]
1923
+ }
1924
+ );
1779
1925
  }
1780
1926
 
1781
1927
  // src/components/Table/Table.tsx
1782
- var import_jsx_runtime34 = require("react/jsx-runtime");
1928
+ var import_jsx_runtime35 = require("react/jsx-runtime");
1783
1929
  function Table({ columns, rows, rowKey, empty, className, "aria-label": ariaLabel, ...rest }) {
1784
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { className: ["fds-table", className].filter(Boolean).join(" "), ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("table", { className: "fds-table__table", "aria-label": ariaLabel, children: [
1785
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("tr", { children: columns.map((c) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1930
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: ["fds-table", className].filter(Boolean).join(" "), ...rest, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("table", { className: "fds-table__table", "aria-label": ariaLabel, children: [
1931
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("tr", { children: columns.map((c) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1786
1932
  "th",
1787
1933
  {
1788
1934
  scope: "col",
@@ -1792,17 +1938,17 @@ function Table({ columns, rows, rowKey, empty, className, "aria-label": ariaLabe
1792
1938
  },
1793
1939
  c.key
1794
1940
  )) }) }),
1795
- /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("tbody", { children: [
1796
- rows.map((row) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("tr", { children: columns.map((c) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("td", { className: c.align === "end" ? "fds-table__cell--end" : void 0, children: c.cell(row) }, c.key)) }, rowKey(row))),
1797
- rows.length === 0 && empty != null && /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("tr", { children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("td", { colSpan: columns.length, className: "fds-table__empty", children: empty }) })
1941
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("tbody", { children: [
1942
+ rows.map((row) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("tr", { children: columns.map((c) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("td", { className: c.align === "end" ? "fds-table__cell--end" : void 0, children: c.cell(row) }, c.key)) }, rowKey(row))),
1943
+ rows.length === 0 && empty != null && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("tr", { children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("td", { colSpan: columns.length, className: "fds-table__empty", children: empty }) })
1798
1944
  ] })
1799
1945
  ] }) });
1800
1946
  }
1801
1947
 
1802
1948
  // src/components/PricingCard/PricingCard.tsx
1803
- var import_jsx_runtime35 = require("react/jsx-runtime");
1949
+ var import_jsx_runtime36 = require("react/jsx-runtime");
1804
1950
  function CheckIcon3() {
1805
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("svg", { viewBox: "0 0 16 16", width: "12", height: "12", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("path", { d: "M3.5 8.5l3 3 6-7", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round" }) });
1951
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("svg", { viewBox: "0 0 16 16", width: "12", height: "12", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("path", { d: "M3.5 8.5l3 3 6-7", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round" }) });
1806
1952
  }
1807
1953
  function PricingCard({
1808
1954
  eyebrow,
@@ -1820,36 +1966,415 @@ function PricingCard({
1820
1966
  ...rest
1821
1967
  }) {
1822
1968
  const classes = ["fds-pricing-card", highlighted ? "fds-pricing-card--highlighted" : "", className].filter(Boolean).join(" ");
1823
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("article", { className: classes, ...rest, children: [
1824
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "fds-pricing-card__top", children: [
1825
- eyebrow != null && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "fds-pricing-card__eyebrow", children: eyebrow }),
1826
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("h3", { className: "fds-pricing-card__title", children: [
1969
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("article", { className: classes, ...rest, children: [
1970
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "fds-pricing-card__top", children: [
1971
+ eyebrow != null && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "fds-pricing-card__eyebrow", children: eyebrow }),
1972
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("h3", { className: "fds-pricing-card__title", children: [
1827
1973
  title,
1828
1974
  badge
1829
1975
  ] }),
1830
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("p", { className: "fds-pricing-card__price", children: [
1831
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "fds-pricing-card__amount", children: price }),
1832
- period != null && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "fds-pricing-card__period", children: period })
1976
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("p", { className: "fds-pricing-card__price", children: [
1977
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "fds-pricing-card__amount", children: price }),
1978
+ period != null && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "fds-pricing-card__period", children: period })
1833
1979
  ] }),
1834
- description != null && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "fds-pricing-card__description", children: description }),
1835
- action != null && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "fds-pricing-card__action", children: action })
1980
+ description != null && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "fds-pricing-card__description", children: description }),
1981
+ action != null && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "fds-pricing-card__action", children: action })
1836
1982
  ] }),
1837
- features.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "fds-pricing-card__features", children: [
1838
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "fds-pricing-card__featuresTitle", children: featuresTitle }),
1839
- featuresIntro != null && /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("p", { className: "fds-pricing-card__intro", children: featuresIntro }),
1840
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("ul", { className: "fds-pricing-card__list", children: features.map((f, i) => /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("li", { className: "fds-pricing-card__feature", children: [
1841
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "fds-pricing-card__check", children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(CheckIcon3, {}) }),
1983
+ features.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "fds-pricing-card__features", children: [
1984
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "fds-pricing-card__featuresTitle", children: featuresTitle }),
1985
+ featuresIntro != null && /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("p", { className: "fds-pricing-card__intro", children: featuresIntro }),
1986
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("ul", { className: "fds-pricing-card__list", children: features.map((f, i) => /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("li", { className: "fds-pricing-card__feature", children: [
1987
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "fds-pricing-card__check", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(CheckIcon3, {}) }),
1842
1988
  f
1843
1989
  ] }, i)) })
1844
1990
  ] })
1845
1991
  ] });
1846
1992
  }
1993
+
1994
+ // src/components/StatusDot/StatusDot.tsx
1995
+ var import_jsx_runtime37 = require("react/jsx-runtime");
1996
+ function StatusDot({ status, label, className, ...rest }) {
1997
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
1998
+ "span",
1999
+ {
2000
+ className: ["fds-status-dot", `fds-status-dot--${status}`, className].filter(Boolean).join(" "),
2001
+ role: label ? "img" : void 0,
2002
+ "aria-label": label,
2003
+ "aria-hidden": label ? void 0 : true,
2004
+ ...rest
2005
+ }
2006
+ );
2007
+ }
2008
+
2009
+ // src/components/ListLabel/ListLabel.tsx
2010
+ var import_jsx_runtime38 = require("react/jsx-runtime");
2011
+ function ListLabel({ className, children, ...rest }) {
2012
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: ["fds-list-label", className].filter(Boolean).join(" "), ...rest, children });
2013
+ }
2014
+
2015
+ // src/components/Divider/Divider.tsx
2016
+ var import_jsx_runtime39 = require("react/jsx-runtime");
2017
+ function Divider({ orientation = "horizontal", className, ...rest }) {
2018
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2019
+ "hr",
2020
+ {
2021
+ className: ["fds-divider", `fds-divider--${orientation}`, className].filter(Boolean).join(" "),
2022
+ "aria-orientation": orientation,
2023
+ ...rest
2024
+ }
2025
+ );
2026
+ }
2027
+
2028
+ // src/components/Tooltip/Tooltip.tsx
2029
+ var import_react18 = require("react");
2030
+ var import_react_dom2 = require("react-dom");
2031
+ var import_jsx_runtime40 = require("react/jsx-runtime");
2032
+ var GAP = 8;
2033
+ function place(rect, side) {
2034
+ switch (side) {
2035
+ case "right":
2036
+ return { top: rect.top + rect.height / 2, left: rect.right + GAP };
2037
+ case "left":
2038
+ return { top: rect.top + rect.height / 2, left: rect.left - GAP };
2039
+ case "top":
2040
+ return { top: rect.top - GAP, left: rect.left + rect.width / 2 };
2041
+ case "bottom":
2042
+ return { top: rect.bottom + GAP, left: rect.left + rect.width / 2 };
2043
+ }
2044
+ }
2045
+ function Tooltip({ content, children, side = "right", delay = 400, disabled = false }) {
2046
+ const id = (0, import_react18.useId)();
2047
+ const timer = (0, import_react18.useRef)();
2048
+ const [pos, setPos] = (0, import_react18.useState)(null);
2049
+ (0, import_react18.useEffect)(() => () => window.clearTimeout(timer.current), []);
2050
+ (0, import_react18.useEffect)(() => {
2051
+ if (disabled) setPos(null);
2052
+ }, [disabled]);
2053
+ const show = (el, wait) => {
2054
+ window.clearTimeout(timer.current);
2055
+ timer.current = window.setTimeout(() => setPos(place(el.getBoundingClientRect(), side)), wait);
2056
+ };
2057
+ const hide = () => {
2058
+ window.clearTimeout(timer.current);
2059
+ setPos(null);
2060
+ };
2061
+ if (disabled) return children;
2062
+ const own = children.props;
2063
+ const trigger = (0, import_react18.cloneElement)(children, {
2064
+ "aria-describedby": pos ? id : own["aria-describedby"],
2065
+ onMouseEnter: (e) => {
2066
+ own.onMouseEnter?.(e);
2067
+ show(e.currentTarget, delay);
2068
+ },
2069
+ onMouseLeave: (e) => {
2070
+ own.onMouseLeave?.(e);
2071
+ hide();
2072
+ },
2073
+ onFocus: (e) => {
2074
+ own.onFocus?.(e);
2075
+ if (e.currentTarget.matches(":focus-visible")) show(e.currentTarget, 0);
2076
+ },
2077
+ onBlur: (e) => {
2078
+ own.onBlur?.(e);
2079
+ hide();
2080
+ }
2081
+ });
2082
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(import_jsx_runtime40.Fragment, { children: [
2083
+ trigger,
2084
+ pos && (0, import_react_dom2.createPortal)(
2085
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2086
+ "div",
2087
+ {
2088
+ id,
2089
+ role: "tooltip",
2090
+ className: `fds-tooltip fds-tooltip--${side}`,
2091
+ style: { top: pos.top, left: pos.left },
2092
+ children: content
2093
+ }
2094
+ ),
2095
+ document.body
2096
+ )
2097
+ ] });
2098
+ }
2099
+
2100
+ // src/components/BrandButton/BrandButton.tsx
2101
+ var import_lucide_react2 = require("lucide-react");
2102
+ var import_jsx_runtime41 = require("react/jsx-runtime");
2103
+ function BrandButton({ mark, hoverIcon, type = "button", className, ...rest }) {
2104
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("button", { type, className: ["fds-brand-button", className].filter(Boolean).join(" "), ...rest, children: [
2105
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "fds-brand-button__mark", "aria-hidden": "true", children: mark }),
2106
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "fds-brand-button__hover", "aria-hidden": "true", children: hoverIcon ?? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_lucide_react2.PanelLeftOpen, {}) })
2107
+ ] });
2108
+ }
2109
+
2110
+ // src/components/Sidebar/SidebarContext.ts
2111
+ var import_react19 = require("react");
2112
+ var SidebarContext = (0, import_react19.createContext)(null);
2113
+ function useSidebar() {
2114
+ return (0, import_react19.useContext)(SidebarContext);
2115
+ }
2116
+
2117
+ // src/components/SidebarItem/SidebarItem.tsx
2118
+ var import_jsx_runtime42 = require("react/jsx-runtime");
2119
+ function SidebarItem({
2120
+ as,
2121
+ icon,
2122
+ leading,
2123
+ active = false,
2124
+ iconOnly,
2125
+ className,
2126
+ children,
2127
+ ...rest
2128
+ }) {
2129
+ const sidebar = useSidebar();
2130
+ const compact = iconOnly ?? sidebar?.collapsed ?? false;
2131
+ const Component = as ?? "a";
2132
+ const classes = [
2133
+ "fds-sidebar-item",
2134
+ active ? "fds-sidebar-item--active" : "",
2135
+ compact ? "fds-sidebar-item--icon-only" : "",
2136
+ className
2137
+ ].filter(Boolean).join(" ");
2138
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Tooltip, { content: children, disabled: !compact, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(Component, { className: classes, "aria-current": active ? "page" : void 0, ...rest, children: [
2139
+ (leading ?? icon) != null && /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: leading != null ? "fds-sidebar-item__leading" : "fds-sidebar-item__icon", "aria-hidden": "true", children: leading ?? icon }),
2140
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "fds-sidebar-item__label", children })
2141
+ ] }) });
2142
+ }
2143
+
2144
+ // src/components/Sidebar/Sidebar.tsx
2145
+ var import_react20 = require("react");
2146
+ var import_lucide_react3 = require("lucide-react");
2147
+ var import_jsx_runtime43 = require("react/jsx-runtime");
2148
+ function SidebarRoot({
2149
+ collapsed: controlled,
2150
+ defaultCollapsed = false,
2151
+ onCollapsedChange,
2152
+ shortcut = true,
2153
+ className,
2154
+ children,
2155
+ "aria-label": ariaLabel = "Main",
2156
+ ...rest
2157
+ }) {
2158
+ const [own, setOwn] = (0, import_react20.useState)(defaultCollapsed);
2159
+ const collapsed = controlled ?? own;
2160
+ const setCollapsed = (0, import_react20.useCallback)(
2161
+ (next) => {
2162
+ if (controlled === void 0) setOwn(next);
2163
+ onCollapsedChange?.(next);
2164
+ },
2165
+ [controlled, onCollapsedChange]
2166
+ );
2167
+ const toggle = (0, import_react20.useCallback)(() => setCollapsed(!collapsed), [collapsed, setCollapsed]);
2168
+ (0, import_react20.useEffect)(() => {
2169
+ if (!shortcut) return;
2170
+ const onKey = (e) => {
2171
+ if ((e.metaKey || e.ctrlKey) && e.key === "\\") {
2172
+ e.preventDefault();
2173
+ toggle();
2174
+ }
2175
+ };
2176
+ window.addEventListener("keydown", onKey);
2177
+ return () => window.removeEventListener("keydown", onKey);
2178
+ }, [shortcut, toggle]);
2179
+ const state = (0, import_react20.useMemo)(() => ({ collapsed, setCollapsed, toggle }), [collapsed, setCollapsed, toggle]);
2180
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(SidebarContext.Provider, { value: state, children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2181
+ "nav",
2182
+ {
2183
+ className: ["fds-sidebar", collapsed ? "fds-sidebar--collapsed" : "", className].filter(Boolean).join(" "),
2184
+ "aria-label": ariaLabel,
2185
+ "data-collapsed": collapsed || void 0,
2186
+ ...rest,
2187
+ children
2188
+ }
2189
+ ) });
2190
+ }
2191
+ function useInert(on) {
2192
+ const ref = (0, import_react20.useRef)(null);
2193
+ (0, import_react20.useEffect)(() => {
2194
+ if (ref.current) ref.current.inert = on;
2195
+ }, [on]);
2196
+ return ref;
2197
+ }
2198
+ function SidebarBrand({
2199
+ logo,
2200
+ mark,
2201
+ collapseLabel = "Collapse sidebar",
2202
+ expandLabel = "Expand sidebar"
2203
+ }) {
2204
+ const sidebar = useSidebar();
2205
+ const collapsed = sidebar?.collapsed ?? false;
2206
+ const collapseRef = useInert(collapsed);
2207
+ const expandRef = useInert(!collapsed);
2208
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "fds-sidebar__brand", children: [
2209
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { className: "fds-sidebar__logo", "aria-hidden": collapsed || void 0, children: logo }),
2210
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { ref: collapseRef, className: "fds-sidebar__collapse", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Tooltip, { content: collapseLabel, side: "bottom", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2211
+ IconButton,
2212
+ {
2213
+ variant: "ghost",
2214
+ size: "small",
2215
+ icon: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_lucide_react3.PanelLeftClose, {}),
2216
+ "aria-label": collapseLabel,
2217
+ "aria-keyshortcuts": "Meta+Backslash Control+Backslash",
2218
+ onClick: () => sidebar?.setCollapsed(true)
2219
+ }
2220
+ ) }) }),
2221
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { ref: expandRef, className: "fds-sidebar__expand", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Tooltip, { content: expandLabel, children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(BrandButton, { mark, "aria-label": expandLabel, onClick: () => sidebar?.setCollapsed(false) }) }) })
2222
+ ] });
2223
+ }
2224
+ function SidebarAction({ icon, label, type = "button", className, ...rest }) {
2225
+ const sidebar = useSidebar();
2226
+ const collapsed = sidebar?.collapsed ?? false;
2227
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Tooltip, { content: label, disabled: !collapsed, children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
2228
+ "button",
2229
+ {
2230
+ type,
2231
+ className: ["fds-sidebar__action", className].filter(Boolean).join(" "),
2232
+ "aria-label": collapsed ? label : void 0,
2233
+ ...rest,
2234
+ children: [
2235
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { className: "fds-sidebar__action-icon", "aria-hidden": "true", children: icon }),
2236
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { className: "fds-sidebar__action-label", children: label })
2237
+ ]
2238
+ }
2239
+ ) });
2240
+ }
2241
+ function SidebarSection({ hideWhenCollapsed = false, className, children, ...rest }) {
2242
+ const sidebar = useSidebar();
2243
+ const hidden = hideWhenCollapsed && (sidebar?.collapsed ?? false);
2244
+ const ref = useInert(hidden);
2245
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2246
+ "div",
2247
+ {
2248
+ ref,
2249
+ className: ["fds-sidebar__section", hidden ? "fds-sidebar__section--hidden" : "", className].filter(Boolean).join(" "),
2250
+ "aria-hidden": hidden || void 0,
2251
+ ...rest,
2252
+ children
2253
+ }
2254
+ );
2255
+ }
2256
+ function SidebarHeader({ className, children, ...rest }) {
2257
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: ["fds-sidebar__header", className].filter(Boolean).join(" "), ...rest, children });
2258
+ }
2259
+ function SidebarFooter({ className, children, ...rest }) {
2260
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: ["fds-sidebar__footer", className].filter(Boolean).join(" "), ...rest, children });
2261
+ }
2262
+ var Sidebar = Object.assign(SidebarRoot, {
2263
+ Header: SidebarHeader,
2264
+ Brand: SidebarBrand,
2265
+ Action: SidebarAction,
2266
+ Section: SidebarSection,
2267
+ Item: SidebarItem,
2268
+ Footer: SidebarFooter
2269
+ });
2270
+
2271
+ // src/components/WorkspaceSwitcher/WorkspaceSwitcher.tsx
2272
+ var import_react21 = require("react");
2273
+ var import_lucide_react4 = require("lucide-react");
2274
+ var import_jsx_runtime44 = require("react/jsx-runtime");
2275
+ function WorkspaceAvatar({ name }) {
2276
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "fds-workspace-avatar", "aria-hidden": "true", children: name.trim().charAt(0).toUpperCase() || "?" });
2277
+ }
2278
+ var WorkspaceSwitcher = (0, import_react21.forwardRef)(function WorkspaceSwitcher2({ name, plan, avatar, compact, type = "button", className, ...rest }, ref) {
2279
+ const sidebar = useSidebar();
2280
+ const iconOnly = compact ?? sidebar?.collapsed ?? false;
2281
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
2282
+ "button",
2283
+ {
2284
+ ref,
2285
+ type,
2286
+ className: ["fds-workspace-switcher", iconOnly ? "fds-workspace-switcher--compact" : "", className].filter(Boolean).join(" "),
2287
+ "aria-label": iconOnly ? `Workspace: ${name}` : void 0,
2288
+ ...rest,
2289
+ children: [
2290
+ avatar ?? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(WorkspaceAvatar, { name }),
2291
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("span", { className: "fds-workspace-switcher__text", "aria-hidden": iconOnly || void 0, children: [
2292
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "fds-workspace-switcher__name", children: name }),
2293
+ plan && /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "fds-workspace-switcher__plan", children: plan }),
2294
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_lucide_react4.ChevronDown, { className: "fds-workspace-switcher__chevron", "aria-hidden": "true" })
2295
+ ] })
2296
+ ]
2297
+ }
2298
+ );
2299
+ });
2300
+
2301
+ // src/components/AvatarLabelGroup/AvatarLabelGroup.tsx
2302
+ var import_react22 = require("react");
2303
+ var import_jsx_runtime45 = require("react/jsx-runtime");
2304
+ var AvatarLabelGroup = (0, import_react22.forwardRef)(function AvatarLabelGroup2({ name, detail, src, compact = false, type = "button", className, ...rest }, ref) {
2305
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
2306
+ "button",
2307
+ {
2308
+ ref,
2309
+ type,
2310
+ className: ["fds-avatar-label-group", compact ? "fds-avatar-label-group--compact" : "", className].filter(Boolean).join(" "),
2311
+ "aria-label": compact ? name : void 0,
2312
+ ...rest,
2313
+ children: [
2314
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Avatar, { name, src, size: "small" }),
2315
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("span", { className: "fds-avatar-label-group__text", "aria-hidden": compact || void 0, children: [
2316
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "fds-avatar-label-group__name", children: name }),
2317
+ detail && /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "fds-avatar-label-group__detail", children: detail })
2318
+ ] })
2319
+ ]
2320
+ }
2321
+ );
2322
+ });
2323
+
2324
+ // src/components/AppLayout/AppLayout.tsx
2325
+ var import_jsx_runtime46 = require("react/jsx-runtime");
2326
+ function AppLayoutRoot({ className, children, ...rest }) {
2327
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: ["fds-app-layout", className].filter(Boolean).join(" "), ...rest, children });
2328
+ }
2329
+ function AppLayoutPanel({ className, children, ...rest }) {
2330
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("main", { className: ["fds-app-layout__panel", className].filter(Boolean).join(" "), ...rest, children });
2331
+ }
2332
+ var AppLayout = Object.assign(AppLayoutRoot, { Panel: AppLayoutPanel });
2333
+
2334
+ // src/components/PageHeader/PageHeader.tsx
2335
+ var import_jsx_runtime47 = require("react/jsx-runtime");
2336
+ function PageHeader({ title, description, breadcrumb, actions, className, children, ...rest }) {
2337
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("header", { className: ["fds-page-header", className].filter(Boolean).join(" "), ...rest, children: [
2338
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "fds-page-header__row", children: [
2339
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { className: "fds-page-header__text", children: [
2340
+ breadcrumb != null && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "fds-page-header__breadcrumb", children: breadcrumb }),
2341
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("h1", { className: "fds-page-header__title", children: title }),
2342
+ description != null && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("p", { className: "fds-page-header__description", children: description })
2343
+ ] }),
2344
+ actions != null && /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "fds-page-header__actions", children: actions })
2345
+ ] }),
2346
+ children
2347
+ ] });
2348
+ }
2349
+
2350
+ // src/components/Toast/Toast.tsx
2351
+ var import_react23 = require("react");
2352
+ var import_lucide_react5 = require("lucide-react");
2353
+ var import_jsx_runtime48 = require("react/jsx-runtime");
2354
+ function ToastRegion({ className, children, ...rest }) {
2355
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: ["fds-toast-region", className].filter(Boolean).join(" "), "aria-live": "polite", ...rest, children });
2356
+ }
2357
+ function Toast({ children, action, onDismiss, duration, className, ...rest }) {
2358
+ (0, import_react23.useEffect)(() => {
2359
+ if (!duration || !onDismiss) return;
2360
+ const t = window.setTimeout(onDismiss, duration);
2361
+ return () => window.clearTimeout(t);
2362
+ }, [duration, onDismiss]);
2363
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { role: "status", className: ["fds-toast", className].filter(Boolean).join(" "), ...rest, children: [
2364
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "fds-toast__message", children }),
2365
+ action && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("button", { type: "button", className: "fds-toast__action", onClick: action.onClick, children: action.label }),
2366
+ onDismiss && /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("button", { type: "button", className: "fds-toast__close", "aria-label": "Dismiss", onClick: onDismiss, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_lucide_react5.X, { "aria-hidden": "true" }) })
2367
+ ] });
2368
+ }
1847
2369
  // Annotate the CommonJS export names for ESM import in node:
1848
2370
  0 && (module.exports = {
1849
2371
  Accordion,
2372
+ AppLayout,
1850
2373
  AppNav,
1851
2374
  Avatar,
2375
+ AvatarLabelGroup,
1852
2376
  Badge,
2377
+ BrandButton,
1853
2378
  Button,
1854
2379
  ButtonLink,
1855
2380
  Callout,
@@ -1857,13 +2382,16 @@ function PricingCard({
1857
2382
  Checkbox,
1858
2383
  DiffPropertyList,
1859
2384
  DiffSection,
2385
+ Divider,
1860
2386
  EmptyState,
1861
2387
  IconButton,
1862
2388
  Input,
2389
+ ListLabel,
1863
2390
  Menu,
1864
2391
  MismatchCard,
1865
2392
  Modal,
1866
2393
  MultiSelect,
2394
+ PageHeader,
1867
2395
  Pagination,
1868
2396
  PricingCard,
1869
2397
  Radio,
@@ -1873,16 +2401,26 @@ function PricingCard({
1873
2401
  SegmentedControl,
1874
2402
  Select,
1875
2403
  SettingsSection,
2404
+ Sidebar,
2405
+ SidebarItem,
1876
2406
  Skeleton,
1877
2407
  SkeletonGroup,
2408
+ Spinner,
1878
2409
  Split,
1879
2410
  StackedCardsIllustration,
1880
2411
  Stat,
2412
+ StatusDot,
1881
2413
  StepList,
1882
2414
  Swatch,
1883
2415
  TabNav,
1884
2416
  Table,
1885
2417
  Tag,
2418
+ Toast,
2419
+ ToastRegion,
1886
2420
  Toggle,
1887
- breakpoints
2421
+ Tooltip,
2422
+ WorkspaceAvatar,
2423
+ WorkspaceSwitcher,
2424
+ breakpoints,
2425
+ useSidebar
1888
2426
  });