@almadar/ui 5.130.0 → 5.131.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.
@@ -1173,7 +1173,7 @@ var init_Button = __esm({
1173
1173
  "cursor-pointer",
1174
1174
  "chrome-button",
1175
1175
  "transition-all duration-normal",
1176
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-offset-[length:var(--focus-ring-offset)]",
1176
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-offset-[length:var(--focus-ring-offset)]",
1177
1177
  "disabled:opacity-50 disabled:cursor-not-allowed",
1178
1178
  variantStyles[variant],
1179
1179
  sizeStyles[size],
@@ -1920,7 +1920,7 @@ var init_Badge = __esm({
1920
1920
  },
1921
1921
  className: cn(
1922
1922
  "inline-flex items-center justify-center rounded-sm",
1923
- "hover:bg-foreground/10 focus:outline-none focus:ring-1 focus:ring-ring",
1923
+ "hover:bg-foreground/10 focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
1924
1924
  "transition-colors",
1925
1925
  size === "sm" ? "w-4 h-4 ml-0.5" : size === "md" ? "w-5 h-5 ml-1" : "w-6 h-6 ml-1"
1926
1926
  ),
@@ -3278,7 +3278,7 @@ function NativeSelect({
3278
3278
  "block w-full border-[length:var(--border-width)] shadow-sm appearance-none",
3279
3279
  "px-3 py-2 pr-10 text-sm text-foreground font-medium",
3280
3280
  "bg-card",
3281
- "focus:outline-none focus:ring-2 focus:ring-offset-0 focus:ring-ring",
3281
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-ring",
3282
3282
  "disabled:bg-muted disabled:text-muted-foreground disabled:cursor-not-allowed",
3283
3283
  error ? "border-error focus:border-error" : "border-border focus:border-primary",
3284
3284
  className
@@ -3385,7 +3385,7 @@ function RichSelect({
3385
3385
  "block w-full border-[length:var(--border-width)] shadow-sm",
3386
3386
  "px-3 py-2 pr-10 text-sm text-start font-medium",
3387
3387
  "bg-card rounded-sm",
3388
- "focus:outline-none focus:ring-2 focus:ring-offset-0 focus:ring-ring",
3388
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-ring",
3389
3389
  "disabled:bg-muted disabled:text-muted-foreground disabled:cursor-not-allowed",
3390
3390
  error ? "border-error focus:border-error" : "border-border focus:border-primary",
3391
3391
  !hasValue && "text-muted-foreground"
@@ -4308,9 +4308,9 @@ var init_Radio = __esm({
4308
4308
  "flex items-center justify-center",
4309
4309
  "border-[length:var(--border-width)] transition-all cursor-pointer",
4310
4310
  sizeClasses4[size],
4311
- hasError ? "border-error peer-focus:ring-error/20" : "border-border peer-focus:ring-ring/20",
4311
+ hasError ? "border-error peer-focus-visible:ring-error/20" : "border-border peer-focus-visible:ring-ring/20",
4312
4312
  isChecked2 ? hasError ? "border-error" : "border-primary bg-primary" : "",
4313
- "peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-offset-2",
4313
+ "peer-focus:outline-none peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2",
4314
4314
  disabled && "opacity-50 cursor-not-allowed",
4315
4315
  !disabled && "hover:border-[var(--color-border-hover)]"
4316
4316
  ),
@@ -4781,7 +4781,7 @@ var init_ThemeToggle = __esm({
4781
4781
  "inline-flex items-center justify-center gap-2",
4782
4782
  "text-foreground",
4783
4783
  "hover:bg-muted border-[length:var(--border-width)] border-transparent hover:border-border",
4784
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
4784
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
4785
4785
  "transition-colors duration-fast",
4786
4786
  sizeClasses5[size],
4787
4787
  className
@@ -11819,10 +11819,12 @@ var init_Container = __esm({
11819
11819
  };
11820
11820
  paddingStyles3 = {
11821
11821
  none: "px-0",
11822
- sm: "px-4",
11823
- md: "px-6",
11824
- lg: "px-8",
11825
- xl: "px-12"
11822
+ // Mobile-tighter, desktop-identical: fixed px-6 on a 360px phone eats ~13% of
11823
+ // the viewport, so each token steps down below the sm breakpoint.
11824
+ sm: "px-3 sm:px-4",
11825
+ md: "px-4 sm:px-6",
11826
+ lg: "px-4 sm:px-6 md:px-8",
11827
+ xl: "px-4 sm:px-8 md:px-12"
11826
11828
  };
11827
11829
  Container = ({
11828
11830
  size,
@@ -12521,7 +12523,7 @@ var init_Accordion = __esm({
12521
12523
  "bg-card",
12522
12524
  "hover:bg-muted",
12523
12525
  "transition-colors duration-fast",
12524
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-inset",
12526
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset",
12525
12527
  "disabled:opacity-50 disabled:cursor-not-allowed",
12526
12528
  isOpen && "bg-muted font-bold"
12527
12529
  ),
@@ -18726,7 +18728,7 @@ var init_Breadcrumb = __esm({
18726
18728
  },
18727
18729
  className: cn(
18728
18730
  "flex items-center gap-1.5 transition-colors",
18729
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
18731
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
18730
18732
  isLast ? "text-foreground font-bold cursor-default" : "text-muted-foreground hover:text-foreground"
18731
18733
  ),
18732
18734
  "aria-current": isLast ? "page" : void 0,
@@ -23361,7 +23363,7 @@ function DataGrid({
23361
23363
  ] }, field.name);
23362
23364
  }) })
23363
23365
  ] }),
23364
- dangerActions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(HStack, { gap: "xs", className: "flex-shrink-0", children: dangerActions.map((action, idx) => /* @__PURE__ */ jsxRuntime.jsxs(
23366
+ dangerActions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(HStack, { gap: "xs", className: "flex-shrink-0", children: dangerActions.map((action, idx) => /* @__PURE__ */ jsxRuntime.jsx(
23365
23367
  Button,
23366
23368
  {
23367
23369
  variant: "ghost",
@@ -23369,11 +23371,10 @@ function DataGrid({
23369
23371
  onClick: handleActionClick(action, itemData),
23370
23372
  "data-testid": `action-${action.event}`,
23371
23373
  "data-row-id": String(itemData.id),
23374
+ "aria-label": action.label,
23375
+ title: action.label,
23372
23376
  className: "text-error hover:text-error hover:bg-error/10 px-2",
23373
- children: [
23374
- action.icon && renderIconInput(action.icon, { size: "xs" }),
23375
- action.label
23376
- ]
23377
+ children: action.icon ? renderIconInput(action.icon, { size: "xs" }) : action.label
23377
23378
  },
23378
23379
  idx
23379
23380
  )) })
@@ -24175,10 +24176,7 @@ var init_FileTree = __esm({
24175
24176
  className,
24176
24177
  indent = 16
24177
24178
  }) => {
24178
- const { t } = hooks.useTranslate();
24179
- if (tree.length === 0) {
24180
- return /* @__PURE__ */ jsxRuntime.jsx(Box, { className: `p-4 ${className ?? ""}`, children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", color: "muted", children: t("fileTree.noFiles") }) });
24181
- }
24179
+ if (tree.length === 0) return null;
24182
24180
  return /* @__PURE__ */ jsxRuntime.jsx(Box, { className: `py-1 overflow-y-auto ${className ?? ""}`, role: "tree", children: tree.map((node) => /* @__PURE__ */ jsxRuntime.jsx(
24183
24181
  TreeNodeItem,
24184
24182
  {
@@ -27681,7 +27679,7 @@ var init_NumberStepper = __esm({
27681
27679
  "active:bg-muted",
27682
27680
  "transition-colors duration-instant",
27683
27681
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
27684
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
27682
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
27685
27683
  styles.button
27686
27684
  ),
27687
27685
  "aria-label": t("aria.decrease"),
@@ -27722,7 +27720,7 @@ var init_NumberStepper = __esm({
27722
27720
  "active:bg-muted",
27723
27721
  "transition-colors duration-instant",
27724
27722
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
27725
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
27723
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
27726
27724
  styles.button
27727
27725
  ),
27728
27726
  "aria-label": t("aria.increase"),
@@ -28178,7 +28176,7 @@ var init_Lightbox = __esm({
28178
28176
  "p-2 rounded-full",
28179
28177
  "text-[var(--color-foreground)] bg-[var(--color-card)]",
28180
28178
  "hover:bg-opacity-70 transition-opacity",
28181
- "focus:outline-none focus:ring-2 focus:ring-ring"
28179
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring"
28182
28180
  ),
28183
28181
  "aria-label": t("aria.closeModal"),
28184
28182
  children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "x", className: "w-6 h-6" })
@@ -28197,7 +28195,7 @@ var init_Lightbox = __esm({
28197
28195
  "p-2 rounded-full",
28198
28196
  "text-[var(--color-foreground)] bg-[var(--color-card)]",
28199
28197
  "hover:bg-opacity-70 transition-opacity",
28200
- "focus:outline-none focus:ring-2 focus:ring-ring"
28198
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring"
28201
28199
  ),
28202
28200
  "aria-label": t("aria.previousImage"),
28203
28201
  children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "chevron-left", className: "w-8 h-8" })
@@ -28234,7 +28232,7 @@ var init_Lightbox = __esm({
28234
28232
  "p-2 rounded-full",
28235
28233
  "text-[var(--color-foreground)] bg-[var(--color-card)]",
28236
28234
  "hover:bg-opacity-70 transition-opacity",
28237
- "focus:outline-none focus:ring-2 focus:ring-ring"
28235
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring"
28238
28236
  ),
28239
28237
  "aria-label": t("aria.nextImage"),
28240
28238
  children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "chevron-right", className: "w-8 h-8" })
@@ -28414,7 +28412,8 @@ function TableView({
28414
28412
  const cell = formatCell(asFieldValue(getNestedValue(row, col.field ?? col.key)), col.format);
28415
28413
  return Math.max(widest, cell.length);
28416
28414
  }, columnLabel(col).length);
28417
- return Math.min(longest, MAX_MEASURED_COL_CH);
28415
+ const chrome = col.format === "badge" ? BADGE_CHROME_CH : 0;
28416
+ return Math.min(longest + chrome, MAX_MEASURED_COL_CH);
28418
28417
  }),
28419
28418
  [colDefs, data]
28420
28419
  );
@@ -28504,7 +28503,7 @@ function TableView({
28504
28503
  col.className
28505
28504
  );
28506
28505
  if (col.format === "badge" && raw != null && raw !== "") {
28507
- return /* @__PURE__ */ jsxRuntime.jsx(Box, { role: "cell", className: cellBase, children: /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: statusVariant4(String(raw)), size: "sm", children: String(raw) }) }, col.key);
28506
+ return /* @__PURE__ */ jsxRuntime.jsx(Box, { role: "cell", className: cellBase, children: /* @__PURE__ */ jsxRuntime.jsx(Badge, { variant: statusVariant4(String(raw)), size: "sm", className: "whitespace-nowrap", children: String(raw) }) }, col.key);
28508
28507
  }
28509
28508
  return /* @__PURE__ */ jsxRuntime.jsx(Box, { role: "cell", className: cellBase, children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: formatCell(raw, col.format) }) }, col.key);
28510
28509
  }),
@@ -28587,7 +28586,7 @@ function TableView({
28587
28586
  }
28588
28587
  );
28589
28588
  }
28590
- var MAX_MEASURED_COL_CH, alignClass, weightClass, LOOKS;
28589
+ var MAX_MEASURED_COL_CH, BADGE_CHROME_CH, alignClass, weightClass, LOOKS;
28591
28590
  var init_TableView = __esm({
28592
28591
  "components/core/molecules/TableView.tsx"() {
28593
28592
  "use client";
@@ -28606,6 +28605,7 @@ var init_TableView = __esm({
28606
28605
  init_useDataDnd();
28607
28606
  logger.createLogger("almadar:ui:table-view");
28608
28607
  MAX_MEASURED_COL_CH = 32;
28608
+ BADGE_CHROME_CH = 4;
28609
28609
  alignClass = {
28610
28610
  left: "justify-start text-left",
28611
28611
  center: "justify-center text-center",
@@ -30841,7 +30841,7 @@ var init_VoteStack = __esm({
30841
30841
  "active:bg-muted",
30842
30842
  "transition-colors duration-instant",
30843
30843
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
30844
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
30844
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
30845
30845
  styles.button
30846
30846
  ),
30847
30847
  children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "chevron-up", className: styles.icon })
@@ -30878,7 +30878,7 @@ var init_VoteStack = __esm({
30878
30878
  "active:bg-muted",
30879
30879
  "transition-colors duration-instant",
30880
30880
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
30881
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
30881
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
30882
30882
  styles.button
30883
30883
  ),
30884
30884
  children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "chevron-down", className: styles.icon })
@@ -31399,7 +31399,7 @@ var init_QrScanner = __esm({
31399
31399
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
31400
31400
  "rounded-full bg-black bg-opacity-60 p-2 text-white",
31401
31401
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
31402
- "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
31402
+ "hover:bg-opacity-80 focus:outline-none focus-visible:ring-2 focus-visible:ring-white"
31403
31403
  ),
31404
31404
  "aria-label": isPaused ? t("qrScanner.resumeScanning") : t("qrScanner.pauseScanning"),
31405
31405
  children: isPaused ? /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "play", className: "h-4 w-4" }) : /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "pause", className: "h-4 w-4" })
@@ -31414,7 +31414,7 @@ var init_QrScanner = __esm({
31414
31414
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
31415
31415
  "rounded-full bg-black bg-opacity-60 p-2 text-white",
31416
31416
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
31417
- "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
31417
+ "hover:bg-opacity-80 focus:outline-none focus-visible:ring-2 focus-visible:ring-white"
31418
31418
  ),
31419
31419
  "aria-label": currentFacing === "environment" ? t("qrScanner.switchToFrontCamera") : t("qrScanner.switchToRearCamera"),
31420
31420
  children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "refresh-cw", className: "h-4 w-4" })
@@ -31429,7 +31429,7 @@ var init_QrScanner = __esm({
31429
31429
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
31430
31430
  "rounded-full bg-black bg-opacity-60 px-3 py-2 text-xs text-white",
31431
31431
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
31432
- "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
31432
+ "hover:bg-opacity-80 focus:outline-none focus-visible:ring-2 focus-visible:ring-white"
31433
31433
  ),
31434
31434
  "aria-label": t("aria.mockScanDev"),
31435
31435
  children: t("qrScanner.mockScan")
@@ -43247,7 +43247,7 @@ var init_TabbedContainer = __esm({
43247
43247
  onClick: () => !isDisabled && handleTabChange(tab.id),
43248
43248
  className: cn(
43249
43249
  "flex items-center gap-2 px-4 py-3 text-sm font-medium transition-colors",
43250
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
43250
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
43251
43251
  "disabled:opacity-50 disabled:cursor-not-allowed",
43252
43252
  isActive ? "bg-primary text-primary-foreground" : "bg-card text-foreground hover:bg-muted",
43253
43253
  isVertical ? "justify-start" : "justify-center"
@@ -1099,7 +1099,7 @@ var init_Button = __esm({
1099
1099
  "cursor-pointer",
1100
1100
  "chrome-button",
1101
1101
  "transition-all duration-normal",
1102
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-offset-[length:var(--focus-ring-offset)]",
1102
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-offset-[length:var(--focus-ring-offset)]",
1103
1103
  "disabled:opacity-50 disabled:cursor-not-allowed",
1104
1104
  variantStyles[variant],
1105
1105
  sizeStyles[size],
@@ -1846,7 +1846,7 @@ var init_Badge = __esm({
1846
1846
  },
1847
1847
  className: cn(
1848
1848
  "inline-flex items-center justify-center rounded-sm",
1849
- "hover:bg-foreground/10 focus:outline-none focus:ring-1 focus:ring-ring",
1849
+ "hover:bg-foreground/10 focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
1850
1850
  "transition-colors",
1851
1851
  size === "sm" ? "w-4 h-4 ml-0.5" : size === "md" ? "w-5 h-5 ml-1" : "w-6 h-6 ml-1"
1852
1852
  ),
@@ -3204,7 +3204,7 @@ function NativeSelect({
3204
3204
  "block w-full border-[length:var(--border-width)] shadow-sm appearance-none",
3205
3205
  "px-3 py-2 pr-10 text-sm text-foreground font-medium",
3206
3206
  "bg-card",
3207
- "focus:outline-none focus:ring-2 focus:ring-offset-0 focus:ring-ring",
3207
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-ring",
3208
3208
  "disabled:bg-muted disabled:text-muted-foreground disabled:cursor-not-allowed",
3209
3209
  error ? "border-error focus:border-error" : "border-border focus:border-primary",
3210
3210
  className
@@ -3311,7 +3311,7 @@ function RichSelect({
3311
3311
  "block w-full border-[length:var(--border-width)] shadow-sm",
3312
3312
  "px-3 py-2 pr-10 text-sm text-start font-medium",
3313
3313
  "bg-card rounded-sm",
3314
- "focus:outline-none focus:ring-2 focus:ring-offset-0 focus:ring-ring",
3314
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-ring",
3315
3315
  "disabled:bg-muted disabled:text-muted-foreground disabled:cursor-not-allowed",
3316
3316
  error ? "border-error focus:border-error" : "border-border focus:border-primary",
3317
3317
  !hasValue && "text-muted-foreground"
@@ -4234,9 +4234,9 @@ var init_Radio = __esm({
4234
4234
  "flex items-center justify-center",
4235
4235
  "border-[length:var(--border-width)] transition-all cursor-pointer",
4236
4236
  sizeClasses4[size],
4237
- hasError ? "border-error peer-focus:ring-error/20" : "border-border peer-focus:ring-ring/20",
4237
+ hasError ? "border-error peer-focus-visible:ring-error/20" : "border-border peer-focus-visible:ring-ring/20",
4238
4238
  isChecked2 ? hasError ? "border-error" : "border-primary bg-primary" : "",
4239
- "peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-offset-2",
4239
+ "peer-focus:outline-none peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2",
4240
4240
  disabled && "opacity-50 cursor-not-allowed",
4241
4241
  !disabled && "hover:border-[var(--color-border-hover)]"
4242
4242
  ),
@@ -4707,7 +4707,7 @@ var init_ThemeToggle = __esm({
4707
4707
  "inline-flex items-center justify-center gap-2",
4708
4708
  "text-foreground",
4709
4709
  "hover:bg-muted border-[length:var(--border-width)] border-transparent hover:border-border",
4710
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
4710
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
4711
4711
  "transition-colors duration-fast",
4712
4712
  sizeClasses5[size],
4713
4713
  className
@@ -11745,10 +11745,12 @@ var init_Container = __esm({
11745
11745
  };
11746
11746
  paddingStyles3 = {
11747
11747
  none: "px-0",
11748
- sm: "px-4",
11749
- md: "px-6",
11750
- lg: "px-8",
11751
- xl: "px-12"
11748
+ // Mobile-tighter, desktop-identical: fixed px-6 on a 360px phone eats ~13% of
11749
+ // the viewport, so each token steps down below the sm breakpoint.
11750
+ sm: "px-3 sm:px-4",
11751
+ md: "px-4 sm:px-6",
11752
+ lg: "px-4 sm:px-6 md:px-8",
11753
+ xl: "px-4 sm:px-8 md:px-12"
11752
11754
  };
11753
11755
  Container = ({
11754
11756
  size,
@@ -12447,7 +12449,7 @@ var init_Accordion = __esm({
12447
12449
  "bg-card",
12448
12450
  "hover:bg-muted",
12449
12451
  "transition-colors duration-fast",
12450
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-inset",
12452
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset",
12451
12453
  "disabled:opacity-50 disabled:cursor-not-allowed",
12452
12454
  isOpen && "bg-muted font-bold"
12453
12455
  ),
@@ -18652,7 +18654,7 @@ var init_Breadcrumb = __esm({
18652
18654
  },
18653
18655
  className: cn(
18654
18656
  "flex items-center gap-1.5 transition-colors",
18655
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
18657
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
18656
18658
  isLast ? "text-foreground font-bold cursor-default" : "text-muted-foreground hover:text-foreground"
18657
18659
  ),
18658
18660
  "aria-current": isLast ? "page" : void 0,
@@ -23287,7 +23289,7 @@ function DataGrid({
23287
23289
  ] }, field.name);
23288
23290
  }) })
23289
23291
  ] }),
23290
- dangerActions.length > 0 && /* @__PURE__ */ jsx(HStack, { gap: "xs", className: "flex-shrink-0", children: dangerActions.map((action, idx) => /* @__PURE__ */ jsxs(
23292
+ dangerActions.length > 0 && /* @__PURE__ */ jsx(HStack, { gap: "xs", className: "flex-shrink-0", children: dangerActions.map((action, idx) => /* @__PURE__ */ jsx(
23291
23293
  Button,
23292
23294
  {
23293
23295
  variant: "ghost",
@@ -23295,11 +23297,10 @@ function DataGrid({
23295
23297
  onClick: handleActionClick(action, itemData),
23296
23298
  "data-testid": `action-${action.event}`,
23297
23299
  "data-row-id": String(itemData.id),
23300
+ "aria-label": action.label,
23301
+ title: action.label,
23298
23302
  className: "text-error hover:text-error hover:bg-error/10 px-2",
23299
- children: [
23300
- action.icon && renderIconInput(action.icon, { size: "xs" }),
23301
- action.label
23302
- ]
23303
+ children: action.icon ? renderIconInput(action.icon, { size: "xs" }) : action.label
23303
23304
  },
23304
23305
  idx
23305
23306
  )) })
@@ -24101,10 +24102,7 @@ var init_FileTree = __esm({
24101
24102
  className,
24102
24103
  indent = 16
24103
24104
  }) => {
24104
- const { t } = useTranslate();
24105
- if (tree.length === 0) {
24106
- return /* @__PURE__ */ jsx(Box, { className: `p-4 ${className ?? ""}`, children: /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: t("fileTree.noFiles") }) });
24107
- }
24105
+ if (tree.length === 0) return null;
24108
24106
  return /* @__PURE__ */ jsx(Box, { className: `py-1 overflow-y-auto ${className ?? ""}`, role: "tree", children: tree.map((node) => /* @__PURE__ */ jsx(
24109
24107
  TreeNodeItem,
24110
24108
  {
@@ -27607,7 +27605,7 @@ var init_NumberStepper = __esm({
27607
27605
  "active:bg-muted",
27608
27606
  "transition-colors duration-instant",
27609
27607
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
27610
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
27608
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
27611
27609
  styles.button
27612
27610
  ),
27613
27611
  "aria-label": t("aria.decrease"),
@@ -27648,7 +27646,7 @@ var init_NumberStepper = __esm({
27648
27646
  "active:bg-muted",
27649
27647
  "transition-colors duration-instant",
27650
27648
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
27651
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
27649
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
27652
27650
  styles.button
27653
27651
  ),
27654
27652
  "aria-label": t("aria.increase"),
@@ -28104,7 +28102,7 @@ var init_Lightbox = __esm({
28104
28102
  "p-2 rounded-full",
28105
28103
  "text-[var(--color-foreground)] bg-[var(--color-card)]",
28106
28104
  "hover:bg-opacity-70 transition-opacity",
28107
- "focus:outline-none focus:ring-2 focus:ring-ring"
28105
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring"
28108
28106
  ),
28109
28107
  "aria-label": t("aria.closeModal"),
28110
28108
  children: /* @__PURE__ */ jsx(Icon, { name: "x", className: "w-6 h-6" })
@@ -28123,7 +28121,7 @@ var init_Lightbox = __esm({
28123
28121
  "p-2 rounded-full",
28124
28122
  "text-[var(--color-foreground)] bg-[var(--color-card)]",
28125
28123
  "hover:bg-opacity-70 transition-opacity",
28126
- "focus:outline-none focus:ring-2 focus:ring-ring"
28124
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring"
28127
28125
  ),
28128
28126
  "aria-label": t("aria.previousImage"),
28129
28127
  children: /* @__PURE__ */ jsx(Icon, { name: "chevron-left", className: "w-8 h-8" })
@@ -28160,7 +28158,7 @@ var init_Lightbox = __esm({
28160
28158
  "p-2 rounded-full",
28161
28159
  "text-[var(--color-foreground)] bg-[var(--color-card)]",
28162
28160
  "hover:bg-opacity-70 transition-opacity",
28163
- "focus:outline-none focus:ring-2 focus:ring-ring"
28161
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring"
28164
28162
  ),
28165
28163
  "aria-label": t("aria.nextImage"),
28166
28164
  children: /* @__PURE__ */ jsx(Icon, { name: "chevron-right", className: "w-8 h-8" })
@@ -28340,7 +28338,8 @@ function TableView({
28340
28338
  const cell = formatCell(asFieldValue(getNestedValue(row, col.field ?? col.key)), col.format);
28341
28339
  return Math.max(widest, cell.length);
28342
28340
  }, columnLabel(col).length);
28343
- return Math.min(longest, MAX_MEASURED_COL_CH);
28341
+ const chrome = col.format === "badge" ? BADGE_CHROME_CH : 0;
28342
+ return Math.min(longest + chrome, MAX_MEASURED_COL_CH);
28344
28343
  }),
28345
28344
  [colDefs, data]
28346
28345
  );
@@ -28430,7 +28429,7 @@ function TableView({
28430
28429
  col.className
28431
28430
  );
28432
28431
  if (col.format === "badge" && raw != null && raw !== "") {
28433
- return /* @__PURE__ */ jsx(Box, { role: "cell", className: cellBase, children: /* @__PURE__ */ jsx(Badge, { variant: statusVariant4(String(raw)), size: "sm", children: String(raw) }) }, col.key);
28432
+ return /* @__PURE__ */ jsx(Box, { role: "cell", className: cellBase, children: /* @__PURE__ */ jsx(Badge, { variant: statusVariant4(String(raw)), size: "sm", className: "whitespace-nowrap", children: String(raw) }) }, col.key);
28434
28433
  }
28435
28434
  return /* @__PURE__ */ jsx(Box, { role: "cell", className: cellBase, children: /* @__PURE__ */ jsx("span", { className: "truncate", children: formatCell(raw, col.format) }) }, col.key);
28436
28435
  }),
@@ -28513,7 +28512,7 @@ function TableView({
28513
28512
  }
28514
28513
  );
28515
28514
  }
28516
- var MAX_MEASURED_COL_CH, alignClass, weightClass, LOOKS;
28515
+ var MAX_MEASURED_COL_CH, BADGE_CHROME_CH, alignClass, weightClass, LOOKS;
28517
28516
  var init_TableView = __esm({
28518
28517
  "components/core/molecules/TableView.tsx"() {
28519
28518
  "use client";
@@ -28532,6 +28531,7 @@ var init_TableView = __esm({
28532
28531
  init_useDataDnd();
28533
28532
  createLogger("almadar:ui:table-view");
28534
28533
  MAX_MEASURED_COL_CH = 32;
28534
+ BADGE_CHROME_CH = 4;
28535
28535
  alignClass = {
28536
28536
  left: "justify-start text-left",
28537
28537
  center: "justify-center text-center",
@@ -30767,7 +30767,7 @@ var init_VoteStack = __esm({
30767
30767
  "active:bg-muted",
30768
30768
  "transition-colors duration-instant",
30769
30769
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
30770
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
30770
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
30771
30771
  styles.button
30772
30772
  ),
30773
30773
  children: /* @__PURE__ */ jsx(Icon, { name: "chevron-up", className: styles.icon })
@@ -30804,7 +30804,7 @@ var init_VoteStack = __esm({
30804
30804
  "active:bg-muted",
30805
30805
  "transition-colors duration-instant",
30806
30806
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
30807
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
30807
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
30808
30808
  styles.button
30809
30809
  ),
30810
30810
  children: /* @__PURE__ */ jsx(Icon, { name: "chevron-down", className: styles.icon })
@@ -31325,7 +31325,7 @@ var init_QrScanner = __esm({
31325
31325
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
31326
31326
  "rounded-full bg-black bg-opacity-60 p-2 text-white",
31327
31327
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
31328
- "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
31328
+ "hover:bg-opacity-80 focus:outline-none focus-visible:ring-2 focus-visible:ring-white"
31329
31329
  ),
31330
31330
  "aria-label": isPaused ? t("qrScanner.resumeScanning") : t("qrScanner.pauseScanning"),
31331
31331
  children: isPaused ? /* @__PURE__ */ jsx(Icon, { name: "play", className: "h-4 w-4" }) : /* @__PURE__ */ jsx(Icon, { name: "pause", className: "h-4 w-4" })
@@ -31340,7 +31340,7 @@ var init_QrScanner = __esm({
31340
31340
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
31341
31341
  "rounded-full bg-black bg-opacity-60 p-2 text-white",
31342
31342
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
31343
- "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
31343
+ "hover:bg-opacity-80 focus:outline-none focus-visible:ring-2 focus-visible:ring-white"
31344
31344
  ),
31345
31345
  "aria-label": currentFacing === "environment" ? t("qrScanner.switchToFrontCamera") : t("qrScanner.switchToRearCamera"),
31346
31346
  children: /* @__PURE__ */ jsx(Icon, { name: "refresh-cw", className: "h-4 w-4" })
@@ -31355,7 +31355,7 @@ var init_QrScanner = __esm({
31355
31355
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
31356
31356
  "rounded-full bg-black bg-opacity-60 px-3 py-2 text-xs text-white",
31357
31357
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
31358
- "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
31358
+ "hover:bg-opacity-80 focus:outline-none focus-visible:ring-2 focus-visible:ring-white"
31359
31359
  ),
31360
31360
  "aria-label": t("aria.mockScanDev"),
31361
31361
  children: t("qrScanner.mockScan")
@@ -43173,7 +43173,7 @@ var init_TabbedContainer = __esm({
43173
43173
  onClick: () => !isDisabled && handleTabChange(tab.id),
43174
43174
  className: cn(
43175
43175
  "flex items-center gap-2 px-4 py-3 text-sm font-medium transition-colors",
43176
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
43176
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
43177
43177
  "disabled:opacity-50 disabled:cursor-not-allowed",
43178
43178
  isActive ? "bg-primary text-primary-foreground" : "bg-card text-foreground hover:bg-muted",
43179
43179
  isVertical ? "justify-start" : "justify-center"