@vectramindnpm/unified-design-system 0.2.2 → 0.2.4

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
@@ -850,7 +850,7 @@ var Button = React4.forwardRef(
850
850
  const composed = cn(
851
851
  baseClasses2,
852
852
  isPill ? "rounded-full" : "",
853
- variantClasses[colorBase],
853
+ variant ? variantClasses[colorBase] : "",
854
854
  // Link never carries the size scale's own padding/height — it reads as inline text.
855
855
  isLink ? "h-auto p-0" : isPill ? pillSizeClasses[finalSize] : sizeClasses[finalSize],
856
856
  isPill ? selected ? pillSelected : pillUnselected : selected ? selectedGradient : "",
@@ -861,15 +861,19 @@ var Button = React4.forwardRef(
861
861
  buttonVariants({ variant: finalVariant, size: finalSize, shape, className })
862
862
  );
863
863
  const mergedStyle = {
864
- ...variantStyles[colorBase],
864
+ ...variant ? variantStyles[colorBase] : void 0,
865
865
  ...isPill && selected ? { ["--pill-selected-bg"]: `${color3.text.blue}24` } : void 0,
866
866
  ...style
867
867
  };
868
+ const accessibleProps = {
869
+ "aria-label": props["aria-label"] ?? tooltipText,
870
+ ...props
871
+ };
868
872
  const element = asChild && React4.isValidElement(children) ? React4.cloneElement(children, {
869
873
  className: cn(composed, children.props?.className),
870
874
  ref,
871
- ...props
872
- }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { className: cn(composed), ref, style: mergedStyle, ...props, children });
875
+ ...accessibleProps
876
+ }) : /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("button", { className: cn(composed), ref, style: mergedStyle, ...accessibleProps, children });
873
877
  if (!tooltipText) {
874
878
  return element;
875
879
  }
@@ -992,13 +996,14 @@ var ButtonIcon = React5.forwardRef(
992
996
  name,
993
997
  variant,
994
998
  size,
995
- color: color6 = "primary",
999
+ color: color6,
996
1000
  hoverColor,
997
1001
  bgColor,
998
1002
  bgHoverColor,
999
1003
  actionColor,
1000
1004
  tooltipText,
1001
1005
  showTooltip = false,
1006
+ label,
1002
1007
  disabled,
1003
1008
  className,
1004
1009
  type = "button",
@@ -1009,12 +1014,13 @@ var ButtonIcon = React5.forwardRef(
1009
1014
  }, ref) => {
1010
1015
  const isModalClose = variant === "modalClose";
1011
1016
  const isRefresh = variant === "refresh";
1017
+ const isFilled = variant === "filled";
1012
1018
  const resolvedBg = bgColor ? { base: bgColor, hover: bgHoverColor } : actionColor ? actionColorTokens[actionColor] : void 0;
1013
1019
  const effectiveSize = isRefresh ? "sm" : size;
1014
- const effectiveColor = isRefresh ? "primary" : color6;
1020
+ const effectiveColor = isRefresh ? "primary" : color6 ?? (isFilled ? "white" : "primary");
1015
1021
  const effectiveHoverColor = isRefresh ? "primary" : isModalClose ? "danger" : hoverColor;
1016
1022
  const effectiveShowTooltip = isRefresh ? true : showTooltip;
1017
- const effectiveTooltipText = tooltipText;
1023
+ const effectiveTooltipText = tooltipText ?? label ?? props["aria-label"];
1018
1024
  const colorProps = getIconColorProps(effectiveColor, effectiveHoverColor, resolvedBg);
1019
1025
  const icon = /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
1020
1026
  "button",
@@ -1253,77 +1259,24 @@ Checkbox.displayName = "Checkbox";
1253
1259
 
1254
1260
  // src/components/ui/delete-action.tsx
1255
1261
  var import_react = require("react");
1262
+ var import_react_i18next = require("react-i18next");
1256
1263
 
1257
- // src/components/ui/icon.tsx
1258
- var React8 = __toESM(require("react"), 1);
1259
- var import_class_variance_authority5 = require("class-variance-authority");
1260
- var import_jsx_runtime8 = require("react/jsx-runtime");
1261
- var Icon = React8.forwardRef(
1262
- ({
1263
- name,
1264
- variant,
1265
- size,
1266
- color: color6 = "primary",
1267
- hoverColor,
1268
- tooltipText,
1269
- showTooltip = false,
1270
- disabled,
1271
- className,
1272
- onClick,
1273
- style,
1274
- ...props
1275
- }, ref) => {
1276
- const colorProps = getIconColorProps(color6, hoverColor);
1277
- const icon = /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1278
- "i",
1279
- {
1280
- ref,
1281
- className: cn(
1282
- `${name}`,
1283
- iconVariants({ variant, size }),
1284
- colorProps.className,
1285
- onClick && !disabled && "cursor-pointer",
1286
- className
1287
- ),
1288
- onClick,
1289
- style: { ...colorProps.style, ...style },
1290
- role: onClick ? "button" : void 0,
1291
- tabIndex: onClick ? 0 : void 0,
1292
- "aria-label": tooltipText || name,
1293
- onKeyDown: (e) => {
1294
- if (!onClick) return;
1295
- if (e.key === "Enter" || e.key === " ") {
1296
- e.preventDefault();
1297
- onClick(
1298
- e
1299
- );
1300
- }
1301
- },
1302
- ...props
1303
- }
1304
- );
1305
- if (!showTooltip) {
1306
- return icon;
1307
- }
1308
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(Tooltip, { children: [
1309
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(TooltipTrigger, { asChild: true, children: icon }),
1310
- /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(TooltipContent, { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("small", { children: tooltipText || name }) })
1311
- ] });
1312
- }
1313
- );
1314
- Icon.displayName = "Icon";
1264
+ // src/helpers/helpersIndex.ts
1265
+ var getTranslationKey = () => "translations";
1315
1266
 
