@vectramindnpm/unified-design-system 0.2.3 → 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.js CHANGED
@@ -620,7 +620,6 @@ TooltipContent.displayName = "TooltipContent";
620
620
  // src/components/ui/button.tsx
621
621
  import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
622
622
  var { color: color3 } = semanticTokens_default;
623
- var DEFAULT_VARIANT = "ghost";
624
623
  var buttonVariants = cva2(
625
624
  "",
626
625
  {
@@ -660,7 +659,7 @@ var buttonVariants = cva2(
660
659
  }
661
660
  },
662
661
  defaultVariants: {
663
- variant: DEFAULT_VARIANT,
662
+ variant: "primary",
664
663
  size: "default",
665
664
  shape: "default"
666
665
  }
@@ -719,7 +718,7 @@ var pillDisabled = "opacity-50 cursor-not-allowed";
719
718
  var selectedGradient = "border border-interactive-brand bg-gradient-to-r from-[var(--color-button-selected-gradient-start)] via-[var(--color-button-selected-gradient-mid)] to-interactive-brand text-white font-extrabold";
720
719
  var Button = React4.forwardRef(
721
720
  ({ className, variant, size, shape, asChild = false, children, style, selected, tooltipText, ...props }, ref) => {
722
- const finalVariant = variant ?? DEFAULT_VARIANT;
721
+ const finalVariant = variant ?? "primary";
723
722
  const finalSize = size ?? "default";
724
723
  const isPill = shape === "pill";
725
724
  const isLink = finalVariant === "link";
@@ -733,7 +732,7 @@ var Button = React4.forwardRef(
733
732
  const composed = cn(
734
733
  baseClasses2,
735
734
  isPill ? "rounded-full" : "",
736
- variantClasses[colorBase],
735
+ variant ? variantClasses[colorBase] : "",
737
736
  // Link never carries the size scale's own padding/height — it reads as inline text.
738
737
  isLink ? "h-auto p-0" : isPill ? pillSizeClasses[finalSize] : sizeClasses[finalSize],
739
738
  isPill ? selected ? pillSelected : pillUnselected : selected ? selectedGradient : "",
@@ -744,15 +743,19 @@ var Button = React4.forwardRef(
744
743
  buttonVariants({ variant: finalVariant, size: finalSize, shape, className })
745
744
  );
746
745
  const mergedStyle = {
747
- ...variantStyles[colorBase],
746
+ ...variant ? variantStyles[colorBase] : void 0,
748
747
  ...isPill && selected ? { ["--pill-selected-bg"]: `${color3.text.blue}24` } : void 0,
749
748
  ...style
750
749
  };
750
+ const accessibleProps = {
751
+ "aria-label": props["aria-label"] ?? tooltipText,
752
+ ...props
753
+ };
751
754
  const element = asChild && React4.isValidElement(children) ? React4.cloneElement(children, {
752
755
  className: cn(composed, children.props?.className),
753
756
  ref,
754
- ...props
755
- }) : /* @__PURE__ */ jsx4("button", { className: cn(composed), ref, style: mergedStyle, ...props, children });
757
+ ...accessibleProps
758
+ }) : /* @__PURE__ */ jsx4("button", { className: cn(composed), ref, style: mergedStyle, ...accessibleProps, children });
756
759
  if (!tooltipText) {
757
760
  return element;
758
761
  }
@@ -875,13 +878,14 @@ var ButtonIcon = React5.forwardRef(
875
878
  name,
876
879
  variant,
877
880
  size,
878
- color: color6 = "primary",
881
+ color: color6,
879
882
  hoverColor,
880
883
  bgColor,
881
884
  bgHoverColor,
882
885
  actionColor,
883
886
  tooltipText,
884
887
  showTooltip = false,
888
+ label,
885
889
  disabled,
886
890
  className,
887
891
  type = "button",
@@ -892,12 +896,13 @@ var ButtonIcon = React5.forwardRef(
892
896
  }, ref) => {
893
897
  const isModalClose = variant === "modalClose";
894
898
  const isRefresh = variant === "refresh";
899
+ const isFilled = variant === "filled";
895
900
  const resolvedBg = bgColor ? { base: bgColor, hover: bgHoverColor } : actionColor ? actionColorTokens[actionColor] : void 0;
896
901
  const effectiveSize = isRefresh ? "sm" : size;
897
- const effectiveColor = isRefresh ? "primary" : color6;
902
+ const effectiveColor = isRefresh ? "primary" : color6 ?? (isFilled ? "white" : "primary");
898
903
  const effectiveHoverColor = isRefresh ? "primary" : isModalClose ? "danger" : hoverColor;
899
904
  const effectiveShowTooltip = isRefresh ? true : showTooltip;
900
- const effectiveTooltipText = tooltipText;
905
+ const effectiveTooltipText = tooltipText ?? label ?? props["aria-label"];
901
906
  const colorProps = getIconColorProps(effectiveColor, effectiveHoverColor, resolvedBg);
902
907
  const icon = /* @__PURE__ */ jsx5(
903
908
  "button",
@@ -1136,77 +1141,24 @@ Checkbox.displayName = "Checkbox";
1136
1141
 
1137
1142
  // src/components/ui/delete-action.tsx
1138
1143
  import "react";
1144
+ import { useTranslation } from "react-i18next";
1139
1145
 
1140
- // src/components/ui/icon.tsx
1141
- import * as React8 from "react";
1142
- import "class-variance-authority";
1143
- import { jsx as jsx8, jsxs as jsxs5 } from "react/jsx-runtime";
1144
- var Icon = React8.forwardRef(
1145
- ({
1146
- name,
1147
- variant,
1148
- size,
1149
- color: color6 = "primary",
1150
- hoverColor,
1151
- tooltipText,
1152
- showTooltip = false,
1153
- disabled,
1154
- className,
1155
- onClick,
1156
- style,
1157
- ...props
1158
- }, ref) => {
1159
- const colorProps = getIconColorProps(color6, hoverColor);
1160
- const icon = /* @__PURE__ */ jsx8(
1161
- "i",
1162
- {
1163
- ref,
1164
- className: cn(
1165
- `${name}`,
1166
- iconVariants({ variant, size }),
1167
- colorProps.className,
1168
- onClick && !disabled && "cursor-pointer",
1169
- className
1170
- ),
1171
- onClick,
1172
- style: { ...colorProps.style, ...style },
1173
- role: onClick ? "button" : void 0,
1174
- tabIndex: onClick ? 0 : void 0,
1175
- "aria-label": tooltipText || name,
1176
- onKeyDown: (e) => {
1177
- if (!onClick) return;
1178
- if (e.key === "Enter" || e.key === " ") {
1179
- e.preventDefault();
1180
- onClick(
1181
- e
1182
- );
1183
- }
1184
- },
1185
- ...props
1186
- }
1187
- );
1188
- if (!showTooltip) {
1189
- return icon;
1190
- }
1191
- return /* @__PURE__ */ jsxs5(Tooltip, { children: [
1192
- /* @__PURE__ */ jsx8(TooltipTrigger, { asChild: true, children: icon }),
1193
- /* @__PURE__ */ jsx8(TooltipContent, { children: /* @__PURE__ */ jsx8("small", { children: tooltipText || name }) })
1194
- ] });
1195
- }
1196
- );
1197
- Icon.displayName = "Icon";
1146
+ // src/helpers/helpersIndex.ts
1147
+ var getTranslationKey = () => "translations";
1198
1148
 
1199
1149
  // src/components/ui/delete-action.tsx
1200
- import { jsx as jsx9 } from "react/jsx-runtime";
1150
+ import { jsx as jsx8 } from "react/jsx-runtime";
1201
1151
  var DeleteAction = ({ onClick, tooltipText, showTooltip = true, className }) => {
1202
- return /* @__PURE__ */ jsx9(
1203
- Icon,
1152
+ const translationKey = getTranslationKey();
1153
+ const { t } = useTranslation(translationKey);
1154
+ return /* @__PURE__ */ jsx8(
1155
+ ButtonIcon,
1204
1156
  {
1205
1157
  name: "icon-neo-trash",
1206
1158
  hoverColor: "danger",
1207
1159
  onClick,
1208
1160
  showTooltip,
1209
- tooltipText: tooltipText || "Delete",
1161
+ tooltipText: tooltipText || t("ActionNames.delete"),
1210
1162
  className
1211
1163
  }
1212
1164
  );
@@ -1214,25 +1166,28 @@ var DeleteAction = ({ onClick, tooltipText, showTooltip = true, className }) =>
1214
1166
  var delete_action_default = DeleteAction;
1215
1167
 
1216
1168
  // src/components/ui/dialog.tsx
1217
- import * as React10 from "react";
1218
- import { Fragment as Fragment2, jsx as jsx10, jsxs as jsxs6 } from "react/jsx-runtime";
1219
- var DialogContext = React10.createContext(void 0);
1169
+ import * as React9 from "react";
1170
+ import { useTranslation as useTranslation2 } from "react-i18next";
1171
+ import { Fragment as Fragment2, jsx as jsx9, jsxs as jsxs5 } from "react/jsx-runtime";
1172
+ var DialogContext = React9.createContext(void 0);
1220
1173
  function useDialog() {
1221
- const context = React10.useContext(DialogContext);
1174
+ const context = React9.useContext(DialogContext);
1222
1175
  if (!context) {
1223
1176
  throw new Error("Dialog components must be used within Dialog");
1224
1177
  }
1225
1178
  return context;
1226
1179
  }
1227
1180
  var Dialog = ({ open: controlledOpen, onOpenChange, children }) => {
1228
- const [uncontrolledOpen, setUncontrolledOpen] = React10.useState(false);
1181
+ const [uncontrolledOpen, setUncontrolledOpen] = React9.useState(false);
1182
+ const [titleId, setTitleId] = React9.useState(void 0);
1183
+ const [descriptionId, setDescriptionId] = React9.useState(void 0);
1229
1184
  const open = controlledOpen !== void 0 ? controlledOpen : uncontrolledOpen;
1230
1185
  const setOpen = onOpenChange || setUncontrolledOpen;
1231
- return /* @__PURE__ */ jsx10(DialogContext.Provider, { value: { open, onOpenChange: setOpen }, children });
1186
+ return /* @__PURE__ */ jsx9(DialogContext.Provider, { value: { open, onOpenChange: setOpen, titleId, descriptionId, setTitleId, setDescriptionId }, children });
1232
1187
  };
1233
- var DialogTrigger = React10.forwardRef(({ onClick, ...props }, ref) => {
1188
+ var DialogTrigger = React9.forwardRef(({ onClick, ...props }, ref) => {
1234
1189
  const { onOpenChange } = useDialog();
1235
- return /* @__PURE__ */ jsx10(
1190
+ return /* @__PURE__ */ jsx9(
1236
1191
  Button,
1237
1192
  {
1238
1193
  ref,
@@ -1250,11 +1205,11 @@ DialogTrigger.displayName = "DialogTrigger";
1250
1205
  var DialogPortal = ({ children }) => {
1251
1206
  const { open } = useDialog();
1252
1207
  if (!open) return null;
1253
- return /* @__PURE__ */ jsx10(Fragment2, { children });
1208
+ return /* @__PURE__ */ jsx9(Fragment2, { children });
1254
1209
  };
1255
- var DialogClose = React10.forwardRef(({ onClick, ...props }, ref) => {
1210
+ var DialogClose = React9.forwardRef(({ onClick, ...props }, ref) => {
1256
1211
  const { onOpenChange } = useDialog();
1257
- return /* @__PURE__ */ jsx10(
1212
+ return /* @__PURE__ */ jsx9(
1258
1213
  Button,
1259
1214
  {
1260
1215
  ref,
@@ -1269,9 +1224,9 @@ var DialogClose = React10.forwardRef(({ onClick, ...props }, ref) => {
1269
1224
  );
1270
1225
  });
1271
1226
  DialogClose.displayName = "DialogClose";
1272
- var DialogOverlay = React10.forwardRef(({ className, onClick, closeOnClick = true, ...props }, ref) => {
1227
+ var DialogOverlay = React9.forwardRef(({ className, onClick, closeOnClick = true, ...props }, ref) => {
1273
1228
  const { onOpenChange } = useDialog();
1274
- return /* @__PURE__ */ jsx10(
1229
+ return /* @__PURE__ */ jsx9(
1275
1230
  "div",
1276
1231
  {
1277
1232
  ref,
@@ -1288,9 +1243,10 @@ var DialogOverlay = React10.forwardRef(({ className, onClick, closeOnClick = tru
1288
1243
  );
1289
1244
  });
1290
1245
  DialogOverlay.displayName = "DialogOverlay";
1291
- var DialogContent = React10.forwardRef(({ className, children, showCloseButton = true, closeOnEscape = true, closeOnOverlayClick = true, ...props }, ref) => {
1292
- const { onOpenChange } = useDialog();
1293
- React10.useEffect(() => {
1246
+ var DialogContent = React9.forwardRef(({ className, children, showCloseButton = true, closeOnEscape = true, closeOnOverlayClick = true, ...props }, ref) => {
1247
+ const { onOpenChange, titleId, descriptionId } = useDialog();
1248
+ const { t } = useTranslation2("translations");
1249
+ React9.useEffect(() => {
1294
1250
  if (!closeOnEscape) return;
1295
1251
  const handleEscape = (e) => {
1296
1252
  if (e.key === "Escape") {
@@ -1300,12 +1256,16 @@ var DialogContent = React10.forwardRef(({ className, children, showCloseButton =
1300
1256
  document.addEventListener("keydown", handleEscape);
1301
1257
  return () => document.removeEventListener("keydown", handleEscape);
1302
1258
  }, [onOpenChange, closeOnEscape]);
1303
- return /* @__PURE__ */ jsxs6(DialogPortal, { children: [
1304
- /* @__PURE__ */ jsx10(DialogOverlay, { closeOnClick: closeOnOverlayClick }),
1305
- /* @__PURE__ */ jsxs6(
1259
+ return /* @__PURE__ */ jsxs5(DialogPortal, { children: [
1260
+ /* @__PURE__ */ jsx9(DialogOverlay, { closeOnClick: closeOnOverlayClick }),
1261
+ /* @__PURE__ */ jsxs5(
1306
1262
  "div",
1307
1263
  {
1308
1264
  ref,
1265
+ role: "dialog",
1266
+ "aria-modal": "true",
1267
+ "aria-labelledby": titleId,
1268
+ "aria-describedby": descriptionId,
1309
1269
  className: cn(
1310
1270
  "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",
1311
1271
  className
@@ -1314,14 +1274,15 @@ var DialogContent = React10.forwardRef(({ className, children, showCloseButton =
1314
1274
  ...props,
1315
1275
  children: [
1316
1276
  children,
1317
- showCloseButton && /* @__PURE__ */ jsx10(
1277
+ showCloseButton && /* @__PURE__ */ jsx9(
1318
1278
  ButtonIcon,
1319
1279
  {
1320
1280
  type: "button",
1321
1281
  name: "icon-neo-close",
1322
1282
  variant: "modalClose",
1323
1283
  className: "absolute right-4 top-4",
1324
- onClick: () => onOpenChange(false)
1284
+ onClick: () => onOpenChange(false),
1285
+ tooltipText: t("ActionNames.close")
1325
1286
  }
1326
1287
  )
1327
1288
  ]
@@ -1333,7 +1294,7 @@ DialogContent.displayName = "DialogContent";
1333
1294
  var DialogHeader = ({
1334
1295
  className,
1335
1296
  ...props
1336
- }) => /* @__PURE__ */ jsx10(
1297
+ }) => /* @__PURE__ */ jsx9(
1337
1298
  "div",
1338
1299
  {
1339
1300
  className: cn(
@@ -1347,7 +1308,7 @@ DialogHeader.displayName = "DialogHeader";
1347
1308
  var DialogFooter = ({
1348
1309
  className,
1349
1310
  ...props
1350
- }) => /* @__PURE__ */ jsx10(
1311
+ }) => /* @__PURE__ */ jsx9(
1351
1312
  "div",
1352
1313
  {
1353
1314
  className: cn(
@@ -1358,52 +1319,72 @@ var DialogFooter = ({
1358
1319
  }
1359
1320
  );
1360
1321
  DialogFooter.displayName = "DialogFooter";
1361
- var DialogTitle = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx10(
1362
- "h2",
1363
- {
1364
- ref,
1365
- className: cn(
1366
- "text-heading font-semibold leading-none tracking-tight",
1367
- className
1368
- ),
1369
- ...props
1370
- }
1371
- ));
1322
+ var DialogTitle = React9.forwardRef(({ className, id, ...props }, ref) => {
1323
+ const generatedId = React9.useId();
1324
+ const resolvedId = id ?? generatedId;
1325
+ const { setTitleId } = useDialog();
1326
+ React9.useEffect(() => {
1327
+ setTitleId(resolvedId);
1328
+ return () => setTitleId(void 0);
1329
+ }, [resolvedId, setTitleId]);
1330
+ return /* @__PURE__ */ jsx9(
1331
+ "h2",
1332
+ {
1333
+ ref,
1334
+ id: resolvedId,
1335
+ className: cn(
1336
+ "text-heading font-semibold leading-none tracking-tight",
1337
+ className
1338
+ ),
1339
+ ...props
1340
+ }
1341
+ );
1342
+ });
1372
1343
  DialogTitle.displayName = "DialogTitle";
1373
- var DialogDescription = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx10(
1374
- "p",
1375
- {
1376
- ref,
1377
- className: cn("text-body text-muted-foreground", className),
1378
- ...props
1379
- }
1380
- ));
1344
+ var DialogDescription = React9.forwardRef(({ className, id, ...props }, ref) => {
1345
+ const generatedId = React9.useId();
1346
+ const resolvedId = id ?? generatedId;
1347
+ const { setDescriptionId } = useDialog();
1348
+ React9.useEffect(() => {
1349
+ setDescriptionId(resolvedId);
1350
+ return () => setDescriptionId(void 0);
1351
+ }, [resolvedId, setDescriptionId]);
1352
+ return /* @__PURE__ */ jsx9(
1353
+ "p",
1354
+ {
1355
+ ref,
1356
+ id: resolvedId,
1357
+ className: cn("text-body text-muted-foreground", className),
1358
+ ...props
1359
+ }
1360
+ );
1361
+ });
1381
1362
  DialogDescription.displayName = "DialogDescription";
1382
1363
 
1383
1364
  // src/components/ui/dropdown-menu.tsx
1384
- import * as React11 from "react";
1365
+ import * as React10 from "react";
1385
1366
  import { createPortal as createPortal2 } from "react-dom";
1386
1367
  import { Check, ChevronRight, Circle } from "lucide-react";
1387
- import { Fragment as Fragment3, jsx as jsx11, jsxs as jsxs7 } from "react/jsx-runtime";
1388
- var DropdownMenuContext = React11.createContext(void 0);
1368
+ import { Fragment as Fragment3, jsx as jsx10, jsxs as jsxs6 } from "react/jsx-runtime";
1369
+ var DropdownMenuContext = React10.createContext(void 0);
1389
1370
  function useDropdownMenu() {
1390
- const context = React11.useContext(DropdownMenuContext);
1371
+ const context = React10.useContext(DropdownMenuContext);
1391
1372
  if (!context) {
1392
1373
  throw new Error("DropdownMenu components must be used within DropdownMenu");
1393
1374
  }
1394
1375
  return context;
1395
1376
  }
1396
1377
  var DropdownMenu = ({ open: controlledOpen, onOpenChange, children }) => {
1397
- const [uncontrolledOpen, setUncontrolledOpen] = React11.useState(false);
1378
+ const [uncontrolledOpen, setUncontrolledOpen] = React10.useState(false);
1398
1379
  const open = controlledOpen !== void 0 ? controlledOpen : uncontrolledOpen;
1399
1380
  const setOpen = onOpenChange || setUncontrolledOpen;
1400
- const triggerRef = React11.useRef(null);
1401
- return /* @__PURE__ */ jsx11(DropdownMenuContext.Provider, { value: { open, setOpen, triggerRef }, children });
1381
+ const triggerRef = React10.useRef(null);
1382
+ return /* @__PURE__ */ jsx10(DropdownMenuContext.Provider, { value: { open, setOpen, triggerRef }, children });
1402
1383
  };
1403
- var DropdownMenuTrigger = React11.forwardRef(({ onClick, children, asChild, ...props }, ref) => {
1384
+ var DropdownMenuTrigger = React10.forwardRef(({ onClick, children, asChild, ...props }, ref) => {
1404
1385
  const { setOpen, open, triggerRef } = useDropdownMenu();
1405
- if (asChild && React11.isValidElement(children)) {
1406
- return React11.cloneElement(children, {
1386
+ if (asChild && React10.isValidElement(children)) {
1387
+ return React10.cloneElement(children, {
1407
1388
  ref: (node) => {
1408
1389
  triggerRef.current = node;
1409
1390
  if (ref) {
@@ -1422,7 +1403,7 @@ var DropdownMenuTrigger = React11.forwardRef(({ onClick, children, asChild, ...p
1422
1403
  }
1423
1404
  });
1424
1405
  }
1425
- return /* @__PURE__ */ jsx11(
1406
+ return /* @__PURE__ */ jsx10(
1426
1407
  Button,
1427
1408
  {
1428
1409
  ref: (node) => {
@@ -1447,19 +1428,19 @@ var DropdownMenuTrigger = React11.forwardRef(({ onClick, children, asChild, ...p
1447
1428
  });
1448
1429
  DropdownMenuTrigger.displayName = "DropdownMenuTrigger";
1449
1430
  var DropdownMenuGroup = ({ children }) => {
1450
- return /* @__PURE__ */ jsx11("div", { role: "group", children });
1431
+ return /* @__PURE__ */ jsx10("div", { role: "group", children });
1451
1432
  };
1452
1433
  var DropdownMenuPortal = ({ children }) => {
1453
1434
  const portalRoot = document.getElementById("fpneo") || document.body;
1454
1435
  return createPortal2(children, portalRoot);
1455
1436
  };
1456
1437
  var DropdownMenuSub = ({ children }) => {
1457
- return /* @__PURE__ */ jsx11(Fragment3, { children });
1438
+ return /* @__PURE__ */ jsx10(Fragment3, { children });
1458
1439
  };
1459
1440
  var DropdownMenuRadioGroup = ({ children }) => {
1460
- return /* @__PURE__ */ jsx11("div", { role: "radiogroup", children });
1441
+ return /* @__PURE__ */ jsx10("div", { role: "radiogroup", children });
1461
1442
  };
1462
- var DropdownMenuSubTrigger = React11.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs7(
1443
+ var DropdownMenuSubTrigger = React10.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ jsxs6(
1463
1444
  "div",
1464
1445
  {
1465
1446
  ref,
@@ -1471,12 +1452,12 @@ var DropdownMenuSubTrigger = React11.forwardRef(({ className, inset, children, .
1471
1452
  ...props,
1472
1453
  children: [
1473
1454
  children,
1474
- /* @__PURE__ */ jsx11(ChevronRight, { className: "ml-auto h-4 w-4" })
1455
+ /* @__PURE__ */ jsx10(ChevronRight, { className: "ml-auto h-4 w-4" })
1475
1456
  ]
1476
1457
  }
1477
1458
  ));
1478
1459
  DropdownMenuSubTrigger.displayName = "DropdownMenuSubTrigger";
1479
- var DropdownMenuSubContent = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx11(
1460
+ var DropdownMenuSubContent = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx10(
1480
1461
  "div",
1481
1462
  {
1482
1463
  ref,
@@ -1488,13 +1469,13 @@ var DropdownMenuSubContent = React11.forwardRef(({ className, ...props }, ref) =
1488
1469
  }
1489
1470
  ));
1490
1471
  DropdownMenuSubContent.displayName = "DropdownMenuSubContent";
1491
- var DropdownMenuContent = React11.forwardRef(({ className, sideOffset = 4, align = "end", ...props }, ref) => {
1472
+ var DropdownMenuContent = React10.forwardRef(({ className, sideOffset = 4, align = "end", ...props }, ref) => {
1492
1473
  const { open, setOpen, triggerRef } = useDropdownMenu();
1493
- const contentRef = React11.useRef(null);
1494
- const [position, setPosition] = React11.useState({ top: 0, left: 0 });
1495
- const [isPositioned, setIsPositioned] = React11.useState(false);
1496
- React11.useImperativeHandle(ref, () => contentRef.current);
1497
- React11.useEffect(() => {
1474
+ const contentRef = React10.useRef(null);
1475
+ const [position, setPosition] = React10.useState({ top: 0, left: 0 });
1476
+ const [isPositioned, setIsPositioned] = React10.useState(false);
1477
+ React10.useImperativeHandle(ref, () => contentRef.current);
1478
+ React10.useEffect(() => {
1498
1479
  if (!open || !triggerRef.current) {
1499
1480
  setIsPositioned(false);
1500
1481
  return;
@@ -1549,7 +1530,7 @@ var DropdownMenuContent = React11.forwardRef(({ className, sideOffset = 4, align
1549
1530
  window.removeEventListener("resize", updatePosition);
1550
1531
  };
1551
1532
  }, [open, sideOffset, align, triggerRef]);
1552
- React11.useEffect(() => {
1533
+ React10.useEffect(() => {
1553
1534
  if (!open) return;
1554
1535
  const handleClickOutside = (e) => {
1555
1536
  if (contentRef.current && !contentRef.current.contains(e.target) && triggerRef.current && !triggerRef.current.contains(e.target)) {
@@ -1569,7 +1550,7 @@ var DropdownMenuContent = React11.forwardRef(({ className, sideOffset = 4, align
1569
1550
  };
1570
1551
  }, [open, setOpen, triggerRef]);
1571
1552
  if (!open) return null;
1572
- return /* @__PURE__ */ jsx11(DropdownMenuPortal, { children: /* @__PURE__ */ jsx11(
1553
+ return /* @__PURE__ */ jsx10(DropdownMenuPortal, { children: /* @__PURE__ */ jsx10(
1573
1554
  "div",
1574
1555
  {
1575
1556
  ref: contentRef,
@@ -1587,9 +1568,9 @@ var DropdownMenuContent = React11.forwardRef(({ className, sideOffset = 4, align
1587
1568
  ) });
1588
1569
  });
1589
1570
  DropdownMenuContent.displayName = "DropdownMenuContent";
1590
- var DropdownMenuItem = React11.forwardRef(({ className, inset, onClick, ...props }, ref) => {
1571
+ var DropdownMenuItem = React10.forwardRef(({ className, inset, onClick, ...props }, ref) => {
1591
1572
  const { setOpen } = useDropdownMenu();
1592
- return /* @__PURE__ */ jsx11(
1573
+ return /* @__PURE__ */ jsx10(
1593
1574
  "div",
1594
1575
  {
1595
1576
  ref,
@@ -1607,7 +1588,7 @@ var DropdownMenuItem = React11.forwardRef(({ className, inset, onClick, ...props
1607
1588
  );
1608
1589
  });
1609
1590
  DropdownMenuItem.displayName = "DropdownMenuItem";
1610
- var DropdownMenuCheckboxItem = React11.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs7(
1591
+ var DropdownMenuCheckboxItem = React10.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ jsxs6(
1611
1592
  "div",
1612
1593
  {
1613
1594
  ref,
@@ -1617,13 +1598,13 @@ var DropdownMenuCheckboxItem = React11.forwardRef(({ className, children, checke
1617
1598
  ),
1618
1599
  ...props,
1619
1600
  children: [
1620
- /* @__PURE__ */ jsx11("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: checked && /* @__PURE__ */ jsx11(Check, { className: "h-4 w-4" }) }),
1601
+ /* @__PURE__ */ jsx10("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: checked && /* @__PURE__ */ jsx10(Check, { className: "h-4 w-4" }) }),
1621
1602
  children
1622
1603
  ]
1623
1604
  }
1624
1605
  ));
1625
1606
  DropdownMenuCheckboxItem.displayName = "DropdownMenuCheckboxItem";
1626
- var DropdownMenuRadioItem = React11.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs7(
1607
+ var DropdownMenuRadioItem = React10.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs6(
1627
1608
  "div",
1628
1609
  {
1629
1610
  ref,
@@ -1633,13 +1614,13 @@ var DropdownMenuRadioItem = React11.forwardRef(({ className, children, ...props
1633
1614
  ),
1634
1615
  ...props,
1635
1616
  children: [
1636
- /* @__PURE__ */ jsx11("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx11(Circle, { className: "h-2 w-2 fill-current" }) }),
1617
+ /* @__PURE__ */ jsx10("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ jsx10(Circle, { className: "h-2 w-2 fill-current" }) }),
1637
1618
  children
1638
1619
  ]
1639
1620
  }
1640
1621
  ));
1641
1622
  DropdownMenuRadioItem.displayName = "DropdownMenuRadioItem";
1642
- var DropdownMenuLabel = React11.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx11(
1623
+ var DropdownMenuLabel = React10.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ jsx10(
1643
1624
  "div",
1644
1625
  {
1645
1626
  ref,
@@ -1652,7 +1633,7 @@ var DropdownMenuLabel = React11.forwardRef(({ className, inset, ...props }, ref)
1652
1633
  }
1653
1634
  ));
1654
1635
  DropdownMenuLabel.displayName = "DropdownMenuLabel";
1655
- var DropdownMenuSeparator = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx11(
1636
+ var DropdownMenuSeparator = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx10(
1656
1637
  "div",
1657
1638
  {
1658
1639
  ref,
@@ -1665,7 +1646,7 @@ var DropdownMenuShortcut = ({
1665
1646
  className,
1666
1647
  ...props
1667
1648
  }) => {
1668
- return /* @__PURE__ */ jsx11(
1649
+ return /* @__PURE__ */ jsx10(
1669
1650
  "span",
1670
1651
  {
1671
1652
  className: cn("ml-auto text-label tracking-widest opacity-60", className),
@@ -1679,9 +1660,9 @@ DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
1679
1660
  import { useEffect as useEffect6, useRef as useRef5, useState as useState4 } from "react";
1680
1661
 
1681
1662
  // src/components/ui/input.tsx
1682
- import * as React12 from "react";
1663
+ import * as React11 from "react";
1683
1664
  import { Field } from "formik";
1684
- import { jsx as jsx12 } from "react/jsx-runtime";
1665
+ import { jsx as jsx11 } from "react/jsx-runtime";
1685
1666
  var baseClasses = [
1686
1667
  "flex h-[2.571rem] w-full items-center rounded-[0.65rem] px-4 py-0",
1687
1668
  "text-[0.8125rem] text-[var(--color-neutral-800)]",
@@ -1698,7 +1679,7 @@ var baseClasses = [
1698
1679
  "disabled:cursor-not-allowed",
1699
1680
  "disabled:opacity-50"
1700
1681
  ].join(" ");
1701
- var Input = React12.forwardRef(
1682
+ var Input = React11.forwardRef(
1702
1683
  ({
1703
1684
  as = "input",
1704
1685
  className,
@@ -1709,10 +1690,10 @@ var Input = React12.forwardRef(
1709
1690
  innerRef,
1710
1691
  ...props
1711
1692
  }, ref) => {
1712
- const internalRef = React12.useRef(null);
1713
- React12.useImperativeHandle(ref, () => internalRef.current);
1714
- React12.useImperativeHandle(innerRef, () => internalRef.current);
1715
- React12.useEffect(() => {
1693
+ const internalRef = React11.useRef(null);
1694
+ React11.useImperativeHandle(ref, () => internalRef.current);
1695
+ React11.useImperativeHandle(innerRef, () => internalRef.current);
1696
+ React11.useEffect(() => {
1716
1697
  if (autoFocus) {
1717
1698
  internalRef.current?.focus();
1718
1699
  }
@@ -1723,7 +1704,7 @@ var Input = React12.forwardRef(
1723
1704
  className
1724
1705
  );
1725
1706
  if (as === "field") {
1726
- return /* @__PURE__ */ jsx12(
1707
+ return /* @__PURE__ */ jsx11(
1727
1708
  Field,
1728
1709
  {
1729
1710
  innerRef: internalRef,
@@ -1735,7 +1716,7 @@ var Input = React12.forwardRef(
1735
1716
  }
1736
1717
  );
1737
1718
  }
1738
- return /* @__PURE__ */ jsx12(
1719
+ return /* @__PURE__ */ jsx11(
1739
1720
  "input",
1740
1721
  {
1741
1722
  ref: internalRef,
@@ -1751,7 +1732,7 @@ var Input = React12.forwardRef(
1751
1732
  Input.displayName = "Input";
1752
1733
 
1753
1734
  // src/components/ui/expandable-search.tsx
1754
- import { jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
1735
+ import { jsx as jsx12, jsxs as jsxs7 } from "react/jsx-runtime";
1755
1736
  var ExpandableSearch = ({ onSearch, placeholder = "Search...", className = "" }) => {
1756
1737
  const [isExpanded, setIsExpanded] = useState4(false);
1757
1738
  const [searchValue, setSearchValue] = useState4("");
@@ -1780,9 +1761,9 @@ var ExpandableSearch = ({ onSearch, placeholder = "Search...", className = "" })
1780
1761
  inputRef.current.focus();
1781
1762
  }
1782
1763
  };
1783
- return /* @__PURE__ */ jsx13("div", { className: `flex items-center ${className}`, children: isExpanded ? /* @__PURE__ */ jsxs8("div", { className: "flex items-center gap-2 transition-all duration-300 ease-in-out", children: [
1784
- /* @__PURE__ */ jsxs8("div", { className: "relative flex justify-center items-center", children: [
1785
- /* @__PURE__ */ jsx13(
1764
+ return /* @__PURE__ */ jsx12("div", { className: `flex items-center ${className}`, children: isExpanded ? /* @__PURE__ */ jsxs7("div", { className: "flex items-center gap-2 transition-all duration-300 ease-in-out", children: [
1765
+ /* @__PURE__ */ jsxs7("div", { className: "relative flex justify-center items-center", children: [
1766
+ /* @__PURE__ */ jsx12(
1786
1767
  Input,
1787
1768
  {
1788
1769
  ref: inputRef,
@@ -1793,25 +1774,25 @@ var ExpandableSearch = ({ onSearch, placeholder = "Search...", className = "" })
1793
1774
  className: "formfield__search"
1794
1775
  }
1795
1776
  ),
1796
- searchValue && /* @__PURE__ */ jsx13(
1777
+ searchValue && /* @__PURE__ */ jsx12(
1797
1778
  Button,
1798
1779
  {
1799
1780
  onClick: handleClear,
1800
1781
  variant: "ghost",
1801
1782
  size: "icon",
1802
1783
  className: "absolute right-3 top-1/2 -translate-y-1/2 text-neutral-600 hover:text-[var(--color-ext-4b5563)] transition-colors",
1803
- children: /* @__PURE__ */ jsx13("i", { className: "icon-neo-close text-[0.875rem]" })
1784
+ children: /* @__PURE__ */ jsx12("i", { className: "icon-neo-close text-[0.875rem]" })
1804
1785
  }
1805
1786
  )
1806
1787
  ] }),
1807
- /* @__PURE__ */ jsx13(Button, { variant: "ghost", size: "icon", onClick: handleToggle, children: /* @__PURE__ */ jsx13("i", { className: "icon-neo-close text-[0.875rem]" }) })
1808
- ] }) : /* @__PURE__ */ jsx13(Button, { variant: "ghost", size: "icon", onClick: handleToggle, className: "header__round-btn", children: /* @__PURE__ */ jsx13("i", { className: "icon-neo-search" }) }) });
1788
+ /* @__PURE__ */ jsx12(Button, { variant: "ghost", size: "icon", onClick: handleToggle, children: /* @__PURE__ */ jsx12("i", { className: "icon-neo-close text-[0.875rem]" }) })
1789
+ ] }) : /* @__PURE__ */ jsx12(Button, { variant: "ghost", size: "icon", onClick: handleToggle, className: "header__round-btn", children: /* @__PURE__ */ jsx12("i", { className: "icon-neo-search" }) }) });
1809
1790
  };
1810
1791
 
1811
1792
  // src/components/ui/file-input.tsx
1812
- import * as React14 from "react";
1813
- import { Fragment as Fragment4, jsx as jsx14, jsxs as jsxs9 } from "react/jsx-runtime";
1814
- var FileInput = React14.forwardRef(
1793
+ import * as React13 from "react";
1794
+ import { Fragment as Fragment4, jsx as jsx13, jsxs as jsxs8 } from "react/jsx-runtime";
1795
+ var FileInput = React13.forwardRef(
1815
1796
  ({
1816
1797
  id,
1817
1798
  className,
@@ -1823,10 +1804,10 @@ var FileInput = React14.forwardRef(
1823
1804
  disabled,
1824
1805
  ...props
1825
1806
  }, ref) => {
1826
- const generatedId = React14.useId();
1807
+ const generatedId = React13.useId();
1827
1808
  const inputId = id ?? generatedId;
1828
- const content = /* @__PURE__ */ jsxs9(Fragment4, { children: [
1829
- /* @__PURE__ */ jsx14(
1809
+ const content = /* @__PURE__ */ jsxs8(Fragment4, { children: [
1810
+ /* @__PURE__ */ jsx13(
1830
1811
  "input",
1831
1812
  {
1832
1813
  ref,
@@ -1837,17 +1818,18 @@ var FileInput = React14.forwardRef(
1837
1818
  ...props
1838
1819
  }
1839
1820
  ),
1840
- children && /* @__PURE__ */ jsx14("label", { htmlFor: inputId, className: labelClassName, style: labelStyle, ...labelProps, children })
1821
+ children && /* @__PURE__ */ jsx13("label", { htmlFor: inputId, className: labelClassName, style: labelStyle, ...labelProps, children })
1841
1822
  ] });
1842
- return wrapperClassName ? /* @__PURE__ */ jsx14("div", { className: wrapperClassName, children: content }) : content;
1823
+ return wrapperClassName ? /* @__PURE__ */ jsx13("div", { className: wrapperClassName, children: content }) : content;
1843
1824
  }
1844
1825
  );
1845
1826
  FileInput.displayName = "FileInput";
1846
1827
 
1847
1828
  // src/components/ui/form-field.tsx
1848
- import "react";
1849
- import { ErrorMessage } from "formik";
1850
- import { jsx as jsx15, jsxs as jsxs10 } from "react/jsx-runtime";
1829
+ import React14 from "react";
1830
+ import { ErrorMessage, Field as Field2 } from "formik";
1831
+ import { jsx as jsx14, jsxs as jsxs9 } from "react/jsx-runtime";
1832
+ var LABELABLE_TAGS = /* @__PURE__ */ new Set(["input", "select", "textarea"]);
1851
1833
  var FormField = ({
1852
1834
  label,
1853
1835
  required,
@@ -1855,19 +1837,87 @@ var FormField = ({
1855
1837
  error,
1856
1838
  hint,
1857
1839
  children,
1858
- className
1859
- }) => /* @__PURE__ */ jsxs10("div", { className: cn("form__field", className), children: [
1860
- label && /* @__PURE__ */ jsxs10("label", { className: "formfield__label", children: [
1861
- label,
1862
- required && /* @__PURE__ */ jsx15("span", { className: "required-field", children: "*" })
1863
- ] }),
1864
- children,
1865
- hint && /* @__PURE__ */ jsx15("p", { className: "text-[0.75rem] text-neutral-600 mt-1", children: hint }),
1866
- errorName && /* @__PURE__ */ jsx15(ErrorMessage, { name: errorName, component: "p", className: "form-error" }),
1867
- !errorName && error && /* @__PURE__ */ jsx15("p", { className: "form-error", children: error })
1868
- ] });
1840
+ className,
1841
+ id
1842
+ }) => {
1843
+ const generatedId = React14.useId();
1844
+ const fieldId = id ?? generatedId;
1845
+ let renderedChildren = children;
1846
+ if (label && React14.isValidElement(children) && (children.type === Field2 || typeof children.type === "string" && LABELABLE_TAGS.has(children.type)) && !children.props.id) {
1847
+ renderedChildren = React14.cloneElement(children, { id: fieldId });
1848
+ }
1849
+ return /* @__PURE__ */ jsxs9("div", { className: cn("form__field", className), children: [
1850
+ label && /* @__PURE__ */ jsxs9("label", { className: "formfield__label", htmlFor: fieldId, children: [
1851
+ label,
1852
+ required && /* @__PURE__ */ jsx14("span", { className: "required-field", children: "*" })
1853
+ ] }),
1854
+ renderedChildren,
1855
+ hint && /* @__PURE__ */ jsx14("p", { className: "text-[0.75rem] text-neutral-600 mt-1", children: hint }),
1856
+ errorName && /* @__PURE__ */ jsx14(ErrorMessage, { name: errorName, component: "p", className: "form-error" }),
1857
+ !errorName && error && /* @__PURE__ */ jsx14("p", { className: "form-error", children: error })
1858
+ ] });
1859
+ };
1869
1860
  var form_field_default = FormField;
1870
1861
 
1862
+ // src/components/ui/icon.tsx
1863
+ import * as React15 from "react";
1864
+ import "class-variance-authority";
1865
+ import { jsx as jsx15, jsxs as jsxs10 } from "react/jsx-runtime";
1866
+ var Icon = React15.forwardRef(
1867
+ ({
1868
+ name,
1869
+ variant,
1870
+ size,
1871
+ color: color6 = "primary",
1872
+ hoverColor,
1873
+ tooltipText,
1874
+ showTooltip = false,
1875
+ disabled,
1876
+ className,
1877
+ onClick,
1878
+ style,
1879
+ ...props
1880
+ }, ref) => {
1881
+ const colorProps = getIconColorProps(color6, hoverColor);
1882
+ const icon = /* @__PURE__ */ jsx15(
1883
+ "i",
1884
+ {
1885
+ ref,
1886
+ className: cn(
1887
+ `${name}`,
1888
+ iconVariants({ variant, size }),
1889
+ colorProps.className,
1890
+ onClick && !disabled && "cursor-pointer",
1891
+ className
1892
+ ),
1893
+ onClick,
1894
+ style: { ...colorProps.style, ...style },
1895
+ role: onClick ? "button" : void 0,
1896
+ tabIndex: onClick ? 0 : void 0,
1897
+ "aria-hidden": onClick ? "true" : "false",
1898
+ onKeyDown: (e) => {
1899
+ if (!onClick) return;
1900
+ if (e.key === "Enter" || e.key === " ") {
1901
+ e.preventDefault();
1902
+ onClick(
1903
+ e
1904
+ );
1905
+ }
1906
+ },
1907
+ ...props
1908
+ }
1909
+ );
1910
+ if (!showTooltip) {
1911
+ return icon;
1912
+ }
1913
+ return /* @__PURE__ */ jsxs10(Tooltip, { children: [
1914
+ /* @__PURE__ */ jsx15(TooltipTrigger, { asChild: true, children: icon }),
1915
+ /* @__PURE__ */ jsx15(TooltipContent, { children: /* @__PURE__ */ jsx15("small", { children: tooltipText || name }) })
1916
+ ] });
1917
+ }
1918
+ );
1919
+ Icon.displayName = "Icon";
1920
+
1871
1921
  // src/components/ui/list.tsx
1872
1922
  import * as React16 from "react";
1873
1923
  import { jsx as jsx16 } from "react/jsx-runtime";
@@ -2166,6 +2216,7 @@ var ScrollArea = React20.forwardRef(({ className, children, ...props }, ref) =>
2166
2216
  "div",
2167
2217
  {
2168
2218
  ref,
2219
+ tabIndex: 0,
2169
2220
  className: cn(
2170
2221
  "relative overflow-y-auto overflow-x-hidden",
2171
2222
  "[&::-webkit-scrollbar]:w-[0.375rem]",
@@ -2339,8 +2390,12 @@ var Tab = React22.forwardRef(
2339
2390
  variant,
2340
2391
  size,
2341
2392
  disabled,
2342
- onClick
2393
+ onClick,
2394
+ id,
2395
+ panelId
2343
2396
  }, ref) => {
2397
+ const generatedId = React22.useId();
2398
+ const resolvedId = id ?? generatedId;
2344
2399
  const handleKeyDown = (e) => {
2345
2400
  if (disabled) return;
2346
2401
  if (e.key === "Enter" || e.key === " ") {
@@ -2352,9 +2407,11 @@ var Tab = React22.forwardRef(
2352
2407
  "div",
2353
2408
  {
2354
2409
  ref,
2410
+ id: resolvedId,
2355
2411
  role: "tab",
2356
2412
  "aria-selected": active,
2357
2413
  "aria-disabled": disabled,
2414
+ "aria-controls": panelId,
2358
2415
  tabIndex: disabled ? -1 : active ? 0 : -1,
2359
2416
  onClick: !disabled ? onClick : void 0,
2360
2417
  onKeyDown: handleKeyDown,
@@ -2569,7 +2626,7 @@ Table.displayName = "Table";
2569
2626
 
2570
2627
  // src/components/ui/textarea.tsx
2571
2628
  import * as React24 from "react";
2572
- import { Field as Field2 } from "formik";
2629
+ import { Field as Field3 } from "formik";
2573
2630
  import { jsx as jsx24 } from "react/jsx-runtime";
2574
2631
  var Textarea = React24.forwardRef(
2575
2632
  ({
@@ -2609,7 +2666,7 @@ var Textarea = React24.forwardRef(
2609
2666
  );
2610
2667
  if (as === "field") {
2611
2668
  return /* @__PURE__ */ jsx24(
2612
- Field2,
2669
+ Field3,
2613
2670
  {
2614
2671
  as: "textarea",
2615
2672
  innerRef: ref,
@@ -2726,7 +2783,8 @@ var TimePicker = ({
2726
2783
  },
2727
2784
  name: "icon-neo-close",
2728
2785
  color: "muted",
2729
- size: "xs"
2786
+ size: "xs",
2787
+ tooltipText: "Clear time"
2730
2788
  }
2731
2789
  ),
2732
2790
  /* @__PURE__ */ jsx25("i", { className: "icon-neo-time-four shared-time-picker__icon" })
@@ -2894,6 +2952,7 @@ var TruncatedTextByWidth = ({ text, className }) => {
2894
2952
 
2895
2953
  // src/components/ui/view-toggle.tsx
2896
2954
  import * as React28 from "react";
2955
+ import { useTranslation as useTranslation3 } from "react-i18next";
2897
2956
  import { jsx as jsx28, jsxs as jsxs18 } from "react/jsx-runtime";
2898
2957
  var VIEW_MODE_KEY = "fp_view_mode";
2899
2958
  var useViewMode = () => {
@@ -2909,6 +2968,8 @@ var useViewMode = () => {
2909
2968
  return [viewMode, setAndPersist];
2910
2969
  };
2911
2970
  var ViewToggle = ({ viewMode = "grid" /* GRID */, onViewModeChange }) => {
2971
+ const translationKey = getTranslationKey();
2972
+ const { t } = useTranslation3(translationKey);
2912
2973
  return /* @__PURE__ */ jsxs18("div", { className: "view-toggle", children: [
2913
2974
  /* @__PURE__ */ jsxs18(Tooltip, { children: [
2914
2975
  /* @__PURE__ */ jsx28(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx28(
@@ -2919,10 +2980,11 @@ var ViewToggle = ({ viewMode = "grid" /* GRID */, onViewModeChange }) => {
2919
2980
  className: `view-toggle__btn${viewMode === "grid" /* GRID */ ? " view-toggle__btn--active" : ""}`,
2920
2981
  variant: "ghost",
2921
2982
  size: "icon",
2922
- children: /* @__PURE__ */ jsx28("i", { className: "icon-neo-grid" })
2983
+ "aria-label": t("ActionNames.gridView") || "Grid view",
2984
+ children: /* @__PURE__ */ jsx28("i", { className: "icon-neo-grid", "aria-hidden": "true" })
2923
2985
  }
2924
2986
  ) }),
2925
- /* @__PURE__ */ jsx28(TooltipContent, { children: "Grid view" })
2987
+ /* @__PURE__ */ jsx28(TooltipContent, { children: t("ActionNames.gridView") || "Grid view" })
2926
2988
  ] }),
2927
2989
  /* @__PURE__ */ jsxs18(Tooltip, { children: [
2928
2990
  /* @__PURE__ */ jsx28(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx28(
@@ -2933,10 +2995,11 @@ var ViewToggle = ({ viewMode = "grid" /* GRID */, onViewModeChange }) => {
2933
2995
  className: `view-toggle__btn${viewMode === "list" /* LIST */ ? " view-toggle__btn--active" : ""}`,
2934
2996
  variant: "ghost",
2935
2997
  size: "icon",
2936
- children: /* @__PURE__ */ jsx28("i", { className: "icon-neo-list" })
2998
+ "aria-label": t("ActionNames.listView") || "List view",
2999
+ children: /* @__PURE__ */ jsx28("i", { className: "icon-neo-list", "aria-hidden": "true" })
2937
3000
  }
2938
3001
  ) }),
2939
- /* @__PURE__ */ jsx28(TooltipContent, { children: "List view" })
3002
+ /* @__PURE__ */ jsx28(TooltipContent, { children: t("ActionNames.listView") || "List view" })
2940
3003
  ] })
2941
3004
  ] });
2942
3005
  };