@almadar/ui 5.121.4 → 5.122.1

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.
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
- import * as React73 from 'react';
3
- import React73__default, { createContext, useContext, useMemo, useRef, useEffect, useCallback, useState, Suspense, lazy, useSyncExternalStore, useLayoutEffect, useId } from 'react';
2
+ import * as React74 from 'react';
3
+ import React74__default, { createContext, useContext, useMemo, useRef, useEffect, useCallback, useState, Suspense, lazy, useSyncExternalStore, useLayoutEffect, useId } from 'react';
4
4
  import { clsx } from 'clsx';
5
5
  import { twMerge } from 'tailwind-merge';
6
6
  import { EventBusContext, useTraitScopeChain, useCurrentPagePath, useGameAudioContextOptional, useEntitySchemaOptional, TraitScopeProvider } from '@almadar/ui/providers';
@@ -230,7 +230,7 @@ var init_SvgFlow = __esm({
230
230
  width = 100,
231
231
  height = 100
232
232
  }) => {
233
- const markerId = React73__default.useMemo(() => {
233
+ const markerId = React74__default.useMemo(() => {
234
234
  flowIdCounter += 1;
235
235
  return `almadar-flow-arrow-${flowIdCounter}`;
236
236
  }, []);
@@ -823,7 +823,7 @@ var init_SvgRing = __esm({
823
823
  width = 100,
824
824
  height = 100
825
825
  }) => {
826
- const gradientId = React73__default.useMemo(() => {
826
+ const gradientId = React74__default.useMemo(() => {
827
827
  ringIdCounter += 1;
828
828
  return `almadar-ring-glow-${ringIdCounter}`;
829
829
  }, []);
@@ -1365,7 +1365,7 @@ var init_Icon = __esm({
1365
1365
  const effectiveName = typeof icon === "string" && icon !== "" ? icon : name;
1366
1366
  const effectiveStrokeWidth = strokeWidth != null && strokeWidth > 0 ? strokeWidth : void 0;
1367
1367
  const family = useIconFamily();
1368
- const RenderedComponent = React73__default.useMemo(() => {
1368
+ const RenderedComponent = React74__default.useMemo(() => {
1369
1369
  if (directIcon) return null;
1370
1370
  return effectiveName ? resolveIconForFamily(effectiveName) : null;
1371
1371
  }, [directIcon, effectiveName, family]);
@@ -1485,7 +1485,7 @@ var init_atlasSlice = __esm({
1485
1485
  }
1486
1486
  });
1487
1487
  function useAtlasSliceDataUrl(asset) {
1488
- const [, bump] = React73.useReducer((x) => x + 1, 0);
1488
+ const [, bump] = React74.useReducer((x) => x + 1, 0);
1489
1489
  if (!isAtlasAsset(asset)) return void 0;
1490
1490
  const key = `${asset.atlas}#${asset.sprite}`;
1491
1491
  const cached = sliceDataUrlCache.get(key);
@@ -1548,13 +1548,13 @@ function AtlasImage({
1548
1548
  style,
1549
1549
  "aria-hidden": ariaHidden
1550
1550
  }) {
1551
- const [, bump] = React73.useReducer((x) => x + 1, 0);
1552
- const canvasRef = React73.useRef(null);
1551
+ const [, bump] = React74.useReducer((x) => x + 1, 0);
1552
+ const canvasRef = React74.useRef(null);
1553
1553
  const sliced = isAtlasAsset(asset);
1554
1554
  const atlas = sliced ? getAtlas(asset.atlas, bump) : void 0;
1555
1555
  const img = sliced && asset?.url ? getSheetImage(asset.url, bump) : null;
1556
1556
  const rect = sliced && atlas ? subRectFor(atlas, asset.sprite) : null;
1557
- React73.useEffect(() => {
1557
+ React74.useEffect(() => {
1558
1558
  const canvas = canvasRef.current;
1559
1559
  if (!canvas || !img || !rect) return;
1560
1560
  canvas.width = rect.sw;
@@ -1630,7 +1630,7 @@ function resolveIconProp(value, sizeClass) {
1630
1630
  const IconComp = value;
1631
1631
  return /* @__PURE__ */ jsx(IconComp, { className: sizeClass });
1632
1632
  }
1633
- if (React73__default.isValidElement(value)) {
1633
+ if (React74__default.isValidElement(value)) {
1634
1634
  return value;
1635
1635
  }
1636
1636
  if (typeof value === "object" && value !== null && isIconLike(value)) {
@@ -1707,7 +1707,7 @@ var init_Button = __esm({
1707
1707
  md: "h-icon-default w-icon-default",
1708
1708
  lg: "h-icon-default w-icon-default"
1709
1709
  };
1710
- Button = React73__default.forwardRef(
1710
+ Button = React74__default.forwardRef(
1711
1711
  ({
1712
1712
  className,
1713
1713
  variant = "primary",
@@ -1749,7 +1749,8 @@ var init_Button = __esm({
1749
1749
  "font-medium",
1750
1750
  "rounded-sm",
1751
1751
  "cursor-pointer",
1752
- "transition-all duration-[var(--transition-normal)]",
1752
+ "chrome-button",
1753
+ "transition-all duration-normal",
1753
1754
  "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-offset-[length:var(--focus-ring-offset)]",
1754
1755
  "disabled:opacity-50 disabled:cursor-not-allowed",
1755
1756
  variantStyles[variant],
@@ -1777,7 +1778,7 @@ var init_Input = __esm({
1777
1778
  init_cn();
1778
1779
  init_Icon();
1779
1780
  init_useEventBus();
1780
- Input = React73__default.forwardRef(
1781
+ Input = React74__default.forwardRef(
1781
1782
  ({
1782
1783
  className,
1783
1784
  inputType,
@@ -1812,7 +1813,7 @@ var init_Input = __esm({
1812
1813
  const showClearButton = clearable && value && String(value).length > 0;
1813
1814
  const isMultiline = type === "textarea";
1814
1815
  const baseClassName = cn(
1815
- "block w-full rounded-sm transition-all duration-[var(--transition-fast)]",
1816
+ "block w-full rounded-sm transition-all duration-fast",
1816
1817
  "border-[length:var(--border-width-thin)] border-border",
1817
1818
  isMultiline ? "px-3 py-2 text-sm" : "h-input-md px-3 text-sm",
1818
1819
  "bg-card hover:bg-muted focus:bg-card",
@@ -1945,7 +1946,7 @@ var Label;
1945
1946
  var init_Label = __esm({
1946
1947
  "components/core/atoms/Label.tsx"() {
1947
1948
  init_cn();
1948
- Label = React73__default.forwardRef(
1949
+ Label = React74__default.forwardRef(
1949
1950
  ({ className, required, children, ...props }, ref) => {
1950
1951
  return /* @__PURE__ */ jsxs(
1951
1952
  "label",
@@ -1972,7 +1973,7 @@ var init_Textarea = __esm({
1972
1973
  "components/core/atoms/Textarea.tsx"() {
1973
1974
  init_cn();
1974
1975
  init_useEventBus();
1975
- Textarea = React73__default.forwardRef(
1976
+ Textarea = React74__default.forwardRef(
1976
1977
  ({ className, error, onChange, ...props }, ref) => {
1977
1978
  const eventBus = useEventBus();
1978
1979
  const handleChange = (e) => {
@@ -2211,7 +2212,7 @@ var init_Select = __esm({
2211
2212
  init_cn();
2212
2213
  init_Icon();
2213
2214
  init_useEventBus();
2214
- Select = React73__default.forwardRef(
2215
+ Select = React74__default.forwardRef(
2215
2216
  (props, _ref) => {
2216
2217
  const { multiple, searchable, clearable } = props;
2217
2218
  if (multiple || searchable || clearable) {
@@ -2228,7 +2229,7 @@ var init_Checkbox = __esm({
2228
2229
  "components/core/atoms/Checkbox.tsx"() {
2229
2230
  init_cn();
2230
2231
  init_useEventBus();
2231
- Checkbox = React73__default.forwardRef(
2232
+ Checkbox = React74__default.forwardRef(
2232
2233
  ({ className, label, id, onChange, ...props }, ref) => {
2233
2234
  const inputId = id || `checkbox-${Math.random().toString(36).substr(2, 9)}`;
2234
2235
  const eventBus = useEventBus();
@@ -2282,7 +2283,7 @@ var init_Spinner = __esm({
2282
2283
  md: "h-6 w-6",
2283
2284
  lg: "h-8 w-8"
2284
2285
  };
2285
- Spinner = React73__default.forwardRef(
2286
+ Spinner = React74__default.forwardRef(
2286
2287
  ({ className, size = "md", overlay, ...props }, ref) => {
2287
2288
  if (overlay) {
2288
2289
  return /* @__PURE__ */ jsx(
@@ -2324,21 +2325,21 @@ var init_Card = __esm({
2324
2325
  "bg-card",
2325
2326
  "border-[length:var(--border-width)] border-border",
2326
2327
  "shadow-elevation-card",
2327
- "transition-all duration-[var(--transition-normal)]",
2328
+ "transition-all duration-normal",
2328
2329
  "hover:shadow-elevation-dialog hover:translate-y-[var(--hover-translate-y)]"
2329
2330
  ].join(" "),
2330
2331
  bordered: [
2331
2332
  "bg-card",
2332
2333
  "border-[length:var(--border-width)] border-border",
2333
2334
  "shadow-elevation-card",
2334
- "transition-all duration-[var(--transition-normal)]",
2335
+ "transition-all duration-normal",
2335
2336
  "hover:shadow-elevation-dialog hover:translate-y-[var(--hover-translate-y)]"
2336
2337
  ].join(" "),
2337
2338
  elevated: [
2338
2339
  "bg-card",
2339
2340
  "border-[length:var(--border-width)] border-border",
2340
2341
  "shadow",
2341
- "transition-all duration-[var(--transition-normal)]",
2342
+ "transition-all duration-normal",
2342
2343
  "hover:shadow-elevation-dialog hover:translate-y-[var(--hover-translate-y)]"
2343
2344
  ].join(" "),
2344
2345
  // Interactive variant with theme-specific hover effects
@@ -2347,7 +2348,7 @@ var init_Card = __esm({
2347
2348
  "border-[length:var(--border-width)] border-border",
2348
2349
  "shadow",
2349
2350
  "cursor-pointer",
2350
- "transition-all duration-[var(--transition-normal)]",
2351
+ "transition-all duration-normal",
2351
2352
  "hover:shadow-elevation-dialog"
2352
2353
  ].join(" ")
2353
2354
  };
@@ -2372,7 +2373,7 @@ var init_Card = __esm({
2372
2373
  chip: "shadow-none rounded-pill border-[length:var(--border-width)] border-border",
2373
2374
  "tile-image-first": "p-0 overflow-hidden"
2374
2375
  };
2375
- Card = React73__default.forwardRef(
2376
+ Card = React74__default.forwardRef(
2376
2377
  ({
2377
2378
  className,
2378
2379
  variant = "bordered",
@@ -2398,7 +2399,8 @@ var init_Card = __esm({
2398
2399
  ref,
2399
2400
  className: cn(
2400
2401
  "rounded-container relative",
2401
- "transition-all duration-[var(--transition-normal)]",
2402
+ "transition-all duration-normal",
2403
+ "chrome-panel",
2402
2404
  variantStyles2[variant],
2403
2405
  paddingStyles[padding],
2404
2406
  lookStyles[look],
@@ -2420,9 +2422,9 @@ var init_Card = __esm({
2420
2422
  }
2421
2423
  );
2422
2424
  Card.displayName = "Card";
2423
- CardHeader = React73__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
2425
+ CardHeader = React74__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
2424
2426
  CardHeader.displayName = "CardHeader";
2425
- CardTitle = React73__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2427
+ CardTitle = React74__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2426
2428
  "h3",
2427
2429
  {
2428
2430
  ref,
@@ -2435,11 +2437,11 @@ var init_Card = __esm({
2435
2437
  }
2436
2438
  ));
2437
2439
  CardTitle.displayName = "CardTitle";
2438
- CardContent = React73__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
2440
+ CardContent = React74__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
2439
2441
  CardContent.displayName = "CardContent";
2440
2442
  CardBody = CardContent;
2441
2443
  CardBody.displayName = "CardBody";
2442
- CardFooter = React73__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2444
+ CardFooter = React74__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2443
2445
  "div",
2444
2446
  {
2445
2447
  ref,
@@ -2493,7 +2495,7 @@ var init_Badge = __esm({
2493
2495
  md: "px-2.5 py-1 text-sm",
2494
2496
  lg: "px-3 py-1.5 text-base"
2495
2497
  };
2496
- Badge = React73__default.forwardRef(
2498
+ Badge = React74__default.forwardRef(
2497
2499
  ({ className, variant = "default", size = "sm", amount, label, icon, iconAsset, children, onRemove, removeLabel, ...props }, ref) => {
2498
2500
  const iconSizes3 = {
2499
2501
  sm: "h-icon-default w-icon-default",
@@ -2619,7 +2621,7 @@ var init_FilterPill = __esm({
2619
2621
  md: "w-3.5 h-3.5",
2620
2622
  lg: "w-4 h-4"
2621
2623
  };
2622
- FilterPill = React73__default.forwardRef(
2624
+ FilterPill = React74__default.forwardRef(
2623
2625
  ({
2624
2626
  className,
2625
2627
  variant = "default",
@@ -2748,8 +2750,8 @@ var init_Avatar = __esm({
2748
2750
  actionPayload
2749
2751
  }) => {
2750
2752
  const eventBus = useEventBus();
2751
- const [imgFailed, setImgFailed] = React73__default.useState(false);
2752
- React73__default.useEffect(() => {
2753
+ const [imgFailed, setImgFailed] = React74__default.useState(false);
2754
+ React74__default.useEffect(() => {
2753
2755
  setImgFailed(false);
2754
2756
  }, [src]);
2755
2757
  const initials = providedInitials ?? (name ? generateInitials(name) : void 0);
@@ -3001,7 +3003,7 @@ var init_Box = __esm({
3001
3003
  fixed: "fixed",
3002
3004
  sticky: "sticky"
3003
3005
  };
3004
- Box = React73__default.forwardRef(
3006
+ Box = React74__default.forwardRef(
3005
3007
  ({
3006
3008
  padding,
3007
3009
  paddingX,
@@ -3066,7 +3068,7 @@ var init_Box = __esm({
3066
3068
  onPointerDown?.(e);
3067
3069
  }, [hoverEvent, tapReveal, triggerProps, onPointerDown]);
3068
3070
  const isClickable = action || onClick;
3069
- return React73__default.createElement(
3071
+ return React74__default.createElement(
3070
3072
  Component,
3071
3073
  {
3072
3074
  ref,
@@ -3120,7 +3122,7 @@ var init_Center = __esm({
3120
3122
  as: Component = "div"
3121
3123
  }) => {
3122
3124
  const mergedStyle = minHeight ? { minHeight, ...style } : style;
3123
- return React73__default.createElement(Component, {
3125
+ return React74__default.createElement(Component, {
3124
3126
  className: cn(
3125
3127
  inline ? "inline-flex" : "flex",
3126
3128
  horizontal && "justify-center",
@@ -3388,7 +3390,7 @@ var init_Radio = __esm({
3388
3390
  md: "w-2.5 h-2.5",
3389
3391
  lg: "w-3 h-3"
3390
3392
  };
3391
- Radio = React73__default.forwardRef(
3393
+ Radio = React74__default.forwardRef(
3392
3394
  ({
3393
3395
  label,
3394
3396
  helperText,
@@ -3405,12 +3407,12 @@ var init_Radio = __esm({
3405
3407
  onChange,
3406
3408
  ...props
3407
3409
  }, ref) => {
3408
- const reactId = React73__default.useId();
3410
+ const reactId = React74__default.useId();
3409
3411
  const baseId = id || `radio-${reactId}`;
3410
3412
  const hasError = !!error;
3411
3413
  const eventBus = useEventBus();
3412
- const [selected, setSelected] = React73__default.useState(value);
3413
- React73__default.useEffect(() => {
3414
+ const [selected, setSelected] = React74__default.useState(value);
3415
+ React74__default.useEffect(() => {
3414
3416
  if (value !== void 0) setSelected(value);
3415
3417
  }, [value]);
3416
3418
  const pick = (next, e) => {
@@ -3592,7 +3594,7 @@ var init_Switch = __esm({
3592
3594
  "components/core/atoms/Switch.tsx"() {
3593
3595
  "use client";
3594
3596
  init_cn();
3595
- Switch = React73.forwardRef(
3597
+ Switch = React74.forwardRef(
3596
3598
  ({
3597
3599
  checked,
3598
3600
  defaultChecked = false,
@@ -3603,10 +3605,10 @@ var init_Switch = __esm({
3603
3605
  name,
3604
3606
  className
3605
3607
  }, ref) => {
3606
- const [isChecked, setIsChecked] = React73.useState(
3608
+ const [isChecked, setIsChecked] = React74.useState(
3607
3609
  checked !== void 0 ? checked : defaultChecked
3608
3610
  );
3609
- React73.useEffect(() => {
3611
+ React74.useEffect(() => {
3610
3612
  if (checked !== void 0) {
3611
3613
  setIsChecked(checked);
3612
3614
  }
@@ -3637,7 +3639,7 @@ var init_Switch = __esm({
3637
3639
  // redefine --space-11 to 68px, which makes w-11 enormous and leaves
3638
3640
  // the thumb stuck near the left edge. The switch geometry must stay
3639
3641
  // proportional regardless of a theme's density scale.
3640
- "relative inline-flex h-[1.5rem] w-[2.75rem] shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors",
3642
+ "relative inline-flex h-[1.5rem] w-[2.75rem] shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors duration-fast",
3641
3643
  "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
3642
3644
  isChecked ? "bg-primary" : "bg-muted",
3643
3645
  disabled && "cursor-not-allowed opacity-50"
@@ -3646,7 +3648,7 @@ var init_Switch = __esm({
3646
3648
  "span",
3647
3649
  {
3648
3650
  className: cn(
3649
- "pointer-events-none block h-[1.25rem] w-[1.25rem] rounded-full bg-background shadow-lg ring-0 transition-transform",
3651
+ "pointer-events-none block h-[1.25rem] w-[1.25rem] rounded-full bg-background shadow-lg ring-0 transition-transform duration-fast",
3650
3652
  isChecked ? "translate-x-[1.25rem]" : "translate-x-0"
3651
3653
  )
3652
3654
  }
@@ -3769,7 +3771,7 @@ var init_Stack = __esm({
3769
3771
  };
3770
3772
  const isHorizontal = direction === "horizontal";
3771
3773
  const directionClass = responsive && isHorizontal ? reverse ? "flex-col-reverse md:flex-row-reverse" : "flex-col md:flex-row" : isHorizontal ? reverse ? "flex-row-reverse" : "flex-row" : reverse ? "flex-col-reverse" : "flex-col";
3772
- return React73__default.createElement(
3774
+ return React74__default.createElement(
3773
3775
  Component,
3774
3776
  {
3775
3777
  className: cn(
@@ -3814,7 +3816,7 @@ var init_TextHighlight = __esm({
3814
3816
  hoverEvent
3815
3817
  }) => {
3816
3818
  const eventBus = useEventBus();
3817
- const baseStyles = "cursor-pointer transition-all duration-150";
3819
+ const baseStyles = "cursor-pointer transition-all duration-fast";
3818
3820
  const typeStyles = {
3819
3821
  question: cn(
3820
3822
  // Blue border for questions
@@ -3965,7 +3967,7 @@ var init_Typography = __esm({
3965
3967
  }) => {
3966
3968
  const variant = variantProp ?? (level ? `h${level}` : "body1");
3967
3969
  const Component = as || defaultElements[variant];
3968
- return React73__default.createElement(
3970
+ return React74__default.createElement(
3969
3971
  Component,
3970
3972
  {
3971
3973
  id,
@@ -4048,12 +4050,84 @@ var init_ThemeToggle = __esm({
4048
4050
  ThemeToggle.displayName = "ThemeToggle";
4049
4051
  }
4050
4052
  });
4053
+ function isMotionEnabled() {
4054
+ if (typeof document === "undefined") return true;
4055
+ if (motionEnabledCache !== null) return motionEnabledCache;
4056
+ const v = getComputedStyle(document.documentElement).getPropertyValue("--motion-enable").trim().toLowerCase();
4057
+ motionEnabledCache = v !== "off";
4058
+ return motionEnabledCache;
4059
+ }
4060
+ function usePresence(show, opts) {
4061
+ const { animation, animate = true, onExited } = opts;
4062
+ const [mounted, setMounted] = useState(show);
4063
+ const [exiting, setExiting] = useState(false);
4064
+ const prev = useRef(show);
4065
+ const onExitedRef = useRef(onExited);
4066
+ onExitedRef.current = onExited;
4067
+ const safeTimer = useRef(null);
4068
+ const clearSafe = useCallback(() => {
4069
+ if (safeTimer.current) {
4070
+ clearTimeout(safeTimer.current);
4071
+ safeTimer.current = null;
4072
+ }
4073
+ }, []);
4074
+ const finishExit = useCallback(() => {
4075
+ clearSafe();
4076
+ setExiting(false);
4077
+ setMounted(false);
4078
+ onExitedRef.current?.();
4079
+ }, [clearSafe]);
4080
+ useEffect(() => {
4081
+ const moving = animate && isMotionEnabled();
4082
+ if (show && !prev.current) {
4083
+ setExiting(false);
4084
+ setMounted(true);
4085
+ } else if (!show && prev.current) {
4086
+ if (moving) {
4087
+ setExiting(true);
4088
+ clearSafe();
4089
+ safeTimer.current = setTimeout(finishExit, SAFE_EXIT_MS);
4090
+ } else {
4091
+ setMounted(false);
4092
+ setExiting(false);
4093
+ }
4094
+ }
4095
+ prev.current = show;
4096
+ }, [show, animate, clearSafe, finishExit]);
4097
+ useEffect(() => () => clearSafe(), [clearSafe]);
4098
+ const disabled = !animate || !isMotionEnabled();
4099
+ const className = disabled ? "" : exiting ? `animate-${animation}-out` : `animate-${animation}-in`;
4100
+ const onAnimationEnd = useCallback(
4101
+ (e) => {
4102
+ if (e.target !== e.currentTarget) return;
4103
+ if (exiting) finishExit();
4104
+ },
4105
+ [exiting, finishExit]
4106
+ );
4107
+ return { mounted, exiting, className, onAnimationEnd };
4108
+ }
4109
+ var SAFE_EXIT_MS, motionEnabledCache, Presence;
4110
+ var init_Presence = __esm({
4111
+ "components/core/atoms/Presence.tsx"() {
4112
+ "use client";
4113
+ init_cn();
4114
+ SAFE_EXIT_MS = 1e3;
4115
+ motionEnabledCache = null;
4116
+ Presence = ({ show, className, children, ...opts }) => {
4117
+ const { mounted, className: animClass, onAnimationEnd } = usePresence(show, opts);
4118
+ if (!mounted) return null;
4119
+ return /* @__PURE__ */ jsx("div", { className: cn(animClass, className), onAnimationEnd, children });
4120
+ };
4121
+ Presence.displayName = "Presence";
4122
+ }
4123
+ });
4051
4124
  var Overlay;
4052
4125
  var init_Overlay = __esm({
4053
4126
  "components/core/atoms/Overlay.tsx"() {
4054
4127
  "use client";
4055
4128
  init_cn();
4056
4129
  init_useEventBus();
4130
+ init_Presence();
4057
4131
  Overlay = ({
4058
4132
  isVisible = true,
4059
4133
  onClick,
@@ -4062,7 +4136,8 @@ var init_Overlay = __esm({
4062
4136
  action
4063
4137
  }) => {
4064
4138
  const eventBus = useEventBus();
4065
- if (!isVisible) return null;
4139
+ const { mounted, className: animClass, onAnimationEnd } = usePresence(isVisible, { animation: "overlay" });
4140
+ if (!mounted) return null;
4066
4141
  const handleClick = (e) => {
4067
4142
  if (action) {
4068
4143
  eventBus.emit(`UI:${action}`, {});
@@ -4075,11 +4150,12 @@ var init_Overlay = __esm({
4075
4150
  className: cn(
4076
4151
  "fixed inset-0 z-40",
4077
4152
  blur && "backdrop-blur-sm",
4078
- "animate-overlay-in",
4153
+ animClass,
4079
4154
  className
4080
4155
  ),
4081
4156
  style: { backgroundColor: "rgba(0, 0, 0, 0.6)" },
4082
4157
  onClick: action || onClick ? handleClick : void 0,
4158
+ onAnimationEnd,
4083
4159
  "aria-hidden": "true"
4084
4160
  }
4085
4161
  );
@@ -4125,7 +4201,7 @@ var Dialog;
4125
4201
  var init_Dialog = __esm({
4126
4202
  "components/core/atoms/Dialog.tsx"() {
4127
4203
  init_cn();
4128
- Dialog = React73__default.forwardRef(
4204
+ Dialog = React74__default.forwardRef(
4129
4205
  ({
4130
4206
  role = "dialog",
4131
4207
  "aria-modal": ariaModal = true,
@@ -4151,7 +4227,7 @@ var Aside;
4151
4227
  var init_Aside = __esm({
4152
4228
  "components/core/atoms/Aside.tsx"() {
4153
4229
  init_cn();
4154
- Aside = React73__default.forwardRef(
4230
+ Aside = React74__default.forwardRef(
4155
4231
  ({ className, children, ...rest }, ref) => /* @__PURE__ */ jsx("aside", { ref, className: cn(className), ...rest, children })
4156
4232
  );
4157
4233
  Aside.displayName = "Aside";
@@ -4230,9 +4306,9 @@ var init_LawReferenceTooltip = __esm({
4230
4306
  className
4231
4307
  }) => {
4232
4308
  const { t } = useTranslate();
4233
- const [isVisible, setIsVisible] = React73__default.useState(false);
4234
- const timeoutRef = React73__default.useRef(null);
4235
- const triggerRef = React73__default.useRef(null);
4309
+ const [isVisible, setIsVisible] = React74__default.useState(false);
4310
+ const timeoutRef = React74__default.useRef(null);
4311
+ const triggerRef = React74__default.useRef(null);
4236
4312
  const handleMouseEnter = () => {
4237
4313
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
4238
4314
  timeoutRef.current = setTimeout(() => setIsVisible(true), 200);
@@ -4243,7 +4319,7 @@ var init_LawReferenceTooltip = __esm({
4243
4319
  };
4244
4320
  const { revealed, triggerProps } = useTapReveal({ refs: [triggerRef] });
4245
4321
  const open = isVisible || revealed;
4246
- React73__default.useEffect(() => {
4322
+ React74__default.useEffect(() => {
4247
4323
  return () => {
4248
4324
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
4249
4325
  };
@@ -4453,7 +4529,7 @@ var init_StatusDot = __esm({
4453
4529
  md: "w-2.5 h-2.5",
4454
4530
  lg: "w-3 h-3"
4455
4531
  };
4456
- StatusDot = React73__default.forwardRef(
4532
+ StatusDot = React74__default.forwardRef(
4457
4533
  ({ className, status = "offline", pulse = false, size = "md", label, ...props }, ref) => {
4458
4534
  return /* @__PURE__ */ jsx(
4459
4535
  "span",
@@ -4507,7 +4583,7 @@ var init_TrendIndicator = __esm({
4507
4583
  down: "trending-down",
4508
4584
  flat: "arrow-right"
4509
4585
  };
4510
- TrendIndicator = React73__default.forwardRef(
4586
+ TrendIndicator = React74__default.forwardRef(
4511
4587
  ({
4512
4588
  className,
4513
4589
  value,
@@ -4574,7 +4650,7 @@ var init_RangeSlider = __esm({
4574
4650
  md: "w-4 h-4",
4575
4651
  lg: "w-5 h-5"
4576
4652
  };
4577
- RangeSlider = React73__default.forwardRef(
4653
+ RangeSlider = React74__default.forwardRef(
4578
4654
  ({
4579
4655
  className,
4580
4656
  min = 0,
@@ -4717,7 +4793,7 @@ var init_RangeSlider = __esm({
4717
4793
  "border-2 border-primary",
4718
4794
  "shadow-sm",
4719
4795
  "pointer-events-none",
4720
- "transition-transform duration-100",
4796
+ "transition-transform duration-instant",
4721
4797
  isDragging && "scale-[var(--hover-scale)]",
4722
4798
  thumbSizes[size]
4723
4799
  ),
@@ -5185,7 +5261,7 @@ var init_ContentSection = __esm({
5185
5261
  md: "py-16",
5186
5262
  lg: "py-24"
5187
5263
  };
5188
- ContentSection = React73__default.forwardRef(
5264
+ ContentSection = React74__default.forwardRef(
5189
5265
  ({ children, background = "default", padding = "lg", id, className }, ref) => {
5190
5266
  return /* @__PURE__ */ jsx(
5191
5267
  Box,
@@ -5719,7 +5795,7 @@ var init_AnimatedReveal = __esm({
5719
5795
  "scale-up": { opacity: 1, transform: "scale(1) translateY(0)" },
5720
5796
  "none": {}
5721
5797
  };
5722
- AnimatedReveal = React73__default.forwardRef(
5798
+ AnimatedReveal = React74__default.forwardRef(
5723
5799
  ({
5724
5800
  trigger = "scroll",
5725
5801
  animation = "fade-up",
@@ -5879,7 +5955,7 @@ var init_AnimatedGraphic = __esm({
5879
5955
  "components/marketing/atoms/AnimatedGraphic.tsx"() {
5880
5956
  "use client";
5881
5957
  init_cn();
5882
- AnimatedGraphic = React73__default.forwardRef(
5958
+ AnimatedGraphic = React74__default.forwardRef(
5883
5959
  ({
5884
5960
  src,
5885
5961
  svgContent,
@@ -5902,7 +5978,7 @@ var init_AnimatedGraphic = __esm({
5902
5978
  const fetchedSvg = useFetchedSvg(svgContent ? void 0 : src);
5903
5979
  const resolvedSvg = svgContent ?? fetchedSvg;
5904
5980
  const prevAnimateRef = useRef(animate);
5905
- const setRef = React73__default.useCallback(
5981
+ const setRef = React74__default.useCallback(
5906
5982
  (node) => {
5907
5983
  containerRef.current = node;
5908
5984
  if (typeof ref === "function") ref(node);
@@ -6025,6 +6101,7 @@ var init_Modal = __esm({
6025
6101
  isOpen = true,
6026
6102
  onClose = () => {
6027
6103
  },
6104
+ onExited,
6028
6105
  title,
6029
6106
  children = null,
6030
6107
  footer,
@@ -6051,7 +6128,10 @@ var init_Modal = __esm({
6051
6128
  wasOpenRef.current = isOpen;
6052
6129
  }, [isOpen]);
6053
6130
  const handleAnimEnd = (e) => {
6054
- if (closing && e.target === e.currentTarget) setClosing(false);
6131
+ if (closing && e.target === e.currentTarget) {
6132
+ setClosing(false);
6133
+ onExited?.();
6134
+ }
6055
6135
  };
6056
6136
  useEffect(() => {
6057
6137
  if (isOpen) {
@@ -6229,6 +6309,7 @@ var init_Drawer = __esm({
6229
6309
  init_Button();
6230
6310
  init_Typography();
6231
6311
  init_Overlay();
6312
+ init_Presence();
6232
6313
  init_cn();
6233
6314
  init_useEventBus();
6234
6315
  sizeWidths = {
@@ -6282,6 +6363,7 @@ var init_Drawer = __esm({
6282
6363
  document.addEventListener("keydown", handleEscape);
6283
6364
  return () => document.removeEventListener("keydown", handleEscape);
6284
6365
  }, [isOpen, closeOnEscape, onClose, closeEvent, eventBus]);
6366
+ const { mounted, className: drawerAnim, onAnimationEnd } = usePresence(isOpen, { animation: "drawer" });
6285
6367
  useEffect(() => {
6286
6368
  if (isOpen) {
6287
6369
  document.body.style.overflow = "hidden";
@@ -6292,7 +6374,7 @@ var init_Drawer = __esm({
6292
6374
  document.body.style.overflow = "";
6293
6375
  };
6294
6376
  }, [isOpen]);
6295
- if (!isOpen) return null;
6377
+ if (!mounted) return null;
6296
6378
  const handleClose = () => {
6297
6379
  if (closeEvent) eventBus.emit(`UI:${closeEvent}`, {});
6298
6380
  onClose();
@@ -6305,7 +6387,7 @@ var init_Drawer = __esm({
6305
6387
  const widthClass = width in sizeWidths ? sizeWidths[width] : "";
6306
6388
  const widthStyle = width in sizeWidths ? void 0 : { width };
6307
6389
  const positionClasses = position === "right" ? "right-0 border-l" : "left-0 border-r";
6308
- const animationClasses2 = position === "right" ? "animate-slide-in-right" : "animate-slide-in-left";
6390
+ const drawerSign = position === "right" ? 1 : -1;
6309
6391
  return /* @__PURE__ */ jsxs(Fragment, { children: [
6310
6392
  /* @__PURE__ */ jsx(
6311
6393
  Overlay,
@@ -6327,12 +6409,13 @@ var init_Drawer = __esm({
6327
6409
  "flex flex-col max-h-screen",
6328
6410
  positionClasses,
6329
6411
  widthClass,
6330
- animationClasses2,
6412
+ drawerAnim,
6331
6413
  className
6332
6414
  ),
6333
- style: widthStyle,
6415
+ style: { ...widthStyle, "--motion-drawer-sign": drawerSign },
6334
6416
  role: "dialog",
6335
6417
  "aria-modal": "true",
6418
+ onAnimationEnd,
6336
6419
  ...title && { "aria-labelledby": "drawer-title" },
6337
6420
  children: [
6338
6421
  (title || showCloseButton) && /* @__PURE__ */ jsxs(
@@ -6371,31 +6454,7 @@ var init_Drawer = __esm({
6371
6454
  )
6372
6455
  ]
6373
6456
  }
6374
- ),
6375
- /* @__PURE__ */ jsx("style", { children: `
6376
- @keyframes slide-in-right {
6377
- from {
6378
- transform: translateX(100%);
6379
- }
6380
- to {
6381
- transform: translateX(0);
6382
- }
6383
- }
6384
- @keyframes slide-in-left {
6385
- from {
6386
- transform: translateX(-100%);
6387
- }
6388
- to {
6389
- transform: translateX(0);
6390
- }
6391
- }
6392
- .animate-slide-in-right {
6393
- animation: slide-in-right 0.3s ease-out;
6394
- }
6395
- .animate-slide-in-left {
6396
- animation: slide-in-left 0.3s ease-out;
6397
- }
6398
- ` })
6457
+ )
6399
6458
  ] });
6400
6459
  };
6401
6460
  Drawer.displayName = "Drawer";
@@ -6446,14 +6505,23 @@ var init_Toast = __esm({
6446
6505
  }) => {
6447
6506
  const eventBus = useEventBus();
6448
6507
  const { t } = useTranslate();
6449
- const handleDismiss = () => {
6508
+ const [leaving, setLeaving] = useState(false);
6509
+ const doRealDismiss = () => {
6450
6510
  if (dismissEvent) eventBus.emit(`UI:${dismissEvent}`, {});
6451
6511
  onDismiss?.();
6452
6512
  };
6513
+ const handleDismiss = () => {
6514
+ if (leaving) return;
6515
+ setLeaving(true);
6516
+ };
6453
6517
  const handleAction = () => {
6454
6518
  if (actionEvent) eventBus.emit(`UI:${actionEvent}`, {});
6455
6519
  onAction?.();
6456
6520
  };
6521
+ const handleAnimEnd = (e) => {
6522
+ if (e.target !== e.currentTarget) return;
6523
+ if (leaving) doRealDismiss();
6524
+ };
6457
6525
  useEffect(() => {
6458
6526
  if (duration <= 0 || !onDismiss && !dismissEvent) {
6459
6527
  return;
@@ -6472,10 +6540,12 @@ var init_Toast = __esm({
6472
6540
  // edge. `max-w-[calc(100vw-2rem)]` clamps to viewport too.
6473
6541
  "border-l-4 p-4 shadow-elevation-toast min-w-0 sm:min-w-[300px] max-w-md max-w-[calc(100vw-2rem)]",
6474
6542
  "rounded-sm",
6543
+ leaving ? "animate-toast-out" : "animate-toast-in",
6475
6544
  variantClasses[variant],
6476
6545
  className
6477
6546
  ),
6478
6547
  role: "alert",
6548
+ onAnimationEnd: handleAnimEnd,
6479
6549
  children: /* @__PURE__ */ jsxs(Box, { className: "flex items-start gap-3", children: [
6480
6550
  /* @__PURE__ */ jsx(Box, { className: "flex-shrink-0 mt-0.5", children: /* @__PURE__ */ jsx(
6481
6551
  Icon,
@@ -6591,7 +6661,7 @@ var init_ErrorBoundary = __esm({
6591
6661
  }
6592
6662
  );
6593
6663
  };
6594
- ErrorBoundary = class extends React73__default.Component {
6664
+ ErrorBoundary = class extends React74__default.Component {
6595
6665
  constructor(props) {
6596
6666
  super(props);
6597
6667
  __publicField(this, "reset", () => {
@@ -6872,7 +6942,7 @@ var init_Container = __esm({
6872
6942
  as: Component = "div"
6873
6943
  }) => {
6874
6944
  const resolvedSize = maxWidth ?? size ?? "lg";
6875
- return React73__default.createElement(
6945
+ return React74__default.createElement(
6876
6946
  Component,
6877
6947
  {
6878
6948
  className: cn(
@@ -10095,7 +10165,7 @@ var init_CodeBlock = __esm({
10095
10165
  DIFF_STYLE_FALLBACK = { bg: "", prefix: " ", text: "text-foreground" };
10096
10166
  LINE_PROPS_FN = (n) => ({ "data-line": String(n - 1) });
10097
10167
  HIDDEN_LINE_NUMBERS = { display: "none" };
10098
- CodeBlock = React73__default.memo(
10168
+ CodeBlock = React74__default.memo(
10099
10169
  ({
10100
10170
  code: rawCode,
10101
10171
  language = "text",
@@ -10682,7 +10752,7 @@ var init_MarkdownContent = __esm({
10682
10752
  init_Box();
10683
10753
  init_CodeBlock();
10684
10754
  init_cn();
10685
- MarkdownContent = React73__default.memo(
10755
+ MarkdownContent = React74__default.memo(
10686
10756
  ({ content, direction = "ltr", className }) => {
10687
10757
  const { t: _t } = useTranslate();
10688
10758
  const safeContent = typeof content === "string" ? content : String(content ?? "");
@@ -11645,7 +11715,7 @@ var init_StateMachineView = __esm({
11645
11715
  Box,
11646
11716
  {
11647
11717
  className: cn(
11648
- "fixed z-50 animate-in fade-in-0 zoom-in-95 duration-150",
11718
+ "fixed z-50 animate-in fade-in-0 zoom-in-95 duration-fast",
11649
11719
  tooltip.pinned ? "pointer-events-auto" : "pointer-events-none"
11650
11720
  ),
11651
11721
  style: {
@@ -12009,7 +12079,7 @@ var init_StateMachineView = __esm({
12009
12079
  style: { top: title ? 30 : 0 },
12010
12080
  children: [
12011
12081
  entity && /* @__PURE__ */ jsx(EntityBox, { entity, config }),
12012
- states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React73__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
12082
+ states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React74__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
12013
12083
  StateNode,
12014
12084
  {
12015
12085
  state,
@@ -14048,6 +14118,129 @@ var init_Breadcrumb = __esm({
14048
14118
  Breadcrumb.displayName = "Breadcrumb";
14049
14119
  }
14050
14120
  });
14121
+ function useSafeEventBus2() {
14122
+ try {
14123
+ return useEventBus();
14124
+ } catch {
14125
+ return { emit: () => {
14126
+ }, on: () => () => {
14127
+ }, once: () => {
14128
+ } };
14129
+ }
14130
+ }
14131
+ var log5, lookStyles4, ButtonGroup;
14132
+ var init_ButtonGroup = __esm({
14133
+ "components/core/molecules/ButtonGroup.tsx"() {
14134
+ "use client";
14135
+ init_cn();
14136
+ init_atoms();
14137
+ init_useEventBus();
14138
+ log5 = createLogger("almadar:ui:button-group");
14139
+ lookStyles4 = {
14140
+ "right-aligned-buttons": "",
14141
+ "floating-bar": "fixed bottom-section left-1/2 -translate-x-1/2 shadow-elevation-toast bg-card p-card-sm rounded-container",
14142
+ "inline-row": "gap-2 inline-flex",
14143
+ "dropdown-menu": "[&>button:not(:first-child)]:hidden",
14144
+ "command-palette-trigger": "[&>button:not(:first-child)]:hidden"
14145
+ };
14146
+ ButtonGroup = ({
14147
+ children,
14148
+ primary,
14149
+ secondary,
14150
+ variant = "default",
14151
+ orientation = "horizontal",
14152
+ className,
14153
+ // Filter-group pattern props (entity and filters are used for schema-driven filtering)
14154
+ entity: _entity,
14155
+ filters,
14156
+ look = "right-aligned-buttons"
14157
+ }) => {
14158
+ const eventBus = useSafeEventBus2();
14159
+ const variantClasses2 = {
14160
+ default: "gap-0",
14161
+ segmented: "gap-0 [&>button]:rounded-none [&>button:first-child]:rounded-l-lg [&>button:last-child]:rounded-r-lg [&>button:not(:first-child)]:border-l-0",
14162
+ toggle: "gap-0 [&>button]:rounded-none [&>button:first-child]:rounded-l-lg [&>button:last-child]:rounded-r-lg [&>button:not(:first-child)]:border-l-0"
14163
+ };
14164
+ const orientationClasses = {
14165
+ horizontal: "flex-row",
14166
+ vertical: "flex-col [&>button:first-child]:rounded-t-lg [&>button:last-child]:rounded-b-lg [&>button:not(:first-child)]:border-t-0 [&>button:not(:first-child)]:border-l"
14167
+ };
14168
+ const handleActionClick = (action) => {
14169
+ if (action.event) {
14170
+ eventBus.emit("UI:DISPATCH", { event: action.event });
14171
+ }
14172
+ if (action.navigatesTo) {
14173
+ eventBus.emit("UI:NAVIGATE", { url: action.navigatesTo });
14174
+ }
14175
+ };
14176
+ const renderFormActions = () => {
14177
+ const buttons = [];
14178
+ if (secondary) {
14179
+ secondary.forEach((action, index) => {
14180
+ buttons.push(
14181
+ /* @__PURE__ */ jsx(
14182
+ Button,
14183
+ {
14184
+ type: action.actionType === "submit" ? "submit" : "button",
14185
+ variant: action.variant || "ghost",
14186
+ onClick: () => handleActionClick(action),
14187
+ children: action.label
14188
+ },
14189
+ `secondary-${index}`
14190
+ )
14191
+ );
14192
+ });
14193
+ }
14194
+ if (primary) {
14195
+ const isSubmit = primary.actionType === "submit";
14196
+ buttons.push(
14197
+ /* @__PURE__ */ jsx(
14198
+ Button,
14199
+ {
14200
+ type: isSubmit ? "submit" : "button",
14201
+ variant: primary.variant || "primary",
14202
+ onClick: () => handleActionClick(primary),
14203
+ "data-testid": isSubmit ? "form-submit" : void 0,
14204
+ children: primary.label
14205
+ },
14206
+ "primary"
14207
+ )
14208
+ );
14209
+ }
14210
+ return buttons;
14211
+ };
14212
+ const renderFilters = () => {
14213
+ if (!filters || filters.length === 0) return null;
14214
+ return filters.map((filter, index) => /* @__PURE__ */ jsx(
14215
+ Button,
14216
+ {
14217
+ variant: "ghost",
14218
+ onClick: () => {
14219
+ log5.debug("Filter clicked", { field: filter.field });
14220
+ },
14221
+ children: filter.label
14222
+ },
14223
+ `filter-${filter.field}-${index}`
14224
+ ));
14225
+ };
14226
+ return /* @__PURE__ */ jsx(
14227
+ "div",
14228
+ {
14229
+ className: cn(
14230
+ "inline-flex gap-2",
14231
+ variantClasses2[variant],
14232
+ orientationClasses[orientation],
14233
+ lookStyles4[look],
14234
+ className
14235
+ ),
14236
+ role: "group",
14237
+ children: children || renderFilters() || renderFormActions()
14238
+ }
14239
+ );
14240
+ };
14241
+ ButtonGroup.displayName = "ButtonGroup";
14242
+ }
14243
+ });
14051
14244
  function useSwipeGesture(callbacks, options = {}) {
14052
14245
  const { threshold = 50, velocityThreshold = 0.3, preventDefault = false } = options;
14053
14246
  const startX = useRef(0);
@@ -14418,8 +14611,8 @@ function MiniMap({
14418
14611
  tileAssets,
14419
14612
  unitAssets
14420
14613
  }) {
14421
- const canvasRef = React73.useRef(null);
14422
- const imgCacheRef = React73.useRef(/* @__PURE__ */ new Map());
14614
+ const canvasRef = React74.useRef(null);
14615
+ const imgCacheRef = React74.useRef(/* @__PURE__ */ new Map());
14423
14616
  function loadImg(url) {
14424
14617
  const cached = imgCacheRef.current.get(url);
14425
14618
  if (cached) return cached.complete ? cached : null;
@@ -14434,7 +14627,7 @@ function MiniMap({
14434
14627
  imgCacheRef.current.set(url, img);
14435
14628
  return null;
14436
14629
  }
14437
- React73.useEffect(() => {
14630
+ React74.useEffect(() => {
14438
14631
  const canvas = canvasRef.current;
14439
14632
  if (!canvas) return;
14440
14633
  const ctx = canvas.getContext("2d");
@@ -14609,7 +14802,7 @@ function getTraitSnapshots() {
14609
14802
  try {
14610
14803
  snapshots.push(getter());
14611
14804
  } catch (err) {
14612
- log5.error("traitSnapshot getter failed", { trait: traitName, err: String(err) });
14805
+ log6.error("traitSnapshot getter failed", { trait: traitName, err: String(err) });
14613
14806
  }
14614
14807
  }
14615
14808
  return snapshots;
@@ -14694,10 +14887,10 @@ function updateAssetStatus(url, status) {
14694
14887
  window.__orbitalVerification.assetStatus[url] = status;
14695
14888
  }
14696
14889
  }
14697
- var log5;
14890
+ var log6;
14698
14891
  var init_verificationRegistry = __esm({
14699
14892
  "lib/verificationRegistry.ts"() {
14700
- log5 = createLogger("almadar:bridge");
14893
+ log6 = createLogger("almadar:bridge");
14701
14894
  exposeOnWindow();
14702
14895
  }
14703
14896
  });
@@ -16446,7 +16639,7 @@ var init_CardGrid = __esm({
16446
16639
  CardGrid.displayName = "CardGrid";
16447
16640
  }
16448
16641
  });
16449
- function useSafeEventBus2() {
16642
+ function useSafeEventBus3() {
16450
16643
  try {
16451
16644
  return useEventBus();
16452
16645
  } catch {
@@ -16482,7 +16675,7 @@ var init_Carousel = __esm({
16482
16675
  const [activeIndex, setActiveIndex] = useState(0);
16483
16676
  const scrollRef = useRef(null);
16484
16677
  const autoPlayRef = useRef(null);
16485
- const eventBus = useSafeEventBus2();
16678
+ const eventBus = useSafeEventBus3();
16486
16679
  const { t } = useTranslate();
16487
16680
  const safeItems = items ?? [];
16488
16681
  const totalSlides = safeItems.length;
@@ -16844,7 +17037,7 @@ var init_Chart = __esm({
16844
17037
  return /* @__PURE__ */ jsx(
16845
17038
  Box,
16846
17039
  {
16847
- className: "h-full rounded-r-sm transition-all duration-500 ease-out min-w-[2px] cursor-pointer hover:opacity-80",
17040
+ className: "h-full rounded-r-sm transition-all duration-slow ease-standard min-w-[2px] cursor-pointer hover:opacity-80",
16848
17041
  style: {
16849
17042
  width: `${ratio}%`,
16850
17043
  backgroundColor: color
@@ -16900,7 +17093,7 @@ var init_Chart = __esm({
16900
17093
  Box,
16901
17094
  {
16902
17095
  className: cn(
16903
- "rounded-t-sm transition-all duration-500 ease-out min-h-[4px] cursor-pointer hover:opacity-80",
17096
+ "rounded-t-sm transition-all duration-slow ease-standard min-h-[4px] cursor-pointer hover:opacity-80",
16904
17097
  histogram ? "flex-1 mx-0" : "flex-1"
16905
17098
  ),
16906
17099
  style: {
@@ -16950,7 +17143,7 @@ var init_Chart = __esm({
16950
17143
  return /* @__PURE__ */ jsx(
16951
17144
  Box,
16952
17145
  {
16953
- className: "w-full transition-all duration-500 ease-out cursor-pointer hover:opacity-80",
17146
+ className: "w-full transition-all duration-slow ease-standard cursor-pointer hover:opacity-80",
16954
17147
  style: {
16955
17148
  height: `${ratio}%`,
16956
17149
  backgroundColor: color
@@ -17040,7 +17233,7 @@ var init_Chart = __esm({
17040
17233
  fill: seg.color,
17041
17234
  stroke: "var(--color-card)",
17042
17235
  strokeWidth: "2",
17043
- className: "transition-opacity duration-200 hover:opacity-80 cursor-pointer",
17236
+ className: "transition-opacity duration-fast hover:opacity-80 cursor-pointer",
17044
17237
  onClick: () => onPointClick?.(
17045
17238
  { label: seg.label, value: seg.value, color: seg.color },
17046
17239
  "default"
@@ -18294,9 +18487,9 @@ function ControlButton({
18294
18487
  className
18295
18488
  }) {
18296
18489
  const eventBus = useEventBus();
18297
- const [isPressed, setIsPressed] = React73.useState(false);
18490
+ const [isPressed, setIsPressed] = React74.useState(false);
18298
18491
  const actualPressed = pressed ?? isPressed;
18299
- const handlePointerDown = React73.useCallback(
18492
+ const handlePointerDown = React74.useCallback(
18300
18493
  (e) => {
18301
18494
  e.preventDefault();
18302
18495
  if (disabled) return;
@@ -18306,7 +18499,7 @@ function ControlButton({
18306
18499
  },
18307
18500
  [disabled, pressEvent, eventBus, onPress]
18308
18501
  );
18309
- const handlePointerUp = React73.useCallback(
18502
+ const handlePointerUp = React74.useCallback(
18310
18503
  (e) => {
18311
18504
  e.preventDefault();
18312
18505
  if (disabled) return;
@@ -18316,7 +18509,7 @@ function ControlButton({
18316
18509
  },
18317
18510
  [disabled, releaseEvent, eventBus, onRelease]
18318
18511
  );
18319
- const handlePointerLeave = React73.useCallback(
18512
+ const handlePointerLeave = React74.useCallback(
18320
18513
  (e) => {
18321
18514
  if (isPressed) {
18322
18515
  setIsPressed(false);
@@ -18404,8 +18597,8 @@ function ControlGrid({
18404
18597
  className
18405
18598
  }) {
18406
18599
  const eventBus = useEventBus();
18407
- const [active, setActive] = React73.useState(/* @__PURE__ */ new Set());
18408
- const handlePress = React73.useCallback(
18600
+ const [active, setActive] = React74.useState(/* @__PURE__ */ new Set());
18601
+ const handlePress = React74.useCallback(
18409
18602
  (id) => {
18410
18603
  setActive((prev) => new Set(prev).add(id));
18411
18604
  if (actionEvent) eventBus.emit(`UI:${actionEvent}`, { id, pressed: true });
@@ -18419,7 +18612,7 @@ function ControlGrid({
18419
18612
  },
18420
18613
  [kind, actionEvent, directionEvent, directionEvents, eventBus, onAction, onDirection]
18421
18614
  );
18422
- const handleRelease = React73.useCallback(
18615
+ const handleRelease = React74.useCallback(
18423
18616
  (id) => {
18424
18617
  setActive((prev) => {
18425
18618
  const next = new Set(prev);
@@ -19626,8 +19819,8 @@ var init_Menu = __esm({
19626
19819
  "bottom-end": "bottom-start"
19627
19820
  };
19628
19821
  const effectivePosition = direction === "rtl" ? rtlMirror[position] ?? position : position;
19629
- const triggerChild = React73__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx(Typography, { variant: "small", as: "span", children: trigger });
19630
- const triggerElement = React73__default.cloneElement(
19822
+ const triggerChild = React74__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx(Typography, { variant: "small", as: "span", children: trigger });
19823
+ const triggerElement = React74__default.cloneElement(
19631
19824
  triggerChild,
19632
19825
  {
19633
19826
  ref: triggerRef,
@@ -19722,14 +19915,14 @@ function useDataDnd(args) {
19722
19915
  const isZone = Boolean(dragGroup || accepts || sortable);
19723
19916
  const enabled = isZone || Boolean(dndRoot);
19724
19917
  const eventBus = useEventBus();
19725
- const parentRoot = React73__default.useContext(RootCtx);
19918
+ const parentRoot = React74__default.useContext(RootCtx);
19726
19919
  const isRoot = enabled && parentRoot === null;
19727
- const zoneId = React73__default.useId();
19920
+ const zoneId = React74__default.useId();
19728
19921
  const ownGroup = dragGroup ?? accepts ?? zoneId;
19729
- const [optimisticOrders, setOptimisticOrders] = React73__default.useState(() => /* @__PURE__ */ new Map());
19730
- const optimisticOrdersRef = React73__default.useRef(optimisticOrders);
19922
+ const [optimisticOrders, setOptimisticOrders] = React74__default.useState(() => /* @__PURE__ */ new Map());
19923
+ const optimisticOrdersRef = React74__default.useRef(optimisticOrders);
19731
19924
  optimisticOrdersRef.current = optimisticOrders;
19732
- const clearOptimisticOrder = React73__default.useCallback((group) => {
19925
+ const clearOptimisticOrder = React74__default.useCallback((group) => {
19733
19926
  setOptimisticOrders((prev) => {
19734
19927
  if (!prev.has(group)) return prev;
19735
19928
  const next = new Map(prev);
@@ -19754,7 +19947,7 @@ function useDataDnd(args) {
19754
19947
  const raw = it[dndItemIdField];
19755
19948
  return raw != null ? String(raw) : `__idx_${idx}`;
19756
19949
  }).join("|");
19757
- const itemIds = React73__default.useMemo(
19950
+ const itemIds = React74__default.useMemo(
19758
19951
  () => orderedItems.map((it, idx) => {
19759
19952
  const raw = it[dndItemIdField];
19760
19953
  return raw != null ? String(raw) : `__idx_${idx}`;
@@ -19765,7 +19958,7 @@ function useDataDnd(args) {
19765
19958
  const raw = it[dndItemIdField];
19766
19959
  return raw != null ? String(raw) : `__${idx}`;
19767
19960
  }).join("|");
19768
- React73__default.useEffect(() => {
19961
+ React74__default.useEffect(() => {
19769
19962
  const root = isRoot ? null : parentRoot;
19770
19963
  if (root) {
19771
19964
  root.clearOptimisticOrder(ownGroup);
@@ -19773,20 +19966,20 @@ function useDataDnd(args) {
19773
19966
  clearOptimisticOrder(ownGroup);
19774
19967
  }
19775
19968
  }, [itemsContentSig, ownGroup]);
19776
- const zonesRef = React73__default.useRef(/* @__PURE__ */ new Map());
19777
- const registerZone = React73__default.useCallback((zoneId2, meta2) => {
19969
+ const zonesRef = React74__default.useRef(/* @__PURE__ */ new Map());
19970
+ const registerZone = React74__default.useCallback((zoneId2, meta2) => {
19778
19971
  zonesRef.current.set(zoneId2, meta2);
19779
19972
  }, []);
19780
- const unregisterZone = React73__default.useCallback((zoneId2) => {
19973
+ const unregisterZone = React74__default.useCallback((zoneId2) => {
19781
19974
  zonesRef.current.delete(zoneId2);
19782
19975
  }, []);
19783
- const [activeDrag, setActiveDrag] = React73__default.useState(null);
19784
- const [overZoneGroup, setOverZoneGroup] = React73__default.useState(null);
19785
- const meta = React73__default.useMemo(
19976
+ const [activeDrag, setActiveDrag] = React74__default.useState(null);
19977
+ const [overZoneGroup, setOverZoneGroup] = React74__default.useState(null);
19978
+ const meta = React74__default.useMemo(
19786
19979
  () => ({ group: ownGroup, dropEvent, reorderEvent, positionEvent, itemIds, rawItems: items, idField: dndItemIdField }),
19787
19980
  [ownGroup, dropEvent, reorderEvent, positionEvent, itemIds, items, dndItemIdField]
19788
19981
  );
19789
- React73__default.useEffect(() => {
19982
+ React74__default.useEffect(() => {
19790
19983
  const target = isRoot ? null : parentRoot;
19791
19984
  if (!target) {
19792
19985
  zonesRef.current.set(zoneId, meta);
@@ -19805,7 +19998,7 @@ function useDataDnd(args) {
19805
19998
  }, [parentRoot, isRoot, zoneId, meta]);
19806
19999
  const sensors = useAlmadarDndSensors(true);
19807
20000
  const collisionDetection = almadarDndCollisionDetection;
19808
- const findZoneByItem = React73__default.useCallback(
20001
+ const findZoneByItem = React74__default.useCallback(
19809
20002
  (id) => {
19810
20003
  for (const z of zonesRef.current.values()) {
19811
20004
  if (z.itemIds.includes(id)) return z;
@@ -19814,7 +20007,7 @@ function useDataDnd(args) {
19814
20007
  },
19815
20008
  []
19816
20009
  );
19817
- React73__default.useCallback(
20010
+ React74__default.useCallback(
19818
20011
  (group) => {
19819
20012
  for (const z of zonesRef.current.values()) {
19820
20013
  if (z.group === group) return z;
@@ -19823,7 +20016,7 @@ function useDataDnd(args) {
19823
20016
  },
19824
20017
  []
19825
20018
  );
19826
- const handleDragEnd = React73__default.useCallback(
20019
+ const handleDragEnd = React74__default.useCallback(
19827
20020
  (event) => {
19828
20021
  const { active, over } = event;
19829
20022
  const activeIdStr = String(active.id);
@@ -19914,8 +20107,8 @@ function useDataDnd(args) {
19914
20107
  },
19915
20108
  [eventBus]
19916
20109
  );
19917
- const sortableData = React73__default.useMemo(() => ({ dndGroup: ownGroup }), [ownGroup]);
19918
- const SortableItem = React73__default.useCallback(
20110
+ const sortableData = React74__default.useMemo(() => ({ dndGroup: ownGroup }), [ownGroup]);
20111
+ const SortableItem = React74__default.useCallback(
19919
20112
  ({ id, children }) => {
19920
20113
  const {
19921
20114
  attributes,
@@ -19955,7 +20148,7 @@ function useDataDnd(args) {
19955
20148
  id: droppableId,
19956
20149
  data: sortableData
19957
20150
  });
19958
- const ctx = React73__default.useContext(RootCtx);
20151
+ const ctx = React74__default.useContext(RootCtx);
19959
20152
  const activeDrag2 = ctx?.activeDrag ?? null;
19960
20153
  const overZoneGroup2 = ctx?.overZoneGroup ?? null;
19961
20154
  const isThisZoneOver = overZoneGroup2 === ownGroup;
@@ -19970,7 +20163,7 @@ function useDataDnd(args) {
19970
20163
  showForeignPlaceholder,
19971
20164
  ctxAvailable: ctx != null
19972
20165
  });
19973
- React73__default.useEffect(() => {
20166
+ React74__default.useEffect(() => {
19974
20167
  dndLog.info("dropzone:isOver:change", { droppableId, group: ownGroup, isOver, isThisZoneOver, showForeignPlaceholder, activeDragSourceGroup: activeDrag2?.sourceGroup ?? null });
19975
20168
  }, [droppableId, isOver, isThisZoneOver, showForeignPlaceholder]);
19976
20169
  return /* @__PURE__ */ jsx(
@@ -19984,11 +20177,11 @@ function useDataDnd(args) {
19984
20177
  }
19985
20178
  );
19986
20179
  };
19987
- const rootContextValue = React73__default.useMemo(
20180
+ const rootContextValue = React74__default.useMemo(
19988
20181
  () => ({ registerZone, unregisterZone, activeDrag, overZoneGroup, optimisticOrders, clearOptimisticOrder }),
19989
20182
  [registerZone, unregisterZone, activeDrag, overZoneGroup, optimisticOrders, clearOptimisticOrder]
19990
20183
  );
19991
- const handleDragStart = React73__default.useCallback((event) => {
20184
+ const handleDragStart = React74__default.useCallback((event) => {
19992
20185
  const sourceZone = findZoneByItem(event.active.id);
19993
20186
  const rect = event.active.rect.current.initial;
19994
20187
  const height = rect?.height && rect.height > 0 ? rect.height : 64;
@@ -20007,7 +20200,7 @@ function useDataDnd(args) {
20007
20200
  isRoot
20008
20201
  });
20009
20202
  }, [findZoneByItem, isRoot, zoneId]);
20010
- const handleDragOver = React73__default.useCallback((event) => {
20203
+ const handleDragOver = React74__default.useCallback((event) => {
20011
20204
  const { active, over } = event;
20012
20205
  const overData = over?.data?.current;
20013
20206
  const overGroup = overData?.dndGroup ?? null;
@@ -20077,7 +20270,7 @@ function useDataDnd(args) {
20077
20270
  return next;
20078
20271
  });
20079
20272
  }, []);
20080
- const handleDragCancel = React73__default.useCallback((event) => {
20273
+ const handleDragCancel = React74__default.useCallback((event) => {
20081
20274
  setActiveDrag(null);
20082
20275
  setOverZoneGroup(null);
20083
20276
  dndLog.warn("dragCancel", {
@@ -20085,12 +20278,12 @@ function useDataDnd(args) {
20085
20278
  reason: "dnd-kit cancelled the drag (escape key, pointer interrupted, or external)"
20086
20279
  });
20087
20280
  }, []);
20088
- const handleDragEndWithCleanup = React73__default.useCallback((event) => {
20281
+ const handleDragEndWithCleanup = React74__default.useCallback((event) => {
20089
20282
  handleDragEnd(event);
20090
20283
  setActiveDrag(null);
20091
20284
  setOverZoneGroup(null);
20092
20285
  }, [handleDragEnd]);
20093
- const wrapContainer = React73__default.useCallback(
20286
+ const wrapContainer = React74__default.useCallback(
20094
20287
  (children) => {
20095
20288
  if (!enabled) return children;
20096
20289
  const strategy = layout === "grid" ? rectSortingStrategy : verticalListSortingStrategy;
@@ -20144,7 +20337,7 @@ var init_useDataDnd = __esm({
20144
20337
  init_useAlmadarDndCollision();
20145
20338
  init_Box();
20146
20339
  dndLog = createLogger("almadar:ui:dnd");
20147
- RootCtx = React73__default.createContext(null);
20340
+ RootCtx = React74__default.createContext(null);
20148
20341
  }
20149
20342
  });
20150
20343
  function renderIconInput(icon, props) {
@@ -20341,7 +20534,7 @@ function DataGrid({
20341
20534
  /* @__PURE__ */ jsx(
20342
20535
  Box,
20343
20536
  {
20344
- className: cn("grid", gapStyles5[gap], scrollX ? "grid-flow-col overflow-x-auto" : colsClass, lookStyles4[look], className),
20537
+ className: cn("grid", gapStyles5[gap], scrollX ? "grid-flow-col overflow-x-auto" : colsClass, lookStyles5[look], className),
20345
20538
  style: scrollX ? { gridAutoFlow: "column", gridAutoColumns: `minmax(${minCardWidth}px, 1fr)` } : gridTemplateColumns ? { gridTemplateColumns } : void 0,
20346
20539
  children: data.map((item, index) => {
20347
20540
  const itemData = item;
@@ -20536,7 +20729,7 @@ function DataGrid({
20536
20729
  ] })
20537
20730
  );
20538
20731
  }
20539
- var dataGridLog, BADGE_VARIANTS, gapStyles5, lookStyles4;
20732
+ var dataGridLog, BADGE_VARIANTS, gapStyles5, lookStyles5;
20540
20733
  var init_DataGrid = __esm({
20541
20734
  "components/core/molecules/DataGrid.tsx"() {
20542
20735
  "use client";
@@ -20571,7 +20764,7 @@ var init_DataGrid = __esm({
20571
20764
  lg: "gap-6",
20572
20765
  xl: "gap-8"
20573
20766
  };
20574
- lookStyles4 = {
20767
+ lookStyles5 = {
20575
20768
  dense: "gap-2 [&>*]:p-card-sm",
20576
20769
  spacious: "gap-8 [&>*]:p-card-lg",
20577
20770
  striped: "[&>*:nth-child(even)]:bg-muted/30",
@@ -20671,7 +20864,7 @@ function DataList({
20671
20864
  }) {
20672
20865
  const eventBus = useEventBus();
20673
20866
  const { t } = useTranslate();
20674
- const [visibleCount, setVisibleCount] = React73__default.useState(pageSize || Infinity);
20867
+ const [visibleCount, setVisibleCount] = React74__default.useState(pageSize || Infinity);
20675
20868
  const fieldDefs = fields ?? columns ?? [];
20676
20869
  const allDataRaw = Array.isArray(entity) ? entity : entity ? [entity] : [];
20677
20870
  const dnd = useDataDnd({
@@ -20690,7 +20883,7 @@ function DataList({
20690
20883
  const data = pageSize > 0 ? allData.slice(0, visibleCount) : allData;
20691
20884
  const hasMoreLocal = pageSize > 0 && visibleCount < allData.length;
20692
20885
  const hasRenderProp = typeof children === "function";
20693
- React73__default.useEffect(() => {
20886
+ React74__default.useEffect(() => {
20694
20887
  const renderItemTypeOf = typeof schemaRenderItem;
20695
20888
  const childrenTypeOf = typeof children;
20696
20889
  if (data.length > 0 && !hasRenderProp) {
@@ -20794,7 +20987,7 @@ function DataList({
20794
20987
  const items2 = [...data];
20795
20988
  const groups2 = groupBy ? groupData(items2, groupBy) : [{ label: "", items: items2 }];
20796
20989
  const contentField = titleField?.name ?? fieldDefs[0]?.name ?? "";
20797
- return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React73__default.Fragment, { children: [
20990
+ return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
20798
20991
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: "my-2" }),
20799
20992
  group.items.map((itemData, index) => {
20800
20993
  const id = itemData.id || `${gi}-${index}`;
@@ -20935,7 +21128,7 @@ function DataList({
20935
21128
  className
20936
21129
  ),
20937
21130
  children: [
20938
- groups.map((group, gi) => /* @__PURE__ */ jsxs(React73__default.Fragment, { children: [
21131
+ groups.map((group, gi) => /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
20939
21132
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: gi > 0 ? "mt-4" : "mt-0" }),
20940
21133
  group.items.map(
20941
21134
  (itemData, index) => renderItem(itemData, index, gi === groups.length - 1 && index === group.items.length - 1)
@@ -21042,8 +21235,8 @@ function ScalarControl({
21042
21235
  }
21043
21236
  const numeric = typeof value === "number";
21044
21237
  const initial = value === null ? "" : String(value);
21045
- const [draft, setDraft] = React73__default.useState(initial);
21046
- React73__default.useEffect(() => setDraft(initial), [initial]);
21238
+ const [draft, setDraft] = React74__default.useState(initial);
21239
+ React74__default.useEffect(() => setDraft(initial), [initial]);
21047
21240
  const commit = () => {
21048
21241
  if (numeric) {
21049
21242
  const n = draft.trim() === "" ? 0 : Number(draft);
@@ -21111,8 +21304,8 @@ function Row({
21111
21304
  onRemove,
21112
21305
  readonly
21113
21306
  }) {
21114
- const [keyDraft, setKeyDraft] = React73__default.useState(rowKey);
21115
- React73__default.useEffect(() => setKeyDraft(rowKey), [rowKey]);
21307
+ const [keyDraft, setKeyDraft] = React74__default.useState(rowKey);
21308
+ React74__default.useEffect(() => setKeyDraft(rowKey), [rowKey]);
21116
21309
  const container = isObj(value) || isArr(value);
21117
21310
  return /* @__PURE__ */ jsxs(VStack, { gap: "none", className: "group w-max min-w-full", children: [
21118
21311
  /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", className: "py-0.5 w-max", children: [
@@ -21155,7 +21348,7 @@ function ContainerNode({
21155
21348
  depth,
21156
21349
  readonly
21157
21350
  }) {
21158
- const [open, setOpen] = React73__default.useState(depth < 2);
21351
+ const [open, setOpen] = React74__default.useState(depth < 2);
21159
21352
  const array = isArr(value);
21160
21353
  const entries = array ? value.map((v, i) => [String(i), v]) : Object.entries(value);
21161
21354
  const setObjValue = (key, next) => {
@@ -21297,7 +21490,7 @@ var init_FormSection = __esm({
21297
21490
  columns = 1,
21298
21491
  className
21299
21492
  }) => {
21300
- const [collapsed, setCollapsed] = React73__default.useState(defaultCollapsed);
21493
+ const [collapsed, setCollapsed] = React74__default.useState(defaultCollapsed);
21301
21494
  const { t } = useTranslate();
21302
21495
  const eventBus = useEventBus();
21303
21496
  const gridClass = {
@@ -21305,7 +21498,7 @@ var init_FormSection = __esm({
21305
21498
  2: "grid-cols-1 md:grid-cols-2",
21306
21499
  3: "grid-cols-1 md:grid-cols-2 lg:grid-cols-3"
21307
21500
  }[columns];
21308
- React73__default.useCallback(() => {
21501
+ React74__default.useCallback(() => {
21309
21502
  if (collapsible) {
21310
21503
  setCollapsed((prev) => !prev);
21311
21504
  eventBus.emit("UI:TOGGLE_COLLAPSE", { collapsed: !collapsed });
@@ -21713,8 +21906,8 @@ function TextLikeControl({
21713
21906
  onCommit
21714
21907
  }) {
21715
21908
  const initial = value === void 0 || value === null ? "" : String(value);
21716
- const [draft, setDraft] = React73__default.useState(initial);
21717
- React73__default.useEffect(() => setDraft(initial), [initial]);
21909
+ const [draft, setDraft] = React74__default.useState(initial);
21910
+ React74__default.useEffect(() => setDraft(initial), [initial]);
21718
21911
  const commit = () => {
21719
21912
  if (numeric) {
21720
21913
  const n = draft.trim() === "" ? 0 : Number(draft);
@@ -21899,14 +22092,14 @@ var init_NodeSlotEditor = __esm({
21899
22092
  isObj2 = (v) => v !== null && v !== void 0 && typeof v === "object" && !Array.isArray(v);
21900
22093
  NodeSlotEditor = ({ value, onChange, className }) => {
21901
22094
  const { type, props, wasArray } = normalize(value);
21902
- const patterns = React73__default.useMemo(() => {
22095
+ const patterns = React74__default.useMemo(() => {
21903
22096
  try {
21904
22097
  return [...getKnownPatterns()].sort();
21905
22098
  } catch {
21906
22099
  return [];
21907
22100
  }
21908
22101
  }, []);
21909
- const options = React73__default.useMemo(
22102
+ const options = React74__default.useMemo(
21910
22103
  () => [{ value: "", label: "\u2014 none \u2014" }, ...patterns.map((p) => ({ value: p, label: p }))],
21911
22104
  [patterns]
21912
22105
  );
@@ -21918,7 +22111,7 @@ var init_NodeSlotEditor = __esm({
21918
22111
  const pattern = { type: nextType, ...nextProps };
21919
22112
  onChange(wasArray || value === void 0 ? [pattern] : pattern);
21920
22113
  };
21921
- const schemaEntries = React73__default.useMemo(() => {
22114
+ const schemaEntries = React74__default.useMemo(() => {
21922
22115
  if (!type) return [];
21923
22116
  const def = getPatternDefinition(type);
21924
22117
  if (!def?.propsSchema) return [];
@@ -22120,129 +22313,6 @@ var init_FormField = __esm({
22120
22313
  FormField.displayName = "FormField";
22121
22314
  }
22122
22315
  });
22123
- function useSafeEventBus3() {
22124
- try {
22125
- return useEventBus();
22126
- } catch {
22127
- return { emit: () => {
22128
- }, on: () => () => {
22129
- }, once: () => {
22130
- } };
22131
- }
22132
- }
22133
- var log6, lookStyles5, ButtonGroup;
22134
- var init_ButtonGroup = __esm({
22135
- "components/core/molecules/ButtonGroup.tsx"() {
22136
- "use client";
22137
- init_cn();
22138
- init_atoms();
22139
- init_useEventBus();
22140
- log6 = createLogger("almadar:ui:button-group");
22141
- lookStyles5 = {
22142
- "right-aligned-buttons": "",
22143
- "floating-bar": "fixed bottom-section left-1/2 -translate-x-1/2 shadow-elevation-toast bg-card p-card-sm rounded-container",
22144
- "inline-row": "gap-2 inline-flex",
22145
- "dropdown-menu": "[&>button:not(:first-child)]:hidden",
22146
- "command-palette-trigger": "[&>button:not(:first-child)]:hidden"
22147
- };
22148
- ButtonGroup = ({
22149
- children,
22150
- primary,
22151
- secondary,
22152
- variant = "default",
22153
- orientation = "horizontal",
22154
- className,
22155
- // Filter-group pattern props (entity and filters are used for schema-driven filtering)
22156
- entity: _entity,
22157
- filters,
22158
- look = "right-aligned-buttons"
22159
- }) => {
22160
- const eventBus = useSafeEventBus3();
22161
- const variantClasses2 = {
22162
- default: "gap-0",
22163
- segmented: "gap-0 [&>button]:rounded-none [&>button:first-child]:rounded-l-lg [&>button:last-child]:rounded-r-lg [&>button:not(:first-child)]:border-l-0",
22164
- toggle: "gap-0 [&>button]:rounded-none [&>button:first-child]:rounded-l-lg [&>button:last-child]:rounded-r-lg [&>button:not(:first-child)]:border-l-0"
22165
- };
22166
- const orientationClasses = {
22167
- horizontal: "flex-row",
22168
- vertical: "flex-col [&>button:first-child]:rounded-t-lg [&>button:last-child]:rounded-b-lg [&>button:not(:first-child)]:border-t-0 [&>button:not(:first-child)]:border-l"
22169
- };
22170
- const handleActionClick = (action) => {
22171
- if (action.event) {
22172
- eventBus.emit("UI:DISPATCH", { event: action.event });
22173
- }
22174
- if (action.navigatesTo) {
22175
- eventBus.emit("UI:NAVIGATE", { url: action.navigatesTo });
22176
- }
22177
- };
22178
- const renderFormActions = () => {
22179
- const buttons = [];
22180
- if (secondary) {
22181
- secondary.forEach((action, index) => {
22182
- buttons.push(
22183
- /* @__PURE__ */ jsx(
22184
- Button,
22185
- {
22186
- type: action.actionType === "submit" ? "submit" : "button",
22187
- variant: action.variant || "ghost",
22188
- onClick: () => handleActionClick(action),
22189
- children: action.label
22190
- },
22191
- `secondary-${index}`
22192
- )
22193
- );
22194
- });
22195
- }
22196
- if (primary) {
22197
- const isSubmit = primary.actionType === "submit";
22198
- buttons.push(
22199
- /* @__PURE__ */ jsx(
22200
- Button,
22201
- {
22202
- type: isSubmit ? "submit" : "button",
22203
- variant: primary.variant || "primary",
22204
- onClick: () => handleActionClick(primary),
22205
- "data-testid": isSubmit ? "form-submit" : void 0,
22206
- children: primary.label
22207
- },
22208
- "primary"
22209
- )
22210
- );
22211
- }
22212
- return buttons;
22213
- };
22214
- const renderFilters = () => {
22215
- if (!filters || filters.length === 0) return null;
22216
- return filters.map((filter, index) => /* @__PURE__ */ jsx(
22217
- Button,
22218
- {
22219
- variant: "ghost",
22220
- onClick: () => {
22221
- log6.debug("Filter clicked", { field: filter.field });
22222
- },
22223
- children: filter.label
22224
- },
22225
- `filter-${filter.field}-${index}`
22226
- ));
22227
- };
22228
- return /* @__PURE__ */ jsx(
22229
- "div",
22230
- {
22231
- className: cn(
22232
- "inline-flex gap-2",
22233
- variantClasses2[variant],
22234
- orientationClasses[orientation],
22235
- lookStyles5[look],
22236
- className
22237
- ),
22238
- role: "group",
22239
- children: children || renderFilters() || renderFormActions()
22240
- }
22241
- );
22242
- };
22243
- ButtonGroup.displayName = "ButtonGroup";
22244
- }
22245
- });
22246
22316
  function getOrCreateStore(query) {
22247
22317
  if (!queryStores.has(query)) {
22248
22318
  queryStores.set(query, {
@@ -22427,7 +22497,7 @@ var init_FilterGroup = __esm({
22427
22497
  type: "button",
22428
22498
  onClick: () => handleFilterSelect(filter.field, null),
22429
22499
  className: cn(
22430
- "px-3 py-1.5 text-sm font-medium transition-all duration-[var(--transition-fast)]",
22500
+ "px-3 py-1.5 text-sm font-medium transition-all duration-fast",
22431
22501
  !selectedValues[filter.field] ? "bg-primary text-primary-foreground" : "bg-card text-muted-foreground hover:bg-muted"
22432
22502
  ),
22433
22503
  children: t("filterGroup.all")
@@ -22439,7 +22509,7 @@ var init_FilterGroup = __esm({
22439
22509
  type: "button",
22440
22510
  onClick: () => handleFilterSelect(filter.field, option),
22441
22511
  className: cn(
22442
- "px-3 py-1.5 text-sm font-medium transition-all duration-[var(--transition-fast)]",
22512
+ "px-3 py-1.5 text-sm font-medium transition-all duration-fast",
22443
22513
  "border-l-[length:var(--border-width)] border-border",
22444
22514
  selectedValues[filter.field] === option ? "bg-primary text-primary-foreground" : "bg-card text-muted-foreground hover:bg-muted"
22445
22515
  ),
@@ -22820,7 +22890,7 @@ var init_Flex = __esm({
22820
22890
  flexStyle.flexBasis = typeof basis === "number" ? `${basis}px` : basis;
22821
22891
  }
22822
22892
  }
22823
- return React73__default.createElement(Component, {
22893
+ return React74__default.createElement(Component, {
22824
22894
  className: cn(
22825
22895
  inline ? "inline-flex" : "flex",
22826
22896
  directionStyles[direction],
@@ -22939,7 +23009,7 @@ var init_Grid = __esm({
22939
23009
  as: Component = "div"
22940
23010
  }) => {
22941
23011
  const mergedStyle = rows2 ? { gridTemplateRows: `repeat(${rows2}, minmax(0, 1fr))`, ...style } : style;
22942
- return React73__default.createElement(
23012
+ return React74__default.createElement(
22943
23013
  Component,
22944
23014
  {
22945
23015
  className: cn(
@@ -23024,6 +23094,15 @@ var init_InputGroup = __esm({
23024
23094
  InputGroup.displayName = "InputGroup";
23025
23095
  }
23026
23096
  });
23097
+ var PageTransition;
23098
+ var init_PageTransition = __esm({
23099
+ "components/core/molecules/PageTransition.tsx"() {
23100
+ "use client";
23101
+ init_cn();
23102
+ PageTransition = ({ locationKey, children, className }) => /* @__PURE__ */ jsx("div", { className: cn("animate-page-in", className), children }, locationKey);
23103
+ PageTransition.displayName = "PageTransition";
23104
+ }
23105
+ });
23027
23106
  function computePopoverStyle(position, triggerRect, popoverWidth) {
23028
23107
  if (position === "left" || position === "right") {
23029
23108
  return {
@@ -23050,6 +23129,7 @@ var init_Popover = __esm({
23050
23129
  "components/core/molecules/Popover.tsx"() {
23051
23130
  "use client";
23052
23131
  init_Typography();
23132
+ init_Presence();
23053
23133
  init_cn();
23054
23134
  init_useTapReveal();
23055
23135
  arrowClasses = {
@@ -23073,6 +23153,7 @@ var init_Popover = __esm({
23073
23153
  const [popoverWidth, setPopoverWidth] = useState(0);
23074
23154
  const triggerRef = useRef(null);
23075
23155
  const popoverRef = useRef(null);
23156
+ const { mounted, className: panelAnim, onAnimationEnd } = usePresence(isOpen, { animation: "popover" });
23076
23157
  const updatePosition = () => {
23077
23158
  if (triggerRef.current) {
23078
23159
  setTriggerRect(triggerRef.current.getBoundingClientRect());
@@ -23098,10 +23179,11 @@ var init_Popover = __esm({
23098
23179
  useEffect(() => {
23099
23180
  if (isOpen) {
23100
23181
  updatePosition();
23101
- } else {
23102
- setPopoverWidth(0);
23103
23182
  }
23104
23183
  }, [isOpen]);
23184
+ useEffect(() => {
23185
+ if (!mounted) setPopoverWidth(0);
23186
+ }, [mounted]);
23105
23187
  useLayoutEffect(() => {
23106
23188
  if (isOpen && popoverRef.current) {
23107
23189
  const measured = popoverRef.current.offsetWidth;
@@ -23135,9 +23217,9 @@ var init_Popover = __esm({
23135
23217
  onMouseLeave: handleClose,
23136
23218
  onPointerDown: tapTriggerProps.onPointerDown
23137
23219
  };
23138
- const childElement = React73__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
23220
+ const childElement = React74__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
23139
23221
  const childPointerDown = childElement.props.onPointerDown;
23140
- const triggerElement = React73__default.cloneElement(
23222
+ const triggerElement = React74__default.cloneElement(
23141
23223
  childElement,
23142
23224
  {
23143
23225
  ref: triggerRef,
@@ -23150,13 +23232,14 @@ var init_Popover = __esm({
23150
23232
  } : void 0
23151
23233
  }
23152
23234
  );
23153
- const panel = isOpen && triggerRect ? /* @__PURE__ */ jsxs(
23235
+ const panel = mounted && triggerRect ? /* @__PURE__ */ jsxs(
23154
23236
  "div",
23155
23237
  {
23156
23238
  ref: popoverRef,
23157
23239
  className: cn(
23158
23240
  "fixed z-50 p-4",
23159
23241
  "bg-card border-2 border-border shadow-elevation-popover",
23242
+ panelAnim,
23160
23243
  className
23161
23244
  ),
23162
23245
  style: {
@@ -23164,6 +23247,7 @@ var init_Popover = __esm({
23164
23247
  ...popoverWidth === 0 ? { visibility: "hidden" } : void 0
23165
23248
  },
23166
23249
  role: "dialog",
23250
+ onAnimationEnd,
23167
23251
  onMouseEnter: trigger === "hover" ? handleOpen : void 0,
23168
23252
  onMouseLeave: trigger === "hover" ? handleClose : void 0,
23169
23253
  children: [
@@ -23320,7 +23404,7 @@ var init_Coachmark = __esm({
23320
23404
  role: "dialog",
23321
23405
  "aria-label": title,
23322
23406
  className: cn(
23323
- "fixed z-50 max-w-xs w-72 transition-opacity duration-150",
23407
+ "fixed z-50 max-w-xs w-72 transition-opacity duration-fast",
23324
23408
  centered || pos ? "opacity-100" : "opacity-0",
23325
23409
  className
23326
23410
  ),
@@ -23827,6 +23911,7 @@ var init_SidePanel = __esm({
23827
23911
  init_Box();
23828
23912
  init_Button();
23829
23913
  init_Typography();
23914
+ init_Presence();
23830
23915
  init_cn();
23831
23916
  init_useEventBus();
23832
23917
  SidePanel = ({
@@ -23846,15 +23931,17 @@ var init_SidePanel = __esm({
23846
23931
  if (closeEvent) eventBus.emit(`UI:${closeEvent}`, {});
23847
23932
  onClose();
23848
23933
  };
23849
- if (!isOpen) return null;
23934
+ const { mounted, className: panelAnim, onAnimationEnd } = usePresence(isOpen, { animation: "drawer" });
23935
+ const drawerSign = position === "right" ? 1 : -1;
23936
+ if (!mounted) return null;
23850
23937
  return /* @__PURE__ */ jsxs(Fragment, { children: [
23851
- showOverlay && /* @__PURE__ */ jsx(
23938
+ showOverlay && /* @__PURE__ */ jsx(Presence, { show: isOpen, animation: "overlay", children: /* @__PURE__ */ jsx(
23852
23939
  Box,
23853
23940
  {
23854
23941
  className: "fixed inset-0 bg-white/80 backdrop-blur-sm z-40 lg:hidden",
23855
23942
  onClick: handleClose
23856
23943
  }
23857
- ),
23944
+ ) }),
23858
23945
  /* @__PURE__ */ jsxs(
23859
23946
  Aside,
23860
23947
  {
@@ -23864,11 +23951,13 @@ var init_SidePanel = __esm({
23864
23951
  "border-l-2 border-border",
23865
23952
  position === "left" && "border-l-0 border-r-2",
23866
23953
  "flex flex-col",
23867
- "transition-transform duration-normal ease-standard",
23954
+ panelAnim,
23868
23955
  width,
23869
23956
  position === "right" ? "right-0" : "left-0",
23870
23957
  className
23871
23958
  ),
23959
+ style: { "--motion-drawer-sign": drawerSign },
23960
+ onAnimationEnd,
23872
23961
  children: [
23873
23962
  /* @__PURE__ */ jsxs(Box, { className: "flex items-center justify-between p-4 border-b-2 border-border sticky top-0 bg-card z-10", children: [
23874
23963
  /* @__PURE__ */ jsx(Typography, { variant: "h6", children: title }),
@@ -23989,9 +24078,9 @@ var init_Tooltip = __esm({
23989
24078
  if (hideTimeoutRef.current) clearTimeout(hideTimeoutRef.current);
23990
24079
  };
23991
24080
  }, []);
23992
- const triggerElement = React73__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
24081
+ const triggerElement = React74__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
23993
24082
  const childPointerDown = triggerElement.props.onPointerDown;
23994
- const trigger = React73__default.cloneElement(triggerElement, {
24083
+ const trigger = React74__default.cloneElement(triggerElement, {
23995
24084
  ref: triggerRef,
23996
24085
  onMouseEnter: handleMouseEnter,
23997
24086
  onMouseLeave: handleMouseLeave,
@@ -24081,7 +24170,7 @@ var init_WizardProgress = __esm({
24081
24170
  children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: normalizedSteps.map((step, index) => {
24082
24171
  const isActive = index === currentStep;
24083
24172
  const isCompleted = index < currentStep;
24084
- return /* @__PURE__ */ jsxs(React73__default.Fragment, { children: [
24173
+ return /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
24085
24174
  /* @__PURE__ */ jsx(
24086
24175
  "button",
24087
24176
  {
@@ -24632,7 +24721,7 @@ var init_FormSectionHeader = __esm({
24632
24721
  name: "chevron-down",
24633
24722
  size: "sm",
24634
24723
  className: cn(
24635
- "text-muted-foreground transition-transform duration-200 shrink-0",
24724
+ "text-muted-foreground transition-transform duration-fast shrink-0",
24636
24725
  isCollapsed && "-rotate-90"
24637
24726
  )
24638
24727
  }
@@ -25753,17 +25842,18 @@ function GameHud({
25753
25842
  const mid = Math.ceil(stats.length / 2);
25754
25843
  const leftStats = stats.slice(0, mid);
25755
25844
  const rightStats = stats.slice(mid);
25756
- const isTop = position === "top";
25757
25845
  return /* @__PURE__ */ jsxs(
25758
- Box,
25846
+ Card,
25759
25847
  {
25848
+ variant: "bordered",
25849
+ padding: "none",
25760
25850
  className: cn(
25761
- "flex items-center justify-between w-full",
25851
+ "flex items-center justify-between w-full rounded-none bg-card",
25762
25852
  "px-4 py-2 gap-4",
25763
- !transparent && (isTop ? "border-b border-border/40 bg-surface/90 backdrop-blur-sm" : "border-t border-border/40 bg-surface/90 backdrop-blur-sm"),
25764
- transparent && (isTop ? "border-b border-white/10 bg-black/40 backdrop-blur-sm" : "border-t border-white/10 bg-black/40 backdrop-blur-sm"),
25853
+ transparent && "backdrop-blur-sm",
25765
25854
  className
25766
25855
  ),
25856
+ style: transparent ? { backgroundColor: "color-mix(in srgb, var(--color-card) 40%, transparent)" } : void 0,
25767
25857
  children: [
25768
25858
  /* @__PURE__ */ jsx(Box, { className: "flex items-center gap-3 flex-shrink-0", children: leftStats.map((stat, i) => /* @__PURE__ */ jsx(StatBadge, { ...stat, size }, i)) }),
25769
25859
  rightStats.length > 0 && /* @__PURE__ */ jsx(Box, { className: "flex items-center gap-3 flex-shrink-0", children: rightStats.map((stat, i) => /* @__PURE__ */ jsx(StatBadge, { ...stat, size }, i)) })
@@ -25772,14 +25862,16 @@ function GameHud({
25772
25862
  );
25773
25863
  }
25774
25864
  return /* @__PURE__ */ jsx(
25775
- Box,
25865
+ Card,
25776
25866
  {
25777
- position: "relative",
25867
+ variant: "bordered",
25868
+ padding: "sm",
25778
25869
  className: cn(
25779
- "z-10 flex items-center gap-4 px-4 py-2",
25780
- transparent ? "bg-black/30 backdrop-blur-sm" : "bg-surface/90 backdrop-blur-sm",
25870
+ "z-10 relative flex items-center gap-4 bg-card",
25871
+ transparent && "backdrop-blur-sm",
25781
25872
  className
25782
25873
  ),
25874
+ style: transparent ? { backgroundColor: "color-mix(in srgb, var(--color-card) 30%, transparent)" } : void 0,
25783
25875
  children: stats.map((stat, i) => /* @__PURE__ */ jsx(StatBadge, { ...stat, size }, i))
25784
25876
  }
25785
25877
  );
@@ -25789,6 +25881,7 @@ var init_GameHud = __esm({
25789
25881
  "components/game/molecules/GameHud.tsx"() {
25790
25882
  init_cn();
25791
25883
  init_Box();
25884
+ init_Card();
25792
25885
  init_StatBadge();
25793
25886
  positionMap = {
25794
25887
  corners: "inset-0 pointer-events-none"
@@ -25814,7 +25907,7 @@ function GameMenu({
25814
25907
  }) {
25815
25908
  const resolvedOptions = (options?.length ? options : void 0) ?? (menuItems?.length ? menuItems : void 0) ?? DEFAULT_MENU_OPTIONS;
25816
25909
  const eventBus = useEventBus();
25817
- const handleOptionClick = React73.useCallback(
25910
+ const handleOptionClick = React74.useCallback(
25818
25911
  (option) => {
25819
25912
  if (option.event) {
25820
25913
  eventBus.emit(`UI:${option.event}`, { option });
@@ -25833,39 +25926,48 @@ function GameMenu({
25833
25926
  {
25834
25927
  className: cn(
25835
25928
  "min-h-screen w-full flex flex-col items-center justify-center p-8",
25929
+ !background && "bg-background",
25836
25930
  className
25837
25931
  ),
25838
- style: {
25839
- background: background ?? "linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f0e17 100%)"
25840
- },
25932
+ style: background ? { background } : void 0,
25841
25933
  children: [
25842
- /* @__PURE__ */ jsxs(Box, { className: "text-center mb-12 animate-fade-in", children: [
25843
- logo && /* @__PURE__ */ jsx(GameIcon, { assetUrl: logo, icon: "image", size: 96, alt: title, className: "h-24 w-auto mx-auto mb-6 drop-shadow-2xl" }),
25844
- /* @__PURE__ */ jsx(
25845
- Typography,
25846
- {
25847
- variant: "h1",
25848
- className: "text-5xl md:text-7xl font-bold text-[var(--color-foreground)] tracking-tight",
25849
- style: {
25850
- textShadow: "0 4px 12px rgba(0,0,0,0.5)"
25851
- },
25852
- children: title
25853
- }
25854
- ),
25855
- subtitle && /* @__PURE__ */ jsx(Typography, { variant: "body", className: "mt-2 text-lg text-muted-foreground tracking-widest uppercase", children: subtitle })
25856
- ] }),
25857
- /* @__PURE__ */ jsx(Box, { className: "flex flex-col gap-4 w-full max-w-md", children: resolvedOptions.map((option, index) => /* @__PURE__ */ jsx(
25858
- ChoiceButton,
25934
+ /* @__PURE__ */ jsxs(
25935
+ Card,
25859
25936
  {
25860
- text: option.label,
25861
- index: index + 1,
25862
- disabled: option.disabled,
25863
- onClick: () => handleOptionClick(option),
25864
- className: "text-lg py-4 px-8"
25865
- },
25866
- index
25867
- )) }),
25868
- /* @__PURE__ */ jsxs(Box, { position: "absolute", className: "inset-0 pointer-events-none overflow-hidden", children: [
25937
+ variant: "bordered",
25938
+ padding: "lg",
25939
+ className: "bg-card flex flex-col items-center max-w-md w-full",
25940
+ children: [
25941
+ /* @__PURE__ */ jsxs(Box, { className: "text-center mb-8 animate-fade-in", children: [
25942
+ logo && /* @__PURE__ */ jsx(GameIcon, { assetUrl: logo, icon: "image", size: 96, alt: title, className: "h-24 w-auto mx-auto mb-6 drop-shadow-2xl" }),
25943
+ /* @__PURE__ */ jsx(
25944
+ Typography,
25945
+ {
25946
+ variant: "h1",
25947
+ className: "text-4xl md:text-5xl font-bold text-foreground tracking-tight",
25948
+ style: {
25949
+ textShadow: "0 4px 12px rgba(0,0,0,0.5)"
25950
+ },
25951
+ children: title
25952
+ }
25953
+ ),
25954
+ subtitle && /* @__PURE__ */ jsx(Typography, { variant: "body", className: "mt-2 text-lg text-muted-foreground tracking-widest uppercase", children: subtitle })
25955
+ ] }),
25956
+ /* @__PURE__ */ jsx(Box, { className: "flex flex-col gap-4 w-full", children: resolvedOptions.map((option, index) => /* @__PURE__ */ jsx(
25957
+ ChoiceButton,
25958
+ {
25959
+ text: option.label,
25960
+ index: index + 1,
25961
+ disabled: option.disabled,
25962
+ onClick: () => handleOptionClick(option),
25963
+ className: "text-lg py-4 px-8"
25964
+ },
25965
+ index
25966
+ )) })
25967
+ ]
25968
+ }
25969
+ ),
25970
+ /* @__PURE__ */ jsxs(Box, { position: "absolute", className: "inset-0 pointer-events-none overflow-hidden -z-10", children: [
25869
25971
  /* @__PURE__ */ jsx(Box, { position: "absolute", className: "top-1/4 left-1/4 w-64 h-64 bg-info/10 rounded-container blur-3xl" }),
25870
25972
  /* @__PURE__ */ jsx(Box, { position: "absolute", className: "bottom-1/4 right-1/4 w-96 h-96 bg-accent/10 rounded-container blur-3xl" })
25871
25973
  ] })
@@ -25880,6 +25982,7 @@ var init_GameMenu = __esm({
25880
25982
  init_cn();
25881
25983
  init_useEventBus();
25882
25984
  init_Box();
25985
+ init_Card();
25883
25986
  init_Typography();
25884
25987
  init_GameIcon();
25885
25988
  init_ChoiceButton();
@@ -26040,7 +26143,7 @@ function StateGraph({
26040
26143
  }) {
26041
26144
  const eventBus = useEventBus();
26042
26145
  const nodes = states ?? [];
26043
- const positions = React73.useMemo(() => layoutStates(nodes, width, height), [nodes, width, height]);
26146
+ const positions = React74.useMemo(() => layoutStates(nodes, width, height), [nodes, width, height]);
26044
26147
  return /* @__PURE__ */ jsxs(
26045
26148
  Box,
26046
26149
  {
@@ -26577,7 +26680,7 @@ function LinearView({
26577
26680
  /* @__PURE__ */ jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
26578
26681
  const isDone = i < currentIdx;
26579
26682
  const isCurrent = i === currentIdx;
26580
- return /* @__PURE__ */ jsxs(React73__default.Fragment, { children: [
26683
+ return /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
26581
26684
  i > 0 && /* @__PURE__ */ jsx(
26582
26685
  Typography,
26583
26686
  {
@@ -27210,7 +27313,7 @@ function SequenceBar({
27210
27313
  else onSlotRemove?.(index);
27211
27314
  }, [emit, slotRemoveEvent, onSlotRemove, playing]);
27212
27315
  const paddedSlots = Array.from({ length: maxSlots }, (_, i) => slots[i]);
27213
- return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React73__default.Fragment, { children: [
27316
+ return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
27214
27317
  i > 0 && /* @__PURE__ */ jsx(
27215
27318
  Typography,
27216
27319
  {
@@ -27397,6 +27500,7 @@ var init_GameShell = __esm({
27397
27500
  "components/game/templates/GameShell.tsx"() {
27398
27501
  init_cn();
27399
27502
  init_Box();
27503
+ init_Card();
27400
27504
  init_Typography();
27401
27505
  init_AtlasImage();
27402
27506
  FONT_BASE = "https://almadar-kflow-assets.web.app/shared/_shared/kenney-fonts/fonts";
@@ -27425,13 +27529,14 @@ var init_GameShell = __esm({
27425
27529
  showTopBar = true,
27426
27530
  children,
27427
27531
  backgroundAsset,
27428
- hudBackgroundAsset,
27429
- fontFamily = "future"
27532
+ fontFamily = "future",
27533
+ "data-theme": dataTheme
27430
27534
  }) => {
27431
27535
  const font = GAME_FONTS[fontFamily] ?? fontFamily;
27432
27536
  return /* @__PURE__ */ jsxs(
27433
27537
  Box,
27434
27538
  {
27539
+ "data-theme": dataTheme || void 0,
27435
27540
  className: cn("game-shell", className),
27436
27541
  style: {
27437
27542
  position: "relative",
@@ -27439,7 +27544,7 @@ var init_GameShell = __esm({
27439
27544
  height: "100vh",
27440
27545
  overflow: "hidden",
27441
27546
  background: "var(--color-background, #0a0a0f)",
27442
- color: "var(--color-text, #e0e0e0)",
27547
+ color: "var(--color-foreground, #e0e0e0)",
27443
27548
  fontFamily: `'${font}', system-ui, sans-serif`
27444
27549
  },
27445
27550
  children: [
@@ -27471,19 +27576,12 @@ var init_GameShell = __esm({
27471
27576
  },
27472
27577
  children: [
27473
27578
  showTopBar && /* @__PURE__ */ jsx(
27474
- AtlasPanel,
27579
+ Card,
27475
27580
  {
27476
- asset: hudBackgroundAsset,
27477
- borderSlice: 12,
27478
- borderWidth: 10,
27479
- className: "game-shell__title pointer-events-auto",
27480
- style: {
27481
- padding: "6px 16px",
27482
- background: hudBackgroundAsset ? void 0 : "rgba(18, 18, 31, 0.85)",
27483
- borderRadius: hudBackgroundAsset ? void 0 : 10,
27484
- boxShadow: "0 4px 14px rgba(0,0,0,0.45)",
27485
- flexShrink: 0
27486
- },
27581
+ variant: "bordered",
27582
+ padding: "none",
27583
+ className: "game-shell__title bg-card pointer-events-auto",
27584
+ style: { padding: "6px 16px", flexShrink: 0 },
27487
27585
  children: /* @__PURE__ */ jsx(
27488
27586
  Typography,
27489
27587
  {
@@ -28195,13 +28293,13 @@ var init_MapView = __esm({
28195
28293
  shadowSize: [41, 41]
28196
28294
  });
28197
28295
  L.Marker.prototype.options.icon = defaultIcon;
28198
- const { useEffect: useEffect64, useRef: useRef61, useCallback: useCallback104, useState: useState100 } = React73__default;
28296
+ const { useEffect: useEffect65, useRef: useRef62, useCallback: useCallback105, useState: useState102 } = React74__default;
28199
28297
  const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
28200
28298
  const { useEventBus: useEventBus2 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
28201
28299
  function MapUpdater({ centerLat, centerLng, zoom }) {
28202
28300
  const map = useMap();
28203
- const prevRef = useRef61({ centerLat, centerLng, zoom });
28204
- useEffect64(() => {
28301
+ const prevRef = useRef62({ centerLat, centerLng, zoom });
28302
+ useEffect65(() => {
28205
28303
  const prev = prevRef.current;
28206
28304
  if (prev.centerLat !== centerLat || prev.centerLng !== centerLng || prev.zoom !== zoom) {
28207
28305
  map.setView([centerLat, centerLng], zoom);
@@ -28212,7 +28310,7 @@ var init_MapView = __esm({
28212
28310
  }
28213
28311
  function MapClickHandler({ onMapClick }) {
28214
28312
  const map = useMap();
28215
- useEffect64(() => {
28313
+ useEffect65(() => {
28216
28314
  if (!onMapClick) return;
28217
28315
  const handler = (e) => {
28218
28316
  onMapClick(e.latlng.lat, e.latlng.lng);
@@ -28240,8 +28338,8 @@ var init_MapView = __esm({
28240
28338
  showAttribution = true
28241
28339
  }) {
28242
28340
  const eventBus = useEventBus2();
28243
- const [clickedPosition, setClickedPosition] = useState100(null);
28244
- const handleMapClick = useCallback104((lat, lng) => {
28341
+ const [clickedPosition, setClickedPosition] = useState102(null);
28342
+ const handleMapClick = useCallback105((lat, lng) => {
28245
28343
  if (showClickedPin) {
28246
28344
  setClickedPosition({ lat, lng });
28247
28345
  }
@@ -28250,7 +28348,7 @@ var init_MapView = __esm({
28250
28348
  eventBus.emit(`UI:${mapClickEvent}`, { latitude: lat, longitude: lng });
28251
28349
  }
28252
28350
  }, [onMapClick, mapClickEvent, eventBus, showClickedPin]);
28253
- const handleMarkerClick = useCallback104((marker) => {
28351
+ const handleMarkerClick = useCallback105((marker) => {
28254
28352
  onMarkerClick?.(marker);
28255
28353
  if (markerClickEvent) {
28256
28354
  eventBus.emit(`UI:${markerClickEvent}`, { ...marker });
@@ -28450,7 +28548,7 @@ var init_NumberStepper = __esm({
28450
28548
  "text-foreground",
28451
28549
  "hover:bg-muted",
28452
28550
  "active:bg-muted",
28453
- "transition-colors duration-100",
28551
+ "transition-colors duration-instant",
28454
28552
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
28455
28553
  "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
28456
28554
  styles.button
@@ -28491,7 +28589,7 @@ var init_NumberStepper = __esm({
28491
28589
  "text-foreground",
28492
28590
  "hover:bg-muted",
28493
28591
  "active:bg-muted",
28494
- "transition-colors duration-100",
28592
+ "transition-colors duration-instant",
28495
28593
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
28496
28594
  "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
28497
28595
  styles.button
@@ -28615,7 +28713,7 @@ var init_StarRating = __esm({
28615
28713
  className: cn(
28616
28714
  styles.star,
28617
28715
  "text-foreground/30",
28618
- "transition-colors duration-100"
28716
+ "transition-colors duration-instant"
28619
28717
  ),
28620
28718
  strokeWidth: 1.5
28621
28719
  }
@@ -28628,7 +28726,7 @@ var init_StarRating = __esm({
28628
28726
  styles.star,
28629
28727
  "absolute inset-0",
28630
28728
  "text-warning fill-warning",
28631
- "transition-colors duration-100"
28729
+ "transition-colors duration-instant"
28632
28730
  ),
28633
28731
  strokeWidth: 1.5,
28634
28732
  style: isHalf ? { clipPath: "inset(0 50% 0 0)" } : void 0
@@ -28783,7 +28881,7 @@ var init_UploadDropZone = __esm({
28783
28881
  "relative flex flex-col items-center justify-center",
28784
28882
  "p-8 rounded-sm",
28785
28883
  "border-2 border-dashed",
28786
- "transition-colors duration-150",
28884
+ "transition-colors duration-fast",
28787
28885
  "cursor-pointer",
28788
28886
  isDragOver ? "border-primary bg-primary bg-opacity-5" : "border-border bg-surface",
28789
28887
  error && "border-error",
@@ -29110,8 +29208,8 @@ function TableView({
29110
29208
  }) {
29111
29209
  const eventBus = useEventBus();
29112
29210
  const { t } = useTranslate();
29113
- const [visibleCount, setVisibleCount] = React73__default.useState(pageSize > 0 ? pageSize : Infinity);
29114
- const [localSelected, setLocalSelected] = React73__default.useState(/* @__PURE__ */ new Set());
29211
+ const [visibleCount, setVisibleCount] = React74__default.useState(pageSize > 0 ? pageSize : Infinity);
29212
+ const [localSelected, setLocalSelected] = React74__default.useState(/* @__PURE__ */ new Set());
29115
29213
  const colDefs = columns ?? fields ?? [];
29116
29214
  const allDataRaw = Array.isArray(entity) ? entity : entity ? [entity] : [];
29117
29215
  const dnd = useDataDnd({
@@ -29191,7 +29289,7 @@ function TableView({
29191
29289
  className: cn(
29192
29290
  "grid items-center gap-3 sticky top-0 z-10",
29193
29291
  "bg-[var(--color-surface-subtle)] border-b border-[var(--color-border)]",
29194
- "text-[var(--color-text-muted)] uppercase text-xs font-semibold tracking-wide",
29292
+ "text-muted-foreground uppercase text-xs font-semibold tracking-wide",
29195
29293
  lk.headPad
29196
29294
  ),
29197
29295
  children: [
@@ -29306,12 +29404,12 @@ function TableView({
29306
29404
  ]
29307
29405
  }
29308
29406
  );
29309
- return dnd.isZone ? /* @__PURE__ */ jsx(dnd.SortableItem, { id: row[idField] ?? id, children: rowInner }, id) : /* @__PURE__ */ jsx(React73__default.Fragment, { children: rowInner }, id);
29407
+ return dnd.isZone ? /* @__PURE__ */ jsx(dnd.SortableItem, { id: row[idField] ?? id, children: rowInner }, id) : /* @__PURE__ */ jsx(React74__default.Fragment, { children: rowInner }, id);
29310
29408
  };
29311
29409
  const items = Array.from(data);
29312
29410
  const groups = groupBy ? groupData2(items, groupBy) : [{ label: "", items }];
29313
29411
  let runningIndex = 0;
29314
- const body = /* @__PURE__ */ jsx(Box, { role: "rowgroup", children: groups.map((group, gi) => /* @__PURE__ */ jsxs(React73__default.Fragment, { children: [
29412
+ const body = /* @__PURE__ */ jsx(Box, { role: "rowgroup", children: groups.map((group, gi) => /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
29315
29413
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: gi > 0 ? "mt-3" : "mt-0" }),
29316
29414
  group.items.map((row) => renderRow(row, runningIndex++))
29317
29415
  ] }, gi)) });
@@ -30047,7 +30145,7 @@ function SortableListInner({
30047
30145
  "flex items-center justify-center",
30048
30146
  "text-muted-foreground",
30049
30147
  "hover:text-foreground",
30050
- "transition-colors duration-100",
30148
+ "transition-colors duration-instant",
30051
30149
  "px-1"
30052
30150
  ),
30053
30151
  "aria-grabbed": ariaGrabbed,
@@ -30074,7 +30172,7 @@ function SortableListInner({
30074
30172
  gap: "sm",
30075
30173
  align: "center",
30076
30174
  className: cn(
30077
- "transition-opacity duration-150",
30175
+ "transition-opacity duration-fast",
30078
30176
  isBeingDragged && "opacity-50"
30079
30177
  ),
30080
30178
  children: [
@@ -30246,7 +30344,7 @@ var init_PullToRefresh = __esm({
30246
30344
  children: /* @__PURE__ */ jsx(
30247
30345
  Box,
30248
30346
  {
30249
- className: "transition-transform duration-150",
30347
+ className: "transition-transform duration-fast",
30250
30348
  style: {
30251
30349
  transform: `scale(${isRefreshing ? 1 : pullProgress})`,
30252
30350
  opacity: isRefreshing ? 1 : pullProgress
@@ -30668,7 +30766,7 @@ var init_StepFlow = __esm({
30668
30766
  className
30669
30767
  }) => {
30670
30768
  if (orientation === "vertical") {
30671
- return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React73__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
30769
+ return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React74__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
30672
30770
  /* @__PURE__ */ jsxs(VStack, { gap: "none", align: "center", children: [
30673
30771
  /* @__PURE__ */ jsx(StepCircle, { step, index }),
30674
30772
  showConnectors && index < steps.length - 1 && /* @__PURE__ */ jsx(Box, { className: "w-px h-8 bg-border" })
@@ -30679,7 +30777,7 @@ var init_StepFlow = __esm({
30679
30777
  ] })
30680
30778
  ] }) }, index)) });
30681
30779
  }
30682
- return /* @__PURE__ */ jsx(Box, { className: cn("w-full flex flex-col md:flex-row items-start gap-0", className), children: steps.map((step, index) => /* @__PURE__ */ jsxs(React73__default.Fragment, { children: [
30780
+ return /* @__PURE__ */ jsx(Box, { className: cn("w-full flex flex-col md:flex-row items-start gap-0", className), children: steps.map((step, index) => /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
30683
30781
  /* @__PURE__ */ jsxs(VStack, { gap: "sm", align: "center", className: "flex-1 w-full md:w-auto", children: [
30684
30782
  /* @__PURE__ */ jsx(StepCircle, { step, index }),
30685
30783
  /* @__PURE__ */ jsx(Typography, { variant: "h4", className: "text-center", children: step.title }),
@@ -31585,7 +31683,7 @@ var init_VoteStack = __esm({
31585
31683
  isUp ? "text-primary" : "text-muted-foreground",
31586
31684
  "hover:bg-muted",
31587
31685
  "active:bg-muted",
31588
- "transition-colors duration-100",
31686
+ "transition-colors duration-instant",
31589
31687
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
31590
31688
  "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
31591
31689
  styles.button
@@ -31622,7 +31720,7 @@ var init_VoteStack = __esm({
31622
31720
  isDown ? "text-primary" : "text-muted-foreground",
31623
31721
  "hover:bg-muted",
31624
31722
  "active:bg-muted",
31625
- "transition-colors duration-100",
31723
+ "transition-colors duration-instant",
31626
31724
  "disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
31627
31725
  "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
31628
31726
  styles.button
@@ -31669,7 +31767,7 @@ var init_LikertScale = __esm({
31669
31767
  md: "text-base",
31670
31768
  lg: "text-lg"
31671
31769
  };
31672
- LikertScale = React73__default.forwardRef(
31770
+ LikertScale = React74__default.forwardRef(
31673
31771
  ({
31674
31772
  question,
31675
31773
  options = DEFAULT_LIKERT_OPTIONS,
@@ -31681,7 +31779,7 @@ var init_LikertScale = __esm({
31681
31779
  variant = "radios",
31682
31780
  className
31683
31781
  }, ref) => {
31684
- const groupId = React73__default.useId();
31782
+ const groupId = React74__default.useId();
31685
31783
  const eventBus = useEventBus();
31686
31784
  const handleSelect = useCallback(
31687
31785
  (next) => {
@@ -31734,7 +31832,7 @@ var init_LikertScale = __esm({
31734
31832
  disabled,
31735
31833
  onClick: () => handleSelect(opt.value),
31736
31834
  className: cn(
31737
- "flex-1 text-center font-medium transition-colors duration-100",
31835
+ "flex-1 text-center font-medium transition-colors duration-instant",
31738
31836
  "focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
31739
31837
  "disabled:cursor-not-allowed",
31740
31838
  "rounded-none gap-0 shadow-none border-none",
@@ -33963,7 +34061,7 @@ var init_DocBreadcrumb = __esm({
33963
34061
  "aria-label": t("aria.breadcrumb"),
33964
34062
  children: /* @__PURE__ */ jsx(HStack, { gap: "xs", align: "center", wrap: true, children: items.map((item, idx) => {
33965
34063
  const isLast = idx === items.length - 1;
33966
- return /* @__PURE__ */ jsxs(React73__default.Fragment, { children: [
34064
+ return /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
33967
34065
  idx > 0 && /* @__PURE__ */ jsx(
33968
34066
  Icon,
33969
34067
  {
@@ -34832,7 +34930,7 @@ var init_MiniStateMachine = __esm({
34832
34930
  const x = 2 + i * (NODE_W + GAP2 + ARROW_W + GAP2);
34833
34931
  const tc = transitionCounts[s.name] ?? 0;
34834
34932
  const role = getStateRole(s.name, s.isInitial ?? void 0, s.isTerminal ?? void 0, tc, maxTC);
34835
- return /* @__PURE__ */ jsxs(React73__default.Fragment, { children: [
34933
+ return /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
34836
34934
  /* @__PURE__ */ jsx(
34837
34935
  AvlState,
34838
34936
  {
@@ -35036,7 +35134,7 @@ var init_PageHeader = __esm({
35036
35134
  info: "bg-info/10 text-info"
35037
35135
  };
35038
35136
  return /* @__PURE__ */ jsxs(Box, { className: cn("mb-6", className), children: [
35039
- breadcrumbs && breadcrumbs.length > 0 && /* @__PURE__ */ jsx(Box, { as: "nav", className: "mb-4", children: /* @__PURE__ */ jsx(Box, { as: "ol", className: "flex items-center gap-2 text-sm", children: breadcrumbs.map((crumb, idx) => /* @__PURE__ */ jsxs(React73__default.Fragment, { children: [
35137
+ breadcrumbs && breadcrumbs.length > 0 && /* @__PURE__ */ jsx(Box, { as: "nav", className: "mb-4", children: /* @__PURE__ */ jsx(Box, { as: "ol", className: "flex items-center gap-2 text-sm", children: breadcrumbs.map((crumb, idx) => /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
35040
35138
  idx > 0 && /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: "/" }),
35041
35139
  crumb.href ? /* @__PURE__ */ jsx(
35042
35140
  "a",
@@ -35394,7 +35492,7 @@ var init_Section = __esm({
35394
35492
  as: Component = "section"
35395
35493
  }) => {
35396
35494
  const hasHeader = title || description || action;
35397
- return React73__default.createElement(
35495
+ return React74__default.createElement(
35398
35496
  Component,
35399
35497
  {
35400
35498
  className: cn(
@@ -35461,7 +35559,7 @@ var init_Sidebar = __esm({
35461
35559
  variant: "ghost",
35462
35560
  onClick: item.onClick,
35463
35561
  className: cn(
35464
- "w-full flex items-center gap-3 px-3 py-2.5 transition-all duration-[var(--transition-fast)] group relative",
35562
+ "w-full flex items-center gap-3 px-3 py-2.5 transition-all duration-fast group relative",
35465
35563
  "rounded-sm border-[length:var(--border-width-thin)] border-transparent",
35466
35564
  isActive ? [
35467
35565
  "bg-primary text-primary-foreground",
@@ -35535,7 +35633,7 @@ var init_Sidebar = __esm({
35535
35633
  className: cn(
35536
35634
  "flex flex-col h-full",
35537
35635
  "bg-card border-e border-border",
35538
- "transition-all duration-300 ease-in-out",
35636
+ "transition-all duration-normal ease-standard",
35539
35637
  collapsed ? "w-20" : "w-64",
35540
35638
  className
35541
35639
  ),
@@ -35768,7 +35866,7 @@ var init_WizardContainer = __esm({
35768
35866
  const isCompleted = index < currentStep;
35769
35867
  const stepKey = step.id ?? step.tabId ?? `step-${index}`;
35770
35868
  const stepTitle = step.title ?? step.name ?? `Step ${index + 1}`;
35771
- return /* @__PURE__ */ jsxs(React73__default.Fragment, { children: [
35869
+ return /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
35772
35870
  /* @__PURE__ */ jsx(
35773
35871
  Button,
35774
35872
  {
@@ -37538,6 +37636,7 @@ var init_molecules2 = __esm({
37538
37636
  init_InputGroup();
37539
37637
  init_Menu();
37540
37638
  init_Modal();
37639
+ init_PageTransition();
37541
37640
  init_Pagination();
37542
37641
  init_Popover();
37543
37642
  init_Coachmark();
@@ -38588,7 +38687,7 @@ var init_DetailPanel = __esm({
38588
38687
  }
38589
38688
  });
38590
38689
  function extractTitle(children) {
38591
- if (!React73__default.isValidElement(children)) return void 0;
38690
+ if (!React74__default.isValidElement(children)) return void 0;
38592
38691
  const props = children.props;
38593
38692
  if (typeof props.title === "string") {
38594
38693
  return props.title;
@@ -38938,12 +39037,12 @@ var init_Form = __esm({
38938
39037
  const isSchemaEntity = isOrbitalEntitySchema(entity);
38939
39038
  const resolvedEntity = isSchemaEntity ? entity : void 0;
38940
39039
  const entityName = typeof entity === "string" ? entity : resolvedEntity?.name;
38941
- const normalizedInitialData = React73__default.useMemo(() => {
39040
+ const normalizedInitialData = React74__default.useMemo(() => {
38942
39041
  const entityRowAsInitial = isPlainEntityRow(entity) ? entity : void 0;
38943
39042
  const callerInitial = initialData !== null && typeof initialData === "object" && !Array.isArray(initialData) ? initialData : {};
38944
39043
  return entityRowAsInitial !== void 0 ? { ...entityRowAsInitial, ...callerInitial } : callerInitial;
38945
39044
  }, [entity, initialData]);
38946
- const entityDerivedFields = React73__default.useMemo(() => {
39045
+ const entityDerivedFields = React74__default.useMemo(() => {
38947
39046
  if (fields && fields.length > 0) return void 0;
38948
39047
  if (!resolvedEntity) return void 0;
38949
39048
  return resolvedEntity.fields.map(
@@ -38964,16 +39063,16 @@ var init_Form = __esm({
38964
39063
  const conditionalFields = typeof conditionalFieldsRaw === "boolean" ? {} : conditionalFieldsRaw;
38965
39064
  const hiddenCalculations = typeof hiddenCalculationsRaw === "boolean" ? [] : hiddenCalculationsRaw;
38966
39065
  const violationTriggers = typeof violationTriggersRaw === "boolean" ? [] : violationTriggersRaw;
38967
- const [formData, setFormData] = React73__default.useState(
39066
+ const [formData, setFormData] = React74__default.useState(
38968
39067
  normalizedInitialData
38969
39068
  );
38970
- const [collapsedSections, setCollapsedSections] = React73__default.useState(
39069
+ const [collapsedSections, setCollapsedSections] = React74__default.useState(
38971
39070
  /* @__PURE__ */ new Set()
38972
39071
  );
38973
- const [submitError, setSubmitError] = React73__default.useState(null);
38974
- const formRef = React73__default.useRef(null);
39072
+ const [submitError, setSubmitError] = React74__default.useState(null);
39073
+ const formRef = React74__default.useRef(null);
38975
39074
  const formMode = props.mode;
38976
- const mountedRef = React73__default.useRef(false);
39075
+ const mountedRef = React74__default.useRef(false);
38977
39076
  if (!mountedRef.current) {
38978
39077
  mountedRef.current = true;
38979
39078
  debug("forms", "mount", {
@@ -38986,7 +39085,7 @@ var init_Form = __esm({
38986
39085
  });
38987
39086
  }
38988
39087
  const shouldShowCancel = showCancel ?? (fields && fields.length > 0);
38989
- const evalContext = React73__default.useMemo(
39088
+ const evalContext = React74__default.useMemo(
38990
39089
  () => ({
38991
39090
  formValues: formData,
38992
39091
  globalVariables: externalContext?.globalVariables ?? {},
@@ -38995,7 +39094,7 @@ var init_Form = __esm({
38995
39094
  }),
38996
39095
  [formData, externalContext]
38997
39096
  );
38998
- React73__default.useEffect(() => {
39097
+ React74__default.useEffect(() => {
38999
39098
  debug("forms", "initialData-sync", {
39000
39099
  mode: formMode,
39001
39100
  normalizedInitialData,
@@ -39006,7 +39105,7 @@ var init_Form = __esm({
39006
39105
  setFormData(normalizedInitialData);
39007
39106
  }
39008
39107
  }, [normalizedInitialData]);
39009
- const processCalculations = React73__default.useCallback(
39108
+ const processCalculations = React74__default.useCallback(
39010
39109
  (changedFieldId, newFormData) => {
39011
39110
  if (!hiddenCalculations.length) return;
39012
39111
  const context = {
@@ -39031,7 +39130,7 @@ var init_Form = __esm({
39031
39130
  },
39032
39131
  [hiddenCalculations, externalContext, eventBus]
39033
39132
  );
39034
- const checkViolations = React73__default.useCallback(
39133
+ const checkViolations = React74__default.useCallback(
39035
39134
  (changedFieldId, newFormData) => {
39036
39135
  if (!violationTriggers.length) return;
39037
39136
  const context = {
@@ -39069,7 +39168,7 @@ var init_Form = __esm({
39069
39168
  processCalculations(name, newFormData);
39070
39169
  checkViolations(name, newFormData);
39071
39170
  };
39072
- const isFieldVisible = React73__default.useCallback(
39171
+ const isFieldVisible = React74__default.useCallback(
39073
39172
  (fieldName) => {
39074
39173
  const condition = conditionalFields[fieldName];
39075
39174
  if (!condition) return true;
@@ -39077,7 +39176,7 @@ var init_Form = __esm({
39077
39176
  },
39078
39177
  [conditionalFields, evalContext]
39079
39178
  );
39080
- const isSectionVisible = React73__default.useCallback(
39179
+ const isSectionVisible = React74__default.useCallback(
39081
39180
  (section) => {
39082
39181
  if (!section.condition) return true;
39083
39182
  return Boolean(evaluateFormExpression(section.condition, evalContext));
@@ -39153,7 +39252,7 @@ var init_Form = __esm({
39153
39252
  eventBus.emit(`UI:${onCancel}`);
39154
39253
  }
39155
39254
  };
39156
- const renderField = React73__default.useCallback(
39255
+ const renderField = React74__default.useCallback(
39157
39256
  (field) => {
39158
39257
  const fieldName = field.name || field.field;
39159
39258
  if (!fieldName) return null;
@@ -39174,7 +39273,7 @@ var init_Form = __esm({
39174
39273
  [formData, isFieldVisible, relationsData, relationsLoading, isLoading]
39175
39274
  );
39176
39275
  const effectiveFields = entityDerivedFields ?? fields;
39177
- const normalizedFields = React73__default.useMemo(() => {
39276
+ const normalizedFields = React74__default.useMemo(() => {
39178
39277
  if (!effectiveFields || effectiveFields.length === 0) return [];
39179
39278
  return effectiveFields.map((field) => {
39180
39279
  if (typeof field === "string") {
@@ -39198,7 +39297,7 @@ var init_Form = __esm({
39198
39297
  return field;
39199
39298
  });
39200
39299
  }, [effectiveFields, resolvedEntity]);
39201
- const schemaFields = React73__default.useMemo(() => {
39300
+ const schemaFields = React74__default.useMemo(() => {
39202
39301
  if (normalizedFields.length === 0) return null;
39203
39302
  if (isDebugEnabled()) {
39204
39303
  debugGroup(`Form: ${entityName || "unknown"}`);
@@ -39208,7 +39307,7 @@ var init_Form = __esm({
39208
39307
  }
39209
39308
  return normalizedFields.map(renderField).filter(Boolean);
39210
39309
  }, [normalizedFields, renderField, entityName, conditionalFields]);
39211
- const sectionElements = React73__default.useMemo(() => {
39310
+ const sectionElements = React74__default.useMemo(() => {
39212
39311
  if (!sections || sections.length === 0) return null;
39213
39312
  return sections.map((section) => {
39214
39313
  if (!isSectionVisible(section)) {
@@ -39891,7 +39990,7 @@ var init_List = __esm({
39891
39990
  Box,
39892
39991
  {
39893
39992
  className: cn(
39894
- "h-full rounded-full transition-all duration-500",
39993
+ "h-full rounded-full transition-all duration-slow",
39895
39994
  clampedValue >= 100 ? "bg-success" : clampedValue >= 70 ? "bg-info" : clampedValue >= 40 ? "bg-warning" : "bg-muted-foreground"
39896
39995
  ),
39897
39996
  style: { width: `${clampedValue}%` }
@@ -39933,7 +40032,7 @@ var init_List = __esm({
39933
40032
  if (entity && typeof entity === "object" && "id" in entity) return [entity];
39934
40033
  return [];
39935
40034
  }, [entity]);
39936
- const getItemActions = React73__default.useCallback(
40035
+ const getItemActions = React74__default.useCallback(
39937
40036
  (item) => {
39938
40037
  if (!itemActions) return [];
39939
40038
  if (typeof itemActions === "function") {
@@ -40060,7 +40159,7 @@ var init_List = __esm({
40060
40159
  {
40061
40160
  className: cn(
40062
40161
  "group flex items-center gap-5 px-6 py-5",
40063
- "transition-all duration-300 ease-out",
40162
+ "transition-all duration-normal ease-standard",
40064
40163
  hasExplicitClick && "cursor-pointer",
40065
40164
  // Hover state
40066
40165
  "hover:bg-muted/80",
@@ -40167,7 +40266,7 @@ var init_List = __esm({
40167
40266
  variant: "ghost",
40168
40267
  action: editAction.event,
40169
40268
  className: cn(
40170
- "p-2 rounded-lg transition-all duration-200",
40269
+ "p-2 rounded-lg transition-all duration-fast",
40171
40270
  "hover:bg-primary/10 hover:text-primary",
40172
40271
  "text-muted-foreground",
40173
40272
  "active:scale-95"
@@ -40183,7 +40282,7 @@ var init_List = __esm({
40183
40282
  variant: "ghost",
40184
40283
  action: viewAction.event,
40185
40284
  className: cn(
40186
- "p-2 rounded-lg transition-all duration-200",
40285
+ "p-2 rounded-lg transition-all duration-fast",
40187
40286
  "hover:bg-muted hover:text-foreground",
40188
40287
  "text-muted-foreground",
40189
40288
  "active:scale-95"
@@ -40205,7 +40304,7 @@ var init_List = __esm({
40205
40304
  {
40206
40305
  variant: "ghost",
40207
40306
  className: cn(
40208
- "p-2 rounded-lg transition-all duration-200",
40307
+ "p-2 rounded-lg transition-all duration-fast",
40209
40308
  "hover:bg-muted hover:shadow-sm",
40210
40309
  "text-muted-foreground hover:text-foreground",
40211
40310
  "active:scale-95"
@@ -40417,7 +40516,7 @@ var init_MediaGallery = __esm({
40417
40516
  [selectable, selectedItems, selectionEvent, eventBus]
40418
40517
  );
40419
40518
  const entityData = Array.isArray(entity) ? entity : [];
40420
- const items = React73__default.useMemo(() => {
40519
+ const items = React74__default.useMemo(() => {
40421
40520
  if (propItems && propItems.length > 0) return propItems;
40422
40521
  if (entityData.length === 0) return [];
40423
40522
  return entityData.map((record, idx) => {
@@ -40495,7 +40594,7 @@ var init_MediaGallery = __esm({
40495
40594
  {
40496
40595
  className: cn(
40497
40596
  "group relative overflow-hidden rounded-md cursor-pointer",
40498
- "border-2 transition-all duration-200",
40597
+ "border-2 transition-all duration-fast",
40499
40598
  isSelected ? "border-primary ring-2 ring-primary/30" : "border-transparent hover:border-border",
40500
40599
  ASPECT_CLASSES[aspectRatio]
40501
40600
  ),
@@ -40516,14 +40615,14 @@ var init_MediaGallery = __esm({
40516
40615
  {
40517
40616
  className: cn(
40518
40617
  "absolute inset-0 bg-foreground/0 group-hover:bg-foreground/20",
40519
- "transition-colors duration-200 flex items-center justify-center"
40618
+ "transition-colors duration-fast flex items-center justify-center"
40520
40619
  ),
40521
40620
  children: /* @__PURE__ */ jsx(
40522
40621
  Icon,
40523
40622
  {
40524
40623
  icon: ZoomIn,
40525
40624
  size: "md",
40526
- className: "text-white opacity-0 group-hover:opacity-100 transition-opacity duration-200"
40625
+ className: "text-white opacity-0 group-hover:opacity-100 transition-opacity duration-fast"
40527
40626
  }
40528
40627
  )
40529
40628
  }
@@ -40581,7 +40680,7 @@ var init_MediaGallery = __esm({
40581
40680
  }
40582
40681
  });
40583
40682
  function extractTitle2(children) {
40584
- if (!React73__default.isValidElement(children)) return void 0;
40683
+ if (!React74__default.isValidElement(children)) return void 0;
40585
40684
  const props = children.props;
40586
40685
  if (typeof props.title === "string") {
40587
40686
  return props.title;
@@ -40836,7 +40935,7 @@ var init_debugRegistry = __esm({
40836
40935
  }
40837
40936
  });
40838
40937
  function useDebugData() {
40839
- const [data, setData] = React73.useState(() => ({
40938
+ const [data, setData] = React74.useState(() => ({
40840
40939
  traits: [],
40841
40940
  ticks: [],
40842
40941
  guards: [],
@@ -40850,7 +40949,7 @@ function useDebugData() {
40850
40949
  },
40851
40950
  lastUpdate: Date.now()
40852
40951
  }));
40853
- React73.useEffect(() => {
40952
+ React74.useEffect(() => {
40854
40953
  const updateData = () => {
40855
40954
  setData({
40856
40955
  traits: getAllTraits(),
@@ -40959,12 +41058,12 @@ function layoutGraph(states, transitions, initialState, width, height) {
40959
41058
  return positions;
40960
41059
  }
40961
41060
  function WalkMinimap() {
40962
- const [walkStep, setWalkStep] = React73.useState(null);
40963
- const [traits2, setTraits] = React73.useState([]);
40964
- const [coveredEdges, setCoveredEdges] = React73.useState([]);
40965
- const [completedTraits, setCompletedTraits] = React73.useState(/* @__PURE__ */ new Set());
40966
- const prevTraitRef = React73.useRef(null);
40967
- React73.useEffect(() => {
41061
+ const [walkStep, setWalkStep] = React74.useState(null);
41062
+ const [traits2, setTraits] = React74.useState([]);
41063
+ const [coveredEdges, setCoveredEdges] = React74.useState([]);
41064
+ const [completedTraits, setCompletedTraits] = React74.useState(/* @__PURE__ */ new Set());
41065
+ const prevTraitRef = React74.useRef(null);
41066
+ React74.useEffect(() => {
40968
41067
  const interval = setInterval(() => {
40969
41068
  const w = window;
40970
41069
  const step = w.__orbitalWalkStep;
@@ -41400,15 +41499,15 @@ var init_EntitiesTab = __esm({
41400
41499
  });
41401
41500
  function EventFlowTab({ events: events2 }) {
41402
41501
  const { t } = useTranslate();
41403
- const [filter, setFilter] = React73.useState("all");
41404
- const containerRef = React73.useRef(null);
41405
- const [autoScroll, setAutoScroll] = React73.useState(true);
41406
- React73.useEffect(() => {
41502
+ const [filter, setFilter] = React74.useState("all");
41503
+ const containerRef = React74.useRef(null);
41504
+ const [autoScroll, setAutoScroll] = React74.useState(true);
41505
+ React74.useEffect(() => {
41407
41506
  if (autoScroll && containerRef.current) {
41408
41507
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
41409
41508
  }
41410
41509
  }, [events2.length, autoScroll]);
41411
- const filteredEvents = React73.useMemo(() => {
41510
+ const filteredEvents = React74.useMemo(() => {
41412
41511
  if (filter === "all") return events2;
41413
41512
  return events2.filter((e) => e.type === filter);
41414
41513
  }, [events2, filter]);
@@ -41524,7 +41623,7 @@ var init_EventFlowTab = __esm({
41524
41623
  });
41525
41624
  function GuardsPanel({ guards }) {
41526
41625
  const { t } = useTranslate();
41527
- const [filter, setFilter] = React73.useState("all");
41626
+ const [filter, setFilter] = React74.useState("all");
41528
41627
  if (guards.length === 0) {
41529
41628
  return /* @__PURE__ */ jsx(
41530
41629
  EmptyState,
@@ -41537,7 +41636,7 @@ function GuardsPanel({ guards }) {
41537
41636
  }
41538
41637
  const passedCount = guards.filter((g) => g.result).length;
41539
41638
  const failedCount = guards.length - passedCount;
41540
- const filteredGuards = React73.useMemo(() => {
41639
+ const filteredGuards = React74.useMemo(() => {
41541
41640
  if (filter === "all") return guards;
41542
41641
  if (filter === "passed") return guards.filter((g) => g.result);
41543
41642
  return guards.filter((g) => !g.result);
@@ -41700,10 +41799,10 @@ function EffectBadge({ effect }) {
41700
41799
  }
41701
41800
  function TransitionTimeline({ transitions }) {
41702
41801
  const { t } = useTranslate();
41703
- const containerRef = React73.useRef(null);
41704
- const [autoScroll, setAutoScroll] = React73.useState(true);
41705
- const [expandedId, setExpandedId] = React73.useState(null);
41706
- React73.useEffect(() => {
41802
+ const containerRef = React74.useRef(null);
41803
+ const [autoScroll, setAutoScroll] = React74.useState(true);
41804
+ const [expandedId, setExpandedId] = React74.useState(null);
41805
+ React74.useEffect(() => {
41707
41806
  if (autoScroll && containerRef.current) {
41708
41807
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
41709
41808
  }
@@ -41983,9 +42082,9 @@ function getAllEvents(traits2) {
41983
42082
  function EventDispatcherTab({ traits: traits2, schema }) {
41984
42083
  const eventBus = useEventBus();
41985
42084
  const { t } = useTranslate();
41986
- const [log19, setLog] = React73.useState([]);
41987
- const prevStatesRef = React73.useRef(/* @__PURE__ */ new Map());
41988
- React73.useEffect(() => {
42085
+ const [log19, setLog] = React74.useState([]);
42086
+ const prevStatesRef = React74.useRef(/* @__PURE__ */ new Map());
42087
+ React74.useEffect(() => {
41989
42088
  for (const trait of traits2) {
41990
42089
  const prev = prevStatesRef.current.get(trait.id);
41991
42090
  if (prev && prev !== trait.currentState) {
@@ -42154,10 +42253,10 @@ function VerifyModePanel({
42154
42253
  localCount
42155
42254
  }) {
42156
42255
  const { t } = useTranslate();
42157
- const [expanded, setExpanded] = React73.useState(true);
42158
- const scrollRef = React73.useRef(null);
42159
- const prevCountRef = React73.useRef(0);
42160
- React73.useEffect(() => {
42256
+ const [expanded, setExpanded] = React74.useState(true);
42257
+ const scrollRef = React74.useRef(null);
42258
+ const prevCountRef = React74.useRef(0);
42259
+ React74.useEffect(() => {
42161
42260
  if (expanded && transitions.length > prevCountRef.current && scrollRef.current) {
42162
42261
  scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
42163
42262
  }
@@ -42214,10 +42313,10 @@ function RuntimeDebugger({
42214
42313
  schema
42215
42314
  }) {
42216
42315
  const { t } = useTranslate();
42217
- const [isCollapsed, setIsCollapsed] = React73.useState(mode === "verify" ? true : defaultCollapsed);
42218
- const [isVisible, setIsVisible] = React73.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
42316
+ const [isCollapsed, setIsCollapsed] = React74.useState(mode === "verify" ? true : defaultCollapsed);
42317
+ const [isVisible, setIsVisible] = React74.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
42219
42318
  const debugData = useDebugData();
42220
- React73.useEffect(() => {
42319
+ React74.useEffect(() => {
42221
42320
  if (mode === "inline") return;
42222
42321
  return onDebugToggle((enabled) => {
42223
42322
  setIsVisible(enabled);
@@ -42226,7 +42325,7 @@ function RuntimeDebugger({
42226
42325
  }
42227
42326
  });
42228
42327
  }, [mode]);
42229
- React73.useEffect(() => {
42328
+ React74.useEffect(() => {
42230
42329
  if (mode === "inline") return;
42231
42330
  const handleKeyDown = (e) => {
42232
42331
  if (e.key === "`" && isVisible) {
@@ -42746,7 +42845,7 @@ var init_StatCard = __esm({
42746
42845
  const labelToUse = propLabel ?? propTitle;
42747
42846
  const eventBus = useEventBus();
42748
42847
  const { t } = useTranslate();
42749
- const handleActionClick = React73__default.useCallback(() => {
42848
+ const handleActionClick = React74__default.useCallback(() => {
42750
42849
  if (action?.event) {
42751
42850
  eventBus.emit(`UI:${action.event}`, {});
42752
42851
  }
@@ -42757,7 +42856,7 @@ var init_StatCard = __esm({
42757
42856
  const data = Array.isArray(entity) ? entity : entity ? [entity] : [];
42758
42857
  const isLoading = externalLoading ?? false;
42759
42858
  const error = externalError;
42760
- const computeMetricValue = React73__default.useCallback(
42859
+ const computeMetricValue = React74__default.useCallback(
42761
42860
  (metric, items) => {
42762
42861
  if (metric.value !== void 0) {
42763
42862
  return metric.value;
@@ -42796,7 +42895,7 @@ var init_StatCard = __esm({
42796
42895
  },
42797
42896
  []
42798
42897
  );
42799
- const schemaStats = React73__default.useMemo(() => {
42898
+ const schemaStats = React74__default.useMemo(() => {
42800
42899
  if (!metrics || metrics.length === 0) return null;
42801
42900
  return metrics.map((metric) => ({
42802
42901
  label: metric.label,
@@ -42804,7 +42903,7 @@ var init_StatCard = __esm({
42804
42903
  format: metric.format
42805
42904
  }));
42806
42905
  }, [metrics, data, computeMetricValue]);
42807
- const calculatedTrend = React73__default.useMemo(() => {
42906
+ const calculatedTrend = React74__default.useMemo(() => {
42808
42907
  if (manualTrend !== void 0) return manualTrend;
42809
42908
  if (previousValue === void 0 || currentValue2 === void 0)
42810
42909
  return void 0;
@@ -43444,8 +43543,8 @@ var init_SubagentTracePanel = __esm({
43444
43543
  ] });
43445
43544
  };
43446
43545
  InlineActivityStream = ({ activities, autoScroll = true, className }) => {
43447
- const endRef = React73__default.useRef(null);
43448
- React73__default.useEffect(() => {
43546
+ const endRef = React74__default.useRef(null);
43547
+ React74__default.useEffect(() => {
43449
43548
  if (!autoScroll) return;
43450
43549
  endRef.current?.scrollIntoView({ behavior: "smooth", block: "end" });
43451
43550
  }, [activities.length, autoScroll]);
@@ -43539,7 +43638,7 @@ var init_SubagentTracePanel = __esm({
43539
43638
  };
43540
43639
  SubagentRichCard = ({ subagent }) => {
43541
43640
  const { t } = useTranslate();
43542
- const activities = React73__default.useMemo(
43641
+ const activities = React74__default.useMemo(
43543
43642
  () => subagentMessagesToActivities(subagent.messages),
43544
43643
  [subagent.messages]
43545
43644
  );
@@ -43616,8 +43715,8 @@ var init_SubagentTracePanel = __esm({
43616
43715
  ] });
43617
43716
  };
43618
43717
  CoordinatorConversation = ({ messages, autoScroll = true, className }) => {
43619
- const endRef = React73__default.useRef(null);
43620
- React73__default.useEffect(() => {
43718
+ const endRef = React74__default.useRef(null);
43719
+ React74__default.useEffect(() => {
43621
43720
  if (!autoScroll) return;
43622
43721
  endRef.current?.scrollIntoView({ behavior: "smooth", block: "end" });
43623
43722
  }, [messages.length, autoScroll]);
@@ -44052,7 +44151,7 @@ var init_Timeline = __esm({
44052
44151
  }) => {
44053
44152
  const { t } = useTranslate();
44054
44153
  const entityData = entity ?? [];
44055
- const items = React73__default.useMemo(() => {
44154
+ const items = React74__default.useMemo(() => {
44056
44155
  if (propItems) return propItems;
44057
44156
  if (entityData.length === 0) return [];
44058
44157
  return entityData.map((record, idx) => {
@@ -44154,7 +44253,7 @@ var init_Timeline = __esm({
44154
44253
  }
44155
44254
  });
44156
44255
  function extractToastProps(children) {
44157
- if (!React73__default.isValidElement(children)) {
44256
+ if (!React74__default.isValidElement(children)) {
44158
44257
  if (typeof children === "string") {
44159
44258
  return { message: children };
44160
44259
  }
@@ -44196,7 +44295,7 @@ var init_ToastSlot = __esm({
44196
44295
  eventBus.emit(`${prefix}CLOSE`);
44197
44296
  };
44198
44297
  if (!isVisible) return null;
44199
- const isCustomContent = React73__default.isValidElement(children) && !message;
44298
+ const isCustomContent = React74__default.isValidElement(children) && !message;
44200
44299
  return /* @__PURE__ */ jsx(Box, { className: "fixed bottom-4 right-4 z-50", children: isCustomContent ? children : /* @__PURE__ */ jsx(
44201
44300
  Toast,
44202
44301
  {
@@ -44244,6 +44343,7 @@ var init_component_registry_generated = __esm({
44244
44343
  init_LayoutPatterns();
44245
44344
  init_BranchingLogicBuilder();
44246
44345
  init_Breadcrumb();
44346
+ init_ButtonGroup();
44247
44347
  init_CTABanner();
44248
44348
  init_CalendarGrid();
44249
44349
  init_Canvas();
@@ -44314,8 +44414,8 @@ var init_component_registry_generated = __esm({
44314
44414
  init_FlipContainer();
44315
44415
  init_FloatingActionButton();
44316
44416
  init_Form();
44317
- init_FormSection();
44318
44417
  init_FormField();
44418
+ init_FormSection();
44319
44419
  init_FormSectionHeader();
44320
44420
  init_GameAudioToggle();
44321
44421
  init_GameHud();
@@ -44501,6 +44601,7 @@ var init_component_registry_generated = __esm({
44501
44601
  "BranchingLogicBuilder": BranchingLogicBuilder,
44502
44602
  "Breadcrumb": Breadcrumb,
44503
44603
  "Button": ButtonPattern,
44604
+ "ButtonGroup": ButtonGroup,
44504
44605
  "ButtonPattern": ButtonPattern,
44505
44606
  "CTABanner": CTABanner,
44506
44607
  "CalendarGrid": CalendarGrid,
@@ -44574,7 +44675,6 @@ var init_component_registry_generated = __esm({
44574
44675
  "FlipContainer": FlipContainer,
44575
44676
  "FloatingActionButton": FloatingActionButton,
44576
44677
  "Form": Form,
44577
- "FormActions": FormActions,
44578
44678
  "FormField": FormField,
44579
44679
  "FormLayout": FormLayout,
44580
44680
  "FormSectionHeader": FormSectionHeader,
@@ -44754,7 +44854,7 @@ function SuspenseConfigProvider({
44754
44854
  config,
44755
44855
  children
44756
44856
  }) {
44757
- return React73__default.createElement(
44857
+ return React74__default.createElement(
44758
44858
  SuspenseConfigContext.Provider,
44759
44859
  { value: config },
44760
44860
  children
@@ -44796,7 +44896,7 @@ function enrichFormFields(fields, entityDef) {
44796
44896
  }
44797
44897
  return { name: field, label: field.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/\b\w/g, (c) => c.toUpperCase()) };
44798
44898
  }
44799
- if (field && typeof field === "object" && !Array.isArray(field) && !React73__default.isValidElement(field) && !(field instanceof Date)) {
44899
+ if (field && typeof field === "object" && !Array.isArray(field) && !React74__default.isValidElement(field) && !(field instanceof Date)) {
44800
44900
  const obj = field;
44801
44901
  const fieldName = typeof obj.name === "string" ? obj.name : typeof obj.field === "string" ? obj.field : void 0;
44802
44902
  if (!fieldName) return field;
@@ -45249,7 +45349,7 @@ function renderPatternChildren(children, onDismiss, parentId = "root", parentPat
45249
45349
  const key = `${parentId}-${index}-trait:${traitName}`;
45250
45350
  return /* @__PURE__ */ jsx(TraitFrame, { traitName }, key);
45251
45351
  }
45252
- return /* @__PURE__ */ jsx(React73__default.Fragment, { children: child }, `${parentId}-${index}`);
45352
+ return /* @__PURE__ */ jsx(React74__default.Fragment, { children: child }, `${parentId}-${index}`);
45253
45353
  }
45254
45354
  if (!child || typeof child !== "object") return null;
45255
45355
  const childId = `${parentId}-${index}`;
@@ -45302,14 +45402,14 @@ function isPatternConfig(value) {
45302
45402
  if (value === null || value === void 0) return false;
45303
45403
  if (typeof value !== "object") return false;
45304
45404
  if (Array.isArray(value)) return false;
45305
- if (React73__default.isValidElement(value)) return false;
45405
+ if (React74__default.isValidElement(value)) return false;
45306
45406
  if (value instanceof Date) return false;
45307
45407
  if (typeof value === "function") return false;
45308
45408
  const record = value;
45309
45409
  return "type" in record && typeof record.type === "string" && getComponentForPattern$1(record.type) !== null;
45310
45410
  }
45311
45411
  function isPlainConfigObject(value) {
45312
- if (React73__default.isValidElement(value)) return false;
45412
+ if (React74__default.isValidElement(value)) return false;
45313
45413
  if (value instanceof Date) return false;
45314
45414
  const proto = Object.getPrototypeOf(value);
45315
45415
  return proto === Object.prototype || proto === null;
@@ -45437,7 +45537,7 @@ function SlotContentRenderer({
45437
45537
  for (const slotKey of CONTENT_NODE_SLOTS) {
45438
45538
  const slotVal = restProps[slotKey];
45439
45539
  if (slotVal === void 0 || slotVal === null) continue;
45440
- if (React73__default.isValidElement(slotVal) || typeof slotVal === "string" || typeof slotVal === "number" || typeof slotVal === "boolean") continue;
45540
+ if (React74__default.isValidElement(slotVal) || typeof slotVal === "string" || typeof slotVal === "number" || typeof slotVal === "boolean") continue;
45441
45541
  if (Array.isArray(slotVal) || typeof slotVal === "object" && "type" in slotVal) {
45442
45542
  nodeSlotOverrides[slotKey] = renderPatternChildren(
45443
45543
  slotVal,
@@ -45490,7 +45590,7 @@ function SlotContentRenderer({
45490
45590
  const resolvedItems = Array.isArray(entityVal) && entityVal[0] !== "fn" ? entityVal : null;
45491
45591
  if (resolvedItems && resolvedItems.length > 0 && !finalProps.fields && !finalProps.columns) {
45492
45592
  const sample = resolvedItems[0];
45493
- if (sample && typeof sample === "object" && !Array.isArray(sample) && !React73__default.isValidElement(sample) && !(sample instanceof Date)) {
45593
+ if (sample && typeof sample === "object" && !Array.isArray(sample) && !React74__default.isValidElement(sample) && !(sample instanceof Date)) {
45494
45594
  const keys = Object.keys(sample).filter((k) => k !== "id" && k !== "_id");
45495
45595
  finalProps.fields = keys.map((k, i) => ({ name: k, variant: i === 0 ? "h4" : "body" }));
45496
45596
  }
@@ -45769,6 +45869,7 @@ var init_atoms = __esm({
45769
45869
  init_Typography();
45770
45870
  init_ThemeToggle();
45771
45871
  init_Overlay();
45872
+ init_Presence();
45772
45873
  init_FlipContainer();
45773
45874
  init_Dialog();
45774
45875
  init_Aside();
@@ -48135,4 +48236,4 @@ function useGitHubBranches(owner, repo, enabled = true) {
48135
48236
  });
48136
48237
  }
48137
48238
 
48138
- 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, 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, Pagination, PatternTile, PhysicsCanvas, Popover, PositionedCanvas, 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, 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, usePreview, usePullToRefresh, useQuerySingleton, useRenderInterpolation, useSharedEntitySnapshot, useSharedEntityStore, useSharedEntityStoreContext, useSwipeGesture, useTapReveal, useTraitListens, useTranslate115 as useTranslate, useUIEvents, useUISlotManager, useUnitSpriteAtlas, useValidation, vec2 };
48239
+ 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, 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, 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 };