1316
1267
  // src/components/ui/delete-action.tsx
1317
- var import_jsx_runtime9 = require("react/jsx-runtime");
1268
+ var import_jsx_runtime8 = require("react/jsx-runtime");
1318
1269
  var DeleteAction = ({ onClick, tooltipText, showTooltip = true, className }) => {
1319
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1320
- Icon,
1270
+ const translationKey = getTranslationKey();
1271
+ const { t } = (0, import_react_i18next.useTranslation)(translationKey);
1272
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1273
+ ButtonIcon,
1321
1274
  {
1322
1275
  name: "icon-neo-trash",
1323
1276
  hoverColor: "danger",
1324
1277
  onClick,
1325
1278
  showTooltip,
1326
- tooltipText: tooltipText || "Delete",
1279
+ tooltipText: tooltipText || t("ActionNames.delete"),
1327
1280
  className
1328
1281
  }
1329
1282
  );
@@ -1331,25 +1284,28 @@ var DeleteAction = ({ onClick, tooltipText, showTooltip = true, className }) =>
1331
1284
  var delete_action_default = DeleteAction;
1332
1285
 
1333
1286
  // src/components/ui/dialog.tsx
1334
- var React10 = __toESM(require("react"), 1);
1335
- var import_jsx_runtime10 = require("react/jsx-runtime");
1336
- var DialogContext = React10.createContext(void 0);
1287
+ var React9 = __toESM(require("react"), 1);
1288
+ var import_react_i18next2 = require("react-i18next");
1289
+ var import_jsx_runtime9 = require("react/jsx-runtime");
1290
+ var DialogContext = React9.createContext(void 0);
1337
1291
  function useDialog() {
1338
- const context = React10.useContext(DialogContext);
1292
+ const context = React9.useContext(DialogContext);
1339
1293
  if (!context) {
1340
1294
  throw new Error("Dialog components must be used within Dialog");
1341
1295
  }
1342
1296
  return context;
1343
1297
  }
1344
1298
  var Dialog = ({ open: controlledOpen, onOpenChange, children }) => {
1345
- const [uncontrolledOpen, setUncontrolledOpen] = React10.useState(false);
1299
+ const [uncontrolledOpen, setUncontrolledOpen] = React9.useState(false);
1300
+ const [titleId, setTitleId] = React9.useState(void 0);
1301
+ const [descriptionId, setDescriptionId] = React9.useState(void 0);
1346
1302
  const open = controlledOpen !== void 0 ? controlledOpen : uncontrolledOpen;
1347
1303
  const setOpen = onOpenChange || setUncontrolledOpen;
1348
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DialogContext.Provider, { value: { open, onOpenChange: setOpen }, children });
1304
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(DialogContext.Provider, { value: { open, onOpenChange: setOpen, titleId, descriptionId, setTitleId, setDescriptionId }, children });
1349
1305
  };
