@almadar/ui 2.26.0 → 2.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +1412 -1064
- package/dist/components/index.js +550 -204
- 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 +285 -0
- package/dist/marketing/index.d.cts +54 -1
- package/dist/marketing/index.d.ts +4 -0
- package/dist/marketing/index.js +285 -2
- 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)
|
|
@@ -15778,7 +16074,7 @@ var StepFlow = ({
|
|
|
15778
16074
|
className
|
|
15779
16075
|
}) => {
|
|
15780
16076
|
if (orientation === "vertical") {
|
|
15781
|
-
return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(
|
|
16077
|
+
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
16078
|
/* @__PURE__ */ jsxs(VStack, { gap: "none", align: "center", children: [
|
|
15783
16079
|
/* @__PURE__ */ jsx(StepCircle, { step, index }),
|
|
15784
16080
|
showConnectors && index < steps.length - 1 && /* @__PURE__ */ jsx(Box, { className: "w-px h-8 bg-border" })
|
|
@@ -15789,7 +16085,7 @@ var StepFlow = ({
|
|
|
15789
16085
|
] })
|
|
15790
16086
|
] }) }, index)) });
|
|
15791
16087
|
}
|
|
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(
|
|
16088
|
+
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
16089
|
/* @__PURE__ */ jsxs(VStack, { gap: "sm", align: "center", className: "flex-1 w-full md:w-auto", children: [
|
|
15794
16090
|
/* @__PURE__ */ jsx(StepCircle, { step, index }),
|
|
15795
16091
|
/* @__PURE__ */ jsx(Typography, { variant: "h4", className: "text-center", children: step.title }),
|
|
@@ -16956,7 +17252,7 @@ var StatCard = ({
|
|
|
16956
17252
|
const labelToUse = propLabel ?? propTitle;
|
|
16957
17253
|
const eventBus = useEventBus();
|
|
16958
17254
|
const { t } = useTranslate();
|
|
16959
|
-
const handleActionClick =
|
|
17255
|
+
const handleActionClick = React90__default.useCallback(() => {
|
|
16960
17256
|
if (action?.event) {
|
|
16961
17257
|
eventBus.emit(`UI:${action.event}`, {});
|
|
16962
17258
|
}
|
|
@@ -16967,7 +17263,7 @@ var StatCard = ({
|
|
|
16967
17263
|
const data = Array.isArray(entity) ? entity : entity ? [entity] : [];
|
|
16968
17264
|
const isLoading = externalLoading ?? false;
|
|
16969
17265
|
const error = externalError;
|
|
16970
|
-
const computeMetricValue =
|
|
17266
|
+
const computeMetricValue = React90__default.useCallback(
|
|
16971
17267
|
(metric, items) => {
|
|
16972
17268
|
if (metric.value !== void 0) {
|
|
16973
17269
|
return metric.value;
|
|
@@ -17006,7 +17302,7 @@ var StatCard = ({
|
|
|
17006
17302
|
},
|
|
17007
17303
|
[]
|
|
17008
17304
|
);
|
|
17009
|
-
const schemaStats =
|
|
17305
|
+
const schemaStats = React90__default.useMemo(() => {
|
|
17010
17306
|
if (!metrics || metrics.length === 0) return null;
|
|
17011
17307
|
return metrics.map((metric) => ({
|
|
17012
17308
|
label: metric.label,
|
|
@@ -17014,7 +17310,7 @@ var StatCard = ({
|
|
|
17014
17310
|
format: metric.format
|
|
17015
17311
|
}));
|
|
17016
17312
|
}, [metrics, data, computeMetricValue]);
|
|
17017
|
-
const calculatedTrend =
|
|
17313
|
+
const calculatedTrend = React90__default.useMemo(() => {
|
|
17018
17314
|
if (manualTrend !== void 0) return manualTrend;
|
|
17019
17315
|
if (previousValue === void 0 || currentValue === void 0)
|
|
17020
17316
|
return void 0;
|
|
@@ -17178,7 +17474,7 @@ var PageHeader = ({
|
|
|
17178
17474
|
info: "bg-info/10 text-info"
|
|
17179
17475
|
};
|
|
17180
17476
|
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(
|
|
17477
|
+
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
17478
|
idx > 0 && /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: "/" }),
|
|
17183
17479
|
crumb.href ? /* @__PURE__ */ jsx(
|
|
17184
17480
|
"a",
|
|
@@ -17704,7 +18000,7 @@ var FormSection = ({
|
|
|
17704
18000
|
columns = 1,
|
|
17705
18001
|
className
|
|
17706
18002
|
}) => {
|
|
17707
|
-
const [collapsed, setCollapsed] =
|
|
18003
|
+
const [collapsed, setCollapsed] = React90__default.useState(defaultCollapsed);
|
|
17708
18004
|
const { t } = useTranslate();
|
|
17709
18005
|
const eventBus = useEventBus();
|
|
17710
18006
|
const gridClass = {
|
|
@@ -17712,7 +18008,7 @@ var FormSection = ({
|
|
|
17712
18008
|
2: "grid-cols-1 md:grid-cols-2",
|
|
17713
18009
|
3: "grid-cols-1 md:grid-cols-2 lg:grid-cols-3"
|
|
17714
18010
|
}[columns];
|
|
17715
|
-
|
|
18011
|
+
React90__default.useCallback(() => {
|
|
17716
18012
|
if (collapsible) {
|
|
17717
18013
|
setCollapsed((prev) => !prev);
|
|
17718
18014
|
eventBus.emit("UI:TOGGLE_COLLAPSE", { collapsed: !collapsed });
|
|
@@ -17924,7 +18220,7 @@ var Form = ({
|
|
|
17924
18220
|
const normalizedInitialData = initialData ?? {};
|
|
17925
18221
|
const resolvedEntity = entity && typeof entity === "object" && !Array.isArray(entity) ? entity : void 0;
|
|
17926
18222
|
const entityName = typeof entity === "string" ? entity : resolvedEntity?.name;
|
|
17927
|
-
const entityDerivedFields =
|
|
18223
|
+
const entityDerivedFields = React90__default.useMemo(() => {
|
|
17928
18224
|
if (fields && fields.length > 0) return void 0;
|
|
17929
18225
|
if (!resolvedEntity) return void 0;
|
|
17930
18226
|
return resolvedEntity.fields.map(
|
|
@@ -17943,14 +18239,14 @@ var Form = ({
|
|
|
17943
18239
|
const conditionalFields = typeof conditionalFieldsRaw === "boolean" ? {} : conditionalFieldsRaw;
|
|
17944
18240
|
const hiddenCalculations = typeof hiddenCalculationsRaw === "boolean" ? [] : hiddenCalculationsRaw;
|
|
17945
18241
|
const violationTriggers = typeof violationTriggersRaw === "boolean" ? [] : violationTriggersRaw;
|
|
17946
|
-
const [formData, setFormData] =
|
|
18242
|
+
const [formData, setFormData] = React90__default.useState(
|
|
17947
18243
|
normalizedInitialData
|
|
17948
18244
|
);
|
|
17949
|
-
const [collapsedSections, setCollapsedSections] =
|
|
18245
|
+
const [collapsedSections, setCollapsedSections] = React90__default.useState(
|
|
17950
18246
|
/* @__PURE__ */ new Set()
|
|
17951
18247
|
);
|
|
17952
18248
|
const shouldShowCancel = showCancel ?? (fields && fields.length > 0);
|
|
17953
|
-
const evalContext =
|
|
18249
|
+
const evalContext = React90__default.useMemo(
|
|
17954
18250
|
() => ({
|
|
17955
18251
|
formValues: formData,
|
|
17956
18252
|
globalVariables: externalContext?.globalVariables ?? {},
|
|
@@ -17959,13 +18255,13 @@ var Form = ({
|
|
|
17959
18255
|
}),
|
|
17960
18256
|
[formData, externalContext]
|
|
17961
18257
|
);
|
|
17962
|
-
|
|
18258
|
+
React90__default.useEffect(() => {
|
|
17963
18259
|
const data = initialData;
|
|
17964
18260
|
if (data && Object.keys(data).length > 0) {
|
|
17965
18261
|
setFormData(data);
|
|
17966
18262
|
}
|
|
17967
18263
|
}, [initialData]);
|
|
17968
|
-
const processCalculations =
|
|
18264
|
+
const processCalculations = React90__default.useCallback(
|
|
17969
18265
|
(changedFieldId, newFormData) => {
|
|
17970
18266
|
if (!hiddenCalculations.length) return;
|
|
17971
18267
|
const context = {
|
|
@@ -17990,7 +18286,7 @@ var Form = ({
|
|
|
17990
18286
|
},
|
|
17991
18287
|
[hiddenCalculations, externalContext, eventBus]
|
|
17992
18288
|
);
|
|
17993
|
-
const checkViolations =
|
|
18289
|
+
const checkViolations = React90__default.useCallback(
|
|
17994
18290
|
(changedFieldId, newFormData) => {
|
|
17995
18291
|
if (!violationTriggers.length) return;
|
|
17996
18292
|
const context = {
|
|
@@ -18027,7 +18323,7 @@ var Form = ({
|
|
|
18027
18323
|
processCalculations(name, newFormData);
|
|
18028
18324
|
checkViolations(name, newFormData);
|
|
18029
18325
|
};
|
|
18030
|
-
const isFieldVisible =
|
|
18326
|
+
const isFieldVisible = React90__default.useCallback(
|
|
18031
18327
|
(fieldName) => {
|
|
18032
18328
|
const condition = conditionalFields[fieldName];
|
|
18033
18329
|
if (!condition) return true;
|
|
@@ -18035,7 +18331,7 @@ var Form = ({
|
|
|
18035
18331
|
},
|
|
18036
18332
|
[conditionalFields, evalContext]
|
|
18037
18333
|
);
|
|
18038
|
-
const isSectionVisible =
|
|
18334
|
+
const isSectionVisible = React90__default.useCallback(
|
|
18039
18335
|
(section) => {
|
|
18040
18336
|
if (!section.condition) return true;
|
|
18041
18337
|
return Boolean(evaluateFormExpression(section.condition, evalContext));
|
|
@@ -18067,7 +18363,7 @@ var Form = ({
|
|
|
18067
18363
|
eventBus.emit(`UI:${onCancel}`);
|
|
18068
18364
|
}
|
|
18069
18365
|
};
|
|
18070
|
-
const renderField =
|
|
18366
|
+
const renderField = React90__default.useCallback(
|
|
18071
18367
|
(field) => {
|
|
18072
18368
|
const fieldName = field.name || field.field;
|
|
18073
18369
|
if (!fieldName) return null;
|
|
@@ -18088,7 +18384,7 @@ var Form = ({
|
|
|
18088
18384
|
[formData, isFieldVisible, relationsData, relationsLoading, isLoading]
|
|
18089
18385
|
);
|
|
18090
18386
|
const effectiveFields = entityDerivedFields ?? fields;
|
|
18091
|
-
const normalizedFields =
|
|
18387
|
+
const normalizedFields = React90__default.useMemo(() => {
|
|
18092
18388
|
if (!effectiveFields || effectiveFields.length === 0) return [];
|
|
18093
18389
|
return effectiveFields.map((field) => {
|
|
18094
18390
|
if (typeof field === "string") {
|
|
@@ -18110,7 +18406,7 @@ var Form = ({
|
|
|
18110
18406
|
return field;
|
|
18111
18407
|
});
|
|
18112
18408
|
}, [effectiveFields, resolvedEntity]);
|
|
18113
|
-
const schemaFields =
|
|
18409
|
+
const schemaFields = React90__default.useMemo(() => {
|
|
18114
18410
|
if (normalizedFields.length === 0) return null;
|
|
18115
18411
|
if (isDebugEnabled()) {
|
|
18116
18412
|
debugGroup(`Form: ${entityName || "unknown"}`);
|
|
@@ -18120,7 +18416,7 @@ var Form = ({
|
|
|
18120
18416
|
}
|
|
18121
18417
|
return normalizedFields.map(renderField).filter(Boolean);
|
|
18122
18418
|
}, [normalizedFields, renderField, entityName, conditionalFields]);
|
|
18123
|
-
const sectionElements =
|
|
18419
|
+
const sectionElements = React90__default.useMemo(() => {
|
|
18124
18420
|
if (!sections || sections.length === 0) return null;
|
|
18125
18421
|
return sections.map((section) => {
|
|
18126
18422
|
if (!isSectionVisible(section)) {
|
|
@@ -19245,7 +19541,7 @@ var List = ({
|
|
|
19245
19541
|
if (entity && typeof entity === "object" && "id" in entity) return [entity];
|
|
19246
19542
|
return [];
|
|
19247
19543
|
}, [entity]);
|
|
19248
|
-
const getItemActions =
|
|
19544
|
+
const getItemActions = React90__default.useCallback(
|
|
19249
19545
|
(item) => {
|
|
19250
19546
|
if (!itemActions) return [];
|
|
19251
19547
|
if (typeof itemActions === "function") {
|
|
@@ -20011,7 +20307,7 @@ var WizardContainer = ({
|
|
|
20011
20307
|
const isCompleted = index < currentStep;
|
|
20012
20308
|
const stepKey = step.id ?? step.tabId ?? `step-${index}`;
|
|
20013
20309
|
const stepTitle = step.title ?? step.name ?? `Step ${index + 1}`;
|
|
20014
|
-
return /* @__PURE__ */ jsxs(
|
|
20310
|
+
return /* @__PURE__ */ jsxs(React90__default.Fragment, { children: [
|
|
20015
20311
|
/* @__PURE__ */ jsx(
|
|
20016
20312
|
Button,
|
|
20017
20313
|
{
|
|
@@ -21235,7 +21531,7 @@ var StateMachineView = ({
|
|
|
21235
21531
|
style: { top: title ? 30 : 0 },
|
|
21236
21532
|
children: [
|
|
21237
21533
|
entity && /* @__PURE__ */ jsx(EntityBox, { entity, config }),
|
|
21238
|
-
states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(
|
|
21534
|
+
states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React90__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
|
|
21239
21535
|
StateNode,
|
|
21240
21536
|
{
|
|
21241
21537
|
state,
|
|
@@ -21429,9 +21725,9 @@ function getEffectSummary(effects) {
|
|
|
21429
21725
|
});
|
|
21430
21726
|
return summaries.join(" | ");
|
|
21431
21727
|
}
|
|
21432
|
-
function extractOutputsFromTransitions(
|
|
21728
|
+
function extractOutputsFromTransitions(transitions) {
|
|
21433
21729
|
const outputs = /* @__PURE__ */ new Set();
|
|
21434
|
-
|
|
21730
|
+
transitions.forEach((t) => {
|
|
21435
21731
|
if (t.effects) {
|
|
21436
21732
|
t.effects.forEach((effect) => {
|
|
21437
21733
|
if (Array.isArray(effect)) {
|
|
@@ -21456,7 +21752,7 @@ function getNodeRadius(stateName, config) {
|
|
|
21456
21752
|
if (textLength > 6) return baseRadius + 8;
|
|
21457
21753
|
return baseRadius;
|
|
21458
21754
|
}
|
|
21459
|
-
function calculateLayout(states,
|
|
21755
|
+
function calculateLayout(states, transitions, options, config) {
|
|
21460
21756
|
const positions = {};
|
|
21461
21757
|
const entityBoxWidth = options.hasEntity ? 200 : 0;
|
|
21462
21758
|
const outputBoxWidth = options.hasOutputs ? 200 : 0;
|
|
@@ -21465,7 +21761,7 @@ function calculateLayout(states, transitions2, options, config) {
|
|
|
21465
21761
|
states.filter((s) => s.isFinal);
|
|
21466
21762
|
states.filter((s) => !s.isInitial && !s.isFinal);
|
|
21467
21763
|
let maxLabelLength = 0;
|
|
21468
|
-
|
|
21764
|
+
transitions.forEach((t) => {
|
|
21469
21765
|
if (t.effects && t.effects.length > 0) {
|
|
21470
21766
|
const summary = getEffectSummary(t.effects);
|
|
21471
21767
|
maxLabelLength = Math.max(maxLabelLength, summary.length);
|
|
@@ -21491,7 +21787,7 @@ function calculateLayout(states, transitions2, options, config) {
|
|
|
21491
21787
|
if (stateColumn[name] === void 0) {
|
|
21492
21788
|
stateColumn[name] = col;
|
|
21493
21789
|
}
|
|
21494
|
-
|
|
21790
|
+
transitions.forEach((t) => {
|
|
21495
21791
|
if (t.from === name && t.from !== t.to && !visited.has(t.to)) {
|
|
21496
21792
|
queue.push({ name: t.to, col: col + 1 });
|
|
21497
21793
|
}
|
|
@@ -21540,11 +21836,11 @@ function calculateLayout(states, transitions2, options, config) {
|
|
|
21540
21836
|
});
|
|
21541
21837
|
return { positions, width, height: height + 60 };
|
|
21542
21838
|
}
|
|
21543
|
-
function calculateTransitionPathData(from, to,
|
|
21839
|
+
function calculateTransitionPathData(from, to, transitions, positions, config) {
|
|
21544
21840
|
const fromPos = positions[from];
|
|
21545
21841
|
const toPos = positions[to];
|
|
21546
21842
|
if (!fromPos || !toPos) return null;
|
|
21547
|
-
const relevantTransitions =
|
|
21843
|
+
const relevantTransitions = transitions.filter((t) => t.from === from && t.to === to);
|
|
21548
21844
|
if (relevantTransitions.length === 0) return null;
|
|
21549
21845
|
const fromRadius = getNodeRadius(from, config);
|
|
21550
21846
|
const toRadius = getNodeRadius(to, config);
|
|
@@ -21575,7 +21871,7 @@ function calculateTransitionPathData(from, to, transitions2, positions, config)
|
|
|
21575
21871
|
const startY = fromPos.y + ny * fromRadius;
|
|
21576
21872
|
const endX = toPos.x - nx * (toRadius + 5);
|
|
21577
21873
|
const endY = toPos.y - ny * (toRadius + 5);
|
|
21578
|
-
const hasReverse =
|
|
21874
|
+
const hasReverse = transitions.some((t) => t.from === to && t.to === from);
|
|
21579
21875
|
const isReverse = hasReverse && from > to;
|
|
21580
21876
|
const baseOffset = hasReverse ? 50 : 30;
|
|
21581
21877
|
const curveOffset = baseOffset + (relevantTransitions.length > 1 ? 20 : 0);
|
|
@@ -21590,15 +21886,15 @@ function calculateTransitionPathData(from, to, transitions2, positions, config)
|
|
|
21590
21886
|
}
|
|
21591
21887
|
function renderStateMachineToDomData(stateMachine, options = {}, config = DEFAULT_CONFIG) {
|
|
21592
21888
|
const states = stateMachine.states || [];
|
|
21593
|
-
const
|
|
21889
|
+
const transitions = stateMachine.transitions || [];
|
|
21594
21890
|
const title = options.title || "";
|
|
21595
21891
|
const entity = options.entity;
|
|
21596
|
-
const outputs = extractOutputsFromTransitions(
|
|
21892
|
+
const outputs = extractOutputsFromTransitions(transitions);
|
|
21597
21893
|
const layoutOptions = {
|
|
21598
21894
|
hasEntity: !!entity,
|
|
21599
21895
|
hasOutputs: outputs.length > 0
|
|
21600
21896
|
};
|
|
21601
|
-
const { positions, width, height } = calculateLayout(states,
|
|
21897
|
+
const { positions, width, height } = calculateLayout(states, transitions, layoutOptions, config);
|
|
21602
21898
|
const domStates = Object.entries(positions).map(([name, pos]) => ({
|
|
21603
21899
|
id: `state-${name}`,
|
|
21604
21900
|
name,
|
|
@@ -21612,14 +21908,14 @@ function renderStateMachineToDomData(stateMachine, options = {}, config = DEFAUL
|
|
|
21612
21908
|
const domPaths = [];
|
|
21613
21909
|
const domLabels = [];
|
|
21614
21910
|
const drawnPairs = /* @__PURE__ */ new Set();
|
|
21615
|
-
|
|
21911
|
+
transitions.forEach((transition, idx) => {
|
|
21616
21912
|
const pairKey = `${transition.from}->${transition.to}`;
|
|
21617
21913
|
if (!drawnPairs.has(pairKey)) {
|
|
21618
21914
|
drawnPairs.add(pairKey);
|
|
21619
21915
|
const pathData2 = calculateTransitionPathData(
|
|
21620
21916
|
transition.from,
|
|
21621
21917
|
transition.to,
|
|
21622
|
-
|
|
21918
|
+
transitions,
|
|
21623
21919
|
positions,
|
|
21624
21920
|
config
|
|
21625
21921
|
);
|
|
@@ -21640,7 +21936,7 @@ function renderStateMachineToDomData(stateMachine, options = {}, config = DEFAUL
|
|
|
21640
21936
|
const pathData = calculateTransitionPathData(
|
|
21641
21937
|
transition.from,
|
|
21642
21938
|
transition.to,
|
|
21643
|
-
|
|
21939
|
+
transitions,
|
|
21644
21940
|
positions,
|
|
21645
21941
|
config
|
|
21646
21942
|
);
|
|
@@ -24773,7 +25069,7 @@ function usePhysics2D(options = {}) {
|
|
|
24773
25069
|
if (!state) return null;
|
|
24774
25070
|
return { x: state.x, y: state.y };
|
|
24775
25071
|
}, [manager]);
|
|
24776
|
-
const
|
|
25072
|
+
const getState2 = useCallback((unitId) => {
|
|
24777
25073
|
return manager.getState(unitId);
|
|
24778
25074
|
}, [manager]);
|
|
24779
25075
|
const applyForce = useCallback((unitId, fx, fy) => {
|
|
@@ -24810,7 +25106,7 @@ function usePhysics2D(options = {}) {
|
|
|
24810
25106
|
registerUnit,
|
|
24811
25107
|
unregisterUnit,
|
|
24812
25108
|
getPosition,
|
|
24813
|
-
getState,
|
|
25109
|
+
getState: getState2,
|
|
24814
25110
|
applyForce,
|
|
24815
25111
|
setVelocity,
|
|
24816
25112
|
setPosition,
|
|
@@ -25681,7 +25977,7 @@ function LinearView({
|
|
|
25681
25977
|
/* @__PURE__ */ jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
|
|
25682
25978
|
const isDone = i < currentIdx;
|
|
25683
25979
|
const isCurrent = i === currentIdx;
|
|
25684
|
-
return /* @__PURE__ */ jsxs(
|
|
25980
|
+
return /* @__PURE__ */ jsxs(React90__default.Fragment, { children: [
|
|
25685
25981
|
i > 0 && /* @__PURE__ */ jsx(
|
|
25686
25982
|
Typography,
|
|
25687
25983
|
{
|
|
@@ -26335,7 +26631,7 @@ function SequenceBar({
|
|
|
26335
26631
|
onSlotRemove(index);
|
|
26336
26632
|
}, [onSlotRemove, playing]);
|
|
26337
26633
|
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(
|
|
26634
|
+
return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React90__default.Fragment, { children: [
|
|
26339
26635
|
i > 0 && /* @__PURE__ */ jsx(
|
|
26340
26636
|
Typography,
|
|
26341
26637
|
{
|
|
@@ -27139,7 +27435,7 @@ function StateArchitectBoard({
|
|
|
27139
27435
|
}) {
|
|
27140
27436
|
const { emit } = useEventBus();
|
|
27141
27437
|
const { t } = useTranslate();
|
|
27142
|
-
const [
|
|
27438
|
+
const [transitions, setTransitions] = useState(entity.transitions);
|
|
27143
27439
|
const [headerError, setHeaderError] = useState(false);
|
|
27144
27440
|
const [playState, setPlayState] = useState("editing");
|
|
27145
27441
|
const [currentState, setCurrentState] = useState(entity.initialState);
|
|
@@ -27185,13 +27481,13 @@ function StateArchitectBoard({
|
|
|
27185
27481
|
description: entity.description,
|
|
27186
27482
|
states: entity.states,
|
|
27187
27483
|
currentState,
|
|
27188
|
-
transitions:
|
|
27484
|
+
transitions: transitions.map((t2) => ({
|
|
27189
27485
|
from: t2.from,
|
|
27190
27486
|
to: t2.to,
|
|
27191
27487
|
event: t2.event,
|
|
27192
27488
|
guardHint: t2.guardHint
|
|
27193
27489
|
}))
|
|
27194
|
-
}), [entity, currentState,
|
|
27490
|
+
}), [entity, currentState, transitions]);
|
|
27195
27491
|
const handleTest = useCallback(() => {
|
|
27196
27492
|
if (playState !== "editing") return;
|
|
27197
27493
|
if (testEvent) emit(`UI:${testEvent}`, {});
|
|
@@ -27218,7 +27514,7 @@ function StateArchitectBoard({
|
|
|
27218
27514
|
const testCase = entity.testCases[testIdx];
|
|
27219
27515
|
let state = entity.initialState;
|
|
27220
27516
|
for (const event of testCase.events) {
|
|
27221
|
-
const trans =
|
|
27517
|
+
const trans = transitions.find((t2) => t2.from === state && t2.event === event);
|
|
27222
27518
|
if (trans) {
|
|
27223
27519
|
state = trans.to;
|
|
27224
27520
|
}
|
|
@@ -27234,7 +27530,7 @@ function StateArchitectBoard({
|
|
|
27234
27530
|
timerRef.current = setTimeout(runNextTest, stepDurationMs);
|
|
27235
27531
|
};
|
|
27236
27532
|
timerRef.current = setTimeout(runNextTest, stepDurationMs);
|
|
27237
|
-
}, [playState,
|
|
27533
|
+
}, [playState, transitions, entity, stepDurationMs, testEvent, completeEvent, emit]);
|
|
27238
27534
|
const handleTryAgain = useCallback(() => {
|
|
27239
27535
|
if (timerRef.current) clearTimeout(timerRef.current);
|
|
27240
27536
|
setPlayState("editing");
|
|
@@ -27256,13 +27552,13 @@ function StateArchitectBoard({
|
|
|
27256
27552
|
name: entity.entityName,
|
|
27257
27553
|
states: entity.states,
|
|
27258
27554
|
initialState: entity.initialState,
|
|
27259
|
-
transitions:
|
|
27555
|
+
transitions: transitions.map((t2) => ({
|
|
27260
27556
|
from: t2.from,
|
|
27261
27557
|
to: t2.to,
|
|
27262
27558
|
event: t2.event,
|
|
27263
27559
|
...t2.guardHint ? { guard: t2.guardHint } : {}
|
|
27264
27560
|
}))
|
|
27265
|
-
}), [entity,
|
|
27561
|
+
}), [entity, transitions]);
|
|
27266
27562
|
return /* @__PURE__ */ jsxs(
|
|
27267
27563
|
VStack,
|
|
27268
27564
|
{
|
|
@@ -27307,7 +27603,7 @@ function StateArchitectBoard({
|
|
|
27307
27603
|
/* @__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
27604
|
/* @__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
27605
|
] }),
|
|
27310
|
-
|
|
27606
|
+
transitions.map((t2) => {
|
|
27311
27607
|
const fromPos = positions[t2.from];
|
|
27312
27608
|
const toPos = positions[t2.to];
|
|
27313
27609
|
if (!fromPos || !toPos) return null;
|
|
@@ -27351,9 +27647,9 @@ function StateArchitectBoard({
|
|
|
27351
27647
|
children: selectedState ? t("stateArchitect.addTransition", { state: selectedState }) : t("stateArchitect.addTransitionPrompt")
|
|
27352
27648
|
}
|
|
27353
27649
|
) }),
|
|
27354
|
-
|
|
27355
|
-
/* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-muted-foreground font-medium", children: t("stateArchitect.transitions", { count:
|
|
27356
|
-
|
|
27650
|
+
transitions.length > 0 && /* @__PURE__ */ jsxs(VStack, { gap: "xs", className: "p-3 rounded-lg bg-muted/50 border border-border", children: [
|
|
27651
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-muted-foreground font-medium", children: t("stateArchitect.transitions", { count: transitions.length }) + ":" }),
|
|
27652
|
+
transitions.map((t2) => /* @__PURE__ */ jsxs(HStack, { className: "items-center text-xs", gap: "xs", children: [
|
|
27357
27653
|
/* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-foreground", children: t2.from }),
|
|
27358
27654
|
/* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-muted-foreground", children: "\u2014[" }),
|
|
27359
27655
|
/* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-accent font-medium", children: t2.event }),
|
|
@@ -28823,7 +29119,7 @@ function InputPattern({
|
|
|
28823
29119
|
className
|
|
28824
29120
|
}) {
|
|
28825
29121
|
const { emit } = useEventBus();
|
|
28826
|
-
const [localValue, setLocalValue] =
|
|
29122
|
+
const [localValue, setLocalValue] = React90__default.useState(value);
|
|
28827
29123
|
const handleChange = (e) => {
|
|
28828
29124
|
setLocalValue(e.target.value);
|
|
28829
29125
|
if (onChange) {
|
|
@@ -28860,7 +29156,7 @@ function TextareaPattern({
|
|
|
28860
29156
|
className
|
|
28861
29157
|
}) {
|
|
28862
29158
|
const { emit } = useEventBus();
|
|
28863
|
-
const [localValue, setLocalValue] =
|
|
29159
|
+
const [localValue, setLocalValue] = React90__default.useState(value);
|
|
28864
29160
|
const handleChange = (e) => {
|
|
28865
29161
|
setLocalValue(e.target.value);
|
|
28866
29162
|
if (onChange) {
|
|
@@ -28891,7 +29187,7 @@ function SelectPattern({
|
|
|
28891
29187
|
className
|
|
28892
29188
|
}) {
|
|
28893
29189
|
const { emit } = useEventBus();
|
|
28894
|
-
const [localValue, setLocalValue] =
|
|
29190
|
+
const [localValue, setLocalValue] = React90__default.useState(value);
|
|
28895
29191
|
const handleChange = (e) => {
|
|
28896
29192
|
setLocalValue(e.target.value);
|
|
28897
29193
|
if (onChange) {
|
|
@@ -28920,7 +29216,7 @@ function CheckboxPattern({
|
|
|
28920
29216
|
className
|
|
28921
29217
|
}) {
|
|
28922
29218
|
const { emit } = useEventBus();
|
|
28923
|
-
const [localChecked, setLocalChecked] =
|
|
29219
|
+
const [localChecked, setLocalChecked] = React90__default.useState(checked);
|
|
28924
29220
|
const handleChange = (e) => {
|
|
28925
29221
|
setLocalChecked(e.target.checked);
|
|
28926
29222
|
if (onChange) {
|
|
@@ -30802,7 +31098,7 @@ var DocumentViewer = ({
|
|
|
30802
31098
|
};
|
|
30803
31099
|
DocumentViewer.displayName = "DocumentViewer";
|
|
30804
31100
|
function extractTitle(children) {
|
|
30805
|
-
if (!
|
|
31101
|
+
if (!React90__default.isValidElement(children)) return void 0;
|
|
30806
31102
|
const props = children.props;
|
|
30807
31103
|
if (typeof props.title === "string") {
|
|
30808
31104
|
return props.title;
|
|
@@ -31400,7 +31696,7 @@ var MediaGallery = ({
|
|
|
31400
31696
|
[selectable, selectedItems, selectionEvent, eventBus]
|
|
31401
31697
|
);
|
|
31402
31698
|
const entityData = Array.isArray(entity) ? entity : [];
|
|
31403
|
-
const items =
|
|
31699
|
+
const items = React90__default.useMemo(() => {
|
|
31404
31700
|
if (propItems) return propItems;
|
|
31405
31701
|
if (entityData.length === 0) return [];
|
|
31406
31702
|
return entityData.map((record, idx) => ({
|
|
@@ -31562,7 +31858,7 @@ var MediaGallery = ({
|
|
|
31562
31858
|
};
|
|
31563
31859
|
MediaGallery.displayName = "MediaGallery";
|
|
31564
31860
|
function extractTitle2(children) {
|
|
31565
|
-
if (!
|
|
31861
|
+
if (!React90__default.isValidElement(children)) return void 0;
|
|
31566
31862
|
const props = children.props;
|
|
31567
31863
|
if (typeof props.title === "string") {
|
|
31568
31864
|
return props.title;
|
|
@@ -31599,35 +31895,35 @@ ModalSlot.displayName = "ModalSlot";
|
|
|
31599
31895
|
|
|
31600
31896
|
// lib/traitRegistry.ts
|
|
31601
31897
|
var traits = /* @__PURE__ */ new Map();
|
|
31602
|
-
var
|
|
31898
|
+
var listeners = /* @__PURE__ */ new Set();
|
|
31603
31899
|
function getAllTraits() {
|
|
31604
31900
|
return Array.from(traits.values());
|
|
31605
31901
|
}
|
|
31606
31902
|
function subscribeToTraitChanges(listener) {
|
|
31607
|
-
|
|
31608
|
-
return () =>
|
|
31903
|
+
listeners.add(listener);
|
|
31904
|
+
return () => listeners.delete(listener);
|
|
31609
31905
|
}
|
|
31610
31906
|
|
|
31611
31907
|
// lib/tickRegistry.ts
|
|
31612
31908
|
var ticks = /* @__PURE__ */ new Map();
|
|
31613
|
-
var
|
|
31909
|
+
var listeners2 = /* @__PURE__ */ new Set();
|
|
31614
31910
|
function getAllTicks() {
|
|
31615
31911
|
return Array.from(ticks.values());
|
|
31616
31912
|
}
|
|
31617
31913
|
function subscribeToTickChanges(listener) {
|
|
31618
|
-
|
|
31619
|
-
return () =>
|
|
31914
|
+
listeners2.add(listener);
|
|
31915
|
+
return () => listeners2.delete(listener);
|
|
31620
31916
|
}
|
|
31621
31917
|
|
|
31622
31918
|
// lib/guardRegistry.ts
|
|
31623
31919
|
var guardHistory = [];
|
|
31624
|
-
var
|
|
31920
|
+
var listeners3 = /* @__PURE__ */ new Set();
|
|
31625
31921
|
function getGuardHistory() {
|
|
31626
31922
|
return [...guardHistory];
|
|
31627
31923
|
}
|
|
31628
31924
|
function subscribeToGuardChanges(listener) {
|
|
31629
|
-
|
|
31630
|
-
return () =>
|
|
31925
|
+
listeners3.add(listener);
|
|
31926
|
+
return () => listeners3.delete(listener);
|
|
31631
31927
|
}
|
|
31632
31928
|
function getEntitySnapshot() {
|
|
31633
31929
|
{
|
|
@@ -31637,18 +31933,18 @@ function getEntitySnapshot() {
|
|
|
31637
31933
|
|
|
31638
31934
|
// lib/debugRegistry.ts
|
|
31639
31935
|
var events = [];
|
|
31640
|
-
var
|
|
31936
|
+
var listeners4 = /* @__PURE__ */ new Set();
|
|
31641
31937
|
function getDebugEvents() {
|
|
31642
31938
|
return [...events];
|
|
31643
31939
|
}
|
|
31644
31940
|
function subscribeToDebugEvents(listener) {
|
|
31645
|
-
|
|
31646
|
-
return () =>
|
|
31941
|
+
listeners4.add(listener);
|
|
31942
|
+
return () => listeners4.delete(listener);
|
|
31647
31943
|
}
|
|
31648
31944
|
|
|
31649
31945
|
// components/organisms/debug/hooks/useDebugData.ts
|
|
31650
31946
|
function useDebugData() {
|
|
31651
|
-
const [data, setData] =
|
|
31947
|
+
const [data, setData] = React90.useState(() => ({
|
|
31652
31948
|
traits: [],
|
|
31653
31949
|
ticks: [],
|
|
31654
31950
|
guards: [],
|
|
@@ -31662,7 +31958,7 @@ function useDebugData() {
|
|
|
31662
31958
|
},
|
|
31663
31959
|
lastUpdate: Date.now()
|
|
31664
31960
|
}));
|
|
31665
|
-
|
|
31961
|
+
React90.useEffect(() => {
|
|
31666
31962
|
const updateData = () => {
|
|
31667
31963
|
setData({
|
|
31668
31964
|
traits: getAllTraits(),
|
|
@@ -31706,14 +32002,14 @@ function useDebugData() {
|
|
|
31706
32002
|
|
|
31707
32003
|
// lib/debugUtils.ts
|
|
31708
32004
|
var DEBUG_STORAGE_KEY = "orbital-debug";
|
|
31709
|
-
var
|
|
32005
|
+
var listeners5 = /* @__PURE__ */ new Set();
|
|
31710
32006
|
function isDebugEnabled2() {
|
|
31711
32007
|
if (typeof window === "undefined") return false;
|
|
31712
32008
|
return localStorage.getItem(DEBUG_STORAGE_KEY) === "true";
|
|
31713
32009
|
}
|
|
31714
32010
|
function onDebugToggle(listener) {
|
|
31715
|
-
|
|
31716
|
-
return () =>
|
|
32011
|
+
listeners5.add(listener);
|
|
32012
|
+
return () => listeners5.delete(listener);
|
|
31717
32013
|
}
|
|
31718
32014
|
function TraitsTab({ traits: traits2 }) {
|
|
31719
32015
|
if (traits2.length === 0) {
|
|
@@ -31931,15 +32227,15 @@ var TYPE_BADGES = {
|
|
|
31931
32227
|
state: { variant: "danger", icon: "\u{1F4CA}" }
|
|
31932
32228
|
};
|
|
31933
32229
|
function EventFlowTab({ events: events2 }) {
|
|
31934
|
-
const [filter, setFilter] =
|
|
31935
|
-
const containerRef =
|
|
31936
|
-
const [autoScroll, setAutoScroll] =
|
|
31937
|
-
|
|
32230
|
+
const [filter, setFilter] = React90.useState("all");
|
|
32231
|
+
const containerRef = React90.useRef(null);
|
|
32232
|
+
const [autoScroll, setAutoScroll] = React90.useState(true);
|
|
32233
|
+
React90.useEffect(() => {
|
|
31938
32234
|
if (autoScroll && containerRef.current) {
|
|
31939
32235
|
containerRef.current.scrollTop = containerRef.current.scrollHeight;
|
|
31940
32236
|
}
|
|
31941
32237
|
}, [events2.length, autoScroll]);
|
|
31942
|
-
const filteredEvents =
|
|
32238
|
+
const filteredEvents = React90.useMemo(() => {
|
|
31943
32239
|
if (filter === "all") return events2;
|
|
31944
32240
|
return events2.filter((e) => e.type === filter);
|
|
31945
32241
|
}, [events2, filter]);
|
|
@@ -32038,7 +32334,7 @@ function EventFlowTab({ events: events2 }) {
|
|
|
32038
32334
|
}
|
|
32039
32335
|
EventFlowTab.displayName = "EventFlowTab";
|
|
32040
32336
|
function GuardsPanel({ guards }) {
|
|
32041
|
-
const [filter, setFilter] =
|
|
32337
|
+
const [filter, setFilter] = React90.useState("all");
|
|
32042
32338
|
if (guards.length === 0) {
|
|
32043
32339
|
return /* @__PURE__ */ jsx(
|
|
32044
32340
|
EmptyState,
|
|
@@ -32051,7 +32347,7 @@ function GuardsPanel({ guards }) {
|
|
|
32051
32347
|
}
|
|
32052
32348
|
const passedCount = guards.filter((g) => g.result).length;
|
|
32053
32349
|
const failedCount = guards.length - passedCount;
|
|
32054
|
-
const filteredGuards =
|
|
32350
|
+
const filteredGuards = React90.useMemo(() => {
|
|
32055
32351
|
if (filter === "all") return guards;
|
|
32056
32352
|
if (filter === "passed") return guards.filter((g) => g.result);
|
|
32057
32353
|
return guards.filter((g) => !g.result);
|
|
@@ -32116,8 +32412,8 @@ var STATUS_CONFIG = {
|
|
|
32116
32412
|
warn: { variant: "warning", icon: "!", label: "WARN" },
|
|
32117
32413
|
pending: { variant: "default", icon: "?", label: "PENDING" }
|
|
32118
32414
|
};
|
|
32119
|
-
function VerificationTab({ checks
|
|
32120
|
-
if (
|
|
32415
|
+
function VerificationTab({ checks, summary }) {
|
|
32416
|
+
if (checks.length === 0) {
|
|
32121
32417
|
return /* @__PURE__ */ jsx(
|
|
32122
32418
|
EmptyState,
|
|
32123
32419
|
{
|
|
@@ -32128,7 +32424,7 @@ function VerificationTab({ checks: checks2, summary }) {
|
|
|
32128
32424
|
);
|
|
32129
32425
|
}
|
|
32130
32426
|
const sortOrder = { fail: 0, warn: 1, pending: 2, pass: 3 };
|
|
32131
|
-
const sorted = [...
|
|
32427
|
+
const sorted = [...checks].sort(
|
|
32132
32428
|
(a, b) => (sortOrder[a.status] ?? 4) - (sortOrder[b.status] ?? 4)
|
|
32133
32429
|
);
|
|
32134
32430
|
return /* @__PURE__ */ jsxs("div", { className: "debug-tab debug-tab--verification", children: [
|
|
@@ -32194,16 +32490,16 @@ function EffectBadge({ effect }) {
|
|
|
32194
32490
|
effect.error && /* @__PURE__ */ jsx("span", { className: "text-red-500 truncate max-w-[120px]", title: effect.error, children: effect.error })
|
|
32195
32491
|
] });
|
|
32196
32492
|
}
|
|
32197
|
-
function TransitionTimeline({ transitions
|
|
32198
|
-
const containerRef =
|
|
32199
|
-
const [autoScroll, setAutoScroll] =
|
|
32200
|
-
const [expandedId, setExpandedId] =
|
|
32201
|
-
|
|
32493
|
+
function TransitionTimeline({ transitions }) {
|
|
32494
|
+
const containerRef = React90.useRef(null);
|
|
32495
|
+
const [autoScroll, setAutoScroll] = React90.useState(true);
|
|
32496
|
+
const [expandedId, setExpandedId] = React90.useState(null);
|
|
32497
|
+
React90.useEffect(() => {
|
|
32202
32498
|
if (autoScroll && containerRef.current) {
|
|
32203
32499
|
containerRef.current.scrollTop = containerRef.current.scrollHeight;
|
|
32204
32500
|
}
|
|
32205
|
-
}, [
|
|
32206
|
-
if (
|
|
32501
|
+
}, [transitions.length, autoScroll]);
|
|
32502
|
+
if (transitions.length === 0) {
|
|
32207
32503
|
return /* @__PURE__ */ jsx(
|
|
32208
32504
|
EmptyState,
|
|
32209
32505
|
{
|
|
@@ -32222,11 +32518,11 @@ function TransitionTimeline({ transitions: transitions2 }) {
|
|
|
32222
32518
|
second: "2-digit"
|
|
32223
32519
|
}) + "." + String(d.getMilliseconds()).padStart(3, "0");
|
|
32224
32520
|
};
|
|
32225
|
-
const sorted = [...
|
|
32521
|
+
const sorted = [...transitions].reverse();
|
|
32226
32522
|
return /* @__PURE__ */ jsxs("div", { className: "debug-tab debug-tab--timeline", children: [
|
|
32227
32523
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between mb-2", children: [
|
|
32228
32524
|
/* @__PURE__ */ jsxs(Typography, { variant: "small", className: "text-gray-500", children: [
|
|
32229
|
-
|
|
32525
|
+
transitions.length,
|
|
32230
32526
|
" transitions recorded"
|
|
32231
32527
|
] }),
|
|
32232
32528
|
/* @__PURE__ */ jsxs("label", { className: "flex items-center gap-1 text-xs text-gray-500 cursor-pointer", children: [
|
|
@@ -32459,9 +32755,9 @@ function getAllEvents(traits2) {
|
|
|
32459
32755
|
}
|
|
32460
32756
|
function EventDispatcherTab({ traits: traits2, schema }) {
|
|
32461
32757
|
const eventBus = useEventBus();
|
|
32462
|
-
const [log, setLog] =
|
|
32463
|
-
const prevStatesRef =
|
|
32464
|
-
|
|
32758
|
+
const [log, setLog] = React90.useState([]);
|
|
32759
|
+
const prevStatesRef = React90.useRef(/* @__PURE__ */ new Map());
|
|
32760
|
+
React90.useEffect(() => {
|
|
32465
32761
|
for (const trait of traits2) {
|
|
32466
32762
|
const prev = prevStatesRef.current.get(trait.id);
|
|
32467
32763
|
if (prev && prev !== trait.currentState) {
|
|
@@ -32504,7 +32800,7 @@ function EventDispatcherTab({ traits: traits2, schema }) {
|
|
|
32504
32800
|
] }),
|
|
32505
32801
|
/* @__PURE__ */ jsxs("div", { className: "mb-3", children: [
|
|
32506
32802
|
/* @__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
|
|
32803
|
+
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
32804
|
/* @__PURE__ */ jsx(
|
|
32509
32805
|
Button,
|
|
32510
32806
|
{
|
|
@@ -32515,8 +32811,8 @@ function EventDispatcherTab({ traits: traits2, schema }) {
|
|
|
32515
32811
|
children: event
|
|
32516
32812
|
}
|
|
32517
32813
|
),
|
|
32518
|
-
/* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-gray-500", children:
|
|
32519
|
-
|
|
32814
|
+
/* @__PURE__ */ jsx(Typography, { variant: "small", className: "text-gray-500", children: transitions.map((t) => `${t.from} -> ${t.to}`).join(", ") }),
|
|
32815
|
+
transitions.some((t) => t.guard) && /* @__PURE__ */ jsx(Badge, { variant: "warning", size: "sm", children: "guarded" })
|
|
32520
32816
|
] }, event)) })
|
|
32521
32817
|
] }),
|
|
32522
32818
|
unavailableEvents.length > 0 && /* @__PURE__ */ jsxs("div", { className: "mb-3", children: [
|
|
@@ -32544,10 +32840,10 @@ function RuntimeDebugger({
|
|
|
32544
32840
|
defaultTab,
|
|
32545
32841
|
schema
|
|
32546
32842
|
}) {
|
|
32547
|
-
const [isCollapsed, setIsCollapsed] =
|
|
32548
|
-
const [isVisible, setIsVisible] =
|
|
32843
|
+
const [isCollapsed, setIsCollapsed] = React90.useState(mode === "verify" ? true : defaultCollapsed);
|
|
32844
|
+
const [isVisible, setIsVisible] = React90.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
|
|
32549
32845
|
const debugData = useDebugData();
|
|
32550
|
-
|
|
32846
|
+
React90.useEffect(() => {
|
|
32551
32847
|
if (mode === "inline") return;
|
|
32552
32848
|
return onDebugToggle((enabled) => {
|
|
32553
32849
|
setIsVisible(enabled);
|
|
@@ -32556,7 +32852,7 @@ function RuntimeDebugger({
|
|
|
32556
32852
|
}
|
|
32557
32853
|
});
|
|
32558
32854
|
}, [mode]);
|
|
32559
|
-
|
|
32855
|
+
React90.useEffect(() => {
|
|
32560
32856
|
if (mode === "inline") return;
|
|
32561
32857
|
const handleKeyDown = (e) => {
|
|
32562
32858
|
if (e.key === "`" && isVisible) {
|
|
@@ -32683,6 +32979,56 @@ function RuntimeDebugger({
|
|
|
32683
32979
|
}
|
|
32684
32980
|
);
|
|
32685
32981
|
}
|
|
32982
|
+
if (mode === "verify") {
|
|
32983
|
+
const traitStates = debugData.traits.map((t) => `${t.name}:${t.currentState}`).join(" | ");
|
|
32984
|
+
return /* @__PURE__ */ jsxs(
|
|
32985
|
+
"div",
|
|
32986
|
+
{
|
|
32987
|
+
className: cn(
|
|
32988
|
+
"runtime-debugger runtime-debugger--verify",
|
|
32989
|
+
"h-[35vh] flex flex-col bg-gray-900 text-white border-t-2 border-cyan-500",
|
|
32990
|
+
className
|
|
32991
|
+
),
|
|
32992
|
+
"data-testid": "debugger-verify",
|
|
32993
|
+
children: [
|
|
32994
|
+
/* @__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: [
|
|
32995
|
+
/* @__PURE__ */ jsx(Badge, { variant: failedChecks > 0 ? "danger" : "success", size: "sm", children: failedChecks > 0 ? `${failedChecks} fail` : "OK" }),
|
|
32996
|
+
/* @__PURE__ */ jsxs("span", { className: "text-gray-400", children: [
|
|
32997
|
+
verification.transitions.length,
|
|
32998
|
+
" transitions"
|
|
32999
|
+
] }),
|
|
33000
|
+
traitStates && /* @__PURE__ */ jsx("span", { className: "text-cyan-400 truncate max-w-[400px]", children: traitStates })
|
|
33001
|
+
] }),
|
|
33002
|
+
/* @__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) => {
|
|
33003
|
+
const hasFailedEffects = trace.effects.some((e) => e.status === "failed");
|
|
33004
|
+
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: [
|
|
33005
|
+
/* @__PURE__ */ jsx("span", { className: cn(
|
|
33006
|
+
"mt-1.5 w-1.5 h-1.5 rounded-full flex-shrink-0",
|
|
33007
|
+
hasFailedEffects ? "bg-red-500" : "bg-green-500"
|
|
33008
|
+
) }),
|
|
33009
|
+
/* @__PURE__ */ jsx(Badge, { variant: "info", size: "sm", className: "flex-shrink-0", children: trace.event }),
|
|
33010
|
+
/* @__PURE__ */ jsxs("span", { className: "text-gray-400 flex-shrink-0", children: [
|
|
33011
|
+
trace.from,
|
|
33012
|
+
" ",
|
|
33013
|
+
"\u2192",
|
|
33014
|
+
" ",
|
|
33015
|
+
trace.to
|
|
33016
|
+
] }),
|
|
33017
|
+
/* @__PURE__ */ jsx("span", { className: "flex flex-wrap gap-1 ml-1", children: trace.effects.map((eff, i) => /* @__PURE__ */ jsxs("span", { className: cn(
|
|
33018
|
+
"px-1 rounded text-[10px]",
|
|
33019
|
+
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"
|
|
33020
|
+
), children: [
|
|
33021
|
+
eff.status === "executed" ? "\u2713" : eff.status === "failed" ? "\u2717" : "-",
|
|
33022
|
+
" ",
|
|
33023
|
+
eff.type,
|
|
33024
|
+
eff.args.length > 0 && /* @__PURE__ */ jsx("span", { className: "text-gray-500 ml-0.5", children: JSON.stringify(eff.args).slice(0, 30) })
|
|
33025
|
+
] }, i)) })
|
|
33026
|
+
] }, trace.id);
|
|
33027
|
+
}) }) }) })
|
|
33028
|
+
]
|
|
33029
|
+
}
|
|
33030
|
+
);
|
|
33031
|
+
}
|
|
32686
33032
|
return /* @__PURE__ */ jsx(
|
|
32687
33033
|
"div",
|
|
32688
33034
|
{
|
|
@@ -32953,7 +33299,7 @@ var Timeline = ({
|
|
|
32953
33299
|
}) => {
|
|
32954
33300
|
const { t } = useTranslate();
|
|
32955
33301
|
const entityData = Array.isArray(entity) ? entity : [];
|
|
32956
|
-
const items =
|
|
33302
|
+
const items = React90__default.useMemo(() => {
|
|
32957
33303
|
if (propItems) return propItems;
|
|
32958
33304
|
if (entityData.length === 0) return [];
|
|
32959
33305
|
return entityData.map((record, idx) => {
|
|
@@ -33055,7 +33401,7 @@ var Timeline = ({
|
|
|
33055
33401
|
};
|
|
33056
33402
|
Timeline.displayName = "Timeline";
|
|
33057
33403
|
function extractToastProps(children) {
|
|
33058
|
-
if (!
|
|
33404
|
+
if (!React90__default.isValidElement(children)) {
|
|
33059
33405
|
if (typeof children === "string") {
|
|
33060
33406
|
return { message: children };
|
|
33061
33407
|
}
|
|
@@ -33086,7 +33432,7 @@ var ToastSlot = ({
|
|
|
33086
33432
|
eventBus.emit("UI:CLOSE");
|
|
33087
33433
|
};
|
|
33088
33434
|
if (!isVisible) return null;
|
|
33089
|
-
const isCustomContent =
|
|
33435
|
+
const isCustomContent = React90__default.isValidElement(children) && !message;
|
|
33090
33436
|
return /* @__PURE__ */ jsx(Box, { className: "fixed bottom-4 right-4 z-50", children: isCustomContent ? children : /* @__PURE__ */ jsx(
|
|
33091
33437
|
Toast,
|
|
33092
33438
|
{
|
|
@@ -33128,12 +33474,12 @@ WorldMapTemplate.displayName = "WorldMapTemplate";
|
|
|
33128
33474
|
|
|
33129
33475
|
// components/organisms/component-registry.generated.ts
|
|
33130
33476
|
function lazyThree(name, loader) {
|
|
33131
|
-
const Lazy =
|
|
33477
|
+
const Lazy = React90__default.lazy(() => loader().then((m) => ({ default: m[name] })));
|
|
33132
33478
|
function ThreeWrapper(props) {
|
|
33133
|
-
return
|
|
33134
|
-
|
|
33479
|
+
return React90__default.createElement(
|
|
33480
|
+
React90__default.Suspense,
|
|
33135
33481
|
{ fallback: null },
|
|
33136
|
-
|
|
33482
|
+
React90__default.createElement(Lazy, props)
|
|
33137
33483
|
);
|
|
33138
33484
|
}
|
|
33139
33485
|
ThreeWrapper.displayName = `Lazy(${name})`;
|
|
@@ -33421,7 +33767,7 @@ function SuspenseConfigProvider({
|
|
|
33421
33767
|
config,
|
|
33422
33768
|
children
|
|
33423
33769
|
}) {
|
|
33424
|
-
return
|
|
33770
|
+
return React90__default.createElement(
|
|
33425
33771
|
SuspenseConfigContext.Provider,
|
|
33426
33772
|
{ value: config },
|
|
33427
33773
|
children
|
|
@@ -35804,7 +36150,7 @@ function EntityDataProvider({
|
|
|
35804
36150
|
adapter,
|
|
35805
36151
|
children
|
|
35806
36152
|
}) {
|
|
35807
|
-
return
|
|
36153
|
+
return React90__default.createElement(
|
|
35808
36154
|
EntityDataContext.Provider,
|
|
35809
36155
|
{ value: adapter },
|
|
35810
36156
|
children
|
|
@@ -36383,14 +36729,14 @@ function useEntityMutations(entityName, options) {
|
|
|
36383
36729
|
|
|
36384
36730
|
// stores/entityStore.ts
|
|
36385
36731
|
var entities = /* @__PURE__ */ new Map();
|
|
36386
|
-
var
|
|
36732
|
+
var listeners6 = /* @__PURE__ */ new Set();
|
|
36387
36733
|
var idCounter2 = 0;
|
|
36388
36734
|
function subscribe(listener) {
|
|
36389
|
-
|
|
36390
|
-
return () =>
|
|
36735
|
+
listeners6.add(listener);
|
|
36736
|
+
return () => listeners6.delete(listener);
|
|
36391
36737
|
}
|
|
36392
36738
|
function notify() {
|
|
36393
|
-
|
|
36739
|
+
listeners6.forEach((listener) => listener());
|
|
36394
36740
|
}
|
|
36395
36741
|
function getEntity(id) {
|
|
36396
36742
|
return entities.get(id);
|
|
@@ -36630,4 +36976,4 @@ function useGitHubBranches(owner, repo, enabled = true) {
|
|
|
36630
36976
|
});
|
|
36631
36977
|
}
|
|
36632
36978
|
|
|
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 };
|
|
36979
|
+
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 };
|