@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.
@@ -5126,7 +5126,7 @@ var init_Button = __esm({
5126
5126
  "cursor-pointer",
5127
5127
  "chrome-button",
5128
5128
  "transition-all duration-normal",
5129
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-offset-[length:var(--focus-ring-offset)]",
5129
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-offset-[length:var(--focus-ring-offset)]",
5130
5130
  "disabled:opacity-50 disabled:cursor-not-allowed",
5131
5131
  variantStyles2[variant],
5132
5132
  sizeStyles[size],
@@ -5749,7 +5749,7 @@ var init_Badge = __esm({
5749
5749
  },
5750
5750
  className: cn(
5751
5751
  "inline-flex items-center justify-center rounded-sm",
5752
- "hover:bg-foreground/10 focus:outline-none focus:ring-1 focus:ring-ring",
5752
+ "hover:bg-foreground/10 focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
5753
5753
  "transition-colors",
5754
5754
  size === "sm" ? "w-4 h-4 ml-0.5" : size === "md" ? "w-5 h-5 ml-1" : "w-6 h-6 ml-1"
5755
5755
  ),
@@ -7107,7 +7107,7 @@ function NativeSelect({
7107
7107
  "block w-full border-[length:var(--border-width)] shadow-sm appearance-none",
7108
7108
  "px-3 py-2 pr-10 text-sm text-foreground font-medium",
7109
7109
  "bg-card",
7110
- "focus:outline-none focus:ring-2 focus:ring-offset-0 focus:ring-ring",
7110
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-ring",
7111
7111
  "disabled:bg-muted disabled:text-muted-foreground disabled:cursor-not-allowed",
7112
7112
  error ? "border-error focus:border-error" : "border-border focus:border-primary",
7113
7113
  className
@@ -7214,7 +7214,7 @@ function RichSelect({
7214
7214
  "block w-full border-[length:var(--border-width)] shadow-sm",
7215
7215
  "px-3 py-2 pr-10 text-sm text-start font-medium",
7216
7216
  "bg-card rounded-sm",
7217
- "focus:outline-none focus:ring-2 focus:ring-offset-0 focus:ring-ring",
7217
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-ring",
7218
7218
  "disabled:bg-muted disabled:text-muted-foreground disabled:cursor-not-allowed",
7219
7219
  error ? "border-error focus:border-error" : "border-border focus:border-primary",
7220
7220
  !hasValue && "text-muted-foreground"
@@ -8137,9 +8137,9 @@ var init_Radio = __esm({
8137
8137
  "flex items-center justify-center",
8138
8138
  "border-[length:var(--border-width)] transition-all cursor-pointer",
8139
8139
  sizeClasses4[size],
8140
- hasError ? "border-error peer-focus:ring-error/20" : "border-border peer-focus:ring-ring/20",
8140
+ hasError ? "border-error peer-focus-visible:ring-error/20" : "border-border peer-focus-visible:ring-ring/20",
8141
8141
  isChecked2 ? hasError ? "border-error" : "border-primary bg-primary" : "",
8142
- "peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-offset-2",
8142
+ "peer-focus:outline-none peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2",
8143
8143
  disabled && "opacity-50 cursor-not-allowed",
8144
8144
  !disabled && "hover:border-[var(--color-border-hover)]"
8145
8145
  ),
@@ -8525,7 +8525,7 @@ var init_ThemeToggle = __esm({
8525
8525
  "inline-flex items-center justify-center gap-2",
8526
8526
  "text-foreground",
8527
8527
  "hover:bg-muted border-[length:var(--border-width)] border-transparent hover:border-border",
8528
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
8528
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
8529
8529
  "transition-colors duration-fast",
8530
8530
  sizeClasses5[size],
8531
8531
  className
@@ -14912,10 +14912,12 @@ var init_Container = __esm({
14912
14912
  };
14913
14913
  paddingStyles3 = {
14914
14914
  none: "px-0",
14915
- sm: "px-4",
14916
- md: "px-6",
14917
- lg: "px-8",
14918
- xl: "px-12"
14915
+ // Mobile-tighter, desktop-identical: fixed px-6 on a 360px phone eats ~13% of
14916
+ // the viewport, so each token steps down below the sm breakpoint.
14917
+ sm: "px-3 sm:px-4",
14918
+ md: "px-4 sm:px-6",
14919
+ lg: "px-4 sm:px-6 md:px-8",
14920
+ xl: "px-4 sm:px-8 md:px-12"
14919
14921
  };
14920
14922
  Container = ({
14921
14923
  size,
@@ -15614,7 +15616,7 @@ var init_Accordion = __esm({
15614
15616
  "bg-card",
15615
15617
  "hover:bg-muted",
15616
15618
  "transition-colors duration-fast",
15617
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-inset",
15619
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset",
15618
15620
  "disabled:opacity-50 disabled:cursor-not-allowed",
15619
15621
  isOpen && "bg-muted font-bold"
15620
15622
  ),
@@ -20992,7 +20994,7 @@ var init_Breadcrumb = __esm({
20992
20994
  },
20993
20995
  className: cn(
20994
20996
  "flex items-center gap-1.5 transition-colors",
20995
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
20997
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
20996
20998
  isLast ? "text-foreground font-bold cursor-default" : "text-muted-foreground hover:text-foreground"
20997
20999
  ),
20998
21000
  "aria-current": isLast ? "page" : void 0,
@@ -25627,7 +25629,7 @@ function DataGrid({
25627
25629
  ] }, field.name);
25628
25630
  }) })
25629
25631
  ] }),
25630
- dangerActions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(HStack, { gap: "xs", className: "flex-shrink-0", children: dangerActions.map((action, idx) => /* @__PURE__ */ jsxRuntime.jsxs(
25632
+ dangerActions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(HStack, { gap: "xs", className: "flex-shrink-0", children: dangerActions.map((action, idx) => /* @__PURE__ */ jsxRuntime.jsx(
25631
25633
  Button,
25632
25634
  {
25633
25635
  variant: "ghost",
@@ -25635,11 +25637,10 @@ function DataGrid({
25635
25637
  onClick: handleActionClick(action, itemData),
25636
25638
  "data-testid": `action-${action.event}`,
25637
25639
  "data-row-id": String(itemData.id),
25640
+ "aria-label": action.label,
25641
+ title: action.label,
25638
25642
  className: "text-error hover:text-error hover:bg-error/10 px-2",
25639
- children: [
25640
- action.icon && renderIconInput(action.icon, { size: "xs" }),
25641
- action.label
25642
- ]
25643
+ children: action.icon ? renderIconInput(action.icon, { size: "xs" }) : action.label
25643
25644
  },
25644
25645
  idx
25645
25646
  )) })
@@ -26441,10 +26442,7 @@ var init_FileTree = __esm({
26441
26442
  className,
26442
26443
  indent = 16
26443
26444
  }) => {
26444
- const { t } = hooks.useTranslate();
26445
- if (tree.length === 0) {
26446
- return /* @__PURE__ */ jsxRuntime.jsx(Box, { className: `p-4 ${className ?? ""}`, children: /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "caption", color: "muted", children: t("fileTree.noFiles") }) });
26447
- }
26445
+ if (tree.length === 0) return null;
26448
26446
  return /* @__PURE__ */ jsxRuntime.jsx(Box, { className: `py-1 overflow-y-auto ${className ?? ""}`, role: "tree", children: tree.map((node) => /* @__PURE__ */ jsxRuntime.jsx(
26449
26447
  TreeNodeItem,
26450
26448
  {
@@ -29947,7 +29945,7 @@ var init_NumberStepper = __esm({
29947
29945
  "active:bg-muted",
29948
29946
  "transition-colors duration-instant",
29949
29947
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
29950
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
29948
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
29951
29949
  styles.button
29952
29950
  ),
29953
29951
  "aria-label": t("aria.decrease"),
@@ -29988,7 +29986,7 @@ var init_NumberStepper = __esm({
29988
29986
  "active:bg-muted",
29989
29987
  "transition-colors duration-instant",
29990
29988
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
29991
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
29989
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
29992
29990
  styles.button
29993
29991
  ),
29994
29992
  "aria-label": t("aria.increase"),
@@ -30444,7 +30442,7 @@ var init_Lightbox = __esm({
30444
30442
  "p-2 rounded-full",
30445
30443
  "text-[var(--color-foreground)] bg-[var(--color-card)]",
30446
30444
  "hover:bg-opacity-70 transition-opacity",
30447
- "focus:outline-none focus:ring-2 focus:ring-ring"
30445
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring"
30448
30446
  ),
30449
30447
  "aria-label": t("aria.closeModal"),
30450
30448
  children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "x", className: "w-6 h-6" })
@@ -30463,7 +30461,7 @@ var init_Lightbox = __esm({
30463
30461
  "p-2 rounded-full",
30464
30462
  "text-[var(--color-foreground)] bg-[var(--color-card)]",
30465
30463
  "hover:bg-opacity-70 transition-opacity",
30466
- "focus:outline-none focus:ring-2 focus:ring-ring"
30464
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring"
30467
30465
  ),
30468
30466
  "aria-label": t("aria.previousImage"),
30469
30467
  children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "chevron-left", className: "w-8 h-8" })
@@ -30500,7 +30498,7 @@ var init_Lightbox = __esm({
30500
30498
  "p-2 rounded-full",
30501
30499
  "text-[var(--color-foreground)] bg-[var(--color-card)]",
30502
30500
  "hover:bg-opacity-70 transition-opacity",
30503
- "focus:outline-none focus:ring-2 focus:ring-ring"
30501
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring"
30504
30502
  ),
30505
30503
  "aria-label": t("aria.nextImage"),
30506
30504
  children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "chevron-right", className: "w-8 h-8" })
@@ -30680,7 +30678,8 @@ function TableView({
30680
30678
  const cell = formatCell(asFieldValue(getNestedValue(row, col.field ?? col.key)), col.format);
30681
30679
  return Math.max(widest, cell.length);
30682
30680
  }, columnLabel(col).length);
30683
- return Math.min(longest, MAX_MEASURED_COL_CH);
30681
+ const chrome = col.format === "badge" ? BADGE_CHROME_CH : 0;
30682
+ return Math.min(longest + chrome, MAX_MEASURED_COL_CH);
30684
30683
  }),
30685
30684
  [colDefs, data]
30686
30685
  );
@@ -30770,7 +30769,7 @@ function TableView({
30770
30769
  col.className
30771
30770
  );
30772
30771
  if (col.format === "badge" && raw != null && raw !== "") {
30773
- 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);
30772
+ 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);
30774
30773
  }
30775
30774
  return /* @__PURE__ */ jsxRuntime.jsx(Box, { role: "cell", className: cellBase, children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: formatCell(raw, col.format) }) }, col.key);
30776
30775
  }),
@@ -30853,7 +30852,7 @@ function TableView({
30853
30852
  }
30854
30853
  );
30855
30854
  }
30856
- var MAX_MEASURED_COL_CH, alignClass, weightClass, LOOKS;
30855
+ var MAX_MEASURED_COL_CH, BADGE_CHROME_CH, alignClass, weightClass, LOOKS;
30857
30856
  var init_TableView = __esm({
30858
30857
  "components/core/molecules/TableView.tsx"() {
30859
30858
  "use client";
@@ -30872,6 +30871,7 @@ var init_TableView = __esm({
30872
30871
  init_useDataDnd();
30873
30872
  logger.createLogger("almadar:ui:table-view");
30874
30873
  MAX_MEASURED_COL_CH = 32;
30874
+ BADGE_CHROME_CH = 4;
30875
30875
  alignClass = {
30876
30876
  left: "justify-start text-left",
30877
30877
  center: "justify-center text-center",
@@ -33107,7 +33107,7 @@ var init_VoteStack = __esm({
33107
33107
  "active:bg-muted",
33108
33108
  "transition-colors duration-instant",
33109
33109
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
33110
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
33110
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
33111
33111
  styles.button
33112
33112
  ),
33113
33113
  children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "chevron-up", className: styles.icon })
@@ -33144,7 +33144,7 @@ var init_VoteStack = __esm({
33144
33144
  "active:bg-muted",
33145
33145
  "transition-colors duration-instant",
33146
33146
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
33147
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
33147
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
33148
33148
  styles.button
33149
33149
  ),
33150
33150
  children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "chevron-down", className: styles.icon })
@@ -33665,7 +33665,7 @@ var init_QrScanner = __esm({
33665
33665
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
33666
33666
  "rounded-full bg-black bg-opacity-60 p-2 text-white",
33667
33667
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
33668
- "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
33668
+ "hover:bg-opacity-80 focus:outline-none focus-visible:ring-2 focus-visible:ring-white"
33669
33669
  ),
33670
33670
  "aria-label": isPaused ? t("qrScanner.resumeScanning") : t("qrScanner.pauseScanning"),
33671
33671
  children: isPaused ? /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "play", className: "h-4 w-4" }) : /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "pause", className: "h-4 w-4" })
@@ -33680,7 +33680,7 @@ var init_QrScanner = __esm({
33680
33680
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
33681
33681
  "rounded-full bg-black bg-opacity-60 p-2 text-white",
33682
33682
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
33683
- "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
33683
+ "hover:bg-opacity-80 focus:outline-none focus-visible:ring-2 focus-visible:ring-white"
33684
33684
  ),
33685
33685
  "aria-label": currentFacing === "environment" ? t("qrScanner.switchToFrontCamera") : t("qrScanner.switchToRearCamera"),
33686
33686
  children: /* @__PURE__ */ jsxRuntime.jsx(Icon, { name: "refresh-cw", className: "h-4 w-4" })
@@ -33695,7 +33695,7 @@ var init_QrScanner = __esm({
33695
33695
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
33696
33696
  "rounded-full bg-black bg-opacity-60 px-3 py-2 text-xs text-white",
33697
33697
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
33698
- "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
33698
+ "hover:bg-opacity-80 focus:outline-none focus-visible:ring-2 focus-visible:ring-white"
33699
33699
  ),
33700
33700
  "aria-label": t("aria.mockScanDev"),
33701
33701
  children: t("qrScanner.mockScan")
@@ -45123,7 +45123,7 @@ var init_TabbedContainer = __esm({
45123
45123
  onClick: () => !isDisabled && handleTabChange(tab.id),
45124
45124
  className: cn(
45125
45125
  "flex items-center gap-2 px-4 py-3 text-sm font-medium transition-colors",
45126
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
45126
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
45127
45127
  "disabled:opacity-50 disabled:cursor-not-allowed",
45128
45128
  isActive ? "bg-primary text-primary-foreground" : "bg-card text-foreground hover:bg-muted",
45129
45129
  isVertical ? "justify-start" : "justify-center"
package/dist/avl/index.js CHANGED
@@ -5050,7 +5050,7 @@ var init_Button = __esm({
5050
5050
  "cursor-pointer",
5051
5051
  "chrome-button",
5052
5052
  "transition-all duration-normal",
5053
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-offset-[length:var(--focus-ring-offset)]",
5053
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-offset-[length:var(--focus-ring-offset)]",
5054
5054
  "disabled:opacity-50 disabled:cursor-not-allowed",
5055
5055
  variantStyles2[variant],
5056
5056
  sizeStyles[size],
@@ -5673,7 +5673,7 @@ var init_Badge = __esm({
5673
5673
  },
5674
5674
  className: cn(
5675
5675
  "inline-flex items-center justify-center rounded-sm",
5676
- "hover:bg-foreground/10 focus:outline-none focus:ring-1 focus:ring-ring",
5676
+ "hover:bg-foreground/10 focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
5677
5677
  "transition-colors",
5678
5678
  size === "sm" ? "w-4 h-4 ml-0.5" : size === "md" ? "w-5 h-5 ml-1" : "w-6 h-6 ml-1"
5679
5679
  ),
@@ -7031,7 +7031,7 @@ function NativeSelect({
7031
7031
  "block w-full border-[length:var(--border-width)] shadow-sm appearance-none",
7032
7032
  "px-3 py-2 pr-10 text-sm text-foreground font-medium",
7033
7033
  "bg-card",
7034
- "focus:outline-none focus:ring-2 focus:ring-offset-0 focus:ring-ring",
7034
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-ring",
7035
7035
  "disabled:bg-muted disabled:text-muted-foreground disabled:cursor-not-allowed",
7036
7036
  error ? "border-error focus:border-error" : "border-border focus:border-primary",
7037
7037
  className
@@ -7138,7 +7138,7 @@ function RichSelect({
7138
7138
  "block w-full border-[length:var(--border-width)] shadow-sm",
7139
7139
  "px-3 py-2 pr-10 text-sm text-start font-medium",
7140
7140
  "bg-card rounded-sm",
7141
- "focus:outline-none focus:ring-2 focus:ring-offset-0 focus:ring-ring",
7141
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-ring",
7142
7142
  "disabled:bg-muted disabled:text-muted-foreground disabled:cursor-not-allowed",
7143
7143
  error ? "border-error focus:border-error" : "border-border focus:border-primary",
7144
7144
  !hasValue && "text-muted-foreground"
@@ -8061,9 +8061,9 @@ var init_Radio = __esm({
8061
8061
  "flex items-center justify-center",
8062
8062
  "border-[length:var(--border-width)] transition-all cursor-pointer",
8063
8063
  sizeClasses4[size],
8064
- hasError ? "border-error peer-focus:ring-error/20" : "border-border peer-focus:ring-ring/20",
8064
+ hasError ? "border-error peer-focus-visible:ring-error/20" : "border-border peer-focus-visible:ring-ring/20",
8065
8065
  isChecked2 ? hasError ? "border-error" : "border-primary bg-primary" : "",
8066
- "peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-offset-2",
8066
+ "peer-focus:outline-none peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2",
8067
8067
  disabled && "opacity-50 cursor-not-allowed",
8068
8068
  !disabled && "hover:border-[var(--color-border-hover)]"
8069
8069
  ),
@@ -8449,7 +8449,7 @@ var init_ThemeToggle = __esm({
8449
8449
  "inline-flex items-center justify-center gap-2",
8450
8450
  "text-foreground",
8451
8451
  "hover:bg-muted border-[length:var(--border-width)] border-transparent hover:border-border",
8452
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
8452
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
8453
8453
  "transition-colors duration-fast",
8454
8454
  sizeClasses5[size],
8455
8455
  className
@@ -14836,10 +14836,12 @@ var init_Container = __esm({
14836
14836
  };
14837
14837
  paddingStyles3 = {
14838
14838
  none: "px-0",
14839
- sm: "px-4",
14840
- md: "px-6",
14841
- lg: "px-8",
14842
- xl: "px-12"
14839
+ // Mobile-tighter, desktop-identical: fixed px-6 on a 360px phone eats ~13% of
14840
+ // the viewport, so each token steps down below the sm breakpoint.
14841
+ sm: "px-3 sm:px-4",
14842
+ md: "px-4 sm:px-6",
14843
+ lg: "px-4 sm:px-6 md:px-8",
14844
+ xl: "px-4 sm:px-8 md:px-12"
14843
14845
  };
14844
14846
  Container = ({
14845
14847
  size,
@@ -15538,7 +15540,7 @@ var init_Accordion = __esm({
15538
15540
  "bg-card",
15539
15541
  "hover:bg-muted",
15540
15542
  "transition-colors duration-fast",
15541
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-inset",
15543
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset",
15542
15544
  "disabled:opacity-50 disabled:cursor-not-allowed",
15543
15545
  isOpen && "bg-muted font-bold"
15544
15546
  ),
@@ -20916,7 +20918,7 @@ var init_Breadcrumb = __esm({
20916
20918
  },
20917
20919
  className: cn(
20918
20920
  "flex items-center gap-1.5 transition-colors",
20919
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
20921
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
20920
20922
  isLast ? "text-foreground font-bold cursor-default" : "text-muted-foreground hover:text-foreground"
20921
20923
  ),
20922
20924
  "aria-current": isLast ? "page" : void 0,
@@ -25551,7 +25553,7 @@ function DataGrid({
25551
25553
  ] }, field.name);
25552
25554
  }) })
25553
25555
  ] }),
25554
- dangerActions.length > 0 && /* @__PURE__ */ jsx(HStack, { gap: "xs", className: "flex-shrink-0", children: dangerActions.map((action, idx) => /* @__PURE__ */ jsxs(
25556
+ dangerActions.length > 0 && /* @__PURE__ */ jsx(HStack, { gap: "xs", className: "flex-shrink-0", children: dangerActions.map((action, idx) => /* @__PURE__ */ jsx(
25555
25557
  Button,
25556
25558
  {
25557
25559
  variant: "ghost",
@@ -25559,11 +25561,10 @@ function DataGrid({
25559
25561
  onClick: handleActionClick(action, itemData),
25560
25562
  "data-testid": `action-${action.event}`,
25561
25563
  "data-row-id": String(itemData.id),
25564
+ "aria-label": action.label,
25565
+ title: action.label,
25562
25566
  className: "text-error hover:text-error hover:bg-error/10 px-2",
25563
- children: [
25564
- action.icon && renderIconInput(action.icon, { size: "xs" }),
25565
- action.label
25566
- ]
25567
+ children: action.icon ? renderIconInput(action.icon, { size: "xs" }) : action.label
25567
25568
  },
25568
25569
  idx
25569
25570
  )) })
@@ -26365,10 +26366,7 @@ var init_FileTree = __esm({
26365
26366
  className,
26366
26367
  indent = 16
26367
26368
  }) => {
26368
- const { t } = useTranslate();
26369
- if (tree.length === 0) {
26370
- return /* @__PURE__ */ jsx(Box, { className: `p-4 ${className ?? ""}`, children: /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: t("fileTree.noFiles") }) });
26371
- }
26369
+ if (tree.length === 0) return null;
26372
26370
  return /* @__PURE__ */ jsx(Box, { className: `py-1 overflow-y-auto ${className ?? ""}`, role: "tree", children: tree.map((node) => /* @__PURE__ */ jsx(
26373
26371
  TreeNodeItem,
26374
26372
  {
@@ -29871,7 +29869,7 @@ var init_NumberStepper = __esm({
29871
29869
  "active:bg-muted",
29872
29870
  "transition-colors duration-instant",
29873
29871
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
29874
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
29872
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
29875
29873
  styles.button
29876
29874
  ),
29877
29875
  "aria-label": t("aria.decrease"),
@@ -29912,7 +29910,7 @@ var init_NumberStepper = __esm({
29912
29910
  "active:bg-muted",
29913
29911
  "transition-colors duration-instant",
29914
29912
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
29915
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
29913
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
29916
29914
  styles.button
29917
29915
  ),
29918
29916
  "aria-label": t("aria.increase"),
@@ -30368,7 +30366,7 @@ var init_Lightbox = __esm({
30368
30366
  "p-2 rounded-full",
30369
30367
  "text-[var(--color-foreground)] bg-[var(--color-card)]",
30370
30368
  "hover:bg-opacity-70 transition-opacity",
30371
- "focus:outline-none focus:ring-2 focus:ring-ring"
30369
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring"
30372
30370
  ),
30373
30371
  "aria-label": t("aria.closeModal"),
30374
30372
  children: /* @__PURE__ */ jsx(Icon, { name: "x", className: "w-6 h-6" })
@@ -30387,7 +30385,7 @@ var init_Lightbox = __esm({
30387
30385
  "p-2 rounded-full",
30388
30386
  "text-[var(--color-foreground)] bg-[var(--color-card)]",
30389
30387
  "hover:bg-opacity-70 transition-opacity",
30390
- "focus:outline-none focus:ring-2 focus:ring-ring"
30388
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring"
30391
30389
  ),
30392
30390
  "aria-label": t("aria.previousImage"),
30393
30391
  children: /* @__PURE__ */ jsx(Icon, { name: "chevron-left", className: "w-8 h-8" })
@@ -30424,7 +30422,7 @@ var init_Lightbox = __esm({
30424
30422
  "p-2 rounded-full",
30425
30423
  "text-[var(--color-foreground)] bg-[var(--color-card)]",
30426
30424
  "hover:bg-opacity-70 transition-opacity",
30427
- "focus:outline-none focus:ring-2 focus:ring-ring"
30425
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring"
30428
30426
  ),
30429
30427
  "aria-label": t("aria.nextImage"),
30430
30428
  children: /* @__PURE__ */ jsx(Icon, { name: "chevron-right", className: "w-8 h-8" })
@@ -30604,7 +30602,8 @@ function TableView({
30604
30602
  const cell = formatCell(asFieldValue(getNestedValue(row, col.field ?? col.key)), col.format);
30605
30603
  return Math.max(widest, cell.length);
30606
30604
  }, columnLabel(col).length);
30607
- return Math.min(longest, MAX_MEASURED_COL_CH);
30605
+ const chrome = col.format === "badge" ? BADGE_CHROME_CH : 0;
30606
+ return Math.min(longest + chrome, MAX_MEASURED_COL_CH);
30608
30607
  }),
30609
30608
  [colDefs, data]
30610
30609
  );
@@ -30694,7 +30693,7 @@ function TableView({
30694
30693
  col.className
30695
30694
  );
30696
30695
  if (col.format === "badge" && raw != null && raw !== "") {
30697
- return /* @__PURE__ */ jsx(Box, { role: "cell", className: cellBase, children: /* @__PURE__ */ jsx(Badge, { variant: statusVariant4(String(raw)), size: "sm", children: String(raw) }) }, col.key);
30696
+ 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);
30698
30697
  }
30699
30698
  return /* @__PURE__ */ jsx(Box, { role: "cell", className: cellBase, children: /* @__PURE__ */ jsx("span", { className: "truncate", children: formatCell(raw, col.format) }) }, col.key);
30700
30699
  }),
@@ -30777,7 +30776,7 @@ function TableView({
30777
30776
  }
30778
30777
  );
30779
30778
  }
30780
- var MAX_MEASURED_COL_CH, alignClass, weightClass, LOOKS;
30779
+ var MAX_MEASURED_COL_CH, BADGE_CHROME_CH, alignClass, weightClass, LOOKS;
30781
30780
  var init_TableView = __esm({
30782
30781
  "components/core/molecules/TableView.tsx"() {
30783
30782
  "use client";
@@ -30796,6 +30795,7 @@ var init_TableView = __esm({
30796
30795
  init_useDataDnd();
30797
30796
  createLogger("almadar:ui:table-view");
30798
30797
  MAX_MEASURED_COL_CH = 32;
30798
+ BADGE_CHROME_CH = 4;
30799
30799
  alignClass = {
30800
30800
  left: "justify-start text-left",
30801
30801
  center: "justify-center text-center",
@@ -33031,7 +33031,7 @@ var init_VoteStack = __esm({
33031
33031
  "active:bg-muted",
33032
33032
  "transition-colors duration-instant",
33033
33033
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
33034
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
33034
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
33035
33035
  styles.button
33036
33036
  ),
33037
33037
  children: /* @__PURE__ */ jsx(Icon, { name: "chevron-up", className: styles.icon })
@@ -33068,7 +33068,7 @@ var init_VoteStack = __esm({
33068
33068
  "active:bg-muted",
33069
33069
  "transition-colors duration-instant",
33070
33070
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
33071
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
33071
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
33072
33072
  styles.button
33073
33073
  ),
33074
33074
  children: /* @__PURE__ */ jsx(Icon, { name: "chevron-down", className: styles.icon })
@@ -33589,7 +33589,7 @@ var init_QrScanner = __esm({
33589
33589
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
33590
33590
  "rounded-full bg-black bg-opacity-60 p-2 text-white",
33591
33591
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
33592
- "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
33592
+ "hover:bg-opacity-80 focus:outline-none focus-visible:ring-2 focus-visible:ring-white"
33593
33593
  ),
33594
33594
  "aria-label": isPaused ? t("qrScanner.resumeScanning") : t("qrScanner.pauseScanning"),
33595
33595
  children: isPaused ? /* @__PURE__ */ jsx(Icon, { name: "play", className: "h-4 w-4" }) : /* @__PURE__ */ jsx(Icon, { name: "pause", className: "h-4 w-4" })
@@ -33604,7 +33604,7 @@ var init_QrScanner = __esm({
33604
33604
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
33605
33605
  "rounded-full bg-black bg-opacity-60 p-2 text-white",
33606
33606
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
33607
- "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
33607
+ "hover:bg-opacity-80 focus:outline-none focus-visible:ring-2 focus-visible:ring-white"
33608
33608
  ),
33609
33609
  "aria-label": currentFacing === "environment" ? t("qrScanner.switchToFrontCamera") : t("qrScanner.switchToRearCamera"),
33610
33610
  children: /* @__PURE__ */ jsx(Icon, { name: "refresh-cw", className: "h-4 w-4" })
@@ -33619,7 +33619,7 @@ var init_QrScanner = __esm({
33619
33619
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
33620
33620
  "rounded-full bg-black bg-opacity-60 px-3 py-2 text-xs text-white",
33621
33621
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
33622
- "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
33622
+ "hover:bg-opacity-80 focus:outline-none focus-visible:ring-2 focus-visible:ring-white"
33623
33623
  ),
33624
33624
  "aria-label": t("aria.mockScanDev"),
33625
33625
  children: t("qrScanner.mockScan")
@@ -45047,7 +45047,7 @@ var init_TabbedContainer = __esm({
45047
45047
  onClick: () => !isDisabled && handleTabChange(tab.id),
45048
45048
  className: cn(
45049
45049
  "flex items-center gap-2 px-4 py-3 text-sm font-medium transition-colors",
45050
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
45050
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
45051
45051
  "disabled:opacity-50 disabled:cursor-not-allowed",
45052
45052
  isActive ? "bg-primary text-primary-foreground" : "bg-card text-foreground hover:bg-muted",
45053
45053
  isVertical ? "justify-start" : "justify-center"