1350
- var DialogTrigger = React10.forwardRef(({ onClick, ...props }, ref) => {
1306
+ var DialogTrigger = React9.forwardRef(({ onClick, ...props }, ref) => {
1351
1307
  const { onOpenChange } = useDialog();
1352
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1308
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1353
1309
  Button,
1354
1310
  {
1355
1311
  ref,
@@ -1367,11 +1323,11 @@ DialogTrigger.displayName = "DialogTrigger";
1367
1323
  var DialogPortal = ({ children }) => {
1368
1324
  const { open } = useDialog();
1369
1325
  if (!open) return null;
1370
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_jsx_runtime10.Fragment, { children });
1326
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_jsx_runtime9.Fragment, { children });
1371
1327
  };
1372
- var DialogClose = React10.forwardRef(({ onClick, ...props }, ref) => {
1328
+ var DialogClose = React9.forwardRef(({ onClick, ...props }, ref) => {
1373
1329
  const { onOpenChange } = useDialog();
1374
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1330
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1375
1331
  Button,
1376
1332
  {
1377
1333
  ref,
@@ -1386,9 +1342,9 @@ var DialogClose = React10.forwardRef(({ onClick, ...props }, ref) => {
1386
1342
  );
1387
1343
  });
1388
1344
  DialogClose.displayName = "DialogClose";
1389
- var DialogOverlay = React10.forwardRef(({ className, onClick, closeOnClick = true, ...props }, ref) => {
1345
+ var DialogOverlay = React9.forwardRef(({ className, onClick, closeOnClick = true, ...props }, ref) => {
1390
1346
  const { onOpenChange } = useDialog();
1391
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1347
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1392
1348
  "div",
1393
1349
  {
1394
1350
  ref,
@@ -1405,9 +1361,10 @@ var DialogOverlay = React10.forwardRef(({ className, onClick, closeOnClick = tru
1405
1361
  );
1406
1362
  });
1407
1363
  DialogOverlay.displayName = "DialogOverlay";
1408
- var DialogContent = React10.forwardRef(({ className, children, showCloseButton = true, closeOnEscape = true, closeOnOverlayClick = true, ...props }, ref) => {
1409
- const { onOpenChange } = useDialog();
1410
- React10.useEffect(() => {
1364
+ var DialogContent = React9.forwardRef(({ className, children, showCloseButton = true, closeOnEscape = true, closeOnOverlayClick = true, ...props }, ref) => {
1365
+ const { onOpenChange, titleId, descriptionId } = useDialog();
1366
+ const { t } = (0, import_react_i18next2.useTranslation)("translations");
1367
+ React9.useEffect(() => {
1411
1368
  if (!closeOnEscape) return;
1412
1369
  const handleEscape = (e) => {
1413
1370
  if (e.key === "Escape") {
@@ -1417,12 +1374,16 @@ var DialogContent = React10.forwardRef(({ className, children, showCloseButton =
1417
1374
  document.addEventListener("keydown", handleEscape);
1418
1375
  return () => document.removeEventListener("keydown", handleEscape);
1419
1376
  }, [onOpenChange, closeOnEscape]);
1420
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(DialogPortal, { children: [
1421
- /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DialogOverlay, { closeOnClick: closeOnOverlayClick }),
1422
- /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
1377
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(DialogPortal, { children: [
1378
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(DialogOverlay, { closeOnClick: closeOnOverlayClick }),
1379
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
1423
1380
  "div",
1424
1381
  {
1425
1382
  ref,
1383
+ role: "dialog",
1384
+ "aria-modal": "true",
1385
+ "aria-labelledby": titleId,
1386
+ "aria-describedby": descriptionId,
1426
1387
  className: cn(
1427
1388
  "fixed left-[50%] top-[50%] z-[var(--zindex-modal)] grid w-full max-w-6xl translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 animate-in fade-in-0 zoom-in-95 rounded-lg",
1428
1389
  className
@@ -1431,14 +1392,15 @@ var DialogContent = React10.forwardRef(({ className, children, showCloseButton =
1431
1392
  ...props,
1432
1393
  children: [
1433
1394
  children,
1434
- showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1395
+ showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1435
1396
  ButtonIcon,
1436
1397
  {
1437
1398
  type: "button",
1438
1399
  name: "icon-neo-close",
1439
1400
  variant: "modalClose",
1440
1401
  className: "absolute right-4 top-4",
1441
- onClick: () => onOpenChange(false)
1402
+ onClick: () => onOpenChange(false),
1403
+ tooltipText: t("ActionNames.close")
1442
1404
  }
1443
1405
  )
1444
1406
  ]
@@ -1450,7 +1412,7 @@ DialogContent.displayName = "DialogContent";
1450
1412
  var DialogHeader = ({
1451
1413
  className,
1452
1414
  ...props
1453
- }) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1415
+ }) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1454
1416
  "div",
1455
1417
  {
1456
1418
  className: cn(
@@ -1464,7 +1426,7 @@ DialogHeader.displayName = "DialogHeader";
1464
1426
  var DialogFooter = ({
1465
1427
  className,
1466
1428
  ...props
1467
- }) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1429
+ }) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1468
1430
  "div",
1469
1431
  {
1470
1432
  className: cn(
@@ -1475,52 +1437,72 @@ var DialogFooter = ({
1475
1437
  }
1476
1438
  );
1477
1439
  DialogFooter.displayName = "DialogFooter";
1478
- var DialogTitle = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1479
- "h2",
1480
- {
1481
- ref,
1482
- className: cn(
1483
- "text-heading font-semibold leading-none tracking-tight",
1484
- className
1485
- ),
1486
- ...props
1487
- }
1488
- ));
1440
+ var DialogTitle = React9.forwardRef(({ className, id, ...props }, ref) => {
1441
+ const generatedId = React9.useId();
1442
+ const resolvedId = id ?? generatedId;
1443
+ const { setTitleId } = useDialog();
1444
+ React9.useEffect(() => {
1445
+ setTitleId(resolvedId);
1446
+ return () => setTitleId(void 0);
1447
+ }, [resolvedId, setTitleId]);
1448
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1449
+ "h2",
1450
+ {
1451
+ ref,
1452
+ id: resolvedId,
1453
+ className: cn(
1454
+ "text-heading font-semibold leading-none tracking-tight",
1455
+ className
1456
+ ),
1457
+ ...props
1458
+ }
1459
+ );
1460
+ });
1489
1461
  DialogTitle.displayName = "DialogTitle";
1490
- var DialogDescription = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1491
- "p",
1492
- {
1493
- ref,
1494
- className: cn("text-body text-muted-foreground", className),
1495
- ...props
1496
- }
1497
- ));
1462
+ var DialogDescription = React9.forwardRef(({ className, id, ...props }, ref) => {
1463
+ const generatedId = React9.useId();
1464
+ const resolvedId = id ?? generatedId;
1465
+ const { setDescriptionId } = useDialog();
1466
+ React9.useEffect(() => {
1467
+ setDescriptionId(resolvedId);
1468
+ return () => setDescriptionId(void 0);
1469
+ }, [resolvedId, setDescriptionId]);
1470
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1471
+ "p",
1472
+ {
1473
+ ref,
1474
+ id: resolvedId,
1475
+ className: cn("text-body text-muted-foreground", className),
1476
+ ...props
1477
+ }
1478
+ );
1479
+ });
1498
1480
  DialogDescription.displayName = "DialogDescription";
1499
1481
 
1500
1482
  // src/components/ui/dropdown-menu.tsx
1501
- var React11 = __toESM(require("react"), 1);
1483
+ var React10 = __toESM(require("react"), 1);
1502
1484
  var import_react_dom2 = require("react-dom");
1503
1485
  var import_lucide_react = require("lucide-react");
1504
- var import_jsx_runtime11 = require("react/jsx-runtime");
1505
- var DropdownMenuContext = React11.createContext(void 0);
1486
+ var import_jsx_runtime10 = require("react/jsx-runtime");
1487
+ var DropdownMenuContext = React10.createContext(void 0);
1506
1488
  function useDropdownMenu() {
1507
- const context = React11.useContext(DropdownMenuContext);
1489
+ const context = React10.useContext(DropdownMenuContext);
1508
1490
  if (!context) {
1509
1491
  throw new Error("DropdownMenu components must be used within DropdownMenu");
1510
1492
  }
1511
1493
  return context;
1512
1494
  }
1513
1495
  var DropdownMenu = ({ open: controlledOpen, onOpenChange, children }) => {
1514
- const [uncontrolledOpen, setUncontrolledOpen] = React11.useState(false);
1496
+ const [uncontrolledOpen, setUncontrolledOpen] = React10.useState(false);
1515
1497
  const open = controlledOpen !== void 0 ? controlledOpen : uncontrolledOpen;
1516
1498
  const setOpen = onOpenChange || setUncontrolledOpen;
1517
- const triggerRef = React11.useRef(null);
1518
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DropdownMenuContext.Provider, { value: { open, setOpen, triggerRef }, children });
1499
+ const triggerRef = React10.useRef(null);
1500
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DropdownMenuContext.Provider, { value: { open, setOpen, triggerRef }, children });
1519
1501
  };
1520
- var DropdownMenuTrigger = React11.forwardRef(({ onClick, children, asChild, ...props }, ref) => {
1502
+ var DropdownMenuTrigger = React10.forwardRef(({ onClick, children, asChild, ...props }, ref) => {
1521
1503
  const { setOpen, open, triggerRef } = useDropdownMenu();
1522
- if (asChild && React11.isValidElement(children)) {
1523
- return React11.cloneElement(children, {
1504
+ if (asChild && React10.isValidElement(children)) {
1505
+ return React10.cloneElement(children, {
1524
1506
  ref: (node) => {
1525
1507
  triggerRef.current = node;
1526
1508
  if (ref) {
@@ -1539,7 +1521,7 @@ var DropdownMenuTrigger = React11.forwardRef(({ onClick, children, asChild, ...p
1539
1521
  }
1540
1522
  });
1541
1523
  }
1542
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1524
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1543
1525
  Button,
1544
1526
  {
1545
1527
  ref: (node) => {
@@ -1564,19 +1546,19 @@ var DropdownMenuTrigger = React11.forwardRef(({ onClick, children, asChild, ...p
1564
1546
  });
1565
1547
  DropdownMenuTrigger.displayName = "DropdownMenuTrigger";
1566
1548
  var DropdownMenuGroup = ({ children }) => {
1567
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { role: "group", children });
1549
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { role: "group", children });
1568
1550
  };
1569
1551
  var DropdownMenuPortal = ({ children }) => {
1570
1552
  const portalRoot = document.getElementById("fpneo") || document.body;
1571
1553
  return (0, import_react_dom2.createPortal)(children, portalRoot);
1572
1554
  };
1573
1555
  var DropdownMenuSub = ({ children }) => {
1574
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_jsx_runtime11.Fragment, { children });
1556
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_jsx_runtime10.Fragment, { children });
1575
1557
  };
1576
1558
  var DropdownMenuRadioGroup = ({ children }) => {
1577
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { role: "radiogroup", children });
1559
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { role: "radiogroup", children });
1578
1560
  };
1579
- var DropdownMenuSubTrigger = React11.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
1561
+ var DropdownMenuSubTrigger = React10.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
1580
1562
  "div",
1581
1563
  {
1582
1564
  ref,
@@ -1588,12 +1570,12 @@ var DropdownMenuSubTrigger = React11.forwardRef(({ className, inset, children, .
1588
1570
  ...props,
1589
1571
  children: [
1590
1572
  children,
1591
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react.ChevronRight, { className: "ml-auto h-4 w-4" })
1573
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react.ChevronRight, { className: "ml-auto h-4 w-4" })
1592
1574
  ]
1593
1575
  }
1594
1576
  ));
1595
1577
  DropdownMenuSubTrigger.displayName = "DropdownMenuSubTrigger";
1596
- var DropdownMenuSubContent = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1578
+ var DropdownMenuSubContent = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1597
1579
  "div",
1598
1580
  {
1599
1581
  ref,
@@ -1605,13 +1587,13 @@ var DropdownMenuSubContent = React11.forwardRef(({ className, ...props }, ref) =
1605
1587
  }
1606
1588
  ));
1607
1589
  DropdownMenuSubContent.displayName = "DropdownMenuSubContent";
1608
- var DropdownMenuContent = React11.forwardRef(({ className, sideOffset = 4, align = "end", ...props }, ref) => {
1590
+ var DropdownMenuContent = React10.forwardRef(({ className, sideOffset = 4, align = "end", ...props }, ref) => {
1609
1591
  const { open, setOpen, triggerRef } = useDropdownMenu();
1610
- const contentRef = React11.useRef(null);
1611
- const [position, setPosition] = React11.useState({ top: 0, left: 0 });
1612
- const [isPositioned, setIsPositioned] = React11.useState(false);
1613
- React11.useImperativeHandle(ref, () => contentRef.current);
1614
- React11.useEffect(() => {
1592
+ const contentRef = React10.useRef(null);
1593
+ const [position, setPosition] = React10.useState({ top: 0, left: 0 });
1594
+ const [isPositioned, setIsPositioned] = React10.useState(false);
1595
+ React10.useImperativeHandle(ref, () => contentRef.current);
1596
+ React10.useEffect(() => {
1615
1597
  if (!open || !triggerRef.current) {
1616
1598
  setIsPositioned(false);
1617
1599
  return;
@@ -1666,7 +1648,7 @@ var DropdownMenuContent = React11.forwardRef(({ className, sideOffset = 4, align
1666
1648
  window.removeEventListener("resize", updatePosition);
1667
1649
  };
1668
1650
  }, [open, sideOffset, align, triggerRef]);
1669
- React11.useEffect(() => {
1651
+ React10.useEffect(() => {
1670
1652
  if (!open) return;
1671
1653
  const handleClickOutside = (e) => {
1672
1654
  if (contentRef.current && !contentRef.current.contains(e.target) && triggerRef.current && !triggerRef.current.contains(e.target)) {
@@ -1686,7 +1668,7 @@ var DropdownMenuContent = React11.forwardRef(({ className, sideOffset = 4, align
1686
1668
  };
1687
1669
  }, [open, setOpen, triggerRef]);
1688
1670
  if (!open) return null;
1689
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DropdownMenuPortal, { children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1671
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(DropdownMenuPortal, { children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1690
1672
  "div",
1691
1673
  {
1692
1674
  ref: contentRef,
@@ -1704,9 +1686,9 @@ var DropdownMenuContent = React11.forwardRef(({ className, sideOffset = 4, align
1704
1686
  ) });
1705
1687
  });
1706
1688
  DropdownMenuContent.displayName = "DropdownMenuContent";
1707
- var DropdownMenuItem = React11.forwardRef(({ className, inset, onClick, ...props }, ref) => {
1689
+ var DropdownMenuItem = React10.forwardRef(({ className, inset, onClick, ...props }, ref) => {
1708
1690
  const { setOpen } = useDropdownMenu();
1709
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1691
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1710
1692
  "div",
1711
1693
  {
1712
1694
  ref,
@@ -1724,7 +1706,7 @@ var DropdownMenuItem = React11.forwardRef(({ className, inset, onClick, ...props
1724
1706
  );
1725
1707
  });
1726
1708
  DropdownMenuItem.displayName = "DropdownMenuItem";
1727
- var DropdownMenuCheckboxItem = React11.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
1709
+ var DropdownMenuCheckboxItem = React10.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
1728
1710
  "div",
1729
1711
  {
1730
1712
  ref,
@@ -1734,13 +1716,13 @@ var DropdownMenuCheckboxItem = React11.forwardRef(({ className, children, checke
1734
1716
  ),
1735
1717
  ...props,
1736
1718
  children: [
1737
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: checked && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react.Check, { className: "h-4 w-4" }) }),
1719
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: checked && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react.Check, { className: "h-4 w-4" }) }),
1738
1720
  children
1739
1721
  ]
1740
1722
  }
1741
1723
  ));
1742
1724
  DropdownMenuCheckboxItem.displayName = "DropdownMenuCheckboxItem";
1743
- var DropdownMenuRadioItem = React11.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
1725
+ var DropdownMenuRadioItem = React10.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
1744
1726
  "div",
1745
1727
  {
1746
1728
  ref,
@@ -1750,13 +1732,13 @@ var DropdownMenuRadioItem = React11.forwardRef(({ className, children, ...props
1750
1732
  ),
1751
1733
  ...props,
1752
1734
  children: [
1753
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react.Circle, { className: "h-2 w-2 fill-current" }) }),
1735
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_lucide_react.Circle, { className: "h-2 w-2 fill-current" }) }),
1754
1736
  children
1755
1737
  ]
1756
1738
  }
1757
1739
  ));
1758
1740
  DropdownMenuRadioItem.displayName = "DropdownMenuRadioItem";
1759
- var DropdownMenuLabel = React11.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1741
+ var DropdownMenuLabel = React10.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1760
1742
  "div",
1761
1743
  {
1762
1744
  ref,
@@ -1769,7 +1751,7 @@ var DropdownMenuLabel = React11.forwardRef(({ className, inset, ...props }, ref)
1769
1751
  }
1770
1752
  ));
1771
1753
  DropdownMenuLabel.displayName = "DropdownMenuLabel";
1772
- var DropdownMenuSeparator = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1754
+ var DropdownMenuSeparator = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1773
1755
  "div",
1774
1756
  {
1775
1757
  ref,
@@ -1782,7 +1764,7 @@ var DropdownMenuShortcut = ({
1782
1764
  className,
1783
1765
  ...props
1784
1766
  }) => {
1785
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1767
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1786
1768
  "span",
1787
1769
  {
1788
1770
  className: cn("ml-auto text-label tracking-widest opacity-60", className),
@@ -1796,9 +1778,9 @@ DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
1796
1778
  var import_react2 = require("react");
1797
1779
 
1798
1780
  // src/components/ui/input.tsx
1799
- var React12 = __toESM(require("react"), 1);
1781
+ var React11 = __toESM(require("react"), 1);
1800
1782
  var import_formik = require("formik");
1801
- var import_jsx_runtime12 = require("react/jsx-runtime");
1783
+ var import_jsx_runtime11 = require("react/jsx-runtime");
1802
1784
  var baseClasses = [
1803
1785
  "flex h-[2.571rem] w-full items-center rounded-[0.65rem] px-4 py-0",
1804
1786
  "text-[0.8125rem] text-[var(--color-neutral-800)]",
@@ -1815,7 +1797,7 @@ var baseClasses = [
1815
1797
  "disabled:cursor-not-allowed",
1816
1798
  "disabled:opacity-50"
1817
1799
  ].join(" ");
1818
- var Input = React12.forwardRef(
1800
+ var Input = React11.forwardRef(
1819
1801
  ({
1820
1802
  as = "input",
1821
1803
  className,
@@ -1826,10 +1808,10 @@ var Input = React12.forwardRef(
1826
1808
  innerRef,
1827
1809
  ...props
1828
1810
  }, ref) => {
1829
- const internalRef = React12.useRef(null);
1830
- React12.useImperativeHandle(ref, () => internalRef.current);
1831
- React12.useImperativeHandle(innerRef, () => internalRef.current);
1832
- React12.useEffect(() => {
1811
+ const internalRef = React11.useRef(null);
1812
+ React11.useImperativeHandle(ref, () => internalRef.current);
1813
+ React11.useImperativeHandle(innerRef, () => internalRef.current);
1814
+ React11.useEffect(() => {
1833
1815
  if (autoFocus) {
1834
1816
  internalRef.current?.focus();
1835
1817
  }
@@ -1840,7 +1822,7 @@ var Input = React12.forwardRef(
1840
1822
  className
1841
1823
  );
1842
1824
  if (as === "field") {
1843
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1825
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1844
1826
  import_formik.Field,
1845
1827
  {
1846
1828
  innerRef: internalRef,
@@ -1852,7 +1834,7 @@ var Input = React12.forwardRef(
1852
1834
  }
1853
1835
  );
1854
1836
  }
1855
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1837
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
1856
1838
  "input",
1857
1839
  {
1858
1840
  ref: internalRef,
@@ -1868,7 +1850,7 @@ var Input = React12.forwardRef(
1868
1850
  Input.displayName = "Input";
1869
1851
 
1870
1852
  // src/components/ui/expandable-search.tsx
1871
- var import_jsx_runtime13 = require("react/jsx-runtime");
1853
+ var import_jsx_runtime12 = require("react/jsx-runtime");
1872
1854
  var ExpandableSearch = ({ onSearch, placeholder = "Search...", className = "" }) => {
1873
1855
  const [isExpanded, setIsExpanded] = (0, import_react2.useState)(false);
1874
1856
  const [searchValue, setSearchValue] = (0, import_react2.useState)("");
@@ -1897,9 +1879,9 @@ var ExpandableSearch = ({ onSearch, placeholder = "Search...", className = "" })
1897
1879
  inputRef.current.focus();
1898
1880
  }
1899
1881
  };
1900
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: `flex items-center ${className}`, children: isExpanded ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "flex items-center gap-2 transition-all duration-300 ease-in-out", children: [
1901
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { className: "relative flex justify-center items-center", children: [
1902
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1882
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { className: `flex items-center ${className}`, children: isExpanded ? /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "flex items-center gap-2 transition-all duration-300 ease-in-out", children: [
1883
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { className: "relative flex justify-center items-center", children: [
1884
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1903
1885
  Input,
1904
1886
  {
1905
1887
  ref: inputRef,
@@ -1910,25 +1892,25 @@ var ExpandableSearch = ({ onSearch, placeholder = "Search...", className = "" })
1910
1892
  className: "formfield__search"
1911
1893
  }
1912
1894
  ),
1913
- searchValue && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1895
+ searchValue && /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1914
1896
  Button,
1915
1897
  {
1916
1898
  onClick: handleClear,
1917
1899
  variant: "ghost",
1918
1900
  size: "icon",
1919
1901
  className: "absolute right-3 top-1/2 -translate-y-1/2 text-neutral-600 hover:text-[var(--color-ext-4b5563)] transition-colors",
1920
- children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("i", { className: "icon-neo-close text-[0.875rem]" })
1902
+ children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("i", { className: "icon-neo-close text-[0.875rem]" })
1921
1903
  }
1922
1904
  )
1923
1905
  ] }),
1924
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Button, { variant: "ghost", size: "icon", onClick: handleToggle, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("i", { className: "icon-neo-close text-[0.875rem]" }) })
1925
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Button, { variant: "ghost", size: "icon", onClick: handleToggle, className: "header__round-btn", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("i", { className: "icon-neo-search" }) }) });
1906
+ /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Button, { variant: "ghost", size: "icon", onClick: handleToggle, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("i", { className: "icon-neo-close text-[0.875rem]" }) })
1907
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Button, { variant: "ghost", size: "icon", onClick: handleToggle, className: "header__round-btn", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("i", { className: "icon-neo-search" }) }) });
1926
1908
  };
1927
1909
 
1928
1910
  // src/components/ui/file-input.tsx
1929
- var React14 = __toESM(require("react"), 1);
1930
- var import_jsx_runtime14 = require("react/jsx-runtime");
1931
- var FileInput = React14.forwardRef(
1911
+ var React13 = __toESM(require("react"), 1);
1912
+ var import_jsx_runtime13 = require("react/jsx-runtime");
1913
+ var FileInput = React13.forwardRef(
1932
1914
  ({
1933
1915
  id,
1934
1916
  className,
@@ -1940,10 +1922,10 @@ var FileInput = React14.forwardRef(
1940
1922
  disabled,
1941
1923
  ...props
1942
1924
  }, ref) => {
1943
- const generatedId = React14.useId();
1925
+ const generatedId = React13.useId();
1944
1926
  const inputId = id ?? generatedId;
1945
- const content = /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_jsx_runtime14.Fragment, { children: [
1946
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1927
+ const content = /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
1928
+ /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1947
1929
  "input",
1948
1930
  {
1949
1931
  ref,
@@ -1954,17 +1936,18 @@ var FileInput = React14.forwardRef(
1954
1936
  ...props
1955
1937
  }
1956
1938
  ),
1957
- children && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("label", { htmlFor: inputId, className: labelClassName, style: labelStyle, ...labelProps, children })
1939
+ children && /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("label", { htmlFor: inputId, className: labelClassName, style: labelStyle, ...labelProps, children })
1958
1940
  ] });
1959
- return wrapperClassName ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: wrapperClassName, children: content }) : content;
1941
+ return wrapperClassName ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { className: wrapperClassName, children: content }) : content;
1960
1942
  }
1961
1943
  );
1962
1944
  FileInput.displayName = "FileInput";
1963
1945
 
1964
1946
  // src/components/ui/form-field.tsx
1965
- var import_react3 = require("react");
1947
+ var import_react3 = __toESM(require("react"), 1);
1966
1948
  var import_formik2 = require("formik");
1967
- var import_jsx_runtime15 = require("react/jsx-runtime");
1949
+ var import_jsx_runtime14 = require("react/jsx-runtime");
1950
+ var LABELABLE_TAGS = /* @__PURE__ */ new Set(["input", "select", "textarea"]);
1968
1951
  var FormField = ({
1969
1952
  label,
1970
1953
  required,
@@ -1972,19 +1955,87 @@ var FormField = ({
1972
1955
  error,
1973
1956
  hint,
1974
1957
  children,
1975
- className
1976
- }) => /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: cn("form__field", className), children: [
1977
- label && /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("label", { className: "formfield__label", children: [
1978
- label,
1979
- required && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "required-field", children: "*" })
1980
- ] }),
1981
- children,
1982
- hint && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "text-[0.75rem] text-neutral-600 mt-1", children: hint }),
1983
- errorName && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_formik2.ErrorMessage, { name: errorName, component: "p", className: "form-error" }),
1984
- !errorName && error && /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("p", { className: "form-error", children: error })
1985
- ] });
1958
+ className,
1959
+ id
1960
+ }) => {
1961
+ const generatedId = import_react3.default.useId();
1962
+ const fieldId = id ?? generatedId;
1963
+ let renderedChildren = children;
1964
+ if (label && import_react3.default.isValidElement(children) && (children.type === import_formik2.Field || typeof children.type === "string" && LABELABLE_TAGS.has(children.type)) && !children.props.id) {
1965
+ renderedChildren = import_react3.default.cloneElement(children, { id: fieldId });
1966
+ }
1967
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: cn("form__field", className), children: [
1968
+ label && /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("label", { className: "formfield__label", htmlFor: fieldId, children: [
1969
+ label,
1970
+ required && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "required-field", children: "*" })
1971
+ ] }),
1972
+ renderedChildren,
1973
+ hint && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "text-[0.75rem] text-neutral-600 mt-1", children: hint }),
1974
+ errorName && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_formik2.ErrorMessage, { name: errorName, component: "p", className: "form-error" }),
1975
+ !errorName && error && /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("p", { className: "form-error", children: error })
1976
+ ] });
1977
+ };
1986
1978
  var form_field_default = FormField;
1987
1979
 
1980
+ // src/components/ui/icon.tsx
1981
+ var React15 = __toESM(require("react"), 1);
1982
+ var import_class_variance_authority5 = require("class-variance-authority");
1983
+ var import_jsx_runtime15 = require("react/jsx-runtime");
1984
+ var Icon = React15.forwardRef(
1985
+ ({
1986
+ name,
1987
+ variant,
1988
+ size,
1989
+ color: color6 = "primary",
1990
+ hoverColor,
1991
+ tooltipText,
1992
+ showTooltip = false,
1993
+ disabled,
1994
+ className,
1995
+ onClick,
1996
+ style,
1997
+ ...props
1998
+ }, ref) => {
1999
+ const colorProps = getIconColorProps(color6, hoverColor);
2000
+ const icon = /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
2001
+ "i",
2002
+ {
2003
+ ref,
2004
+ className: cn(
2005
+ `${name}`,
2006
+ iconVariants({ variant, size }),
2007
+ colorProps.className,
2008
+ onClick && !disabled && "cursor-pointer",
2009
+ className
2010
+ ),
2011
+ onClick,
2012
+ style: { ...colorProps.style, ...style },
2013
+ role: onClick ? "button" : void 0,
2014
+ tabIndex: onClick ? 0 : void 0,
2015
+ "aria-hidden": onClick ? "true" : "false",
2016
+ onKeyDown: (e) => {
2017
+ if (!onClick) return;
2018
+ if (e.key === "Enter" || e.key === " ") {
2019
+ e.preventDefault();
2020
+ onClick(
2021
+ e
2022
+ );
2023
+ }
2024
+ },
2025
+ ...props
2026
+ }
2027
+ );
2028
+ if (!showTooltip) {
2029
+ return icon;
2030
+ }
2031
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(Tooltip, { children: [
2032
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(TooltipTrigger, { asChild: true, children: icon }),
2033
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(TooltipContent, { children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("small", { children: tooltipText || name }) })
2034
+ ] });
2035
+ }
2036
+ );
2037
+ Icon.displayName = "Icon";
2038
+
1988
2039
  // src/components/ui/list.tsx
1989
2040
  var React16 = __toESM(require("react"), 1);
1990
2041
  var import_jsx_runtime16 = require("react/jsx-runtime");
@@ -2283,6 +2334,7 @@ var ScrollArea = React20.forwardRef(({ className, children, ...props }, ref) =>
2283
2334
  "div",
2284
2335
  {
2285
2336
  ref,
2337
+ tabIndex: 0,
2286
2338
  className: cn(
2287
2339
  "relative overflow-y-auto overflow-x-hidden",
2288
2340
  "[&::-webkit-scrollbar]:w-[0.375rem]",
@@ -2456,8 +2508,12 @@ var Tab = React22.forwardRef(
2456
2508
  variant,
2457
2509
  size,
2458
2510
  disabled,
2459
- onClick
2511
+ onClick,
2512
+ id,
2513
+ panelId
2460
2514
  }, ref) => {
2515
+ const generatedId = React22.useId();
2516
+ const resolvedId = id ?? generatedId;
2461
2517
  const handleKeyDown = (e) => {
2462
2518
  if (disabled) return;
2463
2519
  if (e.key === "Enter" || e.key === " ") {
@@ -2469,9 +2525,11 @@ var Tab = React22.forwardRef(
2469
2525
  "div",
2470
2526
  {
2471
2527
  ref,
2528
+ id: resolvedId,
2472
2529
  role: "tab",
2473
2530
  "aria-selected": active,
2474
2531
  "aria-disabled": disabled,
2532
+ "aria-controls": panelId,
2475
2533
  tabIndex: disabled ? -1 : active ? 0 : -1,
2476
2534
  onClick: !disabled ? onClick : void 0,
2477
2535
  onKeyDown: handleKeyDown,
@@ -2843,7 +2901,8 @@ var TimePicker = ({
2843
2901
  },
2844
2902
  name: "icon-neo-close",
2845
2903
  color: "muted",
2846
- size: "xs"
2904
+ size: "xs",
2905
+ tooltipText: "Clear time"
2847
2906
  }
2848
2907
  ),
2849
2908
  /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("i", { className: "icon-neo-time-four shared-time-picker__icon" })
@@ -3011,6 +3070,7 @@ var TruncatedTextByWidth = ({ text, className }) => {
3011
3070
 
3012
3071
  // src/components/ui/view-toggle.tsx
3013
3072
  var React28 = __toESM(require("react"), 1);
3073
+ var import_react_i18next3 = require("react-i18next");
3014
3074
  var import_jsx_runtime28 = require("react/jsx-runtime");
3015
3075
  var VIEW_MODE_KEY = "fp_view_mode";
3016
3076
  var useViewMode = () => {
@@ -3026,6 +3086,8 @@ var useViewMode = () => {
3026
3086
  return [viewMode, setAndPersist];
3027
3087
  };
3028
3088
  var ViewToggle = ({ viewMode = "grid" /* GRID */, onViewModeChange }) => {
3089
+ const translationKey = getTranslationKey();
3090
+ const { t } = (0, import_react_i18next3.useTranslation)(translationKey);
3029
3091
  return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { className: "view-toggle", children: [
3030
3092
  /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(Tooltip, { children: [
3031
3093
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
@@ -3036,10 +3098,11 @@ var ViewToggle = ({ viewMode = "grid" /* GRID */, onViewModeChange }) => {
3036
3098
  className: `view-toggle__btn${viewMode === "grid" /* GRID */ ? " view-toggle__btn--active" : ""}`,
3037
3099
  variant: "ghost",
3038
3100
  size: "icon",
3039
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("i", { className: "icon-neo-grid" })
3101
+ "aria-label": t("ActionNames.gridView") || "Grid view",
3102
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("i", { className: "icon-neo-grid", "aria-hidden": "true" })
3040
3103
  }
3041
3104
  ) }),
3042
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(TooltipContent, { children: "Grid view" })
3105
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(TooltipContent, { children: t("ActionNames.gridView") || "Grid view" })
3043
3106
  ] }),
3044
3107
  /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(Tooltip, { children: [
3045
3108
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
@@ -3050,10 +3113,11 @@ var ViewToggle = ({ viewMode = "grid" /* GRID */, onViewModeChange }) => {
3050
3113
  className: `view-toggle__btn${viewMode === "list" /* LIST */ ? " view-toggle__btn--active" : ""}`,
3051
3114
  variant: "ghost",
3052
3115
  size: "icon",
3053
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("i", { className: "icon-neo-list" })
3116
+ "aria-label": t("ActionNames.listView") || "List view",
3117
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("i", { className: "icon-neo-list", "aria-hidden": "true" })
3054
3118
  }
3055
3119
  ) }),
3056
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(TooltipContent, { children: "List view" })
3120
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(TooltipContent, { children: t("ActionNames.listView") || "List view" })
3057
3121
  ] })
3058
3122
  ] });
3059
3123
  };