@almadar/ui 2.26.0 → 2.27.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,5 +1,5 @@
1
- import * as React88 from 'react';
2
- import React88__default, { useCallback, createContext, useState, useRef, useLayoutEffect, useEffect, lazy, useContext, useMemo, useId, Suspense, useSyncExternalStore } from 'react';
1
+ import * as React90 from 'react';
2
+ import React90__default, { useCallback, createContext, useState, useRef, useEffect, useLayoutEffect, lazy, useContext, useMemo, useId, Suspense, useSyncExternalStore } from 'react';
3
3
  import { clsx } from 'clsx';
4
4
  import { twMerge } from 'tailwind-merge';
5
5
  import * as LucideIcons from 'lucide-react';
@@ -268,7 +268,7 @@ function resolveIconProp(value, sizeClass) {
268
268
  const IconComp = value;
269
269
  return /* @__PURE__ */ jsx(IconComp, { className: sizeClass });
270
270
  }
271
- if (React88__default.isValidElement(value)) {
271
+ if (React90__default.isValidElement(value)) {
272
272
  return value;
273
273
  }
274
274
  if (typeof value === "object" && value !== null && "render" in value) {
@@ -277,7 +277,7 @@ function resolveIconProp(value, sizeClass) {
277
277
  }
278
278
  return value;
279
279
  }
280
- var Button = React88__default.forwardRef(
280
+ var Button = React90__default.forwardRef(
281
281
  ({
282
282
  className,
283
283
  variant = "primary",
@@ -336,7 +336,7 @@ var Button = React88__default.forwardRef(
336
336
  }
337
337
  );
338
338
  Button.displayName = "Button";
339
- var Input = React88__default.forwardRef(
339
+ var Input = React90__default.forwardRef(
340
340
  ({
341
341
  className,
342
342
  inputType,
@@ -448,7 +448,7 @@ var Input = React88__default.forwardRef(
448
448
  }
449
449
  );
450
450
  Input.displayName = "Input";
451
- var Label = React88__default.forwardRef(
451
+ var Label = React90__default.forwardRef(
452
452
  ({ className, required, children, ...props }, ref) => {
453
453
  return /* @__PURE__ */ jsxs(
454
454
  "label",
@@ -468,7 +468,7 @@ var Label = React88__default.forwardRef(
468
468
  }
469
469
  );
470
470
  Label.displayName = "Label";
471
- var Textarea = React88__default.forwardRef(
471
+ var Textarea = React90__default.forwardRef(
472
472
  ({ className, error, ...props }, ref) => {
473
473
  return /* @__PURE__ */ jsx(
474
474
  "textarea",
@@ -491,7 +491,7 @@ var Textarea = React88__default.forwardRef(
491
491
  }
492
492
  );
493
493
  Textarea.displayName = "Textarea";
494
- var Select = React88__default.forwardRef(
494
+ var Select = React90__default.forwardRef(
495
495
  ({ className, options, placeholder, error, ...props }, ref) => {
496
496
  return /* @__PURE__ */ jsxs("div", { className: "relative", children: [
497
497
  /* @__PURE__ */ jsxs(
@@ -527,7 +527,7 @@ var Select = React88__default.forwardRef(
527
527
  }
528
528
  );
529
529
  Select.displayName = "Select";
530
- var Checkbox = React88__default.forwardRef(
530
+ var Checkbox = React90__default.forwardRef(
531
531
  ({ className, label, id, ...props }, ref) => {
532
532
  const inputId = id || `checkbox-${Math.random().toString(36).substr(2, 9)}`;
533
533
  return /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
@@ -603,7 +603,7 @@ var shadowStyles = {
603
603
  md: "shadow",
604
604
  lg: "shadow-lg"
605
605
  };
606
- var Card = React88__default.forwardRef(
606
+ var Card = React90__default.forwardRef(
607
607
  ({
608
608
  className,
609
609
  variant = "bordered",
@@ -639,9 +639,9 @@ var Card = React88__default.forwardRef(
639
639
  }
640
640
  );
641
641
  Card.displayName = "Card";
642
- var CardHeader = React88__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
642
+ var CardHeader = React90__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
643
643
  CardHeader.displayName = "CardHeader";
644
- var CardTitle = React88__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
644
+ var CardTitle = React90__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
645
645
  "h3",
646
646
  {
647
647
  ref,
@@ -654,11 +654,11 @@ var CardTitle = React88__default.forwardRef(({ className, ...props }, ref) => /*
654
654
  }
655
655
  ));
656
656
  CardTitle.displayName = "CardTitle";
657
- var CardContent = React88__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
657
+ var CardContent = React90__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
658
658
  CardContent.displayName = "CardContent";
659
659
  var CardBody = CardContent;
660
660
  CardBody.displayName = "CardBody";
661
- var CardFooter = React88__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
661
+ var CardFooter = React90__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
662
662
  "div",
663
663
  {
664
664
  ref,
@@ -704,7 +704,7 @@ var sizeStyles2 = {
704
704
  md: "px-2.5 py-1 text-sm",
705
705
  lg: "px-3 py-1.5 text-base"
706
706
  };
707
- var Badge = React88__default.forwardRef(
707
+ var Badge = React90__default.forwardRef(
708
708
  ({ className, variant = "default", size = "sm", amount, label, icon, children, ...props }, ref) => {
709
709
  const iconSizes2 = { sm: "w-3 h-3", md: "w-3.5 h-3.5", lg: "w-4 h-4" };
710
710
  const resolvedIcon = typeof icon === "string" ? (() => {
@@ -737,7 +737,7 @@ var sizeStyles3 = {
737
737
  md: "h-6 w-6",
738
738
  lg: "h-8 w-8"
739
739
  };
740
- var Spinner = React88__default.forwardRef(
740
+ var Spinner = React90__default.forwardRef(
741
741
  ({ className, size = "md", ...props }, ref) => {
742
742
  return /* @__PURE__ */ jsx(
743
743
  "div",
@@ -1002,7 +1002,7 @@ var positionStyles = {
1002
1002
  fixed: "fixed",
1003
1003
  sticky: "sticky"
1004
1004
  };
1005
- var Box = React88__default.forwardRef(
1005
+ var Box = React90__default.forwardRef(
1006
1006
  ({
1007
1007
  padding,
1008
1008
  paddingX,
@@ -1349,7 +1349,7 @@ var ProgressBar = ({
1349
1349
  return null;
1350
1350
  };
1351
1351
  ProgressBar.displayName = "ProgressBar";
1352
- var Radio = React88__default.forwardRef(
1352
+ var Radio = React90__default.forwardRef(
1353
1353
  ({
1354
1354
  label,
1355
1355
  helperText,
@@ -1453,7 +1453,7 @@ var Radio = React88__default.forwardRef(
1453
1453
  }
1454
1454
  );
1455
1455
  Radio.displayName = "Radio";
1456
- var Switch = React88.forwardRef(
1456
+ var Switch = React90.forwardRef(
1457
1457
  ({
1458
1458
  checked,
1459
1459
  defaultChecked = false,
@@ -1464,10 +1464,10 @@ var Switch = React88.forwardRef(
1464
1464
  name,
1465
1465
  className
1466
1466
  }, ref) => {
1467
- const [isChecked, setIsChecked] = React88.useState(
1467
+ const [isChecked, setIsChecked] = React90.useState(
1468
1468
  checked !== void 0 ? checked : defaultChecked
1469
1469
  );
1470
- React88.useEffect(() => {
1470
+ React90.useEffect(() => {
1471
1471
  if (checked !== void 0) {
1472
1472
  setIsChecked(checked);
1473
1473
  }
@@ -2261,8 +2261,8 @@ var LawReferenceTooltip = ({
2261
2261
  position = "top",
2262
2262
  className
2263
2263
  }) => {
2264
- const [isVisible, setIsVisible] = React88__default.useState(false);
2265
- const timeoutRef = React88__default.useRef(null);
2264
+ const [isVisible, setIsVisible] = React90__default.useState(false);
2265
+ const timeoutRef = React90__default.useRef(null);
2266
2266
  const handleMouseEnter = () => {
2267
2267
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
2268
2268
  timeoutRef.current = setTimeout(() => setIsVisible(true), 200);
@@ -2271,7 +2271,7 @@ var LawReferenceTooltip = ({
2271
2271
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
2272
2272
  setIsVisible(false);
2273
2273
  };
2274
- React88__default.useEffect(() => {
2274
+ React90__default.useEffect(() => {
2275
2275
  return () => {
2276
2276
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
2277
2277
  };
@@ -2459,7 +2459,7 @@ var sizeStyles5 = {
2459
2459
  md: "w-2.5 h-2.5",
2460
2460
  lg: "w-3 h-3"
2461
2461
  };
2462
- var StatusDot = React88__default.forwardRef(
2462
+ var StatusDot = React90__default.forwardRef(
2463
2463
  ({ className, status = "offline", pulse = false, size = "md", label, ...props }, ref) => {
2464
2464
  return /* @__PURE__ */ jsx(
2465
2465
  "span",
@@ -2506,7 +2506,7 @@ var iconMap = {
2506
2506
  down: TrendingDown,
2507
2507
  flat: ArrowRight
2508
2508
  };
2509
- var TrendIndicator = React88__default.forwardRef(
2509
+ var TrendIndicator = React90__default.forwardRef(
2510
2510
  ({
2511
2511
  className,
2512
2512
  value,
@@ -2565,7 +2565,7 @@ var thumbSizes = {
2565
2565
  md: "w-4 h-4",
2566
2566
  lg: "w-5 h-5"
2567
2567
  };
2568
- var RangeSlider = React88__default.forwardRef(
2568
+ var RangeSlider = React90__default.forwardRef(
2569
2569
  ({
2570
2570
  className,
2571
2571
  min = 0,
@@ -3097,7 +3097,7 @@ var paddingClasses = {
3097
3097
  md: "py-16",
3098
3098
  lg: "py-24"
3099
3099
  };
3100
- var ContentSection = React88__default.forwardRef(
3100
+ var ContentSection = React90__default.forwardRef(
3101
3101
  ({ children, background = "default", padding = "lg", id, className }, ref) => {
3102
3102
  return /* @__PURE__ */ jsx(
3103
3103
  Box,
@@ -3598,6 +3598,289 @@ function getTileDimensions(variant, size) {
3598
3598
  }
3599
3599
  return { width: size, height: size };
3600
3600
  }
3601
+ var initialStyles = {
3602
+ "fade-up": { opacity: 0, transform: "translateY(24px)" },
3603
+ "fade-down": { opacity: 0, transform: "translateY(-24px)" },
3604
+ "fade-in": { opacity: 0 },
3605
+ "fade-left": { opacity: 0, transform: "translateX(24px)" },
3606
+ "fade-right": { opacity: 0, transform: "translateX(-24px)" },
3607
+ "scale": { opacity: 0, transform: "scale(0.92)" },
3608
+ "scale-up": { opacity: 0, transform: "scale(0.92) translateY(16px)" },
3609
+ "none": {}
3610
+ };
3611
+ var animatedStyles = {
3612
+ "fade-up": { opacity: 1, transform: "translateY(0)" },
3613
+ "fade-down": { opacity: 1, transform: "translateY(0)" },
3614
+ "fade-in": { opacity: 1 },
3615
+ "fade-left": { opacity: 1, transform: "translateX(0)" },
3616
+ "fade-right": { opacity: 1, transform: "translateX(0)" },
3617
+ "scale": { opacity: 1, transform: "scale(1)" },
3618
+ "scale-up": { opacity: 1, transform: "scale(1) translateY(0)" },
3619
+ "none": {}
3620
+ };
3621
+ var AnimatedReveal = React90__default.forwardRef(
3622
+ ({
3623
+ trigger = "scroll",
3624
+ animation = "fade-up",
3625
+ duration = 600,
3626
+ delay = 0,
3627
+ threshold = 0.15,
3628
+ once = true,
3629
+ animate: manualAnimate,
3630
+ easing = "cubic-bezier(0.16, 1, 0.3, 1)",
3631
+ children,
3632
+ className,
3633
+ style,
3634
+ ...props
3635
+ }, forwardedRef) => {
3636
+ const [isAnimated, setIsAnimated] = useState(false);
3637
+ const internalRef = useRef(null);
3638
+ const hasAnimated = useRef(false);
3639
+ const setRef = useCallback(
3640
+ (node) => {
3641
+ internalRef.current = node;
3642
+ if (typeof forwardedRef === "function") forwardedRef(node);
3643
+ else if (forwardedRef) forwardedRef.current = node;
3644
+ },
3645
+ [forwardedRef]
3646
+ );
3647
+ useEffect(() => {
3648
+ if (trigger !== "scroll") return;
3649
+ const el = internalRef.current;
3650
+ if (!el) return;
3651
+ const observer = new IntersectionObserver(
3652
+ ([entry]) => {
3653
+ if (entry.isIntersecting) {
3654
+ if (once && hasAnimated.current) return;
3655
+ hasAnimated.current = true;
3656
+ setIsAnimated(true);
3657
+ } else if (!once) {
3658
+ setIsAnimated(false);
3659
+ }
3660
+ },
3661
+ { threshold }
3662
+ );
3663
+ observer.observe(el);
3664
+ return () => observer.disconnect();
3665
+ }, [trigger, threshold, once]);
3666
+ const handleMouseEnter = trigger === "hover" ? () => setIsAnimated(true) : void 0;
3667
+ const handleMouseLeave = trigger === "hover" ? () => {
3668
+ if (!once || !hasAnimated.current) {
3669
+ hasAnimated.current = true;
3670
+ setIsAnimated(false);
3671
+ }
3672
+ } : void 0;
3673
+ useEffect(() => {
3674
+ if (trigger === "manual" && manualAnimate !== void 0) {
3675
+ setIsAnimated(manualAnimate);
3676
+ }
3677
+ }, [trigger, manualAnimate]);
3678
+ const active = isAnimated;
3679
+ const currentStyle = active ? animatedStyles[animation] : initialStyles[animation];
3680
+ return /* @__PURE__ */ jsx(
3681
+ "div",
3682
+ {
3683
+ ref: setRef,
3684
+ className: cn("will-change-[opacity,transform]", className),
3685
+ style: {
3686
+ ...currentStyle,
3687
+ transitionProperty: "opacity, transform",
3688
+ transitionDuration: `${duration}ms`,
3689
+ transitionDelay: `${delay}ms`,
3690
+ transitionTimingFunction: easing,
3691
+ ...style
3692
+ },
3693
+ onMouseEnter: handleMouseEnter,
3694
+ onMouseLeave: handleMouseLeave,
3695
+ ...props,
3696
+ children: typeof children === "function" ? children(active) : children
3697
+ }
3698
+ );
3699
+ }
3700
+ );
3701
+ AnimatedReveal.displayName = "AnimatedReveal";
3702
+ function useFetchedSvg(src) {
3703
+ const [svg, setSvg] = useState(null);
3704
+ const cache = useRef({});
3705
+ useEffect(() => {
3706
+ if (!src) {
3707
+ setSvg(null);
3708
+ return;
3709
+ }
3710
+ if (cache.current[src]) {
3711
+ setSvg(cache.current[src]);
3712
+ return;
3713
+ }
3714
+ let cancelled = false;
3715
+ fetch(src).then((res) => {
3716
+ if (!res.ok) throw new Error(`Failed to fetch SVG: ${res.status}`);
3717
+ return res.text();
3718
+ }).then((text) => {
3719
+ if (cancelled) return;
3720
+ cache.current[src] = text;
3721
+ setSvg(text);
3722
+ }).catch(() => {
3723
+ if (!cancelled) setSvg(null);
3724
+ });
3725
+ return () => {
3726
+ cancelled = true;
3727
+ };
3728
+ }, [src]);
3729
+ return svg;
3730
+ }
3731
+ function applyDrawAnimation(container, animate, duration, delay, easing) {
3732
+ const paths = container.querySelectorAll("path, line, polyline, polygon, circle, ellipse, rect");
3733
+ paths.forEach((el) => {
3734
+ if ("getTotalLength" in el && typeof el.getTotalLength === "function") {
3735
+ const len = el.getTotalLength();
3736
+ el.style.strokeDasharray = `${len}`;
3737
+ el.style.strokeDashoffset = animate ? "0" : `${len}`;
3738
+ el.style.transition = `stroke-dashoffset ${duration}ms ${easing} ${delay}ms`;
3739
+ }
3740
+ });
3741
+ }
3742
+ function applyFillAnimation(container, animate, duration, delay, easing, fillColor) {
3743
+ const paths = container.querySelectorAll("path, circle, ellipse, rect, polygon");
3744
+ paths.forEach((el) => {
3745
+ if ("getTotalLength" in el && typeof el.getTotalLength === "function") {
3746
+ const geom = el;
3747
+ const len = geom.getTotalLength();
3748
+ geom.style.strokeDasharray = `${len}`;
3749
+ geom.style.strokeDashoffset = animate ? "0" : `${len}`;
3750
+ geom.style.transition = `stroke-dashoffset ${duration * 0.6}ms ${easing} ${delay}ms, fill-opacity ${duration * 0.4}ms ${easing} ${delay + duration * 0.6}ms`;
3751
+ }
3752
+ if (fillColor) el.style.fill = fillColor;
3753
+ el.style.fillOpacity = animate ? "1" : "0";
3754
+ });
3755
+ }
3756
+ function applyPulseAnimation(container, animate, duration) {
3757
+ const svg = container.querySelector("svg");
3758
+ if (!svg) return;
3759
+ if (animate) {
3760
+ svg.style.animation = `ag-pulse ${duration}ms ease-in-out infinite`;
3761
+ } else {
3762
+ svg.style.animation = "none";
3763
+ }
3764
+ }
3765
+ function applyMorphAnimation(container, animate, duration, delay, easing) {
3766
+ const paths = container.querySelectorAll("path, circle, ellipse, rect, polygon");
3767
+ paths.forEach((el) => {
3768
+ el.style.transition = `all ${duration}ms ${easing} ${delay}ms`;
3769
+ el.style.transform = animate ? "scale(1)" : "scale(0)";
3770
+ el.style.transformOrigin = "center";
3771
+ el.style.opacity = animate ? "1" : "0";
3772
+ });
3773
+ }
3774
+ var AnimatedGraphic = React90__default.forwardRef(
3775
+ ({
3776
+ src,
3777
+ svgContent,
3778
+ animation = "draw",
3779
+ animate = false,
3780
+ duration = 1200,
3781
+ delay = 0,
3782
+ easing = "cubic-bezier(0.16, 1, 0.3, 1)",
3783
+ width,
3784
+ height,
3785
+ strokeColor,
3786
+ fillColor,
3787
+ alt,
3788
+ className,
3789
+ style,
3790
+ children,
3791
+ ...props
3792
+ }, ref) => {
3793
+ const containerRef = useRef(null);
3794
+ const fetchedSvg = useFetchedSvg(svgContent ? void 0 : src);
3795
+ const resolvedSvg = svgContent ?? fetchedSvg;
3796
+ const prevAnimateRef = useRef(animate);
3797
+ const setRef = React90__default.useCallback(
3798
+ (node) => {
3799
+ containerRef.current = node;
3800
+ if (typeof ref === "function") ref(node);
3801
+ else if (ref) ref.current = node;
3802
+ },
3803
+ [ref]
3804
+ );
3805
+ useEffect(() => {
3806
+ const el = containerRef.current;
3807
+ if (!el || !strokeColor) return;
3808
+ const paths = el.querySelectorAll("path, line, polyline, polygon, circle, ellipse, rect");
3809
+ paths.forEach((p2) => {
3810
+ p2.style.stroke = strokeColor;
3811
+ });
3812
+ }, [resolvedSvg, strokeColor]);
3813
+ useEffect(() => {
3814
+ const el = containerRef.current;
3815
+ if (!el || !resolvedSvg) return;
3816
+ if (animation === "draw" || animation === "fill") {
3817
+ const paths = el.querySelectorAll("path, line, polyline, polygon, circle, ellipse, rect");
3818
+ paths.forEach((p2) => {
3819
+ if ("getTotalLength" in p2 && typeof p2.getTotalLength === "function") {
3820
+ const len = p2.getTotalLength();
3821
+ p2.style.strokeDasharray = `${len}`;
3822
+ p2.style.strokeDashoffset = `${len}`;
3823
+ }
3824
+ if (animation === "fill") {
3825
+ p2.style.fillOpacity = "0";
3826
+ }
3827
+ });
3828
+ }
3829
+ if (animation === "morph") {
3830
+ const paths = el.querySelectorAll("path, circle, ellipse, rect, polygon");
3831
+ paths.forEach((p2) => {
3832
+ p2.style.transform = "scale(0)";
3833
+ p2.style.transformOrigin = "center";
3834
+ p2.style.opacity = "0";
3835
+ });
3836
+ }
3837
+ }, [resolvedSvg, animation]);
3838
+ useEffect(() => {
3839
+ const el = containerRef.current;
3840
+ if (!el) return;
3841
+ const id = requestAnimationFrame(() => {
3842
+ switch (animation) {
3843
+ case "draw":
3844
+ applyDrawAnimation(el, animate, duration, delay, easing);
3845
+ break;
3846
+ case "fill":
3847
+ applyFillAnimation(el, animate, duration, delay, easing, fillColor);
3848
+ break;
3849
+ case "pulse":
3850
+ applyPulseAnimation(el, animate, duration);
3851
+ break;
3852
+ case "morph":
3853
+ applyMorphAnimation(el, animate, duration, delay, easing);
3854
+ break;
3855
+ }
3856
+ });
3857
+ prevAnimateRef.current = animate;
3858
+ return () => cancelAnimationFrame(id);
3859
+ }, [animate, animation, duration, delay, easing, fillColor, resolvedSvg]);
3860
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
3861
+ /* @__PURE__ */ jsx("style", { children: `@keyframes ag-pulse { 0%, 100% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.04); opacity: 0.85; } }` }),
3862
+ /* @__PURE__ */ jsx(
3863
+ "div",
3864
+ {
3865
+ ref: setRef,
3866
+ className: cn("inline-flex items-center justify-center", className),
3867
+ style: { width, height, ...style },
3868
+ role: alt ? "img" : void 0,
3869
+ "aria-label": alt,
3870
+ ...props,
3871
+ children: resolvedSvg ? /* @__PURE__ */ jsx(
3872
+ "div",
3873
+ {
3874
+ className: "w-full h-full [&>svg]:w-full [&>svg]:h-full",
3875
+ dangerouslySetInnerHTML: { __html: resolvedSvg }
3876
+ }
3877
+ ) : children
3878
+ }
3879
+ )
3880
+ ] });
3881
+ }
3882
+ );
3883
+ AnimatedGraphic.displayName = "AnimatedGraphic";
3601
3884
  var heartIcon = (filled, size) => /* @__PURE__ */ jsx(
3602
3885
  "svg",
3603
3886
  {
@@ -3682,9 +3965,9 @@ function ScoreDisplay({
3682
3965
  ...rest
3683
3966
  }) {
3684
3967
  const resolvedValue = typeof value === "number" && !Number.isNaN(value) ? value : typeof rest.score === "number" && !Number.isNaN(rest.score) ? rest.score : 0;
3685
- const [displayValue, setDisplayValue] = React88.useState(resolvedValue);
3686
- const [isAnimating, setIsAnimating] = React88.useState(false);
3687
- React88.useEffect(() => {
3968
+ const [displayValue, setDisplayValue] = React90.useState(resolvedValue);
3969
+ const [isAnimating, setIsAnimating] = React90.useState(false);
3970
+ React90.useEffect(() => {
3688
3971
  if (!animated || displayValue === resolvedValue) {
3689
3972
  setDisplayValue(resolvedValue);
3690
3973
  return;
@@ -3757,9 +4040,9 @@ function ControlButton({
3757
4040
  className
3758
4041
  }) {
3759
4042
  const eventBus = useEventBus();
3760
- const [isPressed, setIsPressed] = React88.useState(false);
4043
+ const [isPressed, setIsPressed] = React90.useState(false);
3761
4044
  const actualPressed = pressed ?? isPressed;
3762
- const handlePointerDown = React88.useCallback(
4045
+ const handlePointerDown = React90.useCallback(
3763
4046
  (e) => {
3764
4047
  e.preventDefault();
3765
4048
  if (disabled) return;
@@ -3769,7 +4052,7 @@ function ControlButton({
3769
4052
  },
3770
4053
  [disabled, pressEvent, eventBus, onPress]
3771
4054
  );
3772
- const handlePointerUp = React88.useCallback(
4055
+ const handlePointerUp = React90.useCallback(
3773
4056
  (e) => {
3774
4057
  e.preventDefault();
3775
4058
  if (disabled) return;
@@ -3779,7 +4062,7 @@ function ControlButton({
3779
4062
  },
3780
4063
  [disabled, releaseEvent, eventBus, onRelease]
3781
4064
  );
3782
- const handlePointerLeave = React88.useCallback(
4065
+ const handlePointerLeave = React90.useCallback(
3783
4066
  (e) => {
3784
4067
  if (isPressed) {
3785
4068
  setIsPressed(false);
@@ -4605,9 +4888,9 @@ function MiniMap({
4605
4888
  viewportRect,
4606
4889
  className
4607
4890
  }) {
4608
- const canvasRef = React88.useRef(null);
4609
- const frameRef = React88.useRef(0);
4610
- React88.useEffect(() => {
4891
+ const canvasRef = React90.useRef(null);
4892
+ const frameRef = React90.useRef(0);
4893
+ React90.useEffect(() => {
4611
4894
  const canvas = canvasRef.current;
4612
4895
  if (!canvas) return;
4613
4896
  const ctx = canvas.getContext("2d");
@@ -4848,7 +5131,7 @@ var ErrorState = ({
4848
5131
  );
4849
5132
  };
4850
5133
  ErrorState.displayName = "ErrorState";
4851
- var ErrorBoundary = class extends React88__default.Component {
5134
+ var ErrorBoundary = class extends React90__default.Component {
4852
5135
  constructor(props) {
4853
5136
  super(props);
4854
5137
  __publicField(this, "reset", () => {
@@ -6584,8 +6867,8 @@ var Menu = ({
6584
6867
  "bottom-start": "top-full left-0 mt-2",
6585
6868
  "bottom-end": "top-full right-0 mt-2"
6586
6869
  };
6587
- const triggerChild = React88__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx("span", { children: trigger });
6588
- const triggerElement = React88__default.cloneElement(
6870
+ const triggerChild = React90__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx("span", { children: trigger });
6871
+ const triggerElement = React90__default.cloneElement(
6589
6872
  triggerChild,
6590
6873
  {
6591
6874
  ref: triggerRef,
@@ -7090,8 +7373,8 @@ var Popover = ({
7090
7373
  onMouseEnter: handleOpen,
7091
7374
  onMouseLeave: handleClose
7092
7375
  };
7093
- const childElement = React88__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
7094
- const triggerElement = React88__default.cloneElement(
7376
+ const childElement = React90__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
7377
+ const triggerElement = React90__default.cloneElement(
7095
7378
  childElement,
7096
7379
  {
7097
7380
  ref: triggerRef,
@@ -7846,8 +8129,8 @@ var Tooltip = ({
7846
8129
  if (hideTimeoutRef.current) clearTimeout(hideTimeoutRef.current);
7847
8130
  };
7848
8131
  }, []);
7849
- const triggerElement = React88__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
7850
- const trigger = React88__default.cloneElement(triggerElement, {
8132
+ const triggerElement = React90__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
8133
+ const trigger = React90__default.cloneElement(triggerElement, {
7851
8134
  ref: triggerRef,
7852
8135
  onMouseEnter: handleMouseEnter,
7853
8136
  onMouseLeave: handleMouseLeave,
@@ -8096,7 +8379,7 @@ var WizardProgress = ({
8096
8379
  children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: steps.map((step, index) => {
8097
8380
  const isActive = index === currentStep;
8098
8381
  const isCompleted = index < currentStep;
8099
- return /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
8382
+ return /* @__PURE__ */ jsxs(React90__default.Fragment, { children: [
8100
8383
  /* @__PURE__ */ jsx(
8101
8384
  "button",
8102
8385
  {
@@ -8226,7 +8509,7 @@ var WizardNavigation = ({
8226
8509
  );
8227
8510
  };
8228
8511
  WizardNavigation.displayName = "WizardNavigation";
8229
- var MarkdownContent = React88__default.memo(
8512
+ var MarkdownContent = React90__default.memo(
8230
8513
  ({ content, direction, className }) => {
8231
8514
  const { t: _t } = useTranslate();
8232
8515
  const safeContent = typeof content === "string" ? content : String(content ?? "");
@@ -8328,7 +8611,7 @@ var MarkdownContent = React88__default.memo(
8328
8611
  (prev, next) => prev.content === next.content && prev.className === next.className && prev.direction === next.direction
8329
8612
  );
8330
8613
  MarkdownContent.displayName = "MarkdownContent";
8331
- var CodeBlock = React88__default.memo(
8614
+ var CodeBlock = React90__default.memo(
8332
8615
  ({
8333
8616
  code: rawCode,
8334
8617
  language = "text",
@@ -9390,7 +9673,7 @@ var stateColors = {
9390
9673
  var ProgressDots = ({
9391
9674
  count,
9392
9675
  currentIndex,
9393
- getState,
9676
+ getState: getState2,
9394
9677
  onDotClick,
9395
9678
  className,
9396
9679
  size = "md"
@@ -9402,7 +9685,7 @@ var ProgressDots = ({
9402
9685
  },
9403
9686
  [currentIndex]
9404
9687
  );
9405
- const resolveState = getState ?? defaultGetState;
9688
+ const resolveState = getState2 ?? defaultGetState;
9406
9689
  const dims = sizeMap14[size];
9407
9690
  return /* @__PURE__ */ jsx(HStack, { gap: "xs", align: "center", className: cn(className), children: Array.from({ length: count }, (_, index) => {
9408
9691
  const state = resolveState(index);
@@ -9449,8 +9732,8 @@ function DPad({
9449
9732
  }) {
9450
9733
  const eventBus = useEventBus();
9451
9734
  const sizes = sizeMap15[size];
9452
- const [activeDirections, setActiveDirections] = React88.useState(/* @__PURE__ */ new Set());
9453
- const handlePress = React88.useCallback(
9735
+ const [activeDirections, setActiveDirections] = React90.useState(/* @__PURE__ */ new Set());
9736
+ const handlePress = React90.useCallback(
9454
9737
  (direction) => {
9455
9738
  setActiveDirections((prev) => new Set(prev).add(direction));
9456
9739
  if (directionEvent) eventBus.emit(`UI:${directionEvent}`, { direction, pressed: true });
@@ -9458,7 +9741,7 @@ function DPad({
9458
9741
  },
9459
9742
  [directionEvent, eventBus, onDirection]
9460
9743
  );
9461
- const handleRelease = React88.useCallback(
9744
+ const handleRelease = React90.useCallback(
9462
9745
  (direction) => {
9463
9746
  setActiveDirections((prev) => {
9464
9747
  const next = new Set(prev);
@@ -9516,8 +9799,8 @@ function ActionButtons({
9516
9799
  disabled
9517
9800
  }) {
9518
9801
  const eventBus = useEventBus();
9519
- const [activeButtons, setActiveButtons] = React88.useState(/* @__PURE__ */ new Set());
9520
- const handlePress = React88.useCallback(
9802
+ const [activeButtons, setActiveButtons] = React90.useState(/* @__PURE__ */ new Set());
9803
+ const handlePress = React90.useCallback(
9521
9804
  (id) => {
9522
9805
  setActiveButtons((prev) => new Set(prev).add(id));
9523
9806
  if (actionEvent) eventBus.emit(`UI:${actionEvent}`, { id, pressed: true });
@@ -9525,7 +9808,7 @@ function ActionButtons({
9525
9808
  },
9526
9809
  [actionEvent, eventBus, onAction]
9527
9810
  );
9528
- const handleRelease = React88.useCallback(
9811
+ const handleRelease = React90.useCallback(
9529
9812
  (id) => {
9530
9813
  setActiveButtons((prev) => {
9531
9814
  const next = new Set(prev);
@@ -9710,7 +9993,7 @@ function InventoryGrid({
9710
9993
  const eventBus = useEventBus();
9711
9994
  const slotCount = totalSlots ?? items.length;
9712
9995
  const emptySlotCount = Math.max(0, slotCount - items.length);
9713
- const handleSelect = React88.useCallback(
9996
+ const handleSelect = React90.useCallback(
9714
9997
  (id) => {
9715
9998
  onSelect?.(id);
9716
9999
  if (selectEvent) {
@@ -9834,7 +10117,7 @@ function CraftingRecipe({
9834
10117
  className
9835
10118
  }) {
9836
10119
  const eventBus = useEventBus();
9837
- const handleCraft = React88.useCallback(() => {
10120
+ const handleCraft = React90.useCallback(() => {
9838
10121
  onCraft?.();
9839
10122
  if (craftEvent) {
9840
10123
  eventBus.emit(craftEvent, { output: output.label });
@@ -9851,7 +10134,7 @@ function CraftingRecipe({
9851
10134
  children: [
9852
10135
  /* @__PURE__ */ jsx(HStack, { gap: "xs", className: "flex-wrap items-center", children: inputs.map((ingredient, index) => {
9853
10136
  const hasSufficient = ingredient.available >= ingredient.required;
9854
- return /* @__PURE__ */ jsxs(React88.Fragment, { children: [
10137
+ return /* @__PURE__ */ jsxs(React90.Fragment, { children: [
9855
10138
  /* @__PURE__ */ jsx(Box, { className: "relative", children: /* @__PURE__ */ jsx(
9856
10139
  ItemSlot,
9857
10140
  {
@@ -9953,15 +10236,15 @@ function GameCanvas2D({
9953
10236
  fps = 60,
9954
10237
  className
9955
10238
  }) {
9956
- const canvasRef = React88.useRef(null);
9957
- const rafRef = React88.useRef(0);
9958
- const frameRef = React88.useRef(0);
9959
- const lastTimeRef = React88.useRef(0);
9960
- const onDrawRef = React88.useRef(onDraw);
10239
+ const canvasRef = React90.useRef(null);
10240
+ const rafRef = React90.useRef(0);
10241
+ const frameRef = React90.useRef(0);
10242
+ const lastTimeRef = React90.useRef(0);
10243
+ const onDrawRef = React90.useRef(onDraw);
9961
10244
  onDrawRef.current = onDraw;
9962
- const onTickRef = React88.useRef(onTick);
10245
+ const onTickRef = React90.useRef(onTick);
9963
10246
  onTickRef.current = onTick;
9964
- React88.useEffect(() => {
10247
+ React90.useEffect(() => {
9965
10248
  const canvas = canvasRef.current;
9966
10249
  if (!canvas) return;
9967
10250
  const ctx = canvas.getContext("2d");
@@ -10214,7 +10497,7 @@ function TurnPanel({
10214
10497
  className
10215
10498
  }) {
10216
10499
  const eventBus = useEventBus();
10217
- const handleAction = React88.useCallback(
10500
+ const handleAction = React90.useCallback(
10218
10501
  (event) => {
10219
10502
  if (event) {
10220
10503
  eventBus.emit(event, { turn: currentTurn, phase, activeTeam });
@@ -10339,7 +10622,7 @@ function UnitCommandBar({
10339
10622
  className
10340
10623
  }) {
10341
10624
  const eventBus = useEventBus();
10342
- const handleCommand = React88.useCallback(
10625
+ const handleCommand = React90.useCallback(
10343
10626
  (event) => {
10344
10627
  if (event) {
10345
10628
  eventBus.emit(event, { unitId: selectedUnitId });
@@ -10878,7 +11161,7 @@ function GameMenu({
10878
11161
  } catch {
10879
11162
  }
10880
11163
  const eventBus = eventBusProp || eventBusFromHook;
10881
- const handleOptionClick = React88.useCallback(
11164
+ const handleOptionClick = React90.useCallback(
10882
11165
  (option) => {
10883
11166
  if (option.event && eventBus) {
10884
11167
  eventBus.emit(`UI:${option.event}`, { option });
@@ -11001,7 +11284,7 @@ function GameOverScreen({
11001
11284
  } catch {
11002
11285
  }
11003
11286
  const eventBus = eventBusProp || eventBusFromHook;
11004
- const handleActionClick = React88.useCallback(
11287
+ const handleActionClick = React90.useCallback(
11005
11288
  (action) => {
11006
11289
  if (action.event && eventBus) {
11007
11290
  eventBus.emit(`UI:${action.event}`, { action });
@@ -11084,17 +11367,30 @@ function GameOverScreen({
11084
11367
  GameOverScreen.displayName = "GameOverScreen";
11085
11368
 
11086
11369
  // lib/verificationRegistry.ts
11087
- var checks = /* @__PURE__ */ new Map();
11088
- var transitions = [];
11089
- var listeners = /* @__PURE__ */ new Set();
11370
+ function getState() {
11371
+ if (typeof window !== "undefined") {
11372
+ const w = window;
11373
+ if (!w.__verificationRegistryState) {
11374
+ w.__verificationRegistryState = {
11375
+ checks: /* @__PURE__ */ new Map(),
11376
+ transitions: [],
11377
+ bridgeHealth: null,
11378
+ listeners: /* @__PURE__ */ new Set()
11379
+ };
11380
+ }
11381
+ return w.__verificationRegistryState;
11382
+ }
11383
+ return { checks: /* @__PURE__ */ new Map(), transitions: [], bridgeHealth: null, listeners: /* @__PURE__ */ new Set() };
11384
+ }
11090
11385
  function getAllChecks() {
11091
- return Array.from(checks.values());
11386
+ return Array.from(getState().checks.values());
11092
11387
  }
11093
11388
  function getTransitions() {
11094
- return [...transitions];
11389
+ return [...getState().transitions];
11095
11390
  }
11096
11391
  function getBridgeHealth() {
11097
- return null;
11392
+ const bh = getState().bridgeHealth;
11393
+ return bh ? { ...bh } : null;
11098
11394
  }
11099
11395
  function getSummary() {
11100
11396
  const allChecks = getAllChecks();
@@ -11115,8 +11411,8 @@ function getSnapshot() {
11115
11411
  };
11116
11412
  }
11117
11413
  function subscribeToVerification(listener) {
11118
- listeners.add(listener);
11119
- return () => listeners.delete(listener);
11414
+ getState().listeners.add(listener);
11415
+ return () => getState().listeners.delete(listener);
11120
11416
  }
11121
11417
  function exposeOnWindow() {
11122
11418
  if (typeof window === "undefined") return;
@@ -11133,7 +11429,7 @@ function exposeOnWindow() {
11133
11429
  }
11134
11430
  function waitForTransition(event, timeoutMs = 1e4) {
11135
11431
  return new Promise((resolve) => {
11136
- const existing = transitions.find((t) => t.event === event);
11432
+ const existing = getState().transitions.find((t) => t.event === event);
11137
11433
  if (existing) {
11138
11434
  resolve(existing);
11139
11435
  return;
@@ -11143,7 +11439,7 @@ function waitForTransition(event, timeoutMs = 1e4) {
11143
11439
  resolve(null);
11144
11440
  }, timeoutMs);
11145
11441
  const unsub = subscribeToVerification(() => {
11146
- const found = transitions.find((t) => t.event === event);
11442
+ const found = getState().transitions.find((t) => t.event === event);
11147
11443
  if (found) {
11148
11444
  clearTimeout(timeout);
11149
11445
  unsub();
@@ -13804,7 +14100,7 @@ var DataList = ({
13804
14100
  }) => {
13805
14101
  const eventBus = useEventBus();
13806
14102
  const { t } = useTranslate();
13807
- const [visibleCount, setVisibleCount] = React88__default.useState(pageSize || Infinity);
14103
+ const [visibleCount, setVisibleCount] = React90__default.useState(pageSize || Infinity);
13808
14104
  const fields = fieldsProp ?? columnsProp ?? [];
13809
14105
  const allData = Array.isArray(entity) ? entity : entity ? [entity] : [];
13810
14106
  const data = pageSize > 0 ? allData.slice(0, visibleCount) : allData;
@@ -13841,7 +14137,7 @@ var DataList = ({
13841
14137
  const items2 = data.map((item) => item);
13842
14138
  const groups2 = groupBy ? groupData(items2, groupBy) : [{ label: "", items: items2 }];
13843
14139
  const contentField = titleField?.name ?? fields[0]?.name ?? "";
13844
- return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
14140
+ return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React90__default.Fragment, { children: [
13845
14141
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: "my-2" }),
13846
14142
  group.items.map((itemData, index) => {
13847
14143
  const id = itemData.id || `${gi}-${index}`;
@@ -14044,7 +14340,7 @@ var DataList = ({
14044
14340
  className
14045
14341
  ),
14046
14342
  children: [
14047
- groups.map((group, gi) => /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
14343
+ groups.map((group, gi) => /* @__PURE__ */ jsxs(React90__default.Fragment, { children: [
14048
14344
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: gi > 0 ? "mt-4" : "mt-0" }),
14049
14345
  group.items.map(
14050
14346
  (itemData, index) => renderItem(itemData, index, gi === groups.length - 1 && index === group.items.length - 1)
@@ -15100,18 +15396,14 @@ var InstallBox = ({
15100
15396
  /* @__PURE__ */ jsx(
15101
15397
  Box,
15102
15398
  {
15103
- className: cn(
15104
- "bg-foreground",
15105
- "rounded-md",
15106
- "border-[length:var(--border-width)] border-border"
15107
- ),
15399
+ className: "bg-surface rounded-md border-[length:var(--border-width)] border-border",
15108
15400
  padding: "md",
15109
- children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "center", children: [
15401
+ children: /* @__PURE__ */ jsxs(Box, { className: "flex items-center gap-3", children: [
15110
15402
  /* @__PURE__ */ jsx(
15111
15403
  Typography,
15112
15404
  {
15113
15405
  variant: "body2",
15114
- className: "font-mono flex-1 min-w-0 text-background select-all",
15406
+ className: "font-mono flex-1 min-w-0 select-all",
15115
15407
  truncate: true,
15116
15408
  children: command
15117
15409
  }
@@ -15120,10 +15412,12 @@ var InstallBox = ({
15120
15412
  Button,
15121
15413
  {
15122
15414
  variant: "ghost",
15123
- size: "md",
15415
+ size: "sm",
15416
+ leftIcon: copied ? "check" : "copy",
15124
15417
  onClick: handleCopy,
15125
- className: "flex-shrink-0 text-background hover:text-background",
15126
- children: copied ? "Copied!" : "Copy"
15418
+ className: "flex-shrink-0",
15419
+ "aria-label": copied ? "Copied" : "Copy to clipboard",
15420
+ children: copied ? "Copied" : "Copy"
15127
15421
  }
15128
15422
  )
15129
15423
  ] })
@@ -15778,7 +16072,7 @@ var StepFlow = ({
15778
16072
  className
15779
16073
  }) => {
15780
16074
  if (orientation === "vertical") {
15781
- return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React88__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
16075
+ return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React90__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
15782
16076
  /* @__PURE__ */ jsxs(VStack, { gap: "none", align: "center", children: [
15783
16077
  /* @__PURE__ */ jsx(StepCircle, { step, index }),
15784
16078
  showConnectors && index < steps.length - 1 && /* @__PURE__ */ jsx(Box, { className: "w-px h-8 bg-border" })
@@ -15789,7 +16083,7 @@ var StepFlow = ({
15789
16083
  ] })
15790
16084
  ] }) }, index)) });
15791
16085
  }
15792
- 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(React88__default.Fragment, { children: [
16086
+ 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(React90__default.Fragment, { children: [
15793
16087
  /* @__PURE__ */ jsxs(VStack, { gap: "sm", align: "center", className: "flex-1 w-full md:w-auto", children: [
15794
16088
  /* @__PURE__ */ jsx(StepCircle, { step, index }),
15795
16089
  /* @__PURE__ */ jsx(Typography, { variant: "h4", className: "text-center", children: step.title }),
@@ -16956,7 +17250,7 @@ var StatCard = ({
16956
17250
  const labelToUse = propLabel ?? propTitle;
16957
17251
  const eventBus = useEventBus();
16958
17252
  const { t } = useTranslate();
16959
- const handleActionClick = React88__default.useCallback(() => {
17253
+ const handleActionClick = React90__default.useCallback(() => {
16960
17254
  if (action?.event) {
16961
17255
  eventBus.emit(`UI:${action.event}`, {});
16962
17256
  }
@@ -16967,7 +17261,7 @@ var StatCard = ({
16967
17261
  const data = Array.isArray(entity) ? entity : entity ? [entity] : [];
16968
17262
  const isLoading = externalLoading ?? false;
16969
17263
  const error = externalError;
16970
- const computeMetricValue = React88__default.useCallback(
17264
+ const computeMetricValue = React90__default.useCallback(
16971
17265
  (metric, items) => {
16972
17266
  if (metric.value !== void 0) {
16973
17267
  return metric.value;
@@ -17006,7 +17300,7 @@ var StatCard = ({
17006
17300
  },
17007
17301
  []
17008
17302
  );
17009
- const schemaStats = React88__default.useMemo(() => {
17303
+ const schemaStats = React90__default.useMemo(() => {
17010
17304
  if (!metrics || metrics.length === 0) return null;
17011
17305
  return metrics.map((metric) => ({
17012
17306
  label: metric.label,
@@ -17014,7 +17308,7 @@ var StatCard = ({
17014
17308
  format: metric.format
17015
17309
  }));
17016
17310
  }, [metrics, data, computeMetricValue]);
17017
- const calculatedTrend = React88__default.useMemo(() => {
17311
+ const calculatedTrend = React90__default.useMemo(() => {
17018
17312
  if (manualTrend !== void 0) return manualTrend;
17019
17313
  if (previousValue === void 0 || currentValue === void 0)
17020
17314
  return void 0;
@@ -17178,7 +17472,7 @@ var PageHeader = ({
17178
17472
  info: "bg-info/10 text-info"
17179
17473
  };
17180
17474
  return /* @__PURE__ */ jsxs(Box, { className: cn("mb-6", className), children: [
17181
- 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(React88__default.Fragment, { children: [
17475
+ 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(React90__default.Fragment, { children: [
17182
17476
  idx > 0 && /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: "/" }),
17183
17477
  crumb.href ? /* @__PURE__ */ jsx(
17184
17478
  "a",
@@ -17704,7 +17998,7 @@ var FormSection = ({
17704
17998
  columns = 1,
17705
17999
  className
17706
18000
  }) => {
17707
- const [collapsed, setCollapsed] = React88__default.useState(defaultCollapsed);
18001
+ const [collapsed, setCollapsed] = React90__default.useState(defaultCollapsed);
17708
18002
  const { t } = useTranslate();
17709
18003
  const eventBus = useEventBus();
17710
18004
  const gridClass = {
@@ -17712,7 +18006,7 @@ var FormSection = ({
17712
18006
  2: "grid-cols-1 md:grid-cols-2",
17713
18007
  3: "grid-cols-1 md:grid-cols-2 lg:grid-cols-3"
17714
18008
  }[columns];
17715
- React88__default.useCallback(() => {
18009
+ React90__default.useCallback(() => {
17716
18010
  if (collapsible) {
17717
18011
  setCollapsed((prev) => !prev);
17718
18012
  eventBus.emit("UI:TOGGLE_COLLAPSE", { collapsed: !collapsed });
@@ -17924,7 +18218,7 @@ var Form = ({
17924
18218
  const normalizedInitialData = initialData ?? {};
17925
18219
  const resolvedEntity = entity && typeof entity === "object" && !Array.isArray(entity) ? entity : void 0;
17926
18220
  const entityName = typeof entity === "string" ? entity : resolvedEntity?.name;
17927
- const entityDerivedFields = React88__default.useMemo(() => {
18221
+ const entityDerivedFields = React90__default.useMemo(() => {
17928
18222
  if (fields && fields.length > 0) return void 0;
17929
18223
  if (!resolvedEntity) return void 0;
17930
18224
  return resolvedEntity.fields.map(
@@ -17943,14 +18237,14 @@ var Form = ({
17943
18237
  const conditionalFields = typeof conditionalFieldsRaw === "boolean" ? {} : conditionalFieldsRaw;
17944
18238
  const hiddenCalculations = typeof hiddenCalculationsRaw === "boolean" ? [] : hiddenCalculationsRaw;
17945
18239
  const violationTriggers = typeof violationTriggersRaw === "boolean" ? [] : violationTriggersRaw;
17946
- const [formData, setFormData] = React88__default.useState(
18240
+ const [formData, setFormData] = React90__default.useState(
17947
18241
  normalizedInitialData
17948
18242
  );
17949
- const [collapsedSections, setCollapsedSections] = React88__default.useState(
18243
+ const [collapsedSections, setCollapsedSections] = React90__default.useState(
17950
18244
  /* @__PURE__ */ new Set()
17951
18245
  );
17952
18246
  const shouldShowCancel = showCancel ?? (fields && fields.length > 0);
17953
- const evalContext = React88__default.useMemo(
18247
+ const evalContext = React90__default.useMemo(
17954
18248
  () => ({
17955
18249
  formValues: formData,
17956
18250
  globalVariables: externalContext?.globalVariables ?? {},
@@ -17959,13 +18253,13 @@ var Form = ({
17959
18253
  }),
17960
18254
  [formData, externalContext]
17961
18255
  );
17962
- React88__default.useEffect(() => {
18256
+ React90__default.useEffect(() => {
17963
18257
  const data = initialData;
17964
18258
  if (data && Object.keys(data).length > 0) {
17965
18259
  setFormData(data);
17966
18260
  }
17967
18261
  }, [initialData]);
17968
- const processCalculations = React88__default.useCallback(
18262
+ const processCalculations = React90__default.useCallback(
17969
18263
  (changedFieldId, newFormData) => {
17970
18264
  if (!hiddenCalculations.length) return;
17971
18265
  const context = {
@@ -17990,7 +18284,7 @@ var Form = ({
17990
18284
  },
17991
18285
  [hiddenCalculations, externalContext, eventBus]
17992
18286
  );
17993
- const checkViolations = React88__default.useCallback(
18287
+ const checkViolations = React90__default.useCallback(
17994
18288
  (changedFieldId, newFormData) => {
17995
18289
  if (!violationTriggers.length) return;
17996
18290
  const context = {
@@ -18027,7 +18321,7 @@ var Form = ({
18027
18321
  processCalculations(name, newFormData);
18028
18322
  checkViolations(name, newFormData);
18029
18323
  };
18030
- const isFieldVisible = React88__default.useCallback(
18324
+ const isFieldVisible = React90__default.useCallback(
18031
18325
  (fieldName) => {
18032
18326
  const condition = conditionalFields[fieldName];
18033
18327
  if (!condition) return true;
@@ -18035,7 +18329,7 @@ var Form = ({
18035
18329
  },
18036
18330
  [conditionalFields, evalContext]
18037
18331
  );
18038
- const isSectionVisible = React88__default.useCallback(
18332
+ const isSectionVisible = React90__default.useCallback(
18039
18333
  (section) => {
18040
18334
  if (!section.condition) return true;
18041
18335
  return Boolean(evaluateFormExpression(section.condition, evalContext));
@@ -18067,7 +18361,7 @@ var Form = ({
18067
18361
  eventBus.emit(`UI:${onCancel}`);
18068
18362
  }
18069
18363
  };
18070
- const renderField = React88__default.useCallback(
18364
+ const renderField = React90__default.useCallback(
18071
18365
  (field) => {
18072
18366
  const fieldName = field.name || field.field;
18073
18367
  if (!fieldName) return null;
@@ -18088,7 +18382,7 @@ var Form = ({
18088
18382
  [formData, isFieldVisible, relationsData, relationsLoading, isLoading]
18089
18383
  );
18090
18384
  const effectiveFields = entityDerivedFields ?? fields;
18091
- const normalizedFields = React88__default.useMemo(() => {
18385
+ const normalizedFields = React90__default.useMemo(() => {
18092
18386
  if (!effectiveFields || effectiveFields.length === 0) return [];
18093
18387
  return effectiveFields.map((field) => {
18094
18388
  if (typeof field === "string") {
@@ -18110,7 +18404,7 @@ var Form = ({
18110
18404
  return field;
18111
18405
  });
18112
18406
  }, [effectiveFields, resolvedEntity]);
18113
- const schemaFields = React88__default.useMemo(() => {
18407
+ const schemaFields = React90__default.useMemo(() => {
18114
18408
  if (normalizedFields.length === 0) return null;
18115
18409
  if (isDebugEnabled()) {
18116
18410
  debugGroup(`Form: ${entityName || "unknown"}`);
@@ -18120,7 +18414,7 @@ var Form = ({
18120
18414
  }
18121
18415
  return normalizedFields.map(renderField).filter(Boolean);
18122
18416
  }, [normalizedFields, renderField, entityName, conditionalFields]);
18123
- const sectionElements = React88__default.useMemo(() => {
18417
+ const sectionElements = React90__default.useMemo(() => {
18124
18418
  if (!sections || sections.length === 0) return null;
18125
18419
  return sections.map((section) => {
18126
18420
  if (!isSectionVisible(section)) {
@@ -19245,7 +19539,7 @@ var List = ({
19245
19539
  if (entity && typeof entity === "object" && "id" in entity) return [entity];
19246
19540
  return [];
19247
19541
  }, [entity]);
19248
- const getItemActions = React88__default.useCallback(
19542
+ const getItemActions = React90__default.useCallback(
19249
19543
  (item) => {
19250
19544
  if (!itemActions) return [];
19251
19545
  if (typeof itemActions === "function") {
@@ -20011,7 +20305,7 @@ var WizardContainer = ({
20011
20305
  const isCompleted = index < currentStep;
20012
20306
  const stepKey = step.id ?? step.tabId ?? `step-${index}`;
20013
20307
  const stepTitle = step.title ?? step.name ?? `Step ${index + 1}`;
20014
- return /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
20308
+ return /* @__PURE__ */ jsxs(React90__default.Fragment, { children: [
20015
20309
  /* @__PURE__ */ jsx(
20016
20310
  Button,
20017
20311
  {
@@ -21235,7 +21529,7 @@ var StateMachineView = ({
21235
21529
  style: { top: title ? 30 : 0 },
21236
21530
  children: [
21237
21531
  entity && /* @__PURE__ */ jsx(EntityBox, { entity, config }),
21238
- states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React88__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
21532
+ states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React90__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
21239
21533
  StateNode,
21240
21534
  {
21241
21535
  state,
@@ -21429,9 +21723,9 @@ function getEffectSummary(effects) {
21429
21723
  });
21430
21724
  return summaries.join(" | ");
21431
21725
  }
21432
- function extractOutputsFromTransitions(transitions2) {
21726
+ function extractOutputsFromTransitions(transitions) {
21433
21727
  const outputs = /* @__PURE__ */ new Set();
21434
- transitions2.forEach((t) => {
21728
+ transitions.forEach((t) => {
21435
21729
  if (t.effects) {
21436
21730
  t.effects.forEach((effect) => {
21437
21731
  if (Array.isArray(effect)) {
@@ -21456,7 +21750,7 @@ function getNodeRadius(stateName, config) {
21456
21750
  if (textLength > 6) return baseRadius + 8;
21457
21751
  return baseRadius;
21458
21752
  }
21459
- function calculateLayout(states, transitions2, options, config) {
21753
+ function calculateLayout(states, transitions, options, config) {
21460
21754
  const positions = {};
21461
21755
  const entityBoxWidth = options.hasEntity ? 200 : 0;
21462
21756
  const outputBoxWidth = options.hasOutputs ? 200 : 0;
@@ -21465,7 +21759,7 @@ function calculateLayout(states, transitions2, options, config) {
21465
21759
  states.filter((s) => s.isFinal);
21466
21760
  states.filter((s) => !s.isInitial && !s.isFinal);
21467
21761
  let maxLabelLength = 0;
21468
- transitions2.forEach((t) => {
21762
+ transitions.forEach((t) => {
21469
21763
  if (t.effects && t.effects.length > 0) {
21470
21764
  const summary = getEffectSummary(t.effects);
21471
21765
  maxLabelLength = Math.max(maxLabelLength, summary.length);
@@ -21491,7 +21785,7 @@ function calculateLayout(states, transitions2, options, config) {
21491
21785
  if (stateColumn[name] === void 0) {
21492
21786
  stateColumn[name] = col;
21493
21787
  }
21494
- transitions2.forEach((t) => {
21788
+ transitions.forEach((t) => {
21495
21789
  if (t.from === name && t.from !== t.to && !visited.has(t.to)) {
21496
21790
  queue.push({ name: t.to, col: col + 1 });
21497
21791
  }
@@ -21540,11 +21834,11 @@ function calculateLayout(states, transitions2, options, config) {
21540
21834
  });
21541
21835
  return { positions, width, height: height + 60 };
21542
21836
  }
21543
- function calculateTransitionPathData(from, to, transitions2, positions, config) {
21837
+ function calculateTransitionPathData(from, to, transitions, positions, config) {
21544
21838
  const fromPos = positions[from];
21545
21839
  const toPos = positions[to];
21546
21840
  if (!fromPos || !toPos) return null;
21547
- const relevantTransitions = transitions2.filter((t) => t.from === from && t.to === to);
21841
+ const relevantTransitions = transitions.filter((t) => t.from === from && t.to === to);
21548
21842
  if (relevantTransitions.length === 0) return null;
21549
21843
  const fromRadius = getNodeRadius(from, config);
21550
21844
  const toRadius = getNodeRadius(to, config);
@@ -21575,7 +21869,7 @@ function calculateTransitionPathData(from, to, transitions2, positions, config)
21575
21869
  const startY = fromPos.y + ny * fromRadius;
21576
21870
  const endX = toPos.x - nx * (toRadius + 5);
21577
21871
  const endY = toPos.y - ny * (toRadius + 5);
21578
- const hasReverse = transitions2.some((t) => t.from === to && t.to === from);
21872
+ const hasReverse = transitions.some((t) => t.from === to && t.to === from);
21579
21873
  const isReverse = hasReverse && from > to;
21580
21874
  const baseOffset = hasReverse ? 50 : 30;
21581
21875
  const curveOffset = baseOffset + (relevantTransitions.length > 1 ? 20 : 0);
@@ -21590,15 +21884,15 @@ function calculateTransitionPathData(from, to, transitions2, positions, config)
21590
21884
  }
21591
21885
  function renderStateMachineToDomData(stateMachine, options = {}, config = DEFAULT_CONFIG) {
21592
21886
  const states = stateMachine.states || [];
21593
- const transitions2 = stateMachine.transitions || [];
21887
+ const transitions = stateMachine.transitions || [];
21594
21888
  const title = options.title || "";
21595
21889
  const entity = options.entity;
21596
- const outputs = extractOutputsFromTransitions(transitions2);
21890
+ const outputs = extractOutputsFromTransitions(transitions);
21597
21891
  const layoutOptions = {
21598
21892
  hasEntity: !!entity,
21599
21893
  hasOutputs: outputs.length > 0
21600
21894
  };
21601
- const { positions, width, height } = calculateLayout(states, transitions2, layoutOptions, config);
21895
+ const { positions, width, height } = calculateLayout(states, transitions, layoutOptions, config);
21602
21896
  const domStates = Object.entries(positions).map(([name, pos]) => ({
21603
21897
  id: `state-${name}`,
21604
21898
  name,
@@ -21612,14 +21906,14 @@ function renderStateMachineToDomData(stateMachine, options = {}, config = DEFAUL
21612
21906
  const domPaths = [];
21613
21907
  const domLabels = [];
21614
21908
  const drawnPairs = /* @__PURE__ */ new Set();
21615
- transitions2.forEach((transition, idx) => {
21909
+ transitions.forEach((transition, idx) => {
21616
21910
  const pairKey = `${transition.from}->${transition.to}`;
21617
21911
  if (!drawnPairs.has(pairKey)) {
21618
21912
  drawnPairs.add(pairKey);
21619
21913
  const pathData2 = calculateTransitionPathData(
21620
21914
  transition.from,
21621
21915
  transition.to,
21622
- transitions2,
21916
+ transitions,
21623
21917
  positions,
21624
21918
  config
21625
21919
  );
@@ -21640,7 +21934,7 @@ function renderStateMachineToDomData(stateMachine, options = {}, config = DEFAUL
21640
21934
  const pathData = calculateTransitionPathData(
21641
21935
  transition.from,
21642
21936
  transition.to,
21643
- transitions2,
21937
+ transitions,
21644
21938
  positions,
21645
21939
  config
21646
21940
  );
@@ -24773,7 +25067,7 @@ function usePhysics2D(options = {}) {
24773
25067
  if (!state) return null;
24774
25068
  return { x: state.x, y: state.y };
24775
25069
  }, [manager]);
24776
- const getState = useCallback((unitId) => {
25070
+ const getState2 = useCallback((unitId) => {
24777
25071
  return manager.getState(unitId);
24778
25072
  }, [manager]);
24779
25073
  const applyForce = useCallback((unitId, fx, fy) => {
@@ -24810,7 +25104,7 @@ function usePhysics2D(options = {}) {
24810
25104
  registerUnit,
24811
25105
  unregisterUnit,
24812
25106
  getPosition,
24813
- getState,
25107
+ getState: getState2,
24814
25108
  applyForce,
24815
25109
  setVelocity,
24816
25110
  setPosition,
@@ -25681,7 +25975,7 @@ function LinearView({
25681
25975
  /* @__PURE__ */ jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
25682
25976
  const isDone = i < currentIdx;
25683
25977
  const isCurrent = i === currentIdx;
25684
- return /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
25978
+ return /* @__PURE__ */ jsxs(React90__default.Fragment, { children: [
25685
25979
  i > 0 && /* @__PURE__ */ jsx(
25686
25980
  Typography,
25687
25981
  {
@@ -26335,7 +26629,7 @@ function SequenceBar({
26335
26629
  onSlotRemove(index);
26336
26630
  }, [onSlotRemove, playing]);
26337
26631
  const paddedSlots = Array.from({ length: maxSlots }, (_, i) => slots[i]);
26338
- return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
26632
+ return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React90__default.Fragment, { children: [
26339
26633
  i > 0 && /* @__PURE__ */ jsx(
26340
26634
  Typography,
26341
26635
  {
@@ -27139,7 +27433,7 @@ function StateArchitectBoard({
27139
27433
  }) {
27140
27434
  const { emit } = useEventBus();
27141
27435
  const { t } = useTranslate();
27142
- const [transitions2, setTransitions] = useState(entity.transitions);
27436
+ const [transitions, setTransitions] = useState(entity.transitions);
27143
27437
  const [headerError, setHeaderError] = useState(false);
27144
27438
  const [playState, setPlayState] = useState("editing");
27145
27439
  const [currentState, setCurrentState] = useState(entity.initialState);
@@ -27185,13 +27479,13 @@ function StateArchitectBoard({
27185
27479
  description: entity.description,
27186
27480
  states: entity.states,
27187
27481
  currentState,
27188
- transitions: transitions2.map((t2) => ({
27482
+ transitions: transitions.map((t2) => ({
27189
27483
  from: t2.from,
27190
27484
  to: t2.to,
27191
27485
  event: t2.event,
27192
27486
  guardHint: t2.guardHint
27193
27487
  }))
27194
- }), [entity, currentState, transitions2]);
27488
+ }), [entity, currentState, transitions]);
27195
27489
  const handleTest = useCallback(() => {
27196
27490
  if (playState !== "editing") return;
27197
27491
  if (testEvent) emit(`UI:${testEvent}`, {});
@@ -27218,7 +27512,7 @@ function StateArchitectBoard({
27218
27512
  const testCase = entity.testCases[testIdx];
27219
27513
  let state = entity.initialState;
27220
27514
  for (const event of testCase.events) {
27221
- const trans = transitions2.find((t2) => t2.from === state && t2.event === event);
27515
+ const trans = transitions.find((t2) => t2.from === state && t2.event === event);
27222
27516
  if (trans) {
27223
27517
  state = trans.to;
27224
27518
  }
@@ -27234,7 +27528,7 @@ function StateArchitectBoard({
27234
27528
  timerRef.current = setTimeout(runNextTest, stepDurationMs);
27235
27529
  };
27236
27530
  timerRef.current = setTimeout(runNextTest, stepDurationMs);
27237
- }, [playState, transitions2, entity, stepDurationMs, testEvent, completeEvent, emit]);
27531
+ }, [playState, transitions, entity, stepDurationMs, testEvent, completeEvent, emit]);
27238
27532
  const handleTryAgain = useCallback(() => {
27239
27533
  if (timerRef.current) clearTimeout(timerRef.current);
27240
27534
  setPlayState("editing");
@@ -27256,13 +27550,13 @@ function StateArchitectBoard({
27256
27550
  name: entity.entityName,
27257
27551
  states: entity.states,
27258
27552
  initialState: entity.initialState,
27259
- transitions: transitions2.map((t2) => ({
27553
+ transitions: transitions.map((t2) => ({
27260
27554
  from: t2.from,
27261
27555
  to: t2.to,
27262
27556
  event: t2.event,
27263
27557
  ...t2.guardHint ? { guard: t2.guardHint } : {}
27264
27558
  }))
27265
- }), [entity, transitions2]);
27559
+ }), [entity, transitions]);
27266
27560
  return /* @__PURE__ */ jsxs(
27267
27561
  VStack,
27268
27562
  {
@@ -27307,7 +27601,7 @@ function StateArchitectBoard({
27307
27601
  /* @__PURE__ */ jsx("marker", { id: "arrowhead", markerWidth: "10", markerHeight: "7", refX: "10", refY: "3.5", orient: "auto", children: /* @__PURE__ */ jsx("polygon", { points: "0 0, 10 3.5, 0 7", fill: "var(--color-border)" }) }),
27308
27602
  /* @__PURE__ */ jsx("marker", { id: "arrowhead-active", markerWidth: "10", markerHeight: "7", refX: "10", refY: "3.5", orient: "auto", children: /* @__PURE__ */ jsx("polygon", { points: "0 0, 10 3.5, 0 7", fill: "var(--color-primary)" }) })
27309
27603
  ] }),
27310
- transitions2.map((t2) => {
27604
+ transitions.map((t2) => {
27311
27605
  const fromPos = positions[t2.from];
27312
27606
  const toPos = positions[t2.to];
27313
27607
  if (!fromPos || !toPos) return null;
@@ -27351,9 +27645,9 @@ function StateArchitectBoard({
27351
27645
  children: selectedState ? t("stateArchitect.addTransition", { state: selectedState }) : t("stateArchitect.addTransitionPrompt")
27352
27646
  }
27353
27647
  ) }),
27354
- transitions2.length > 0 && /* @__PURE__ */ jsxs(VStack, { gap: "xs", className: "p-3 rounded-lg bg-muted/50 border border-border", children: [
27355
- /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-muted-foreground font-medium", children: t("stateArchitect.transitions", { count: transitions2.length }) + ":" }),
27356
- transitions2.map((t2) => /* @__PURE__ */ jsxs(HStack, { className: "items-center text-xs", gap: "xs", children: [
27648
+ transitions.length > 0 && /* @__PURE__ */ jsxs(VStack, { gap: "xs", className: "p-3 rounded-lg bg-muted/50 border border-border", children: [
27649
+ /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-muted-foreground font-medium", children: t("stateArchitect.transitions", { count: transitions.length }) + ":" }),
27650
+ transitions.map((t2) => /* @__PURE__ */ jsxs(HStack, { className: "items-center text-xs", gap: "xs", children: [
27357
27651
  /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-foreground", children: t2.from }),
27358
27652
  /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: "\u2014[" }),
27359
27653
  /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-accent font-medium", children: t2.event }),
@@ -28823,7 +29117,7 @@ function InputPattern({
28823
29117
  className
28824
29118
  }) {
28825
29119
  const { emit } = useEventBus();
28826
- const [localValue, setLocalValue] = React88__default.useState(value);
29120
+ const [localValue, setLocalValue] = React90__default.useState(value);
28827
29121
  const handleChange = (e) => {
28828
29122
  setLocalValue(e.target.value);
28829
29123
  if (onChange) {
@@ -28860,7 +29154,7 @@ function TextareaPattern({
28860
29154
  className
28861
29155
  }) {
28862
29156
  const { emit } = useEventBus();
28863
- const [localValue, setLocalValue] = React88__default.useState(value);
29157
+ const [localValue, setLocalValue] = React90__default.useState(value);
28864
29158
  const handleChange = (e) => {
28865
29159
  setLocalValue(e.target.value);
28866
29160
  if (onChange) {
@@ -28891,7 +29185,7 @@ function SelectPattern({
28891
29185
  className
28892
29186
  }) {
28893
29187
  const { emit } = useEventBus();
28894
- const [localValue, setLocalValue] = React88__default.useState(value);
29188
+ const [localValue, setLocalValue] = React90__default.useState(value);
28895
29189
  const handleChange = (e) => {
28896
29190
  setLocalValue(e.target.value);
28897
29191
  if (onChange) {
@@ -28920,7 +29214,7 @@ function CheckboxPattern({
28920
29214
  className
28921
29215
  }) {
28922
29216
  const { emit } = useEventBus();
28923
- const [localChecked, setLocalChecked] = React88__default.useState(checked);
29217
+ const [localChecked, setLocalChecked] = React90__default.useState(checked);
28924
29218
  const handleChange = (e) => {
28925
29219
  setLocalChecked(e.target.checked);
28926
29220
  if (onChange) {
@@ -30802,7 +31096,7 @@ var DocumentViewer = ({
30802
31096
  };
30803
31097
  DocumentViewer.displayName = "DocumentViewer";
30804
31098
  function extractTitle(children) {
30805
- if (!React88__default.isValidElement(children)) return void 0;
31099
+ if (!React90__default.isValidElement(children)) return void 0;
30806
31100
  const props = children.props;
30807
31101
  if (typeof props.title === "string") {
30808
31102
  return props.title;
@@ -31400,7 +31694,7 @@ var MediaGallery = ({
31400
31694
  [selectable, selectedItems, selectionEvent, eventBus]
31401
31695
  );
31402
31696
  const entityData = Array.isArray(entity) ? entity : [];
31403
- const items = React88__default.useMemo(() => {
31697
+ const items = React90__default.useMemo(() => {
31404
31698
  if (propItems) return propItems;
31405
31699
  if (entityData.length === 0) return [];
31406
31700
  return entityData.map((record, idx) => ({
@@ -31562,7 +31856,7 @@ var MediaGallery = ({
31562
31856
  };
31563
31857
  MediaGallery.displayName = "MediaGallery";
31564
31858
  function extractTitle2(children) {
31565
- if (!React88__default.isValidElement(children)) return void 0;
31859
+ if (!React90__default.isValidElement(children)) return void 0;
31566
31860
  const props = children.props;
31567
31861
  if (typeof props.title === "string") {
31568
31862
  return props.title;
@@ -31599,35 +31893,35 @@ ModalSlot.displayName = "ModalSlot";
31599
31893
 
31600
31894
  // lib/traitRegistry.ts
31601
31895
  var traits = /* @__PURE__ */ new Map();
31602
- var listeners2 = /* @__PURE__ */ new Set();
31896
+ var listeners = /* @__PURE__ */ new Set();
31603
31897
  function getAllTraits() {
31604
31898
  return Array.from(traits.values());
31605
31899
  }
31606
31900
  function subscribeToTraitChanges(listener) {
31607
- listeners2.add(listener);
31608
- return () => listeners2.delete(listener);
31901
+ listeners.add(listener);
31902
+ return () => listeners.delete(listener);
31609
31903
  }
31610
31904
 
31611
31905
  // lib/tickRegistry.ts
31612
31906
  var ticks = /* @__PURE__ */ new Map();
31613
- var listeners3 = /* @__PURE__ */ new Set();
31907
+ var listeners2 = /* @__PURE__ */ new Set();
31614
31908
  function getAllTicks() {
31615
31909
  return Array.from(ticks.values());
31616
31910
  }
31617
31911
  function subscribeToTickChanges(listener) {
31618
- listeners3.add(listener);
31619
- return () => listeners3.delete(listener);
31912
+ listeners2.add(listener);
31913
+ return () => listeners2.delete(listener);
31620
31914
  }
31621
31915
 
31622
31916
  // lib/guardRegistry.ts
31623
31917
  var guardHistory = [];
31624
- var listeners4 = /* @__PURE__ */ new Set();
31918
+ var listeners3 = /* @__PURE__ */ new Set();
31625
31919
  function getGuardHistory() {
31626
31920
  return [...guardHistory];
31627
31921
  }
31628
31922
  function subscribeToGuardChanges(listener) {
31629
- listeners4.add(listener);
31630
- return () => listeners4.delete(listener);
31923
+ listeners3.add(listener);
31924
+ return () => listeners3.delete(listener);
31631
31925
  }
31632
31926
  function getEntitySnapshot() {
31633
31927
  {
@@ -31637,18 +31931,18 @@ function getEntitySnapshot() {
31637
31931
 
31638
31932
  // lib/debugRegistry.ts
31639
31933
  var events = [];
31640
- var listeners5 = /* @__PURE__ */ new Set();
31934
+ var listeners4 = /* @__PURE__ */ new Set();
31641
31935
  function getDebugEvents() {
31642
31936
  return [...events];
31643
31937
  }
31644
31938
  function subscribeToDebugEvents(listener) {
31645
- listeners5.add(listener);
31646
- return () => listeners5.delete(listener);
31939
+ listeners4.add(listener);
31940
+ return () => listeners4.delete(listener);
31647
31941
  }
31648
31942
 
31649
31943
  // components/organisms/debug/hooks/useDebugData.ts
31650
31944
  function useDebugData() {
31651
- const [data, setData] = React88.useState(() => ({
31945
+ const [data, setData] = React90.useState(() => ({
31652
31946
  traits: [],
31653
31947
  ticks: [],
31654
31948
  guards: [],
@@ -31662,7 +31956,7 @@ function useDebugData() {
31662
31956
  },
31663
31957
  lastUpdate: Date.now()
31664
31958
  }));
31665
- React88.useEffect(() => {
31959
+ React90.useEffect(() => {
31666
31960
  const updateData = () => {
31667
31961
  setData({
31668
31962
  traits: getAllTraits(),
@@ -31706,14 +32000,14 @@ function useDebugData() {
31706
32000
 
31707
32001
  // lib/debugUtils.ts
31708
32002
  var DEBUG_STORAGE_KEY = "orbital-debug";
31709
- var listeners6 = /* @__PURE__ */ new Set();
32003
+ var listeners5 = /* @__PURE__ */ new Set();
31710
32004
  function isDebugEnabled2() {
31711
32005
  if (typeof window === "undefined") return false;
31712
32006
  return localStorage.getItem(DEBUG_STORAGE_KEY) === "true";
31713
32007
  }
31714
32008
  function onDebugToggle(listener) {
31715
- listeners6.add(listener);
31716
- return () => listeners6.delete(listener);
32009
+ listeners5.add(listener);
32010
+ return () => listeners5.delete(listener);
31717
32011
  }
31718
32012
  function TraitsTab({ traits: traits2 }) {
31719
32013
  if (traits2.length === 0) {
@@ -31931,15 +32225,15 @@ var TYPE_BADGES = {
31931
32225
  state: { variant: "danger", icon: "\u{1F4CA}" }
31932
32226
  };
31933
32227
  function EventFlowTab({ events: events2 }) {
31934
- const [filter, setFilter] = React88.useState("all");
31935
- const containerRef = React88.useRef(null);
31936
- const [autoScroll, setAutoScroll] = React88.useState(true);
31937
- React88.useEffect(() => {
32228
+ const [filter, setFilter] = React90.useState("all");
32229
+ const containerRef = React90.useRef(null);
32230
+ const [autoScroll, setAutoScroll] = React90.useState(true);
32231
+ React90.useEffect(() => {
31938
32232
  if (autoScroll && containerRef.current) {
31939
32233
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
31940
32234
  }
31941
32235
  }, [events2.length, autoScroll]);
31942
- const filteredEvents = React88.useMemo(() => {
32236
+ const filteredEvents = React90.useMemo(() => {
31943
32237
  if (filter === "all") return events2;
31944
32238
  return events2.filter((e) => e.type === filter);
31945
32239
  }, [events2, filter]);
@@ -32038,7 +32332,7 @@ function EventFlowTab({ events: events2 }) {
32038
32332
  }
32039
32333
  EventFlowTab.displayName = "EventFlowTab";
32040
32334
  function GuardsPanel({ guards }) {
32041
- const [filter, setFilter] = React88.useState("all");
32335
+ const [filter, setFilter] = React90.useState("all");
32042
32336
  if (guards.length === 0) {
32043
32337
  return /* @__PURE__ */ jsx(
32044
32338
  EmptyState,
@@ -32051,7 +32345,7 @@ function GuardsPanel({ guards }) {
32051
32345
  }
32052
32346
  const passedCount = guards.filter((g) => g.result).length;
32053
32347
  const failedCount = guards.length - passedCount;
32054
- const filteredGuards = React88.useMemo(() => {
32348
+ const filteredGuards = React90.useMemo(() => {
32055
32349
  if (filter === "all") return guards;
32056
32350
  if (filter === "passed") return guards.filter((g) => g.result);
32057
32351
  return guards.filter((g) => !g.result);
@@ -32116,8 +32410,8 @@ var STATUS_CONFIG = {
32116
32410
  warn: { variant: "warning", icon: "!", label: "WARN" },
32117
32411
  pending: { variant: "default", icon: "?", label: "PENDING" }
32118
32412
  };
32119
- function VerificationTab({ checks: checks2, summary }) {
32120
- if (checks2.length === 0) {
32413
+ function VerificationTab({ checks, summary }) {
32414
+ if (checks.length === 0) {
32121
32415
  return /* @__PURE__ */ jsx(
32122
32416
  EmptyState,
32123
32417
  {
@@ -32128,7 +32422,7 @@ function VerificationTab({ checks: checks2, summary }) {
32128
32422
  );
32129
32423
  }
32130
32424
  const sortOrder = { fail: 0, warn: 1, pending: 2, pass: 3 };
32131
- const sorted = [...checks2].sort(
32425
+ const sorted = [...checks].sort(
32132
32426
  (a, b) => (sortOrder[a.status] ?? 4) - (sortOrder[b.status] ?? 4)
32133
32427
  );
32134
32428
  return /* @__PURE__ */ jsxs("div", { className: "debug-tab debug-tab--verification", children: [
@@ -32194,16 +32488,16 @@ function EffectBadge({ effect }) {
32194
32488
  effect.error && /* @__PURE__ */ jsx("span", { className: "text-red-500 truncate max-w-[120px]", title: effect.error, children: effect.error })
32195
32489
  ] });
32196
32490
  }
32197
- function TransitionTimeline({ transitions: transitions2 }) {
32198
- const containerRef = React88.useRef(null);
32199
- const [autoScroll, setAutoScroll] = React88.useState(true);
32200
- const [expandedId, setExpandedId] = React88.useState(null);
32201
- React88.useEffect(() => {
32491
+ function TransitionTimeline({ transitions }) {
32492
+ const containerRef = React90.useRef(null);
32493
+ const [autoScroll, setAutoScroll] = React90.useState(true);
32494
+ const [expandedId, setExpandedId] = React90.useState(null);
32495
+ React90.useEffect(() => {
32202
32496
  if (autoScroll && containerRef.current) {
32203
32497
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
32204
32498
  }
32205
- }, [transitions2.length, autoScroll]);
32206
- if (transitions2.length === 0) {
32499
+ }, [transitions.length, autoScroll]);
32500
+ if (transitions.length === 0) {
32207
32501
  return /* @__PURE__ */ jsx(
32208
32502
  EmptyState,
32209
32503
  {
@@ -32222,11 +32516,11 @@ function TransitionTimeline({ transitions: transitions2 }) {
32222
32516
  second: "2-digit"
32223
32517
  }) + "." + String(d.getMilliseconds()).padStart(3, "0");
32224
32518
  };
32225
- const sorted = [...transitions2].reverse();
32519
+ const sorted = [...transitions].reverse();
32226
32520
  return /* @__PURE__ */ jsxs("div", { className: "debug-tab debug-tab--timeline", children: [
32227
32521
  /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-2", children: [
32228
32522
  /* @__PURE__ */ jsxs(Typography, { variant: "small", className: "text-gray-500", children: [
32229
- transitions2.length,
32523
+ transitions.length,
32230
32524
  " transitions recorded"
32231
32525
  ] }),
32232
32526
  /* @__PURE__ */ jsxs("label", { className: "flex items-center gap-1 text-xs text-gray-500 cursor-pointer", children: [
@@ -32459,9 +32753,9 @@ function getAllEvents(traits2) {
32459
32753
  }
32460
32754
  function EventDispatcherTab({ traits: traits2, schema }) {
32461
32755
  const eventBus = useEventBus();
32462
- const [log, setLog] = React88.useState([]);
32463
- const prevStatesRef = React88.useRef(/* @__PURE__ */ new Map());
32464
- React88.useEffect(() => {
32756
+ const [log, setLog] = React90.useState([]);
32757
+ const prevStatesRef = React90.useRef(/* @__PURE__ */ new Map());
32758
+ React90.useEffect(() => {
32465
32759
  for (const trait of traits2) {
32466
32760
  const prev = prevStatesRef.current.get(trait.id);
32467
32761
  if (prev && prev !== trait.currentState) {
@@ -32504,7 +32798,7 @@ function EventDispatcherTab({ traits: traits2, schema }) {
32504
32798
  ] }),
32505
32799
  /* @__PURE__ */ jsxs("div", { className: "mb-3", children: [
32506
32800
  /* @__PURE__ */ jsx(Typography, { variant: "small", weight: "medium", className: "text-gray-500 mb-1", children: "Available Events" }),
32507
- availableEvents.length === 0 ? /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-gray-400 italic", children: "No transitions from current state" }) : /* @__PURE__ */ jsx(Stack, { gap: "xs", children: availableEvents.map(({ event, transitions: transitions2 }) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
32801
+ availableEvents.length === 0 ? /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-gray-400 italic", children: "No transitions from current state" }) : /* @__PURE__ */ jsx(Stack, { gap: "xs", children: availableEvents.map(({ event, transitions }) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
32508
32802
  /* @__PURE__ */ jsx(
32509
32803
  Button,
32510
32804
  {
@@ -32515,8 +32809,8 @@ function EventDispatcherTab({ traits: traits2, schema }) {
32515
32809
  children: event
32516
32810
  }
32517
32811
  ),
32518
- /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-gray-500", children: transitions2.map((t) => `${t.from} -> ${t.to}`).join(", ") }),
32519
- transitions2.some((t) => t.guard) && /* @__PURE__ */ jsx(Badge, { variant: "warning", size: "sm", children: "guarded" })
32812
+ /* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-gray-500", children: transitions.map((t) => `${t.from} -> ${t.to}`).join(", ") }),
32813
+ transitions.some((t) => t.guard) && /* @__PURE__ */ jsx(Badge, { variant: "warning", size: "sm", children: "guarded" })
32520
32814
  ] }, event)) })
32521
32815
  ] }),
32522
32816
  unavailableEvents.length > 0 && /* @__PURE__ */ jsxs("div", { className: "mb-3", children: [
@@ -32544,10 +32838,10 @@ function RuntimeDebugger({
32544
32838
  defaultTab,
32545
32839
  schema
32546
32840
  }) {
32547
- const [isCollapsed, setIsCollapsed] = React88.useState(defaultCollapsed);
32548
- const [isVisible, setIsVisible] = React88.useState(mode === "inline" || isDebugEnabled2());
32841
+ const [isCollapsed, setIsCollapsed] = React90.useState(mode === "verify" ? true : defaultCollapsed);
32842
+ const [isVisible, setIsVisible] = React90.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
32549
32843
  const debugData = useDebugData();
32550
- React88.useEffect(() => {
32844
+ React90.useEffect(() => {
32551
32845
  if (mode === "inline") return;
32552
32846
  return onDebugToggle((enabled) => {
32553
32847
  setIsVisible(enabled);
@@ -32556,7 +32850,7 @@ function RuntimeDebugger({
32556
32850
  }
32557
32851
  });
32558
32852
  }, [mode]);
32559
- React88.useEffect(() => {
32853
+ React90.useEffect(() => {
32560
32854
  if (mode === "inline") return;
32561
32855
  const handleKeyDown = (e) => {
32562
32856
  if (e.key === "`" && isVisible) {
@@ -32683,6 +32977,56 @@ function RuntimeDebugger({
32683
32977
  }
32684
32978
  );
32685
32979
  }
32980
+ if (mode === "verify") {
32981
+ const traitStates = debugData.traits.map((t) => `${t.name}:${t.currentState}`).join(" | ");
32982
+ return /* @__PURE__ */ jsxs(
32983
+ "div",
32984
+ {
32985
+ className: cn(
32986
+ "runtime-debugger runtime-debugger--verify",
32987
+ "h-[35vh] flex flex-col bg-gray-900 text-white border-t-2 border-cyan-500",
32988
+ className
32989
+ ),
32990
+ "data-testid": "debugger-verify",
32991
+ children: [
32992
+ /* @__PURE__ */ jsxs("div", { className: "px-3 py-1.5 flex items-center gap-3 text-xs font-mono border-b border-gray-700 flex-shrink-0", children: [
32993
+ /* @__PURE__ */ jsx(Badge, { variant: failedChecks > 0 ? "danger" : "success", size: "sm", children: failedChecks > 0 ? `${failedChecks} fail` : "OK" }),
32994
+ /* @__PURE__ */ jsxs("span", { className: "text-gray-400", children: [
32995
+ verification.transitions.length,
32996
+ " transitions"
32997
+ ] }),
32998
+ traitStates && /* @__PURE__ */ jsx("span", { className: "text-cyan-400 truncate max-w-[400px]", children: traitStates })
32999
+ ] }),
33000
+ /* @__PURE__ */ jsx("div", { className: "flex-1 overflow-y-auto", children: /* @__PURE__ */ jsx("div", { className: "px-2 py-1", children: verification.transitions.length === 0 ? /* @__PURE__ */ jsx("div", { className: "text-gray-500 text-xs font-mono py-2 text-center", children: "Waiting for transitions..." }) : /* @__PURE__ */ jsx("div", { className: "space-y-0.5", children: verification.transitions.map((trace) => {
33001
+ const hasFailedEffects = trace.effects.some((e) => e.status === "failed");
33002
+ return /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2 text-xs font-mono py-0.5 border-b border-gray-800 last:border-0", children: [
33003
+ /* @__PURE__ */ jsx("span", { className: cn(
33004
+ "mt-1.5 w-1.5 h-1.5 rounded-full flex-shrink-0",
33005
+ hasFailedEffects ? "bg-red-500" : "bg-green-500"
33006
+ ) }),
33007
+ /* @__PURE__ */ jsx(Badge, { variant: "info", size: "sm", className: "flex-shrink-0", children: trace.event }),
33008
+ /* @__PURE__ */ jsxs("span", { className: "text-gray-400 flex-shrink-0", children: [
33009
+ trace.from,
33010
+ " ",
33011
+ "\u2192",
33012
+ " ",
33013
+ trace.to
33014
+ ] }),
33015
+ /* @__PURE__ */ jsx("span", { className: "flex flex-wrap gap-1 ml-1", children: trace.effects.map((eff, i) => /* @__PURE__ */ jsxs("span", { className: cn(
33016
+ "px-1 rounded text-[10px]",
33017
+ eff.status === "executed" ? "bg-green-900/50 text-green-400" : eff.status === "failed" ? "bg-red-900/50 text-red-400" : "bg-yellow-900/50 text-yellow-400"
33018
+ ), children: [
33019
+ eff.status === "executed" ? "\u2713" : eff.status === "failed" ? "\u2717" : "-",
33020
+ " ",
33021
+ eff.type,
33022
+ eff.args.length > 0 && /* @__PURE__ */ jsx("span", { className: "text-gray-500 ml-0.5", children: JSON.stringify(eff.args).slice(0, 30) })
33023
+ ] }, i)) })
33024
+ ] }, trace.id);
33025
+ }) }) }) })
33026
+ ]
33027
+ }
33028
+ );
33029
+ }
32686
33030
  return /* @__PURE__ */ jsx(
32687
33031
  "div",
32688
33032
  {
@@ -32953,7 +33297,7 @@ var Timeline = ({
32953
33297
  }) => {
32954
33298
  const { t } = useTranslate();
32955
33299
  const entityData = Array.isArray(entity) ? entity : [];
32956
- const items = React88__default.useMemo(() => {
33300
+ const items = React90__default.useMemo(() => {
32957
33301
  if (propItems) return propItems;
32958
33302
  if (entityData.length === 0) return [];
32959
33303
  return entityData.map((record, idx) => {
@@ -33055,7 +33399,7 @@ var Timeline = ({
33055
33399
  };
33056
33400
  Timeline.displayName = "Timeline";
33057
33401
  function extractToastProps(children) {
33058
- if (!React88__default.isValidElement(children)) {
33402
+ if (!React90__default.isValidElement(children)) {
33059
33403
  if (typeof children === "string") {
33060
33404
  return { message: children };
33061
33405
  }
@@ -33086,7 +33430,7 @@ var ToastSlot = ({
33086
33430
  eventBus.emit("UI:CLOSE");
33087
33431
  };
33088
33432
  if (!isVisible) return null;
33089
- const isCustomContent = React88__default.isValidElement(children) && !message;
33433
+ const isCustomContent = React90__default.isValidElement(children) && !message;
33090
33434
  return /* @__PURE__ */ jsx(Box, { className: "fixed bottom-4 right-4 z-50", children: isCustomContent ? children : /* @__PURE__ */ jsx(
33091
33435
  Toast,
33092
33436
  {
@@ -33128,12 +33472,12 @@ WorldMapTemplate.displayName = "WorldMapTemplate";
33128
33472
 
33129
33473
  // components/organisms/component-registry.generated.ts
33130
33474
  function lazyThree(name, loader) {
33131
- const Lazy = React88__default.lazy(() => loader().then((m) => ({ default: m[name] })));
33475
+ const Lazy = React90__default.lazy(() => loader().then((m) => ({ default: m[name] })));
33132
33476
  function ThreeWrapper(props) {
33133
- return React88__default.createElement(
33134
- React88__default.Suspense,
33477
+ return React90__default.createElement(
33478
+ React90__default.Suspense,
33135
33479
  { fallback: null },
33136
- React88__default.createElement(Lazy, props)
33480
+ React90__default.createElement(Lazy, props)
33137
33481
  );
33138
33482
  }
33139
33483
  ThreeWrapper.displayName = `Lazy(${name})`;
@@ -33421,7 +33765,7 @@ function SuspenseConfigProvider({
33421
33765
  config,
33422
33766
  children
33423
33767
  }) {
33424
- return React88__default.createElement(
33768
+ return React90__default.createElement(
33425
33769
  SuspenseConfigContext.Provider,
33426
33770
  { value: config },
33427
33771
  children
@@ -35804,7 +36148,7 @@ function EntityDataProvider({
35804
36148
  adapter,
35805
36149
  children
35806
36150
  }) {
35807
- return React88__default.createElement(
36151
+ return React90__default.createElement(
35808
36152
  EntityDataContext.Provider,
35809
36153
  { value: adapter },
35810
36154
  children
@@ -36383,14 +36727,14 @@ function useEntityMutations(entityName, options) {
36383
36727
 
36384
36728
  // stores/entityStore.ts
36385
36729
  var entities = /* @__PURE__ */ new Map();
36386
- var listeners7 = /* @__PURE__ */ new Set();
36730
+ var listeners6 = /* @__PURE__ */ new Set();
36387
36731
  var idCounter2 = 0;
36388
36732
  function subscribe(listener) {
36389
- listeners7.add(listener);
36390
- return () => listeners7.delete(listener);
36733
+ listeners6.add(listener);
36734
+ return () => listeners6.delete(listener);
36391
36735
  }
36392
36736
  function notify() {
36393
- listeners7.forEach((listener) => listener());
36737
+ listeners6.forEach((listener) => listener());
36394
36738
  }
36395
36739
  function getEntity(id) {
36396
36740
  return entities.get(id);
@@ -36630,4 +36974,4 @@ function useGitHubBranches(owner, repo, enabled = true) {
36630
36974
  });
36631
36975
  }
36632
36976
 
36633
- export { ALL_PRESETS, AR_BOOK_FIELDS, AboutPageTemplate, Accordion, ActionButton, ActionButtons, Card2 as ActionCard, ActionPalette, ActionTile, Alert, AnimatedCounter, ArticleSection, AuthLayout, Avatar, Badge, BattleBoard, BattleTemplate, BookChapterView, BookCoverPage, BookNavBar, BookTableOfContents, BookViewer, Box, Breadcrumb, BuilderBoard, Button, ButtonGroup, CTABanner, CalendarGrid, CanvasEffect, Card, CardBody, CardContent, CardFooter, CardGrid, CardHeader, CardTitle, Carousel, CaseStudyCard, CaseStudyOrganism, CastleBoard, CastleTemplate, Center, Chart, ChartLegend, Checkbox, ChoiceButton, ClassifierBoard, CodeBlock, CodeExample, CodeView, CodeViewer, CollapsibleSection, CombatLog, ComboCounter, CommunityLinks, ConditionalWrapper, ConfettiEffect, ConfirmDialog, Container, ContentRenderer, ContentSection, ControlButton, CounterTemplate, CraftingRecipe, DEFAULT_SLOTS, DIAMOND_TOP_Y, DPad, DamageNumber, DashboardGrid, DashboardLayout, DataGrid, DataList, DataTable, DateRangeSelector, DayCell, DebuggerBoard, DetailPanel, DialogueBox, DialogueBubble, Divider, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, ENTITY_EVENTS, EdgeDecoration, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EmptyState, EnemyPlate, EntityDataProvider, EntityDisplayEvents, ErrorBoundary, ErrorState, EventHandlerBoard, EventLog, FEATURE_COLORS, FEATURE_TYPES, FLOOR_HEIGHT, FeatureCard, FeatureDetailPageTemplate, FeatureGrid, FeatureGridOrganism, FilterGroup, Flex, FlipCard, FlipContainer, FloatingActionButton, Form, FormActions, FormField, FormLayout, FormSection, FormSectionHeader, GameAudioContext, GameAudioProvider, GameAudioToggle, GameCanvas2D, GameHud, GameMenu, GameOverScreen, GameShell, GameTemplate, GenericAppTemplate, GeometricPattern, GraphCanvas, GraphView, Grid, HStack, Header, Heading, HealthBar, HealthPanel, HeroOrganism, HeroSection, I18nProvider, IDENTITY_BOOK_FIELDS, Icon, InfiniteScrollSentinel, Input, InputGroup, InstallBox, InventoryGrid, InventoryPanel, IsometricCanvas, ItemSlot, JazariStateMachine, Label, LandingPageTemplate, LawReferenceTooltip, Lightbox, LineChart, List, LoadingState, MapView, MarkdownContent, MarketingStatCard, MasterDetail, MediaGallery, Menu, Meter, MiniMap, Modal, ModalSlot, Navigation, NegotiatorBoard, NotifyListener, NumberStepper, ObjectRulePanel, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, Pagination, PatternTile, PhysicsManager, PlatformerCanvas, Popover, PowerupSlots, PricingCard, PricingGrid, PricingOrganism, PricingPageTemplate, ProgressBar, ProgressDots, PullToRefresh, QuestTracker, QuizBlock, Radio, RangeSlider, RelationSelect, RepeatableFormSection, ResourceBar, ResourceCounter, RuleEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, ScoreBoard, ScoreDisplay, SearchInput, Section, SectionHeader, Select, SequenceBar, SequencerBoard, ServiceCatalog, ShowcaseCard, ShowcaseOrganism, SidePanel, Sidebar, SignaturePad, SimpleGrid, SimulationCanvas, SimulationControls, SimulationGraph, SimulatorBoard, Skeleton, SlotContentRenderer, SocialProof, SortableList, Spacer, Spinner, Split, SplitPane, SplitSection, Sprite, Stack, StarRating, StatBadge, StatCard, StatDisplay, StateArchitectBoard, StateIndicator, StateMachineView, StateNode2 as StateNode, StatsGrid, StatsOrganism, StatusBar, StatusDot, StatusEffect, StepFlow, StepFlowOrganism, SwipeableRow, Switch, TERRAIN_COLORS, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, Table, Tabs, TagCloud, TeamCard, TeamOrganism, TerrainPalette, Text, TextHighlight, Textarea, ThemeSelector, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TraitSlot, TraitStateViewer, TransitionArrow, TrendIndicator, TurnIndicator, TurnPanel, TypewriterText, Typography, UISlotComponent, UISlotRenderer, UncontrolledBattleBoard, UnitCommandBar, UploadDropZone, VStack, VariablePanel, ViolationAlert, WaypointMarker, WizardContainer, WizardNavigation, WizardProgress, WorldMapBoard, WorldMapTemplate, XPBar, applyTemporaryEffect, calculateAttackTargets, calculateDamage, calculateValidMoves, clearEntities, cn, combatAnimations, combatClasses, combatEffects, createInitialGameState, createTranslate, createUnitAnimationState, drawSprite, entityDataKeys, generateCombatMessage, getAllEntities, getByType, getCurrentFrame, getEntity, getSingleton, getTileDimensions, inferDirection, isoToScreen, mapBookData, parseQueryBinding, pendulum, projectileMotion, removeEntity, resolveFieldMap, resolveFrame, resolveSheetDirection, screenToIso, spawnEntity, springOscillator, tickAnimationState, transitionAnimation, updateEntity, updateSingleton, useAgentChat, useAuthContext, useBattleState, useCamera, useCompile, useConnectGitHub, useCreateEntity, useDeepAgentGeneration, useDeleteEntity, useDisconnectGitHub, useDragReorder, useEmitEvent, useEntities, useEntitiesByType, useEntity, useEntity2 as useEntityById, useEntityDataAdapter, useEntityDetail, useEntityList, useEntityListSuspense, useEntityMutations, useEntitySuspense, useEventBus, useEventListener, useExtensions, useFileEditor, useFileSystem, useGameAudio, useGameAudioContext, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useImageCache, useInfiniteScroll, useInput, useLongPress, useOrbitalHistory, useOrbitalMutations, usePhysics, usePhysics2D, usePinchZoom, usePlayer, usePreview, usePullToRefresh, useQuerySingleton, useResolvedEntity, useSelectedEntity, useSendOrbitalEvent, useSingletonEntity, useSpriteAnimations, useSwipeGesture, useTranslate, useUIEvents, useUISlotManager, useUpdateEntity, useValidation };
36977
+ export { ALL_PRESETS, AR_BOOK_FIELDS, AboutPageTemplate, Accordion, ActionButton, ActionButtons, Card2 as ActionCard, ActionPalette, ActionTile, Alert, AnimatedCounter, AnimatedGraphic, AnimatedReveal, ArticleSection, AuthLayout, Avatar, Badge, BattleBoard, BattleTemplate, BookChapterView, BookCoverPage, BookNavBar, BookTableOfContents, BookViewer, Box, Breadcrumb, BuilderBoard, Button, ButtonGroup, CTABanner, CalendarGrid, CanvasEffect, Card, CardBody, CardContent, CardFooter, CardGrid, CardHeader, CardTitle, Carousel, CaseStudyCard, CaseStudyOrganism, CastleBoard, CastleTemplate, Center, Chart, ChartLegend, Checkbox, ChoiceButton, ClassifierBoard, CodeBlock, CodeExample, CodeView, CodeViewer, CollapsibleSection, CombatLog, ComboCounter, CommunityLinks, ConditionalWrapper, ConfettiEffect, ConfirmDialog, Container, ContentRenderer, ContentSection, ControlButton, CounterTemplate, CraftingRecipe, DEFAULT_SLOTS, DIAMOND_TOP_Y, DPad, DamageNumber, DashboardGrid, DashboardLayout, DataGrid, DataList, DataTable, DateRangeSelector, DayCell, DebuggerBoard, DetailPanel, DialogueBox, DialogueBubble, Divider, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, ENTITY_EVENTS, EdgeDecoration, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EmptyState, EnemyPlate, EntityDataProvider, EntityDisplayEvents, ErrorBoundary, ErrorState, EventHandlerBoard, EventLog, FEATURE_COLORS, FEATURE_TYPES, FLOOR_HEIGHT, FeatureCard, FeatureDetailPageTemplate, FeatureGrid, FeatureGridOrganism, FilterGroup, Flex, FlipCard, FlipContainer, FloatingActionButton, Form, FormActions, FormField, FormLayout, FormSection, FormSectionHeader, GameAudioContext, GameAudioProvider, GameAudioToggle, GameCanvas2D, GameHud, GameMenu, GameOverScreen, GameShell, GameTemplate, GenericAppTemplate, GeometricPattern, GraphCanvas, GraphView, Grid, HStack, Header, Heading, HealthBar, HealthPanel, HeroOrganism, HeroSection, I18nProvider, IDENTITY_BOOK_FIELDS, Icon, InfiniteScrollSentinel, Input, InputGroup, InstallBox, InventoryGrid, InventoryPanel, IsometricCanvas, ItemSlot, JazariStateMachine, Label, LandingPageTemplate, LawReferenceTooltip, Lightbox, LineChart, List, LoadingState, MapView, MarkdownContent, MarketingStatCard, MasterDetail, MediaGallery, Menu, Meter, MiniMap, Modal, ModalSlot, Navigation, NegotiatorBoard, NotifyListener, NumberStepper, ObjectRulePanel, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, Pagination, PatternTile, PhysicsManager, PlatformerCanvas, Popover, PowerupSlots, PricingCard, PricingGrid, PricingOrganism, PricingPageTemplate, ProgressBar, ProgressDots, PullToRefresh, QuestTracker, QuizBlock, Radio, RangeSlider, RelationSelect, RepeatableFormSection, ResourceBar, ResourceCounter, RuleEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, ScoreBoard, ScoreDisplay, SearchInput, Section, SectionHeader, Select, SequenceBar, SequencerBoard, ServiceCatalog, ShowcaseCard, ShowcaseOrganism, SidePanel, Sidebar, SignaturePad, SimpleGrid, SimulationCanvas, SimulationControls, SimulationGraph, SimulatorBoard, Skeleton, SlotContentRenderer, SocialProof, SortableList, Spacer, Spinner, Split, SplitPane, SplitSection, Sprite, Stack, StarRating, StatBadge, StatCard, StatDisplay, StateArchitectBoard, StateIndicator, StateMachineView, StateNode2 as StateNode, StatsGrid, StatsOrganism, StatusBar, StatusDot, StatusEffect, StepFlow, StepFlowOrganism, SwipeableRow, Switch, TERRAIN_COLORS, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, Table, Tabs, TagCloud, TeamCard, TeamOrganism, TerrainPalette, Text, TextHighlight, Textarea, ThemeSelector, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TraitSlot, TraitStateViewer, TransitionArrow, TrendIndicator, TurnIndicator, TurnPanel, TypewriterText, Typography, UISlotComponent, UISlotRenderer, UncontrolledBattleBoard, UnitCommandBar, UploadDropZone, VStack, VariablePanel, ViolationAlert, WaypointMarker, WizardContainer, WizardNavigation, WizardProgress, WorldMapBoard, WorldMapTemplate, XPBar, applyTemporaryEffect, calculateAttackTargets, calculateDamage, calculateValidMoves, clearEntities, cn, combatAnimations, combatClasses, combatEffects, createInitialGameState, createTranslate, createUnitAnimationState, drawSprite, entityDataKeys, generateCombatMessage, getAllEntities, getByType, getCurrentFrame, getEntity, getSingleton, getTileDimensions, inferDirection, isoToScreen, mapBookData, parseQueryBinding, pendulum, projectileMotion, removeEntity, resolveFieldMap, resolveFrame, resolveSheetDirection, screenToIso, spawnEntity, springOscillator, tickAnimationState, transitionAnimation, updateEntity, updateSingleton, useAgentChat, useAuthContext, useBattleState, useCamera, useCompile, useConnectGitHub, useCreateEntity, useDeepAgentGeneration, useDeleteEntity, useDisconnectGitHub, useDragReorder, useEmitEvent, useEntities, useEntitiesByType, useEntity, useEntity2 as useEntityById, useEntityDataAdapter, useEntityDetail, useEntityList, useEntityListSuspense, useEntityMutations, useEntitySuspense, useEventBus, useEventListener, useExtensions, useFileEditor, useFileSystem, useGameAudio, useGameAudioContext, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useImageCache, useInfiniteScroll, useInput, useLongPress, useOrbitalHistory, useOrbitalMutations, usePhysics, usePhysics2D, usePinchZoom, usePlayer, usePreview, usePullToRefresh, useQuerySingleton, useResolvedEntity, useSelectedEntity, useSendOrbitalEvent, useSingletonEntity, useSpriteAnimations, useSwipeGesture, useTranslate, useUIEvents, useUISlotManager, useUpdateEntity, useValidation };