@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.
- package/dist/components/atoms/AnimatedGraphic.d.ts +29 -0
- package/dist/components/atoms/AnimatedReveal.d.ts +24 -0
- package/dist/components/atoms/index.d.ts +2 -0
- package/dist/components/index.cjs +1420 -1074
- package/dist/components/index.js +558 -214
- package/dist/components/organisms/debug/RuntimeDebugger.d.ts +2 -2
- package/dist/lib/index.cjs +62 -50
- package/dist/lib/index.js +62 -50
- package/dist/marketing/index.cjs +293 -10
- package/dist/marketing/index.d.cts +54 -1
- package/dist/marketing/index.d.ts +4 -0
- package/dist/marketing/index.js +293 -12
- package/dist/providers/index.cjs +445 -149
- package/dist/providers/index.js +357 -61
- package/dist/runtime/index.cjs +1344 -966
- package/dist/runtime/index.js +585 -207
- package/package.json +1 -1
package/dist/components/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import
|
|
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 (
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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] =
|
|
1467
|
+
const [isChecked, setIsChecked] = React90.useState(
|
|
1468
1468
|
checked !== void 0 ? checked : defaultChecked
|
|
1469
1469
|
);
|
|
1470
|
-
|
|
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] =
|
|
2265
|
-
const timeoutRef =
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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] =
|
|
3686
|
-
const [isAnimating, setIsAnimating] =
|
|
3687
|
-
|
|
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] =
|
|
4043
|
+
const [isPressed, setIsPressed] = React90.useState(false);
|
|
3761
4044
|
const actualPressed = pressed ?? isPressed;
|
|
3762
|
-
const handlePointerDown =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
4609
|
-
const frameRef =
|
|
4610
|
-
|
|
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
|
|
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 =
|
|
6588
|
-
const triggerElement =
|
|
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 =
|
|
7094
|
-
const triggerElement =
|
|
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 =
|
|
7850
|
-
const trigger =
|
|
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(
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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] =
|
|
9453
|
-
const handlePress =
|
|
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 =
|
|
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] =
|
|
9520
|
-
const handlePress =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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(
|
|
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 =
|
|
9957
|
-
const rafRef =
|
|
9958
|
-
const frameRef =
|
|
9959
|
-
const lastTimeRef =
|
|
9960
|
-
const onDrawRef =
|
|
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 =
|
|
10245
|
+
const onTickRef = React90.useRef(onTick);
|
|
9963
10246
|
onTickRef.current = onTick;
|
|
9964
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
11088
|
-
|
|
11089
|
-
|
|
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
|
-
|
|
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] =
|
|
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(
|
|
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(
|
|
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:
|
|
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(
|
|
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
|
|
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: "
|
|
15415
|
+
size: "sm",
|
|
15416
|
+
leftIcon: copied ? "check" : "copy",
|
|
15124
15417
|
onClick: handleCopy,
|
|
15125
|
-
className: "flex-shrink-0
|
|
15126
|
-
|
|
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(
|
|
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(
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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(
|
|
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] =
|
|
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
|
-
|
|
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 =
|
|
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] =
|
|
18240
|
+
const [formData, setFormData] = React90__default.useState(
|
|
17947
18241
|
normalizedInitialData
|
|
17948
18242
|
);
|
|
17949
|
-
const [collapsedSections, setCollapsedSections] =
|
|
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 =
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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(
|
|
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(
|
|
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(
|
|
21726
|
+
function extractOutputsFromTransitions(transitions) {
|
|
21433
21727
|
const outputs = /* @__PURE__ */ new Set();
|
|
21434
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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 =
|
|
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 =
|
|
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
|
|
21887
|
+
const transitions = stateMachine.transitions || [];
|
|
21594
21888
|
const title = options.title || "";
|
|
21595
21889
|
const entity = options.entity;
|
|
21596
|
-
const outputs = extractOutputsFromTransitions(
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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(
|
|
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(
|
|
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 [
|
|
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:
|
|
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,
|
|
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 =
|
|
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,
|
|
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:
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
27355
|
-
/* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-muted-foreground font-medium", children: t("stateArchitect.transitions", { count:
|
|
27356
|
-
|
|
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] =
|
|
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] =
|
|
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] =
|
|
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] =
|
|
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 (!
|
|
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 =
|
|
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 (!
|
|
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
|
|
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
|
-
|
|
31608
|
-
return () =>
|
|
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
|
|
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
|
-
|
|
31619
|
-
return () =>
|
|
31912
|
+
listeners2.add(listener);
|
|
31913
|
+
return () => listeners2.delete(listener);
|
|
31620
31914
|
}
|
|
31621
31915
|
|
|
31622
31916
|
// lib/guardRegistry.ts
|
|
31623
31917
|
var guardHistory = [];
|
|
31624
|
-
var
|
|
31918
|
+
var listeners3 = /* @__PURE__ */ new Set();
|
|
31625
31919
|
function getGuardHistory() {
|
|
31626
31920
|
return [...guardHistory];
|
|
31627
31921
|
}
|
|
31628
31922
|
function subscribeToGuardChanges(listener) {
|
|
31629
|
-
|
|
31630
|
-
return () =>
|
|
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
|
|
31934
|
+
var listeners4 = /* @__PURE__ */ new Set();
|
|
31641
31935
|
function getDebugEvents() {
|
|
31642
31936
|
return [...events];
|
|
31643
31937
|
}
|
|
31644
31938
|
function subscribeToDebugEvents(listener) {
|
|
31645
|
-
|
|
31646
|
-
return () =>
|
|
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] =
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
31716
|
-
return () =>
|
|
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] =
|
|
31935
|
-
const containerRef =
|
|
31936
|
-
const [autoScroll, setAutoScroll] =
|
|
31937
|
-
|
|
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 =
|
|
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] =
|
|
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 =
|
|
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
|
|
32120
|
-
if (
|
|
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 = [...
|
|
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
|
|
32198
|
-
const containerRef =
|
|
32199
|
-
const [autoScroll, setAutoScroll] =
|
|
32200
|
-
const [expandedId, setExpandedId] =
|
|
32201
|
-
|
|
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
|
-
}, [
|
|
32206
|
-
if (
|
|
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 = [...
|
|
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
|
-
|
|
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] =
|
|
32463
|
-
const prevStatesRef =
|
|
32464
|
-
|
|
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
|
|
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:
|
|
32519
|
-
|
|
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] =
|
|
32548
|
-
const [isVisible, setIsVisible] =
|
|
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
|
-
|
|
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
|
-
|
|
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 =
|
|
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 (!
|
|
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 =
|
|
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 =
|
|
33475
|
+
const Lazy = React90__default.lazy(() => loader().then((m) => ({ default: m[name] })));
|
|
33132
33476
|
function ThreeWrapper(props) {
|
|
33133
|
-
return
|
|
33134
|
-
|
|
33477
|
+
return React90__default.createElement(
|
|
33478
|
+
React90__default.Suspense,
|
|
33135
33479
|
{ fallback: null },
|
|
33136
|
-
|
|
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
|
|
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
|
|
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
|
|
36730
|
+
var listeners6 = /* @__PURE__ */ new Set();
|
|
36387
36731
|
var idCounter2 = 0;
|
|
36388
36732
|
function subscribe(listener) {
|
|
36389
|
-
|
|
36390
|
-
return () =>
|
|
36733
|
+
listeners6.add(listener);
|
|
36734
|
+
return () => listeners6.delete(listener);
|
|
36391
36735
|
}
|
|
36392
36736
|
function notify() {
|
|
36393
|
-
|
|
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 };
|