@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/fidel.manifest.json +2 -2
- package/dist/index.cjs +690 -152
- package/dist/index.css +819 -9
- package/dist/index.d.cts +259 -9
- package/dist/index.d.ts +259 -9
- package/dist/index.js +685 -151
- package/package.json +1 -1
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
|
-
|
|
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/
|
|
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,
|
|
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
|
|
1438
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
1399
1439
|
function Stat({ label, value, children, className, ...rest }) {
|
|
1400
|
-
return /* @__PURE__ */ (0,
|
|
1401
|
-
/* @__PURE__ */ (0,
|
|
1402
|
-
/* @__PURE__ */ (0,
|
|
1403
|
-
children != null && /* @__PURE__ */ (0,
|
|
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
|
|
1448
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
1409
1449
|
function Swatch({ color, name, value, children, className, ...rest }) {
|
|
1410
|
-
return /* @__PURE__ */ (0,
|
|
1411
|
-
/* @__PURE__ */ (0,
|
|
1412
|
-
/* @__PURE__ */ (0,
|
|
1413
|
-
/* @__PURE__ */ (0,
|
|
1414
|
-
value != null && /* @__PURE__ */ (0,
|
|
1415
|
-
children != null && /* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
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,
|
|
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,
|
|
1449
|
-
/* @__PURE__ */ (0,
|
|
1450
|
-
/* @__PURE__ */ (0,
|
|
1451
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1454
|
-
label != null && /* @__PURE__ */ (0,
|
|
1455
|
-
description != null && /* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
1470
|
-
/* @__PURE__ */ (0,
|
|
1471
|
-
/* @__PURE__ */ (0,
|
|
1472
|
-
/* @__PURE__ */ (0,
|
|
1473
|
-
(label != null || description != null) && /* @__PURE__ */ (0,
|
|
1474
|
-
label != null && /* @__PURE__ */ (0,
|
|
1475
|
-
description != null && /* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
1489
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1502
|
-
icon != null && /* @__PURE__ */ (0,
|
|
1503
|
-
/* @__PURE__ */ (0,
|
|
1504
|
-
/* @__PURE__ */ (0,
|
|
1505
|
-
description != null && /* @__PURE__ */ (0,
|
|
1506
|
-
meta != null && /* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
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,
|
|
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,
|
|
1542
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1554
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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
|
|
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,
|
|
1574
|
-
/* @__PURE__ */ (0,
|
|
1575
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
1583
|
-
/* @__PURE__ */ (0,
|
|
1584
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
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,
|
|
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,
|
|
1597
|
-
/* @__PURE__ */ (0,
|
|
1598
|
-
/* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
1622
|
-
label != null && /* @__PURE__ */ (0,
|
|
1623
|
-
/* @__PURE__ */ (0,
|
|
1624
|
-
leadingIcon != null && /* @__PURE__ */ (0,
|
|
1625
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1678
|
+
trailing != null && /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "fds-input__trailing", children: trailing })
|
|
1639
1679
|
] }),
|
|
1640
|
-
message != null && /* @__PURE__ */ (0,
|
|
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
|
|
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,
|
|
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
|
|
1661
|
-
|
|
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 [
|
|
1667
|
-
const
|
|
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(
|
|
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 = (
|
|
1686
|
-
|
|
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
|
|
1691
|
-
if (!
|
|
1780
|
+
const e = items[i];
|
|
1781
|
+
if (!e || !isItem(e) || e.disabled) return;
|
|
1692
1782
|
close();
|
|
1693
|
-
|
|
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
|
-
|
|
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] ??
|
|
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] ??
|
|
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(
|
|
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(
|
|
1834
|
+
openAt("first");
|
|
1736
1835
|
} else if (!open && e.key === "ArrowUp") {
|
|
1737
1836
|
e.preventDefault();
|
|
1738
|
-
openAt(
|
|
1837
|
+
openAt("last");
|
|
1739
1838
|
}
|
|
1740
1839
|
}
|
|
1741
1840
|
});
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
{
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
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
|
|
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,
|
|
1785
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1796
|
-
rows.map((row) => /* @__PURE__ */ (0,
|
|
1797
|
-
rows.length === 0 && empty != null && /* @__PURE__ */ (0,
|
|
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
|
|
1949
|
+
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
1804
1950
|
function CheckIcon3() {
|
|
1805
|
-
return /* @__PURE__ */ (0,
|
|
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,
|
|
1824
|
-
/* @__PURE__ */ (0,
|
|
1825
|
-
eyebrow != null && /* @__PURE__ */ (0,
|
|
1826
|
-
/* @__PURE__ */ (0,
|
|
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,
|
|
1831
|
-
/* @__PURE__ */ (0,
|
|
1832
|
-
period != null && /* @__PURE__ */ (0,
|
|
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,
|
|
1835
|
-
action != null && /* @__PURE__ */ (0,
|
|
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,
|
|
1838
|
-
/* @__PURE__ */ (0,
|
|
1839
|
-
featuresIntro != null && /* @__PURE__ */ (0,
|
|
1840
|
-
/* @__PURE__ */ (0,
|
|
1841
|
-
/* @__PURE__ */ (0,
|
|
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
|
-
|
|
2421
|
+
Tooltip,
|
|
2422
|
+
WorkspaceAvatar,
|
|
2423
|
+
WorkspaceSwitcher,
|
|
2424
|
+
breakpoints,
|
|
2425
|
+
useSidebar
|
|
1888
2426
|
});
|