@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.
@@ -1782,7 +1782,7 @@ var init_Button = __esm({
1782
1782
  "cursor-pointer",
1783
1783
  "chrome-button",
1784
1784
  "transition-all duration-normal",
1785
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-offset-[length:var(--focus-ring-offset)]",
1785
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-offset-[length:var(--focus-ring-offset)]",
1786
1786
  "disabled:opacity-50 disabled:cursor-not-allowed",
1787
1787
  variantStyles[variant],
1788
1788
  sizeStyles[size],
@@ -2080,7 +2080,7 @@ function NativeSelect({
2080
2080
  "block w-full border-[length:var(--border-width)] shadow-sm appearance-none",
2081
2081
  "px-3 py-2 pr-10 text-sm text-foreground font-medium",
2082
2082
  "bg-card",
2083
- "focus:outline-none focus:ring-2 focus:ring-offset-0 focus:ring-ring",
2083
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-ring",
2084
2084
  "disabled:bg-muted disabled:text-muted-foreground disabled:cursor-not-allowed",
2085
2085
  error ? "border-error focus:border-error" : "border-border focus:border-primary",
2086
2086
  className
@@ -2187,7 +2187,7 @@ function RichSelect({
2187
2187
  "block w-full border-[length:var(--border-width)] shadow-sm",
2188
2188
  "px-3 py-2 pr-10 text-sm text-start font-medium",
2189
2189
  "bg-card rounded-sm",
2190
- "focus:outline-none focus:ring-2 focus:ring-offset-0 focus:ring-ring",
2190
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-0 focus-visible:ring-ring",
2191
2191
  "disabled:bg-muted disabled:text-muted-foreground disabled:cursor-not-allowed",
2192
2192
  error ? "border-error focus:border-error" : "border-border focus:border-primary",
2193
2193
  !hasValue && "text-muted-foreground"
@@ -2561,7 +2561,7 @@ var init_Badge = __esm({
2561
2561
  },
2562
2562
  className: cn(
2563
2563
  "inline-flex items-center justify-center rounded-sm",
2564
- "hover:bg-foreground/10 focus:outline-none focus:ring-1 focus:ring-ring",
2564
+ "hover:bg-foreground/10 focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
2565
2565
  "transition-colors",
2566
2566
  size === "sm" ? "w-4 h-4 ml-0.5" : size === "md" ? "w-5 h-5 ml-1" : "w-6 h-6 ml-1"
2567
2567
  ),
@@ -3461,9 +3461,9 @@ var init_Radio = __esm({
3461
3461
  "flex items-center justify-center",
3462
3462
  "border-[length:var(--border-width)] transition-all cursor-pointer",
3463
3463
  sizeClasses3[size],
3464
- hasError ? "border-error peer-focus:ring-error/20" : "border-border peer-focus:ring-ring/20",
3464
+ hasError ? "border-error peer-focus-visible:ring-error/20" : "border-border peer-focus-visible:ring-ring/20",
3465
3465
  isChecked2 ? hasError ? "border-error" : "border-primary bg-primary" : "",
3466
- "peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-offset-2",
3466
+ "peer-focus:outline-none peer-focus-visible:ring-2 peer-focus-visible:ring-offset-2",
3467
3467
  disabled && "opacity-50 cursor-not-allowed",
3468
3468
  !disabled && "hover:border-[var(--color-border-hover)]"
3469
3469
  ),
@@ -4058,7 +4058,7 @@ var init_ThemeToggle = __esm({
4058
4058
  "inline-flex items-center justify-center gap-2",
4059
4059
  "text-foreground",
4060
4060
  "hover:bg-muted border-[length:var(--border-width)] border-transparent hover:border-border",
4061
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
4061
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
4062
4062
  "transition-colors duration-fast",
4063
4063
  sizeClasses4[size],
4064
4064
  className
@@ -6957,10 +6957,12 @@ var init_Container = __esm({
6957
6957
  };
6958
6958
  paddingStyles3 = {
6959
6959
  none: "px-0",
6960
- sm: "px-4",
6961
- md: "px-6",
6962
- lg: "px-8",
6963
- xl: "px-12"
6960
+ // Mobile-tighter, desktop-identical: fixed px-6 on a 360px phone eats ~13% of
6961
+ // the viewport, so each token steps down below the sm breakpoint.
6962
+ sm: "px-3 sm:px-4",
6963
+ md: "px-4 sm:px-6",
6964
+ lg: "px-4 sm:px-6 md:px-8",
6965
+ xl: "px-4 sm:px-8 md:px-12"
6964
6966
  };
6965
6967
  Container = ({
6966
6968
  size,
@@ -7659,7 +7661,7 @@ var init_Accordion = __esm({
7659
7661
  "bg-card",
7660
7662
  "hover:bg-muted",
7661
7663
  "transition-colors duration-fast",
7662
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-inset",
7664
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-inset",
7663
7665
  "disabled:opacity-50 disabled:cursor-not-allowed",
7664
7666
  isOpen && "bg-muted font-bold"
7665
7667
  ),
@@ -14263,7 +14265,7 @@ var init_Breadcrumb = __esm({
14263
14265
  },
14264
14266
  className: cn(
14265
14267
  "flex items-center gap-1.5 transition-colors",
14266
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
14268
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
14267
14269
  isLast ? "text-foreground font-bold cursor-default" : "text-muted-foreground hover:text-foreground"
14268
14270
  ),
14269
14271
  "aria-current": isLast ? "page" : void 0,
@@ -20866,7 +20868,7 @@ function DataGrid({
20866
20868
  ] }, field.name);
20867
20869
  }) })
20868
20870
  ] }),
20869
- dangerActions.length > 0 && /* @__PURE__ */ jsx(HStack, { gap: "xs", className: "flex-shrink-0", children: dangerActions.map((action, idx) => /* @__PURE__ */ jsxs(
20871
+ dangerActions.length > 0 && /* @__PURE__ */ jsx(HStack, { gap: "xs", className: "flex-shrink-0", children: dangerActions.map((action, idx) => /* @__PURE__ */ jsx(
20870
20872
  Button,
20871
20873
  {
20872
20874
  variant: "ghost",
@@ -20874,11 +20876,10 @@ function DataGrid({
20874
20876
  onClick: handleActionClick(action, itemData),
20875
20877
  "data-testid": `action-${action.event}`,
20876
20878
  "data-row-id": String(itemData.id),
20879
+ "aria-label": action.label,
20880
+ title: action.label,
20877
20881
  className: "text-error hover:text-error hover:bg-error/10 px-2",
20878
- children: [
20879
- action.icon && renderIconInput(action.icon, { size: "xs" }),
20880
- action.label
20881
- ]
20882
+ children: action.icon ? renderIconInput(action.icon, { size: "xs" }) : action.label
20882
20883
  },
20883
20884
  idx
20884
20885
  )) })
@@ -22514,10 +22515,7 @@ var init_FileTree = __esm({
22514
22515
  className,
22515
22516
  indent = 16
22516
22517
  }) => {
22517
- const { t } = useTranslate();
22518
- if (tree.length === 0) {
22519
- return /* @__PURE__ */ jsx(Box, { className: `p-4 ${className ?? ""}`, children: /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: t("fileTree.noFiles") }) });
22520
- }
22518
+ if (tree.length === 0) return null;
22521
22519
  return /* @__PURE__ */ jsx(Box, { className: `py-1 overflow-y-auto ${className ?? ""}`, role: "tree", children: tree.map((node) => /* @__PURE__ */ jsx(
22522
22520
  TreeNodeItem,
22523
22521
  {
@@ -22630,7 +22628,7 @@ var init_useQuerySingleton = __esm({
22630
22628
  queryStores = /* @__PURE__ */ new Map();
22631
22629
  }
22632
22630
  });
22633
- var resolveFilterType, lookStyles6, FilterGroup;
22631
+ var resolveFilterType, lookStyles6, FilterGroupControls, FilterGroupPopover, FilterGroup;
22634
22632
  var init_FilterGroup = __esm({
22635
22633
  "components/core/molecules/FilterGroup.tsx"() {
22636
22634
  "use client";
@@ -22648,10 +22646,10 @@ var init_FilterGroup = __esm({
22648
22646
  toolbar: "",
22649
22647
  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",
22650
22648
  pills: "gap-2 [&_input]:rounded-pill [&_select]:rounded-pill [&_button]:rounded-pill",
22651
- "popover-trigger": "[&>*:not(:first-child)]:hidden",
22649
+ "popover-trigger": "",
22652
22650
  "inline-column-header": "hidden"
22653
22651
  };
22654
- FilterGroup = ({
22652
+ FilterGroupControls = ({
22655
22653
  entity,
22656
22654
  filters,
22657
22655
  onFilterChange,
@@ -22987,7 +22985,7 @@ var init_FilterGroup = __esm({
22987
22985
  className: "text-muted-foreground",
22988
22986
  children: [
22989
22987
  /* @__PURE__ */ jsx(Icon, { name: "filter", className: "h-4 w-4" }),
22990
- /* @__PURE__ */ jsx("span", { className: "text-sm font-bold uppercase tracking-wide", children: t("filterGroup.filters") })
22988
+ /* @__PURE__ */ jsx("span", { className: "text-xs font-bold uppercase tracking-wide", children: t("filterGroup.filters") })
22991
22989
  ]
22992
22990
  }
22993
22991
  ),
@@ -23078,6 +23076,42 @@ var init_FilterGroup = __esm({
23078
23076
  }
23079
23077
  );
23080
23078
  };
23079
+ FilterGroupControls.displayName = "FilterGroupControls";
23080
+ FilterGroupPopover = (props) => {
23081
+ const { t } = useTranslate();
23082
+ const [open, setOpen] = useState(false);
23083
+ const queryState = useQuerySingleton(props.query);
23084
+ const activeFilterCount = queryState?.filters ? Object.values(queryState.filters).filter((v) => v !== null && v !== void 0).length : 0;
23085
+ return /* @__PURE__ */ jsxs("div", { className: cn("relative inline-block", props.className), children: [
23086
+ /* @__PURE__ */ jsx(
23087
+ Button,
23088
+ {
23089
+ variant: activeFilterCount > 0 ? "secondary" : "ghost",
23090
+ size: "sm",
23091
+ leftIcon: "filter",
23092
+ onClick: () => setOpen((o) => !o),
23093
+ "aria-expanded": open,
23094
+ "aria-haspopup": "true",
23095
+ children: /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
23096
+ /* @__PURE__ */ jsx("span", { children: t("filterGroup.filters") }),
23097
+ activeFilterCount > 0 && /* @__PURE__ */ jsx(Badge, { variant: "primary", size: "sm", children: activeFilterCount })
23098
+ ] })
23099
+ }
23100
+ ),
23101
+ open && /* @__PURE__ */ 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__ */ jsx(
23102
+ FilterGroupControls,
23103
+ {
23104
+ ...props,
23105
+ className: void 0,
23106
+ look: "toolbar",
23107
+ variant: "vertical",
23108
+ showIcon: false
23109
+ }
23110
+ ) })
23111
+ ] });
23112
+ };
23113
+ FilterGroupPopover.displayName = "FilterGroupPopover";
23114
+ FilterGroup = (props) => props.look === "popover-trigger" ? /* @__PURE__ */ jsx(FilterGroupPopover, { ...props }) : /* @__PURE__ */ jsx(FilterGroupControls, { ...props });
23081
23115
  FilterGroup.displayName = "FilterGroup";
23082
23116
  }
23083
23117
  });
@@ -28804,7 +28838,7 @@ var init_NumberStepper = __esm({
28804
28838
  "active:bg-muted",
28805
28839
  "transition-colors duration-instant",
28806
28840
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
28807
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
28841
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
28808
28842
  styles.button
28809
28843
  ),
28810
28844
  "aria-label": t("aria.decrease"),
@@ -28845,7 +28879,7 @@ var init_NumberStepper = __esm({
28845
28879
  "active:bg-muted",
28846
28880
  "transition-colors duration-instant",
28847
28881
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
28848
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
28882
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
28849
28883
  styles.button
28850
28884
  ),
28851
28885
  "aria-label": t("aria.increase"),
@@ -29301,7 +29335,7 @@ var init_Lightbox = __esm({
29301
29335
  "p-2 rounded-full",
29302
29336
  "text-[var(--color-foreground)] bg-[var(--color-card)]",
29303
29337
  "hover:bg-opacity-70 transition-opacity",
29304
- "focus:outline-none focus:ring-2 focus:ring-ring"
29338
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring"
29305
29339
  ),
29306
29340
  "aria-label": t("aria.closeModal"),
29307
29341
  children: /* @__PURE__ */ jsx(Icon, { name: "x", className: "w-6 h-6" })
@@ -29320,7 +29354,7 @@ var init_Lightbox = __esm({
29320
29354
  "p-2 rounded-full",
29321
29355
  "text-[var(--color-foreground)] bg-[var(--color-card)]",
29322
29356
  "hover:bg-opacity-70 transition-opacity",
29323
- "focus:outline-none focus:ring-2 focus:ring-ring"
29357
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring"
29324
29358
  ),
29325
29359
  "aria-label": t("aria.previousImage"),
29326
29360
  children: /* @__PURE__ */ jsx(Icon, { name: "chevron-left", className: "w-8 h-8" })
@@ -29357,7 +29391,7 @@ var init_Lightbox = __esm({
29357
29391
  "p-2 rounded-full",
29358
29392
  "text-[var(--color-foreground)] bg-[var(--color-card)]",
29359
29393
  "hover:bg-opacity-70 transition-opacity",
29360
- "focus:outline-none focus:ring-2 focus:ring-ring"
29394
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring"
29361
29395
  ),
29362
29396
  "aria-label": t("aria.nextImage"),
29363
29397
  children: /* @__PURE__ */ jsx(Icon, { name: "chevron-right", className: "w-8 h-8" })
@@ -29531,9 +29565,20 @@ function TableView({
29531
29565
  const inlineActionCount = hasActions ? maxInlineActions != null ? Math.min(itemActions.length, maxInlineActions) : itemActions.length : 0;
29532
29566
  const hasOverflowActions = hasActions && maxInlineActions != null && itemActions.length > maxInlineActions;
29533
29567
  const actionsTrack = hasActions ? `${inlineActionCount * 6 + (hasOverflowActions ? 3 : 0)}rem` : null;
29568
+ const colFloors = React74__default.useMemo(
29569
+ () => colDefs.map((col) => {
29570
+ const longest = data.reduce((widest, row) => {
29571
+ const cell = formatCell(asFieldValue(getNestedValue(row, col.field ?? col.key)), col.format);
29572
+ return Math.max(widest, cell.length);
29573
+ }, columnLabel(col).length);
29574
+ const chrome = col.format === "badge" ? BADGE_CHROME_CH : 0;
29575
+ return Math.min(longest + chrome, MAX_MEASURED_COL_CH);
29576
+ }),
29577
+ [colDefs, data]
29578
+ );
29534
29579
  const gridTemplateColumns = [
29535
29580
  selectable ? "auto" : null,
29536
- ...colDefs.map((c) => c.width ?? "minmax(0, 1fr)"),
29581
+ ...colDefs.map((c, i) => c.width ?? `minmax(${colFloors[i]}ch, 1fr)`),
29537
29582
  actionsTrack
29538
29583
  ].filter(Boolean).join(" ");
29539
29584
  const header = /* @__PURE__ */ jsxs(
@@ -29617,7 +29662,7 @@ function TableView({
29617
29662
  col.className
29618
29663
  );
29619
29664
  if (col.format === "badge" && raw != null && raw !== "") {
29620
- return /* @__PURE__ */ jsx(Box, { role: "cell", className: cellBase, children: /* @__PURE__ */ jsx(Badge, { variant: statusVariant4(String(raw)), size: "sm", children: String(raw) }) }, col.key);
29665
+ 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);
29621
29666
  }
29622
29667
  return /* @__PURE__ */ jsx(Box, { role: "cell", className: cellBase, children: /* @__PURE__ */ jsx("span", { className: "truncate", children: formatCell(raw, col.format) }) }, col.key);
29623
29668
  }),
@@ -29700,7 +29745,7 @@ function TableView({
29700
29745
  }
29701
29746
  );
29702
29747
  }
29703
- var alignClass, weightClass, LOOKS;
29748
+ var MAX_MEASURED_COL_CH, BADGE_CHROME_CH, alignClass, weightClass, LOOKS;
29704
29749
  var init_TableView = __esm({
29705
29750
  "components/core/molecules/TableView.tsx"() {
29706
29751
  "use client";
@@ -29718,6 +29763,8 @@ var init_TableView = __esm({
29718
29763
  init_Menu();
29719
29764
  init_useDataDnd();
29720
29765
  createLogger("almadar:ui:table-view");
29766
+ MAX_MEASURED_COL_CH = 32;
29767
+ BADGE_CHROME_CH = 4;
29721
29768
  alignClass = {
29722
29769
  left: "justify-start text-left",
29723
29770
  center: "justify-center text-center",
@@ -31953,7 +32000,7 @@ var init_VoteStack = __esm({
31953
32000
  "active:bg-muted",
31954
32001
  "transition-colors duration-instant",
31955
32002
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
31956
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
32003
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
31957
32004
  styles.button
31958
32005
  ),
31959
32006
  children: /* @__PURE__ */ jsx(Icon, { name: "chevron-up", className: styles.icon })
@@ -31990,7 +32037,7 @@ var init_VoteStack = __esm({
31990
32037
  "active:bg-muted",
31991
32038
  "transition-colors duration-instant",
31992
32039
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
31993
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
32040
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-inset",
31994
32041
  styles.button
31995
32042
  ),
31996
32043
  children: /* @__PURE__ */ jsx(Icon, { name: "chevron-down", className: styles.icon })
@@ -32511,7 +32558,7 @@ var init_QrScanner = __esm({
32511
32558
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
32512
32559
  "rounded-full bg-black bg-opacity-60 p-2 text-white",
32513
32560
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
32514
- "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
32561
+ "hover:bg-opacity-80 focus:outline-none focus-visible:ring-2 focus-visible:ring-white"
32515
32562
  ),
32516
32563
  "aria-label": isPaused ? t("qrScanner.resumeScanning") : t("qrScanner.pauseScanning"),
32517
32564
  children: isPaused ? /* @__PURE__ */ jsx(Icon, { name: "play", className: "h-4 w-4" }) : /* @__PURE__ */ jsx(Icon, { name: "pause", className: "h-4 w-4" })
@@ -32526,7 +32573,7 @@ var init_QrScanner = __esm({
32526
32573
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
32527
32574
  "rounded-full bg-black bg-opacity-60 p-2 text-white",
32528
32575
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
32529
- "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
32576
+ "hover:bg-opacity-80 focus:outline-none focus-visible:ring-2 focus-visible:ring-white"
32530
32577
  ),
32531
32578
  "aria-label": currentFacing === "environment" ? t("qrScanner.switchToFrontCamera") : t("qrScanner.switchToRearCamera"),
32532
32579
  children: /* @__PURE__ */ jsx(Icon, { name: "refresh-cw", className: "h-4 w-4" })
@@ -32541,7 +32588,7 @@ var init_QrScanner = __esm({
32541
32588
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
32542
32589
  "rounded-full bg-black bg-opacity-60 px-3 py-2 text-xs text-white",
32543
32590
  // eslint-disable-next-line almadar/no-hardcoded-colors -- media overlay: always over a dark scrim
32544
- "hover:bg-opacity-80 focus:outline-none focus:ring-2 focus:ring-white"
32591
+ "hover:bg-opacity-80 focus:outline-none focus-visible:ring-2 focus-visible:ring-white"
32545
32592
  ),
32546
32593
  "aria-label": t("aria.mockScanDev"),
32547
32594
  children: t("qrScanner.mockScan")
@@ -44580,7 +44627,7 @@ var init_TabbedContainer = __esm({
44580
44627
  onClick: () => !isDisabled && handleTabChange(tab.id),
44581
44628
  className: cn(
44582
44629
  "flex items-center gap-2 px-4 py-3 text-sm font-medium transition-colors",
44583
- "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
44630
+ "focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
44584
44631
  "disabled:opacity-50 disabled:cursor-not-allowed",
44585
44632
  isActive ? "bg-primary text-primary-foreground" : "bg-card text-foreground hover:bg-muted",
44586
44633
  isVertical ? "justify-start" : "justify-center"
@@ -48587,7 +48634,7 @@ var I18nContext = createContext({
48587
48634
  });
48588
48635
  I18nContext.displayName = "I18nContext";
48589
48636
  var I18nProvider = I18nContext.Provider;
48590
- function useTranslate115() {
48637
+ function useTranslate114() {
48591
48638
  return useContext(I18nContext);
48592
48639
  }
48593
48640
  function createTranslate(messages) {
@@ -48852,4 +48899,4 @@ function useGitHubBranches(owner, repo, enabled = true) {
48852
48899
  });
48853
48900
  }
48854
48901
 
48855
- export { ALL_PRESETS, ALMADAR_DND_MIME, AR_BOOK_FIELDS, AboutPageTemplate, Accordion, Card2 as ActionCard, ActionPalette, ActionTile, ActivationBlock, Alert, AlgorithmCanvas, AnimatedCounter, AnimatedGraphic, AnimatedReveal, ArticleSection, Aside, AssetPicker, AtlasImage, AtlasPanel, AuthLayout, Avatar, Badge, BehaviorView, BiologyCanvas, BloomQuizBlock, BookChapterView, BookCoverPage, BookNavBar, BookTableOfContents, BookViewer, Box, BranchingLogicBuilder, Breadcrumb, Button, ButtonGroup, CTABanner, CalendarGrid, Canvas, Canvas2D, Card, CardBody, CardContent, CardFooter, CardGrid, CardHeader, CardTitle, Carousel, CaseStudyCard, CaseStudyOrganism, Center, Chart, ChartLegend, ChatBar, Checkbox, ChemistryCanvas, ChoiceButton, Coachmark, CodeBlock, CodeRunnerPanel, CollapsibleSection, CommunityLinks, ConditionalWrapper, ConfettiEffect, ConfirmDialog, ConnectionBlock, Container, ContentRenderer, ContentSection, ControlButton, ControlGrid, CounterTemplate, DEFAULT_LIKERT_OPTIONS, DEFAULT_MATRIX_COLUMNS, DEFAULT_SLOTS, DIAMOND_TOP_Y, DashboardGrid, DashboardLayout, DataGrid, DataList, DataTable, DateRangePicker, DateRangeSelector, DayCell, DetailPanel, Dialog, DialogueBubble, Divider, DocBreadcrumb, DocPagination, DocSearch, DocSidebar, DocTOC, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, ELEMENT_SELECTED_EVENT, EdgeDecoration, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EmptyState, EntityDisplayEvents, ErrorBoundary, ErrorState, FEATURE_COLORS, FEATURE_TYPES, FLOOR_HEIGHT, FeatureCard, FeatureDetailPageTemplate, FeatureGrid, FeatureGridOrganism, FileTree, FilterGroup, FilterPill, Flex, FlipCard, FlipContainer, FloatingActionButton, Form, FormActions, FormField, FormLayout, FormSection, FormSectionHeader, GameAudioToggle, GameHud, GameIcon, GameMenu, GameShell, GenericAppTemplate, GeometricPattern, GradientDivider, GraphCanvas, GraphView, Grid, GridPicker, HStack, Header, HealthBar, HeroOrganism, HeroSection, I18nProvider, IDENTITY_BOOK_FIELDS, Icon, IconPicker, ImportPreviewTree, ImportProgress, ImportSourcePicker, InfiniteScrollSentinel, Input, InputGroup, InstallBox, JazariStateMachine, JsonTreeEditor, Label, LandingPageTemplate, LawReferenceTooltip, LearningCanvas, Lightbox, LikertScale, LineChart2 as LineChart, List3 as List, LoadingState, MapView, MarkdownContent, MarketingFooter, MarketingStatCard, MasterDetail, MasterDetailLayout, MathCanvas, MatrixQuestion, MediaGallery, Menu, Meter, Modal, ModalSlot, ModuleCard, Navigation, NodeSlotEditor, NotifyListener, NumberStepper, OnboardingSpotlight, OptionConstraintGroup, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, PageTransition, Pagination, PatternTile, PhysicsCanvas, Popover, PositionedCanvas, Presence, PricingCard, PricingGrid, PricingOrganism, PricingPageTemplate, ProgressBar, ProgressDots, PropertyInspector, PullQuote, PullToRefresh, QrScanner, QuizBlock, Radio, RangeSlider, ReflectionBlock, RelationSelect, RepeatableFormSection, ReplyTree, RichBlockEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, ScoreDisplay, SearchInput, Section, SectionHeader, SegmentRenderer, Select, SequenceBar, ServiceCatalog, SharedEntityStoreContext, ShowcaseCard, ShowcaseOrganism, SidePanel, Sidebar, SignaturePad, SimpleGrid, Skeleton, SlotContentRenderer, SocialProof, SortableList, Spacer, Sparkline, Spinner, Split, SplitPane, SplitSection, Stack, StarRating, StatBadge, StatCard, StatDisplay, StateGraph, StateJsonView, StateMachineView, StateNode2 as StateNode, StatsGrid, StatsOrganism, StatusBar, StatusDot, StepFlow, StepFlowOrganism, SubagentTracePanel, SvgBranch, SvgConnection, SvgFlow, SvgGrid, SvgLobe, SvgMesh, SvgMorph, SvgNode, SvgPulse, SvgRing, SvgShield, SvgStack, SwipeableRow, Switch, TERRAIN_COLORS, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, TableView, Tabs, TagCloud, TagInput, TeamCard, TeamOrganism, TerrainPalette, TextHighlight, Textarea, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TraitFrame, TraitSlot, TraitStateViewer, TransitionArrow, TrendIndicator, TypewriterText, Typography, UISlotComponent, UISlotRenderer, UploadDropZone, VStack, VersionDiff, ViolationAlert, VoteStack, WizardContainer, WizardNavigation, WizardProgress, boardEntity, bool, calculateAttackTargets, calculateValidMoves, cn, createInitialGameState, createSharedEntityStore, createTranslate, createUnitAnimationState, getCurrentFrame, getTileDimensions, inferDirection, isoToScreen, makeAsset, makeAssetMap, mapBookData, num, objAvailableActions, objAvailableEvents, objCurrentState, objIcon, objId, objMaxRules, objName, objRules, objStates, parseEditFocus, parseLessonSegments, parseMarkdownWithCodeBlocks, parseQueryBinding, pendulum, projectileMotion, registerCodeLanguageLoader, resolveFieldMap, resolveFrame, resolveSheetDirection, rows, runTickFrame, screenToIso, springOscillator, str, tickAnimationState, toCodeLanguage, transitionAnimation, unitHealth, unitPosition, unitTeam, useAgentChat, useAnchorRect, useAtlasSliceDataUrl, useAuthContext, useCamera, useCanvasGestures, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useDragReorder, useDraggable, useDropZone, useEmitEvent, useEventBus, useEventListener, useExtensions, useFileEditor, useFileSystem, useGameAudio, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useImageCache, useInfiniteScroll, useLongPress, useOrbitalHistory, usePresence, usePreview, usePullToRefresh, useQuerySingleton, useRenderInterpolation, useSharedEntitySnapshot, useSharedEntityStore, useSharedEntityStoreContext, useSwipeGesture, useTapReveal, useTraitListens, useTranslate115 as useTranslate, useUIEvents, useUISlotManager, useUnitSpriteAtlas, useValidation, vec2 };
48902
+ export { ALL_PRESETS, ALMADAR_DND_MIME, AR_BOOK_FIELDS, AboutPageTemplate, Accordion, Card2 as ActionCard, ActionPalette, ActionTile, ActivationBlock, Alert, AlgorithmCanvas, AnimatedCounter, AnimatedGraphic, AnimatedReveal, ArticleSection, Aside, AssetPicker, AtlasImage, AtlasPanel, AuthLayout, Avatar, Badge, BehaviorView, BiologyCanvas, BloomQuizBlock, BookChapterView, BookCoverPage, BookNavBar, BookTableOfContents, BookViewer, Box, BranchingLogicBuilder, Breadcrumb, Button, ButtonGroup, CTABanner, CalendarGrid, Canvas, Canvas2D, Card, CardBody, CardContent, CardFooter, CardGrid, CardHeader, CardTitle, Carousel, CaseStudyCard, CaseStudyOrganism, Center, Chart, ChartLegend, ChatBar, Checkbox, ChemistryCanvas, ChoiceButton, Coachmark, CodeBlock, CodeRunnerPanel, CollapsibleSection, CommunityLinks, ConditionalWrapper, ConfettiEffect, ConfirmDialog, ConnectionBlock, Container, ContentRenderer, ContentSection, ControlButton, ControlGrid, CounterTemplate, DEFAULT_LIKERT_OPTIONS, DEFAULT_MATRIX_COLUMNS, DEFAULT_SLOTS, DIAMOND_TOP_Y, DashboardGrid, DashboardLayout, DataGrid, DataList, DataTable, DateRangePicker, DateRangeSelector, DayCell, DetailPanel, Dialog, DialogueBubble, Divider, DocBreadcrumb, DocPagination, DocSearch, DocSidebar, DocTOC, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, ELEMENT_SELECTED_EVENT, EdgeDecoration, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EmptyState, EntityDisplayEvents, ErrorBoundary, ErrorState, FEATURE_COLORS, FEATURE_TYPES, FLOOR_HEIGHT, FeatureCard, FeatureDetailPageTemplate, FeatureGrid, FeatureGridOrganism, FileTree, FilterGroup, FilterPill, Flex, FlipCard, FlipContainer, FloatingActionButton, Form, FormActions, FormField, FormLayout, FormSection, FormSectionHeader, GameAudioToggle, GameHud, GameIcon, GameMenu, GameShell, GenericAppTemplate, GeometricPattern, GradientDivider, GraphCanvas, GraphView, Grid, GridPicker, HStack, Header, HealthBar, HeroOrganism, HeroSection, I18nProvider, IDENTITY_BOOK_FIELDS, Icon, IconPicker, ImportPreviewTree, ImportProgress, ImportSourcePicker, InfiniteScrollSentinel, Input, InputGroup, InstallBox, JazariStateMachine, JsonTreeEditor, Label, LandingPageTemplate, LawReferenceTooltip, LearningCanvas, Lightbox, LikertScale, LineChart2 as LineChart, List3 as List, LoadingState, MapView, MarkdownContent, MarketingFooter, MarketingStatCard, MasterDetail, MasterDetailLayout, MathCanvas, MatrixQuestion, MediaGallery, Menu, Meter, Modal, ModalSlot, ModuleCard, Navigation, NodeSlotEditor, NotifyListener, NumberStepper, OnboardingSpotlight, OptionConstraintGroup, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, PageTransition, Pagination, PatternTile, PhysicsCanvas, Popover, PositionedCanvas, Presence, PricingCard, PricingGrid, PricingOrganism, PricingPageTemplate, ProgressBar, ProgressDots, PropertyInspector, PullQuote, PullToRefresh, QrScanner, QuizBlock, Radio, RangeSlider, ReflectionBlock, RelationSelect, RepeatableFormSection, ReplyTree, RichBlockEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, ScoreDisplay, SearchInput, Section, SectionHeader, SegmentRenderer, Select, SequenceBar, ServiceCatalog, SharedEntityStoreContext, ShowcaseCard, ShowcaseOrganism, SidePanel, Sidebar, SignaturePad, SimpleGrid, Skeleton, SlotContentRenderer, SocialProof, SortableList, Spacer, Sparkline, Spinner, Split, SplitPane, SplitSection, Stack, StarRating, StatBadge, StatCard, StatDisplay, StateGraph, StateJsonView, StateMachineView, StateNode2 as StateNode, StatsGrid, StatsOrganism, StatusBar, StatusDot, StepFlow, StepFlowOrganism, SubagentTracePanel, SvgBranch, SvgConnection, SvgFlow, SvgGrid, SvgLobe, SvgMesh, SvgMorph, SvgNode, SvgPulse, SvgRing, SvgShield, SvgStack, SwipeableRow, Switch, TERRAIN_COLORS, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, TableView, Tabs, TagCloud, TagInput, TeamCard, TeamOrganism, TerrainPalette, TextHighlight, Textarea, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TraitFrame, TraitSlot, TraitStateViewer, TransitionArrow, TrendIndicator, TypewriterText, Typography, UISlotComponent, UISlotRenderer, UploadDropZone, VStack, VersionDiff, ViolationAlert, VoteStack, WizardContainer, WizardNavigation, WizardProgress, boardEntity, bool, calculateAttackTargets, calculateValidMoves, cn, createInitialGameState, createSharedEntityStore, createTranslate, createUnitAnimationState, getCurrentFrame, getTileDimensions, inferDirection, isoToScreen, makeAsset, makeAssetMap, mapBookData, num, objAvailableActions, objAvailableEvents, objCurrentState, objIcon, objId, objMaxRules, objName, objRules, objStates, parseEditFocus, parseLessonSegments, parseMarkdownWithCodeBlocks, parseQueryBinding, pendulum, projectileMotion, registerCodeLanguageLoader, resolveFieldMap, resolveFrame, resolveSheetDirection, rows, runTickFrame, screenToIso, springOscillator, str, tickAnimationState, toCodeLanguage, transitionAnimation, unitHealth, unitPosition, unitTeam, useAgentChat, useAnchorRect, useAtlasSliceDataUrl, useAuthContext, useCamera, useCanvasGestures, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useDragReorder, useDraggable, useDropZone, useEmitEvent, useEventBus, useEventListener, useExtensions, useFileEditor, useFileSystem, useGameAudio, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useImageCache, useInfiniteScroll, useLongPress, useOrbitalHistory, usePresence, usePreview, usePullToRefresh, useQuerySingleton, useRenderInterpolation, useSharedEntitySnapshot, useSharedEntityStore, useSharedEntityStoreContext, useSwipeGesture, useTapReveal, useTraitListens, useTranslate114 as useTranslate, useUIEvents, useUISlotManager, useUnitSpriteAtlas, useValidation, vec2 };
@@ -3548,7 +3548,7 @@ var Button = React12__namespace.default.forwardRef(
3548
3548
  "cursor-pointer",
3549
3549
  "chrome-button",
3550
3550
  "transition-all duration-normal",
3551
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-offset-[length:var(--focus-ring-offset)]",
3551
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-offset-[length:var(--focus-ring-offset)]",
3552
3552
  "disabled:opacity-50 disabled:cursor-not-allowed",
3553
3553
  variantStyles2[variant],
3554
3554
  sizeStyles[size],
@@ -3639,7 +3639,7 @@ var Badge = React12__namespace.default.forwardRef(
3639
3639
  },
3640
3640
  className: cn(
3641
3641
  "inline-flex items-center justify-center rounded-sm",
3642
- "hover:bg-foreground/10 focus:outline-none focus:ring-1 focus:ring-ring",
3642
+ "hover:bg-foreground/10 focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
3643
3643
  "transition-colors",
3644
3644
  size === "sm" ? "w-4 h-4 ml-0.5" : size === "md" ? "w-5 h-5 ml-1" : "w-6 h-6 ml-1"
3645
3645
  ),
@@ -3527,7 +3527,7 @@ var Button = React12__default.forwardRef(
3527
3527
  "cursor-pointer",
3528
3528
  "chrome-button",
3529
3529
  "transition-all duration-normal",
3530
- "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-offset-[length:var(--focus-ring-offset)]",
3530
+ "focus:outline-none focus-visible:ring-[length:var(--focus-ring-width)] focus-visible:ring-ring focus-visible:ring-offset-[length:var(--focus-ring-offset)]",
3531
3531
  "disabled:opacity-50 disabled:cursor-not-allowed",
3532
3532
  variantStyles2[variant],
3533
3533
  sizeStyles[size],
@@ -3618,7 +3618,7 @@ var Badge = React12__default.forwardRef(
3618
3618
  },
3619
3619
  className: cn(
3620
3620
  "inline-flex items-center justify-center rounded-sm",
3621
- "hover:bg-foreground/10 focus:outline-none focus:ring-1 focus:ring-ring",
3621
+ "hover:bg-foreground/10 focus:outline-none focus-visible:ring-1 focus-visible:ring-ring",
3622
3622
  "transition-colors",
3623
3623
  size === "sm" ? "w-4 h-4 ml-0.5" : size === "md" ? "w-5 h-5 ml-1" : "w-6 h-6 ml-1"
3624
3624
  ),