@almadar/ui 5.129.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.
@@ -1857,7 +1857,7 @@ var init_Button = __esm({
1857
1857
  "cursor-pointer",
1858
1858
  "chrome-button",
1859
1859
  "transition-all duration-normal",
1860
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-offset-[length:var(--focus-ring-offset)]",
1860
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-offset-[length:var(--focus-ring-offset)]",
1861
1861
  "disabled:opacity-50 disabled:cursor-not-allowed",
1862
1862
  variantStyles[variant],
1863
1863
  sizeStyles[size],
@@ -2155,7 +2155,7 @@ function NativeSelect({
2155
2155
  "block w-full border-[length:var(--border-width)] shadow-sm appearance-none",
2156
2156
  "px-3 py-2 pr-10 text-sm text-foreground font-medium",
2157
2157
  "bg-card",
2158
- "focus:outline-none focus:ring-2 focus:ring-offset-0 focus:ring-ring",
2158
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-ring",
2159
2159
  "disabled:bg-muted disabled:text-muted-foreground disabled:cursor-not-allowed",
2160
2160
  error ? "border-error focus:border-error" : "border-border focus:border-primary",
2161
2161
  className
@@ -2262,7 +2262,7 @@ function RichSelect({
2262
2262
  "block w-full border-[length:var(--border-width)] shadow-sm",
2263
2263
  "px-3 py-2 pr-10 text-sm text-start font-medium",
2264
2264
  "bg-card rounded-sm",
2265
- "focus:outline-none focus:ring-2 focus:ring-offset-0 focus:ring-ring",
2265
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-ring",
2266
2266
  "disabled:bg-muted disabled:text-muted-foreground disabled:cursor-not-allowed",
2267
2267
  error ? "border-error focus:border-error" : "border-border focus:border-primary",
2268
2268
  !hasValue && "text-muted-foreground"
@@ -2636,7 +2636,7 @@ var init_Badge = __esm({
2636
2636
  },
2637
2637
  className: cn(
2638
2638
  "inline-flex items-center justify-center rounded-sm",
2639
- "hover:bg-foreground/10 focus:outline-none focus:ring-1 focus:ring-ring",
2639
+ "hover:bg-foreground/10 focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
2640
2640
  "transition-colors",
2641
2641
  size === "sm" ? "w-4 h-4 ml-0.5" : size === "md" ? "w-5 h-5 ml-1" : "w-6 h-6 ml-1"
2642
2642
  ),
@@ -3536,9 +3536,9 @@ var init_Radio = __esm({
3536
3536
  "flex items-center justify-center",
3537
3537
  "border-[length:var(--border-width)] transition-all cursor-pointer",
3538
3538
  sizeClasses3[size],
3539
- hasError ? "border-error peer-focus:ring-error/20" : "border-border peer-focus:ring-ring/20",
3539
+ hasError ? "border-error peer-focus-visible:ring-error/20" : "border-border peer-focus-visible:ring-ring/20",
3540
3540
  isChecked2 ? hasError ? "border-error" : "border-primary bg-primary" : "",
3541
- "peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-offset-2",
3541
+ "peer-focus:outline-none peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2",
3542
3542
  disabled && "opacity-50 cursor-not-allowed",
3543
3543
  !disabled && "hover:border-[var(--color-border-hover)]"
3544
3544
  ),
@@ -4133,7 +4133,7 @@ var init_ThemeToggle = __esm({
4133
4133
  "inline-flex items-center justify-center gap-2",
4134
4134
  "text-foreground",
4135
4135
  "hover:bg-muted border-[length:var(--border-width)] border-transparent hover:border-border",
4136
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
4136
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
4137
4137
  "transition-colors duration-fast",
4138
4138
  sizeClasses4[size],
4139
4139
  className
@@ -7032,10 +7032,12 @@ var init_Container = __esm({
7032
7032
  };
7033
7033
  paddingStyles3 = {
7034
7034
  none: "px-0",
7035
- sm: "px-4",
7036
- md: "px-6",
7037
- lg: "px-8",
7038
- xl: "px-12"
7035
+ // Mobile-tighter, desktop-identical: fixed px-6 on a 360px phone eats ~13% of
7036
+ // the viewport, so each token steps down below the sm breakpoint.
7037
+ sm: "px-3 sm:px-4",
7038
+ md: "px-4 sm:px-6",
7039
+ lg: "px-4 sm:px-6 md:px-8",
7040
+ xl: "px-4 sm:px-8 md:px-12"
7039
7041
  };
7040
7042
  exports.Container = ({
7041
7043
  size,
@@ -7734,7 +7736,7 @@ var init_Accordion = __esm({
7734
7736
  "bg-card",
7735
7737
  "hover:bg-muted",
7736
7738
  "transition-colors duration-fast",
7737
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-inset",
7739
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset",
7738
7740
  "disabled:opacity-50 disabled:cursor-not-allowed",
7739
7741
  isOpen && "bg-muted font-bold"
7740
7742
  ),
@@ -14338,7 +14340,7 @@ var init_Breadcrumb = __esm({
14338
14340
  },
14339
14341
  className: cn(
14340
14342
  "flex items-center gap-1.5 transition-colors",
14341
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
14343
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
14342
14344
  isLast ? "text-foreground font-bold cursor-default" : "text-muted-foreground hover:text-foreground"
14343
14345
  ),
14344
14346
  "aria-current": isLast ? "page" : void 0,
@@ -20941,7 +20943,7 @@ function DataGrid({
20941
20943
  ] }, field.name);
20942
20944
  }) })
20943
20945
  ] }),
20944
- dangerActions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(exports.HStack, { gap: "xs", className: "flex-shrink-0", children: dangerActions.map((action, idx) => /* @__PURE__ */ jsxRuntime.jsxs(
20946
+ dangerActions.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(exports.HStack, { gap: "xs", className: "flex-shrink-0", children: dangerActions.map((action, idx) => /* @__PURE__ */ jsxRuntime.jsx(
20945
20947
  exports.Button,
20946
20948
  {
20947
20949
  variant: "ghost",
@@ -20949,11 +20951,10 @@ function DataGrid({
20949
20951
  onClick: handleActionClick(action, itemData),
20950
20952
  "data-testid": `action-${action.event}`,
20951
20953
  "data-row-id": String(itemData.id),
20954
+ "aria-label": action.label,
20955
+ title: action.label,
20952
20956
  className: "text-error hover:text-error hover:bg-error/10 px-2",
20953
- children: [
20954
- action.icon && renderIconInput(action.icon, { size: "xs" }),
20955
- action.label
20956
- ]
20957
+ children: action.icon ? renderIconInput(action.icon, { size: "xs" }) : action.label
20957
20958
  },
20958
20959
  idx
20959
20960
  )) })
@@ -22589,10 +22590,7 @@ var init_FileTree = __esm({
22589
22590
  className,
22590
22591
  indent = 16
22591
22592
  }) => {
22592
- const { t } = hooks.useTranslate();
22593
- if (tree.length === 0) {
22594
- return /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: `p-4 ${className ?? ""}`, children: /* @__PURE__ */ jsxRuntime.jsx(exports.Typography, { variant: "caption", color: "muted", children: t("fileTree.noFiles") }) });
22595
- }
22593
+ if (tree.length === 0) return null;
22596
22594
  return /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { className: `py-1 overflow-y-auto ${className ?? ""}`, role: "tree", children: tree.map((node) => /* @__PURE__ */ jsxRuntime.jsx(
22597
22595
  TreeNodeItem,
22598
22596
  {
@@ -22705,7 +22703,7 @@ var init_useQuerySingleton = __esm({
22705
22703
  queryStores = /* @__PURE__ */ new Map();
22706
22704
  }
22707
22705
  });
22708
- var resolveFilterType, lookStyles6; exports.FilterGroup = void 0;
22706
+ var resolveFilterType, lookStyles6, FilterGroupControls, FilterGroupPopover; exports.FilterGroup = void 0;
22709
22707
  var init_FilterGroup = __esm({
22710
22708
  "components/core/molecules/FilterGroup.tsx"() {
22711
22709
  "use client";
@@ -22723,10 +22721,10 @@ var init_FilterGroup = __esm({
22723
22721
  toolbar: "",
22724
22722
  chips: "gap-1 [&_input]:rounded-pill [&_select]:rounded-pill [&_button]:rounded-pill [&_input]:!px-3 [&_select]:!px-3 [&_input]:bg-muted [&_select]:bg-muted [&_label]:hidden",
22725
22723
  pills: "gap-2 [&_input]:rounded-pill [&_select]:rounded-pill [&_button]:rounded-pill",
22726
- "popover-trigger": "[&>*:not(:first-child)]:hidden",
22724
+ "popover-trigger": "",
22727
22725
  "inline-column-header": "hidden"
22728
22726
  };
22729
- exports.FilterGroup = ({
22727
+ FilterGroupControls = ({
22730
22728
  entity,
22731
22729
  filters,
22732
22730
  onFilterChange,
@@ -23062,7 +23060,7 @@ var init_FilterGroup = __esm({
23062
23060
  className: "text-muted-foreground",
23063
23061
  children: [
23064
23062
  /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { name: "filter", className: "h-4 w-4" }),
23065
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm font-bold uppercase tracking-wide", children: t("filterGroup.filters") })
23063
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-bold uppercase tracking-wide", children: t("filterGroup.filters") })
23066
23064
  ]
23067
23065
  }
23068
23066
  ),
@@ -23153,6 +23151,42 @@ var init_FilterGroup = __esm({
23153
23151
  }
23154
23152
  );
23155
23153
  };
23154
+ FilterGroupControls.displayName = "FilterGroupControls";
23155
+ FilterGroupPopover = (props) => {
23156
+ const { t } = hooks.useTranslate();
23157
+ const [open, setOpen] = React74.useState(false);
23158
+ const queryState = useQuerySingleton(props.query);
23159
+ const activeFilterCount = queryState?.filters ? Object.values(queryState.filters).filter((v) => v !== null && v !== void 0).length : 0;
23160
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: cn("relative inline-block", props.className), children: [
23161
+ /* @__PURE__ */ jsxRuntime.jsx(
23162
+ exports.Button,
23163
+ {
23164
+ variant: activeFilterCount > 0 ? "secondary" : "ghost",
23165
+ size: "sm",
23166
+ leftIcon: "filter",
23167
+ onClick: () => setOpen((o) => !o),
23168
+ "aria-expanded": open,
23169
+ "aria-haspopup": "true",
23170
+ children: /* @__PURE__ */ jsxRuntime.jsxs(exports.HStack, { gap: "xs", align: "center", children: [
23171
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: t("filterGroup.filters") }),
23172
+ activeFilterCount > 0 && /* @__PURE__ */ jsxRuntime.jsx(exports.Badge, { variant: "primary", size: "sm", children: activeFilterCount })
23173
+ ] })
23174
+ }
23175
+ ),
23176
+ open && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute left-0 z-50 mt-2 min-w-[16rem] rounded-lg border border-[var(--color-border)] bg-[var(--color-card)] p-card-md shadow-main", children: /* @__PURE__ */ jsxRuntime.jsx(
23177
+ FilterGroupControls,
23178
+ {
23179
+ ...props,
23180
+ className: void 0,
23181
+ look: "toolbar",
23182
+ variant: "vertical",
23183
+ showIcon: false
23184
+ }
23185
+ ) })
23186
+ ] });
23187
+ };
23188
+ FilterGroupPopover.displayName = "FilterGroupPopover";
23189
+ exports.FilterGroup = (props) => props.look === "popover-trigger" ? /* @__PURE__ */ jsxRuntime.jsx(FilterGroupPopover, { ...props }) : /* @__PURE__ */ jsxRuntime.jsx(FilterGroupControls, { ...props });
23156
23190
  exports.FilterGroup.displayName = "FilterGroup";
23157
23191
  }
23158
23192
  });
@@ -28879,7 +28913,7 @@ var init_NumberStepper = __esm({
28879
28913
  "active:bg-muted",
28880
28914
  "transition-colors duration-instant",
28881
28915
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
28882
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
28916
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
28883
28917
  styles.button
28884
28918
  ),
28885
28919
  "aria-label": t("aria.decrease"),
@@ -28920,7 +28954,7 @@ var init_NumberStepper = __esm({
28920
28954
  "active:bg-muted",
28921
28955
  "transition-colors duration-instant",
28922
28956
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
28923
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
28957
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
28924
28958
  styles.button
28925
28959
  ),
28926
28960
  "aria-label": t("aria.increase"),
@@ -29376,7 +29410,7 @@ var init_Lightbox = __esm({
29376
29410
  "p-2 rounded-full",
29377
29411
  "text-[var(--color-foreground)] bg-[var(--color-card)]",
29378
29412
  "hover:bg-opacity-70 transition-opacity",
29379
- "focus:outline-none focus:ring-2 focus:ring-ring"
29413
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring"
29380
29414
  ),
29381
29415
  "aria-label": t("aria.closeModal"),
29382
29416
  children: /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { name: "x", className: "w-6 h-6" })
@@ -29395,7 +29429,7 @@ var init_Lightbox = __esm({
29395
29429
  "p-2 rounded-full",
29396
29430
  "text-[var(--color-foreground)] bg-[var(--color-card)]",
29397
29431
  "hover:bg-opacity-70 transition-opacity",
29398
- "focus:outline-none focus:ring-2 focus:ring-ring"
29432
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring"
29399
29433
  ),
29400
29434
  "aria-label": t("aria.previousImage"),
29401
29435
  children: /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { name: "chevron-left", className: "w-8 h-8" })
@@ -29432,7 +29466,7 @@ var init_Lightbox = __esm({
29432
29466
  "p-2 rounded-full",
29433
29467
  "text-[var(--color-foreground)] bg-[var(--color-card)]",
29434
29468
  "hover:bg-opacity-70 transition-opacity",
29435
- "focus:outline-none focus:ring-2 focus:ring-ring"
29469
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring"
29436
29470
  ),
29437
29471
  "aria-label": t("aria.nextImage"),
29438
29472
  children: /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { name: "chevron-right", className: "w-8 h-8" })
@@ -29606,9 +29640,20 @@ function TableView({
29606
29640
  const inlineActionCount = hasActions ? maxInlineActions != null ? Math.min(itemActions.length, maxInlineActions) : itemActions.length : 0;
29607
29641
  const hasOverflowActions = hasActions && maxInlineActions != null && itemActions.length > maxInlineActions;
29608
29642
  const actionsTrack = hasActions ? `${inlineActionCount * 6 + (hasOverflowActions ? 3 : 0)}rem` : null;
29643
+ const colFloors = React74__namespace.default.useMemo(
29644
+ () => colDefs.map((col) => {
29645
+ const longest = data.reduce((widest, row) => {
29646
+ const cell = formatCell(asFieldValue(getNestedValue(row, col.field ?? col.key)), col.format);
29647
+ return Math.max(widest, cell.length);
29648
+ }, columnLabel(col).length);
29649
+ const chrome = col.format === "badge" ? BADGE_CHROME_CH : 0;
29650
+ return Math.min(longest + chrome, MAX_MEASURED_COL_CH);
29651
+ }),
29652
+ [colDefs, data]
29653
+ );
29609
29654
  const gridTemplateColumns = [
29610
29655
  selectable ? "auto" : null,
29611
- ...colDefs.map((c) => c.width ?? "minmax(0, 1fr)"),
29656
+ ...colDefs.map((c, i) => c.width ?? `minmax(${colFloors[i]}ch, 1fr)`),
29612
29657
  actionsTrack
29613
29658
  ].filter(Boolean).join(" ");
29614
29659
  const header = /* @__PURE__ */ jsxRuntime.jsxs(
@@ -29692,7 +29737,7 @@ function TableView({
29692
29737
  col.className
29693
29738
  );
29694
29739
  if (col.format === "badge" && raw != null && raw !== "") {
29695
- return /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { role: "cell", className: cellBase, children: /* @__PURE__ */ jsxRuntime.jsx(exports.Badge, { variant: statusVariant4(String(raw)), size: "sm", children: String(raw) }) }, col.key);
29740
+ return /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { role: "cell", className: cellBase, children: /* @__PURE__ */ jsxRuntime.jsx(exports.Badge, { variant: statusVariant4(String(raw)), size: "sm", className: "whitespace-nowrap", children: String(raw) }) }, col.key);
29696
29741
  }
29697
29742
  return /* @__PURE__ */ jsxRuntime.jsx(exports.Box, { role: "cell", className: cellBase, children: /* @__PURE__ */ jsxRuntime.jsx("span", { className: "truncate", children: formatCell(raw, col.format) }) }, col.key);
29698
29743
  }),
@@ -29775,7 +29820,7 @@ function TableView({
29775
29820
  }
29776
29821
  );
29777
29822
  }
29778
- var alignClass, weightClass, LOOKS;
29823
+ var MAX_MEASURED_COL_CH, BADGE_CHROME_CH, alignClass, weightClass, LOOKS;
29779
29824
  var init_TableView = __esm({
29780
29825
  "components/core/molecules/TableView.tsx"() {
29781
29826
  "use client";
@@ -29793,6 +29838,8 @@ var init_TableView = __esm({
29793
29838
  init_Menu();
29794
29839
  init_useDataDnd();
29795
29840
  logger.createLogger("almadar:ui:table-view");
29841
+ MAX_MEASURED_COL_CH = 32;
29842
+ BADGE_CHROME_CH = 4;
29796
29843
  alignClass = {
29797
29844
  left: "justify-start text-left",
29798
29845
  center: "justify-center text-center",
@@ -32028,7 +32075,7 @@ var init_VoteStack = __esm({
32028
32075
  "active:bg-muted",
32029
32076
  "transition-colors duration-instant",
32030
32077
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
32031
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
32078
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
32032
32079
  styles.button
32033
32080
  ),
32034
32081
  children: /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { name: "chevron-up", className: styles.icon })
@@ -32065,7 +32112,7 @@ var init_VoteStack = __esm({
32065
32112
  "active:bg-muted",
32066
32113
  "transition-colors duration-instant",
32067
32114
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
32068
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
32115
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
32069
32116
  styles.button
32070
32117
  ),
32071
32118
  children: /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { name: "chevron-down", className: styles.icon })
@@ -32586,7 +32633,7 @@ var init_QrScanner = __esm({
32586
32633
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
32587
32634
  "rounded-full bg-black bg-opacity-60 p-2 text-white",
32588
32635
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
32589
- "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
32636
+ "hover:bg-opacity-80 focus:outline-none focus-visible:ring-2 focus-visible:ring-white"
32590
32637
  ),
32591
32638
  "aria-label": isPaused ? t("qrScanner.resumeScanning") : t("qrScanner.pauseScanning"),
32592
32639
  children: isPaused ? /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { name: "play", className: "h-4 w-4" }) : /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { name: "pause", className: "h-4 w-4" })
@@ -32601,7 +32648,7 @@ var init_QrScanner = __esm({
32601
32648
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
32602
32649
  "rounded-full bg-black bg-opacity-60 p-2 text-white",
32603
32650
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
32604
- "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
32651
+ "hover:bg-opacity-80 focus:outline-none focus-visible:ring-2 focus-visible:ring-white"
32605
32652
  ),
32606
32653
  "aria-label": currentFacing === "environment" ? t("qrScanner.switchToFrontCamera") : t("qrScanner.switchToRearCamera"),
32607
32654
  children: /* @__PURE__ */ jsxRuntime.jsx(exports.Icon, { name: "refresh-cw", className: "h-4 w-4" })
@@ -32616,7 +32663,7 @@ var init_QrScanner = __esm({
32616
32663
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
32617
32664
  "rounded-full bg-black bg-opacity-60 px-3 py-2 text-xs text-white",
32618
32665
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
32619
- "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
32666
+ "hover:bg-opacity-80 focus:outline-none focus-visible:ring-2 focus-visible:ring-white"
32620
32667
  ),
32621
32668
  "aria-label": t("aria.mockScanDev"),
32622
32669
  children: t("qrScanner.mockScan")
@@ -44655,7 +44702,7 @@ var init_TabbedContainer = __esm({
44655
44702
  onClick: () => !isDisabled && handleTabChange(tab.id),
44656
44703
  className: cn(
44657
44704
  "flex items-center gap-2 px-4 py-3 text-sm font-medium transition-colors",
44658
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
44705
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
44659
44706
  "disabled:opacity-50 disabled:cursor-not-allowed",
44660
44707
  isActive ? "bg-primary text-primary-foreground" : "bg-card text-foreground hover:bg-muted",
44661
44708
  isVertical ? "justify-start" : "justify-center"
@@ -48662,7 +48709,7 @@ var I18nContext = React74.createContext({
48662
48709
  });
48663
48710
  I18nContext.displayName = "I18nContext";
48664
48711
  var I18nProvider = I18nContext.Provider;
48665
- function useTranslate115() {
48712
+ function useTranslate114() {
48666
48713
  return React74.useContext(I18nContext);
48667
48714
  }
48668
48715
  function createTranslate(messages) {
@@ -49081,7 +49128,7 @@ exports.useSharedEntityStoreContext = useSharedEntityStoreContext;
49081
49128
  exports.useSwipeGesture = useSwipeGesture;
49082
49129
  exports.useTapReveal = useTapReveal;
49083
49130
  exports.useTraitListens = useTraitListens;
49084
- exports.useTranslate = useTranslate115;
49131
+ exports.useTranslate = useTranslate114;
49085
49132
  exports.useUIEvents = useUIEvents;
49086
49133
  exports.useUISlotManager = useUISlotManager;
49087
49134
  exports.useUnitSpriteAtlas = useUnitSpriteAtlas;
@@ -4011,10 +4011,6 @@ interface FilterGroupProps {
4011
4011
  /** Declarative clear event — emits UI:{clearEvent} via eventBus on clear-all (alongside canonical UI:CLEAR_FILTERS) */
4012
4012
  clearEvent?: EventKey;
4013
4013
  }
4014
- /**
4015
- * FilterGroup - Renders filter controls for entity data
4016
- * Uses atoms: Button, Select, Badge, HStack
4017
- */
4018
4014
  declare const FilterGroup: React__default.FC<FilterGroupProps>;
4019
4015
 
4020
4016
  /**
@@ -4011,10 +4011,6 @@ interface FilterGroupProps {
4011
4011
  /** Declarative clear event — emits UI:{clearEvent} via eventBus on clear-all (alongside canonical UI:CLEAR_FILTERS) */
4012
4012
  clearEvent?: EventKey;
4013
4013
  }
4014
- /**
4015
- * FilterGroup - Renders filter controls for entity data
4016
- * Uses atoms: Button, Select, Badge, HStack
4017
- */
4018
4014
  declare const FilterGroup: React__default.FC<FilterGroupProps>;
4019
4015
 
4020
4016
  /**