@almadar/ui 5.65.0 → 5.68.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/avl/index.cjs +3259 -1568
- package/dist/avl/index.d.cts +10 -2
- package/dist/avl/index.d.ts +1 -0
- package/dist/avl/index.js +1992 -302
- package/dist/components/avl/derive-edit-focus.d.ts +8 -0
- package/dist/components/core/organisms/ChatBar.d.ts +31 -0
- package/dist/components/core/organisms/SubagentTracePanel.d.ts +50 -0
- package/dist/components/core/organisms/index.d.ts +3 -0
- package/dist/components/core/organisms/trace-edit-focus.d.ts +14 -0
- package/dist/components/game/atoms/ChoiceButton.d.ts +7 -1
- package/dist/components/game/molecules/HealthPanel.d.ts +3 -0
- package/dist/components/game/molecules/IsometricCanvas.d.ts +1 -1
- package/dist/components/game/molecules/PowerupSlots.d.ts +3 -0
- package/dist/components/game/molecules/TurnPanel.d.ts +3 -0
- package/dist/components/game/molecules/three/index.cjs +6 -6
- package/dist/components/game/molecules/three/index.js +6 -6
- package/dist/components/game/organisms/BoardgameBoard.d.ts +37 -0
- package/dist/components/game/organisms/FishingBoard.d.ts +33 -0
- package/dist/components/game/organisms/HolidayRunnerBoard.d.ts +35 -0
- package/dist/components/game/organisms/MatchPuzzleBoard.d.ts +37 -0
- package/dist/components/game/organisms/MinigolfBoard.d.ts +37 -0
- package/dist/components/game/organisms/PinballBoard.d.ts +35 -0
- package/dist/components/game/organisms/PirateBoard.d.ts +37 -0
- package/dist/components/game/organisms/RacingBoard.d.ts +29 -0
- package/dist/components/game/organisms/SokobanBoard.d.ts +37 -0
- package/dist/components/game/organisms/SpaceShmupBoard.d.ts +20 -0
- package/dist/components/game/organisms/SpaceStationBoard.d.ts +37 -0
- package/dist/components/game/organisms/SportsBoard.d.ts +37 -0
- package/dist/components/game/organisms/TanksBoard.d.ts +37 -0
- package/dist/components/game/organisms/index.d.ts +13 -0
- package/dist/components/game/organisms/utils/isometric.d.ts +10 -1
- package/dist/components/index.cjs +3096 -1377
- package/dist/components/index.js +1970 -266
- package/dist/hooks/index.cjs +94 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.js +95 -2
- package/dist/hooks/useAgentTrace.d.ts +85 -0
- package/dist/providers/index.cjs +3037 -1351
- package/dist/providers/index.js +1937 -251
- package/dist/runtime/index.cjs +3095 -1409
- package/dist/runtime/index.js +1943 -257
- package/package.json +2 -2
package/dist/components/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
-
import * as
|
|
3
|
-
import
|
|
2
|
+
import * as React80 from 'react';
|
|
3
|
+
import React80__default, { useContext, useMemo, useRef, useEffect, useCallback, useState, Suspense, lazy, createContext, useLayoutEffect, useId, forwardRef, useImperativeHandle, useSyncExternalStore, Component } from 'react';
|
|
4
4
|
import { clsx } from 'clsx';
|
|
5
5
|
import { twMerge } from 'tailwind-merge';
|
|
6
6
|
import { EventBusContext, useTraitScope, TraitScopeProvider } from '@almadar/ui/providers';
|
|
@@ -49,7 +49,7 @@ import { GLTFLoader as GLTFLoader$1 } from 'three/examples/jsm/loaders/GLTFLoade
|
|
|
49
49
|
import { clone } from 'three/examples/jsm/utils/SkeletonUtils';
|
|
50
50
|
import { Canvas, useLoader, useFrame, useThree } from '@react-three/fiber';
|
|
51
51
|
import { Billboard, Grid as Grid$1, OrbitControls } from '@react-three/drei';
|
|
52
|
-
import { getPatternDefinition as getPatternDefinition$1, getComponentForPattern
|
|
52
|
+
import { getPatternDefinition as getPatternDefinition$1, getComponentForPattern } from '@almadar/patterns';
|
|
53
53
|
|
|
54
54
|
var __defProp = Object.defineProperty;
|
|
55
55
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -234,7 +234,7 @@ var init_SvgFlow = __esm({
|
|
|
234
234
|
width = 100,
|
|
235
235
|
height = 100
|
|
236
236
|
}) => {
|
|
237
|
-
const markerId =
|
|
237
|
+
const markerId = React80__default.useMemo(() => {
|
|
238
238
|
flowIdCounter += 1;
|
|
239
239
|
return `almadar-flow-arrow-${flowIdCounter}`;
|
|
240
240
|
}, []);
|
|
@@ -827,7 +827,7 @@ var init_SvgRing = __esm({
|
|
|
827
827
|
width = 100,
|
|
828
828
|
height = 100
|
|
829
829
|
}) => {
|
|
830
|
-
const gradientId =
|
|
830
|
+
const gradientId = React80__default.useMemo(() => {
|
|
831
831
|
ringIdCounter += 1;
|
|
832
832
|
return `almadar-ring-glow-${ringIdCounter}`;
|
|
833
833
|
}, []);
|
|
@@ -1239,7 +1239,7 @@ function loadLib(key, importer) {
|
|
|
1239
1239
|
return p2;
|
|
1240
1240
|
}
|
|
1241
1241
|
function lazyFamilyIcon(libKey, importer, pick, fallbackName, family) {
|
|
1242
|
-
const Lazy =
|
|
1242
|
+
const Lazy = React80__default.lazy(async () => {
|
|
1243
1243
|
const lib = await loadLib(libKey, importer);
|
|
1244
1244
|
const Comp = pick(lib);
|
|
1245
1245
|
if (!Comp) {
|
|
@@ -1249,7 +1249,7 @@ function lazyFamilyIcon(libKey, importer, pick, fallbackName, family) {
|
|
|
1249
1249
|
return { default: Comp };
|
|
1250
1250
|
});
|
|
1251
1251
|
const Wrapped = (props) => /* @__PURE__ */ jsx(
|
|
1252
|
-
|
|
1252
|
+
React80__default.Suspense,
|
|
1253
1253
|
{
|
|
1254
1254
|
fallback: /* @__PURE__ */ jsx(
|
|
1255
1255
|
"span",
|
|
@@ -1975,7 +1975,7 @@ var init_Icon = __esm({
|
|
|
1975
1975
|
const directIcon = typeof icon === "string" ? void 0 : icon;
|
|
1976
1976
|
const effectiveName = typeof icon === "string" ? icon : name;
|
|
1977
1977
|
const family = useIconFamily();
|
|
1978
|
-
const RenderedComponent =
|
|
1978
|
+
const RenderedComponent = React80__default.useMemo(() => {
|
|
1979
1979
|
if (directIcon) return null;
|
|
1980
1980
|
return effectiveName ? resolveIconForFamily(effectiveName, family) : null;
|
|
1981
1981
|
}, [directIcon, effectiveName, family]);
|
|
@@ -2034,7 +2034,7 @@ function resolveIconProp(value, sizeClass) {
|
|
|
2034
2034
|
const IconComp = value;
|
|
2035
2035
|
return /* @__PURE__ */ jsx(IconComp, { className: sizeClass });
|
|
2036
2036
|
}
|
|
2037
|
-
if (
|
|
2037
|
+
if (React80__default.isValidElement(value)) {
|
|
2038
2038
|
return value;
|
|
2039
2039
|
}
|
|
2040
2040
|
if (typeof value === "object" && value !== null && "render" in value) {
|
|
@@ -2110,7 +2110,7 @@ var init_Button = __esm({
|
|
|
2110
2110
|
md: "h-icon-default w-icon-default",
|
|
2111
2111
|
lg: "h-icon-default w-icon-default"
|
|
2112
2112
|
};
|
|
2113
|
-
Button =
|
|
2113
|
+
Button = React80__default.forwardRef(
|
|
2114
2114
|
({
|
|
2115
2115
|
className,
|
|
2116
2116
|
variant = "primary",
|
|
@@ -2177,7 +2177,7 @@ var init_Input = __esm({
|
|
|
2177
2177
|
init_cn();
|
|
2178
2178
|
init_Icon();
|
|
2179
2179
|
init_useEventBus();
|
|
2180
|
-
Input =
|
|
2180
|
+
Input = React80__default.forwardRef(
|
|
2181
2181
|
({
|
|
2182
2182
|
className,
|
|
2183
2183
|
inputType,
|
|
@@ -2337,7 +2337,7 @@ var Label;
|
|
|
2337
2337
|
var init_Label = __esm({
|
|
2338
2338
|
"components/core/atoms/Label.tsx"() {
|
|
2339
2339
|
init_cn();
|
|
2340
|
-
Label =
|
|
2340
|
+
Label = React80__default.forwardRef(
|
|
2341
2341
|
({ className, required, children, ...props }, ref) => {
|
|
2342
2342
|
return /* @__PURE__ */ jsxs(
|
|
2343
2343
|
"label",
|
|
@@ -2364,7 +2364,7 @@ var init_Textarea = __esm({
|
|
|
2364
2364
|
"components/core/atoms/Textarea.tsx"() {
|
|
2365
2365
|
init_cn();
|
|
2366
2366
|
init_useEventBus();
|
|
2367
|
-
Textarea =
|
|
2367
|
+
Textarea = React80__default.forwardRef(
|
|
2368
2368
|
({ className, error, onChange, ...props }, ref) => {
|
|
2369
2369
|
const eventBus = useEventBus();
|
|
2370
2370
|
const handleChange = (e) => {
|
|
@@ -2603,7 +2603,7 @@ var init_Select = __esm({
|
|
|
2603
2603
|
init_cn();
|
|
2604
2604
|
init_Icon();
|
|
2605
2605
|
init_useEventBus();
|
|
2606
|
-
Select =
|
|
2606
|
+
Select = React80__default.forwardRef(
|
|
2607
2607
|
(props, _ref) => {
|
|
2608
2608
|
const { multiple, searchable, clearable } = props;
|
|
2609
2609
|
if (multiple || searchable || clearable) {
|
|
@@ -2620,7 +2620,7 @@ var init_Checkbox = __esm({
|
|
|
2620
2620
|
"components/core/atoms/Checkbox.tsx"() {
|
|
2621
2621
|
init_cn();
|
|
2622
2622
|
init_useEventBus();
|
|
2623
|
-
Checkbox =
|
|
2623
|
+
Checkbox = React80__default.forwardRef(
|
|
2624
2624
|
({ className, label, id, onChange, ...props }, ref) => {
|
|
2625
2625
|
const inputId = id || `checkbox-${Math.random().toString(36).substr(2, 9)}`;
|
|
2626
2626
|
const eventBus = useEventBus();
|
|
@@ -2674,7 +2674,7 @@ var init_Spinner = __esm({
|
|
|
2674
2674
|
md: "h-6 w-6",
|
|
2675
2675
|
lg: "h-8 w-8"
|
|
2676
2676
|
};
|
|
2677
|
-
Spinner =
|
|
2677
|
+
Spinner = React80__default.forwardRef(
|
|
2678
2678
|
({ className, size = "md", overlay, ...props }, ref) => {
|
|
2679
2679
|
if (overlay) {
|
|
2680
2680
|
return /* @__PURE__ */ jsx(
|
|
@@ -2764,7 +2764,7 @@ var init_Card = __esm({
|
|
|
2764
2764
|
chip: "shadow-none rounded-pill border-[length:var(--border-width)] border-border",
|
|
2765
2765
|
"tile-image-first": "p-0 overflow-hidden"
|
|
2766
2766
|
};
|
|
2767
|
-
Card =
|
|
2767
|
+
Card = React80__default.forwardRef(
|
|
2768
2768
|
({
|
|
2769
2769
|
className,
|
|
2770
2770
|
variant = "bordered",
|
|
@@ -2812,9 +2812,9 @@ var init_Card = __esm({
|
|
|
2812
2812
|
}
|
|
2813
2813
|
);
|
|
2814
2814
|
Card.displayName = "Card";
|
|
2815
|
-
CardHeader =
|
|
2815
|
+
CardHeader = React80__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
|
|
2816
2816
|
CardHeader.displayName = "CardHeader";
|
|
2817
|
-
CardTitle =
|
|
2817
|
+
CardTitle = React80__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
2818
2818
|
"h3",
|
|
2819
2819
|
{
|
|
2820
2820
|
ref,
|
|
@@ -2827,11 +2827,11 @@ var init_Card = __esm({
|
|
|
2827
2827
|
}
|
|
2828
2828
|
));
|
|
2829
2829
|
CardTitle.displayName = "CardTitle";
|
|
2830
|
-
CardContent =
|
|
2830
|
+
CardContent = React80__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
|
|
2831
2831
|
CardContent.displayName = "CardContent";
|
|
2832
2832
|
CardBody = CardContent;
|
|
2833
2833
|
CardBody.displayName = "CardBody";
|
|
2834
|
-
CardFooter =
|
|
2834
|
+
CardFooter = React80__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
2835
2835
|
"div",
|
|
2836
2836
|
{
|
|
2837
2837
|
ref,
|
|
@@ -2884,7 +2884,7 @@ var init_Badge = __esm({
|
|
|
2884
2884
|
md: "px-2.5 py-1 text-sm",
|
|
2885
2885
|
lg: "px-3 py-1.5 text-base"
|
|
2886
2886
|
};
|
|
2887
|
-
Badge =
|
|
2887
|
+
Badge = React80__default.forwardRef(
|
|
2888
2888
|
({ className, variant = "default", size = "sm", amount, label, icon, children, onRemove, removeLabel, ...props }, ref) => {
|
|
2889
2889
|
const iconSizes3 = {
|
|
2890
2890
|
sm: "h-icon-default w-icon-default",
|
|
@@ -2977,7 +2977,7 @@ var init_FilterPill = __esm({
|
|
|
2977
2977
|
md: "w-3.5 h-3.5",
|
|
2978
2978
|
lg: "w-4 h-4"
|
|
2979
2979
|
};
|
|
2980
|
-
FilterPill =
|
|
2980
|
+
FilterPill = React80__default.forwardRef(
|
|
2981
2981
|
({
|
|
2982
2982
|
className,
|
|
2983
2983
|
variant = "default",
|
|
@@ -3106,8 +3106,8 @@ var init_Avatar = __esm({
|
|
|
3106
3106
|
actionPayload
|
|
3107
3107
|
}) => {
|
|
3108
3108
|
const eventBus = useEventBus();
|
|
3109
|
-
const [imgFailed, setImgFailed] =
|
|
3110
|
-
|
|
3109
|
+
const [imgFailed, setImgFailed] = React80__default.useState(false);
|
|
3110
|
+
React80__default.useEffect(() => {
|
|
3111
3111
|
setImgFailed(false);
|
|
3112
3112
|
}, [src]);
|
|
3113
3113
|
const initials = providedInitials ?? (name ? generateInitials(name) : void 0);
|
|
@@ -3359,7 +3359,7 @@ var init_Box = __esm({
|
|
|
3359
3359
|
fixed: "fixed",
|
|
3360
3360
|
sticky: "sticky"
|
|
3361
3361
|
};
|
|
3362
|
-
Box =
|
|
3362
|
+
Box = React80__default.forwardRef(
|
|
3363
3363
|
({
|
|
3364
3364
|
padding,
|
|
3365
3365
|
paddingX,
|
|
@@ -3424,7 +3424,7 @@ var init_Box = __esm({
|
|
|
3424
3424
|
onPointerDown?.(e);
|
|
3425
3425
|
}, [hoverEvent, tapReveal, triggerProps, onPointerDown]);
|
|
3426
3426
|
const isClickable = action || onClick;
|
|
3427
|
-
return
|
|
3427
|
+
return React80__default.createElement(
|
|
3428
3428
|
Component2,
|
|
3429
3429
|
{
|
|
3430
3430
|
ref,
|
|
@@ -3750,7 +3750,7 @@ var init_Radio = __esm({
|
|
|
3750
3750
|
md: "w-2.5 h-2.5",
|
|
3751
3751
|
lg: "w-3 h-3"
|
|
3752
3752
|
};
|
|
3753
|
-
Radio =
|
|
3753
|
+
Radio = React80__default.forwardRef(
|
|
3754
3754
|
({
|
|
3755
3755
|
label,
|
|
3756
3756
|
helperText,
|
|
@@ -3767,12 +3767,12 @@ var init_Radio = __esm({
|
|
|
3767
3767
|
onChange,
|
|
3768
3768
|
...props
|
|
3769
3769
|
}, ref) => {
|
|
3770
|
-
const reactId =
|
|
3770
|
+
const reactId = React80__default.useId();
|
|
3771
3771
|
const baseId = id || `radio-${reactId}`;
|
|
3772
3772
|
const hasError = !!error;
|
|
3773
3773
|
const eventBus = useEventBus();
|
|
3774
|
-
const [selected, setSelected] =
|
|
3775
|
-
|
|
3774
|
+
const [selected, setSelected] = React80__default.useState(value);
|
|
3775
|
+
React80__default.useEffect(() => {
|
|
3776
3776
|
if (value !== void 0) setSelected(value);
|
|
3777
3777
|
}, [value]);
|
|
3778
3778
|
const pick = (next, e) => {
|
|
@@ -3954,7 +3954,7 @@ var init_Switch = __esm({
|
|
|
3954
3954
|
"components/core/atoms/Switch.tsx"() {
|
|
3955
3955
|
"use client";
|
|
3956
3956
|
init_cn();
|
|
3957
|
-
Switch =
|
|
3957
|
+
Switch = React80.forwardRef(
|
|
3958
3958
|
({
|
|
3959
3959
|
checked,
|
|
3960
3960
|
defaultChecked = false,
|
|
@@ -3965,10 +3965,10 @@ var init_Switch = __esm({
|
|
|
3965
3965
|
name,
|
|
3966
3966
|
className
|
|
3967
3967
|
}, ref) => {
|
|
3968
|
-
const [isChecked, setIsChecked] =
|
|
3968
|
+
const [isChecked, setIsChecked] = React80.useState(
|
|
3969
3969
|
checked !== void 0 ? checked : defaultChecked
|
|
3970
3970
|
);
|
|
3971
|
-
|
|
3971
|
+
React80.useEffect(() => {
|
|
3972
3972
|
if (checked !== void 0) {
|
|
3973
3973
|
setIsChecked(checked);
|
|
3974
3974
|
}
|
|
@@ -4625,7 +4625,7 @@ var Dialog;
|
|
|
4625
4625
|
var init_Dialog = __esm({
|
|
4626
4626
|
"components/core/atoms/Dialog.tsx"() {
|
|
4627
4627
|
init_cn();
|
|
4628
|
-
Dialog =
|
|
4628
|
+
Dialog = React80__default.forwardRef(
|
|
4629
4629
|
({
|
|
4630
4630
|
role = "dialog",
|
|
4631
4631
|
"aria-modal": ariaModal = true,
|
|
@@ -4651,7 +4651,7 @@ var Aside;
|
|
|
4651
4651
|
var init_Aside = __esm({
|
|
4652
4652
|
"components/core/atoms/Aside.tsx"() {
|
|
4653
4653
|
init_cn();
|
|
4654
|
-
Aside =
|
|
4654
|
+
Aside = React80__default.forwardRef(
|
|
4655
4655
|
({ className, children, ...rest }, ref) => /* @__PURE__ */ jsx("aside", { ref, className: cn(className), ...rest, children })
|
|
4656
4656
|
);
|
|
4657
4657
|
Aside.displayName = "Aside";
|
|
@@ -4730,9 +4730,9 @@ var init_LawReferenceTooltip = __esm({
|
|
|
4730
4730
|
className
|
|
4731
4731
|
}) => {
|
|
4732
4732
|
const { t } = useTranslate();
|
|
4733
|
-
const [isVisible, setIsVisible] =
|
|
4734
|
-
const timeoutRef =
|
|
4735
|
-
const triggerRef =
|
|
4733
|
+
const [isVisible, setIsVisible] = React80__default.useState(false);
|
|
4734
|
+
const timeoutRef = React80__default.useRef(null);
|
|
4735
|
+
const triggerRef = React80__default.useRef(null);
|
|
4736
4736
|
const handleMouseEnter = () => {
|
|
4737
4737
|
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
4738
4738
|
timeoutRef.current = setTimeout(() => setIsVisible(true), 200);
|
|
@@ -4743,7 +4743,7 @@ var init_LawReferenceTooltip = __esm({
|
|
|
4743
4743
|
};
|
|
4744
4744
|
const { revealed, triggerProps } = useTapReveal({ refs: [triggerRef] });
|
|
4745
4745
|
const open = isVisible || revealed;
|
|
4746
|
-
|
|
4746
|
+
React80__default.useEffect(() => {
|
|
4747
4747
|
return () => {
|
|
4748
4748
|
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
4749
4749
|
};
|
|
@@ -4955,7 +4955,7 @@ var init_StatusDot = __esm({
|
|
|
4955
4955
|
md: "w-2.5 h-2.5",
|
|
4956
4956
|
lg: "w-3 h-3"
|
|
4957
4957
|
};
|
|
4958
|
-
StatusDot =
|
|
4958
|
+
StatusDot = React80__default.forwardRef(
|
|
4959
4959
|
({ className, status = "offline", pulse = false, size = "md", label, ...props }, ref) => {
|
|
4960
4960
|
return /* @__PURE__ */ jsx(
|
|
4961
4961
|
"span",
|
|
@@ -5009,7 +5009,7 @@ var init_TrendIndicator = __esm({
|
|
|
5009
5009
|
down: "trending-down",
|
|
5010
5010
|
flat: "arrow-right"
|
|
5011
5011
|
};
|
|
5012
|
-
TrendIndicator =
|
|
5012
|
+
TrendIndicator = React80__default.forwardRef(
|
|
5013
5013
|
({
|
|
5014
5014
|
className,
|
|
5015
5015
|
value,
|
|
@@ -5076,7 +5076,7 @@ var init_RangeSlider = __esm({
|
|
|
5076
5076
|
md: "w-4 h-4",
|
|
5077
5077
|
lg: "w-5 h-5"
|
|
5078
5078
|
};
|
|
5079
|
-
RangeSlider =
|
|
5079
|
+
RangeSlider = React80__default.forwardRef(
|
|
5080
5080
|
({
|
|
5081
5081
|
className,
|
|
5082
5082
|
min = 0,
|
|
@@ -5672,7 +5672,7 @@ var init_ContentSection = __esm({
|
|
|
5672
5672
|
md: "py-16",
|
|
5673
5673
|
lg: "py-24"
|
|
5674
5674
|
};
|
|
5675
|
-
ContentSection =
|
|
5675
|
+
ContentSection = React80__default.forwardRef(
|
|
5676
5676
|
({ children, background = "default", padding = "lg", id, className }, ref) => {
|
|
5677
5677
|
return /* @__PURE__ */ jsx(
|
|
5678
5678
|
Box,
|
|
@@ -6206,7 +6206,7 @@ var init_AnimatedReveal = __esm({
|
|
|
6206
6206
|
"scale-up": { opacity: 1, transform: "scale(1) translateY(0)" },
|
|
6207
6207
|
"none": {}
|
|
6208
6208
|
};
|
|
6209
|
-
AnimatedReveal =
|
|
6209
|
+
AnimatedReveal = React80__default.forwardRef(
|
|
6210
6210
|
({
|
|
6211
6211
|
trigger = "scroll",
|
|
6212
6212
|
animation = "fade-up",
|
|
@@ -6366,7 +6366,7 @@ var init_AnimatedGraphic = __esm({
|
|
|
6366
6366
|
"components/marketing/atoms/AnimatedGraphic.tsx"() {
|
|
6367
6367
|
"use client";
|
|
6368
6368
|
init_cn();
|
|
6369
|
-
AnimatedGraphic =
|
|
6369
|
+
AnimatedGraphic = React80__default.forwardRef(
|
|
6370
6370
|
({
|
|
6371
6371
|
src,
|
|
6372
6372
|
svgContent,
|
|
@@ -6389,7 +6389,7 @@ var init_AnimatedGraphic = __esm({
|
|
|
6389
6389
|
const fetchedSvg = useFetchedSvg(svgContent ? void 0 : src);
|
|
6390
6390
|
const resolvedSvg = svgContent ?? fetchedSvg;
|
|
6391
6391
|
const prevAnimateRef = useRef(animate);
|
|
6392
|
-
const setRef =
|
|
6392
|
+
const setRef = React80__default.useCallback(
|
|
6393
6393
|
(node) => {
|
|
6394
6394
|
containerRef.current = node;
|
|
6395
6395
|
if (typeof ref === "function") ref(node);
|
|
@@ -7071,7 +7071,7 @@ var init_ErrorBoundary = __esm({
|
|
|
7071
7071
|
}
|
|
7072
7072
|
);
|
|
7073
7073
|
};
|
|
7074
|
-
ErrorBoundary = class extends
|
|
7074
|
+
ErrorBoundary = class extends React80__default.Component {
|
|
7075
7075
|
constructor(props) {
|
|
7076
7076
|
super(props);
|
|
7077
7077
|
__publicField(this, "reset", () => {
|
|
@@ -8191,9 +8191,9 @@ function ControlButton({
|
|
|
8191
8191
|
className
|
|
8192
8192
|
}) {
|
|
8193
8193
|
const eventBus = useEventBus();
|
|
8194
|
-
const [isPressed, setIsPressed] =
|
|
8194
|
+
const [isPressed, setIsPressed] = React80.useState(false);
|
|
8195
8195
|
const actualPressed = pressed ?? isPressed;
|
|
8196
|
-
const handlePointerDown =
|
|
8196
|
+
const handlePointerDown = React80.useCallback(
|
|
8197
8197
|
(e) => {
|
|
8198
8198
|
e.preventDefault();
|
|
8199
8199
|
if (disabled) return;
|
|
@@ -8203,7 +8203,7 @@ function ControlButton({
|
|
|
8203
8203
|
},
|
|
8204
8204
|
[disabled, pressEvent, eventBus, onPress]
|
|
8205
8205
|
);
|
|
8206
|
-
const handlePointerUp =
|
|
8206
|
+
const handlePointerUp = React80.useCallback(
|
|
8207
8207
|
(e) => {
|
|
8208
8208
|
e.preventDefault();
|
|
8209
8209
|
if (disabled) return;
|
|
@@ -8213,7 +8213,7 @@ function ControlButton({
|
|
|
8213
8213
|
},
|
|
8214
8214
|
[disabled, releaseEvent, eventBus, onRelease]
|
|
8215
8215
|
);
|
|
8216
|
-
const handlePointerLeave =
|
|
8216
|
+
const handlePointerLeave = React80.useCallback(
|
|
8217
8217
|
(e) => {
|
|
8218
8218
|
if (isPressed) {
|
|
8219
8219
|
setIsPressed(false);
|
|
@@ -8301,8 +8301,8 @@ function ActionButtons({
|
|
|
8301
8301
|
disabled
|
|
8302
8302
|
}) {
|
|
8303
8303
|
const eventBus = useEventBus();
|
|
8304
|
-
const [activeButtons, setActiveButtons] =
|
|
8305
|
-
const handlePress =
|
|
8304
|
+
const [activeButtons, setActiveButtons] = React80.useState(/* @__PURE__ */ new Set());
|
|
8305
|
+
const handlePress = React80.useCallback(
|
|
8306
8306
|
(id) => {
|
|
8307
8307
|
setActiveButtons((prev) => new Set(prev).add(id));
|
|
8308
8308
|
if (actionEvent) eventBus.emit(`UI:${actionEvent}`, { id, pressed: true });
|
|
@@ -8310,7 +8310,7 @@ function ActionButtons({
|
|
|
8310
8310
|
},
|
|
8311
8311
|
[actionEvent, eventBus, onAction]
|
|
8312
8312
|
);
|
|
8313
|
-
const handleRelease =
|
|
8313
|
+
const handleRelease = React80.useCallback(
|
|
8314
8314
|
(id) => {
|
|
8315
8315
|
setActiveButtons((prev) => {
|
|
8316
8316
|
const next = new Set(prev);
|
|
@@ -9885,6 +9885,11 @@ function isoToScreen(tileX, tileY, scale, baseOffsetX, layout = "isometric") {
|
|
|
9885
9885
|
const screenY2 = tileY * (scaledFloorHeight * 0.75);
|
|
9886
9886
|
return { x: screenX2, y: screenY2 };
|
|
9887
9887
|
}
|
|
9888
|
+
if (layout === "flat") {
|
|
9889
|
+
const screenX2 = tileX * scaledTileWidth + baseOffsetX;
|
|
9890
|
+
const screenY2 = tileY * scaledFloorHeight;
|
|
9891
|
+
return { x: screenX2, y: screenY2 };
|
|
9892
|
+
}
|
|
9888
9893
|
const screenX = (tileX - tileY) * (scaledTileWidth / 2) + baseOffsetX;
|
|
9889
9894
|
const screenY = (tileX + tileY) * (scaledFloorHeight / 2);
|
|
9890
9895
|
return { x: screenX, y: screenY };
|
|
@@ -9897,6 +9902,11 @@ function screenToIso(screenX, screenY, scale, baseOffsetX, layout = "isometric")
|
|
|
9897
9902
|
const col = Math.round((screenX - (row & 1) * (scaledTileWidth / 2) - baseOffsetX) / scaledTileWidth);
|
|
9898
9903
|
return { x: col, y: row };
|
|
9899
9904
|
}
|
|
9905
|
+
if (layout === "flat") {
|
|
9906
|
+
const col = Math.round((screenX - baseOffsetX) / scaledTileWidth);
|
|
9907
|
+
const row = Math.round(screenY / scaledFloorHeight);
|
|
9908
|
+
return { x: col, y: row };
|
|
9909
|
+
}
|
|
9900
9910
|
const adjustedX = screenX - baseOffsetX;
|
|
9901
9911
|
const tileX = (adjustedX / (scaledTileWidth / 2) + screenY / (scaledFloorHeight / 2)) / 2;
|
|
9902
9912
|
const tileY = (screenY / (scaledFloorHeight / 2) - adjustedX / (scaledTileWidth / 2)) / 2;
|
|
@@ -10016,7 +10026,7 @@ function IsometricCanvas({
|
|
|
10016
10026
|
);
|
|
10017
10027
|
const sortedTiles = useMemo(() => {
|
|
10018
10028
|
const tiles = [...tilesProp];
|
|
10019
|
-
if (tileLayout === "hex") {
|
|
10029
|
+
if (tileLayout === "hex" || tileLayout === "flat") {
|
|
10020
10030
|
tiles.sort((a, b) => a.y !== b.y ? a.y - b.y : a.x - b.x);
|
|
10021
10031
|
} else {
|
|
10022
10032
|
tiles.sort((a, b) => {
|
|
@@ -10144,7 +10154,8 @@ function IsometricCanvas({
|
|
|
10144
10154
|
const minX = Math.min(...allScreenPos.map((p2) => p2.x));
|
|
10145
10155
|
const maxX = Math.max(...allScreenPos.map((p2) => p2.x + scaledTileWidth));
|
|
10146
10156
|
const minY = Math.min(...allScreenPos.map((p2) => p2.y));
|
|
10147
|
-
const
|
|
10157
|
+
const tileBottomExtent = tileLayout === "hex" || tileLayout === "flat" ? scaledTileWidth : scaledTileHeight;
|
|
10158
|
+
const maxY = Math.max(...allScreenPos.map((p2) => p2.y + tileBottomExtent));
|
|
10148
10159
|
const worldW = maxX - minX;
|
|
10149
10160
|
const worldH = maxY - minY;
|
|
10150
10161
|
const scaleM = Math.min(mW / worldW, mH / worldH) * 0.9;
|
|
@@ -10236,7 +10247,7 @@ function IsometricCanvas({
|
|
|
10236
10247
|
const drawW = scaledTileWidth;
|
|
10237
10248
|
const drawH = scaledTileWidth * (img.naturalHeight / img.naturalWidth);
|
|
10238
10249
|
const drawX = pos.x;
|
|
10239
|
-
const drawY = pos.y + scaledTileHeight - drawH;
|
|
10250
|
+
const drawY = tileLayout === "hex" || tileLayout === "flat" ? pos.y : pos.y + scaledTileHeight - drawH;
|
|
10240
10251
|
ctx.drawImage(img, drawX, drawY, drawW, drawH);
|
|
10241
10252
|
}
|
|
10242
10253
|
} else {
|
|
@@ -10303,7 +10314,7 @@ function IsometricCanvas({
|
|
|
10303
10314
|
}
|
|
10304
10315
|
}
|
|
10305
10316
|
const sortedFeatures = [...features].sort((a, b) => {
|
|
10306
|
-
if (tileLayout === "hex") return a.y !== b.y ? a.y - b.y : a.x - b.x;
|
|
10317
|
+
if (tileLayout === "hex" || tileLayout === "flat") return a.y !== b.y ? a.y - b.y : a.x - b.x;
|
|
10307
10318
|
const depthA = a.x + a.y;
|
|
10308
10319
|
const depthB = b.x + b.y;
|
|
10309
10320
|
return depthA !== depthB ? depthA - depthB : a.y - b.y;
|
|
@@ -10344,7 +10355,7 @@ function IsometricCanvas({
|
|
|
10344
10355
|
}
|
|
10345
10356
|
const unitsWithPosition = units.filter((u) => !!u.position);
|
|
10346
10357
|
const sortedUnits = [...unitsWithPosition].sort((a, b) => {
|
|
10347
|
-
if (tileLayout === "hex") return a.position.y !== b.position.y ? a.position.y - b.position.y : a.position.x - b.position.x;
|
|
10358
|
+
if (tileLayout === "hex" || tileLayout === "flat") return a.position.y !== b.position.y ? a.position.y - b.position.y : a.position.x - b.position.x;
|
|
10348
10359
|
const depthA = a.position.x + a.position.y;
|
|
10349
10360
|
const depthB = b.position.x + b.position.y;
|
|
10350
10361
|
return depthA !== depthB ? depthA - depthB : a.position.y - b.position.y;
|
|
@@ -12519,7 +12530,7 @@ var init_CodeBlock = __esm({
|
|
|
12519
12530
|
};
|
|
12520
12531
|
LINE_PROPS_FN = (n) => ({ "data-line": String(n - 1) });
|
|
12521
12532
|
HIDDEN_LINE_NUMBERS = { display: "none" };
|
|
12522
|
-
CodeBlock =
|
|
12533
|
+
CodeBlock = React80__default.memo(
|
|
12523
12534
|
({
|
|
12524
12535
|
code: rawCode,
|
|
12525
12536
|
language = "text",
|
|
@@ -13106,7 +13117,7 @@ var init_MarkdownContent = __esm({
|
|
|
13106
13117
|
init_Box();
|
|
13107
13118
|
init_CodeBlock();
|
|
13108
13119
|
init_cn();
|
|
13109
|
-
MarkdownContent =
|
|
13120
|
+
MarkdownContent = React80__default.memo(
|
|
13110
13121
|
({ content, direction = "ltr", className }) => {
|
|
13111
13122
|
const { t: _t } = useTranslate();
|
|
13112
13123
|
const safeContent = typeof content === "string" ? content : String(content ?? "");
|
|
@@ -13396,6 +13407,48 @@ var init_BloomQuizBlock = __esm({
|
|
|
13396
13407
|
BloomQuizBlock.displayName = "BloomQuizBlock";
|
|
13397
13408
|
}
|
|
13398
13409
|
});
|
|
13410
|
+
function BoardgameBoard({
|
|
13411
|
+
tiles,
|
|
13412
|
+
units,
|
|
13413
|
+
features,
|
|
13414
|
+
assetManifest,
|
|
13415
|
+
assetBaseUrl,
|
|
13416
|
+
scale = 0.45,
|
|
13417
|
+
showMinimap = false,
|
|
13418
|
+
enableCamera = true,
|
|
13419
|
+
tileClickEvent,
|
|
13420
|
+
unitClickEvent,
|
|
13421
|
+
isLoading,
|
|
13422
|
+
error,
|
|
13423
|
+
className
|
|
13424
|
+
}) {
|
|
13425
|
+
return /* @__PURE__ */ jsx("div", { className: cn("boardgame-board relative w-full h-full", className), children: /* @__PURE__ */ jsx(
|
|
13426
|
+
IsometricCanvas_default,
|
|
13427
|
+
{
|
|
13428
|
+
tileLayout: "flat",
|
|
13429
|
+
tiles,
|
|
13430
|
+
units,
|
|
13431
|
+
features,
|
|
13432
|
+
assetManifest,
|
|
13433
|
+
assetBaseUrl,
|
|
13434
|
+
scale,
|
|
13435
|
+
showMinimap,
|
|
13436
|
+
enableCamera,
|
|
13437
|
+
tileClickEvent,
|
|
13438
|
+
unitClickEvent,
|
|
13439
|
+
isLoading,
|
|
13440
|
+
error
|
|
13441
|
+
}
|
|
13442
|
+
) });
|
|
13443
|
+
}
|
|
13444
|
+
var init_BoardgameBoard = __esm({
|
|
13445
|
+
"components/game/organisms/BoardgameBoard.tsx"() {
|
|
13446
|
+
"use client";
|
|
13447
|
+
init_cn();
|
|
13448
|
+
init_IsometricCanvas();
|
|
13449
|
+
BoardgameBoard.displayName = "BoardgameBoard";
|
|
13450
|
+
}
|
|
13451
|
+
});
|
|
13399
13452
|
var MIN_DIAGRAM_WIDTH, ScaledDiagram;
|
|
13400
13453
|
var init_ScaledDiagram = __esm({
|
|
13401
13454
|
"components/core/molecules/ScaledDiagram.tsx"() {
|
|
@@ -14433,7 +14486,7 @@ var init_StateMachineView = __esm({
|
|
|
14433
14486
|
style: { top: title ? 30 : 0 },
|
|
14434
14487
|
children: [
|
|
14435
14488
|
entity && /* @__PURE__ */ jsx(EntityBox, { entity, config }),
|
|
14436
|
-
states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(
|
|
14489
|
+
states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React80__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
|
|
14437
14490
|
StateNode,
|
|
14438
14491
|
{
|
|
14439
14492
|
state,
|
|
@@ -18388,7 +18441,7 @@ function CardHand({
|
|
|
18388
18441
|
className
|
|
18389
18442
|
}) {
|
|
18390
18443
|
const eventBus = useEventBus();
|
|
18391
|
-
const handleClick =
|
|
18444
|
+
const handleClick = React80.useCallback(
|
|
18392
18445
|
(card) => {
|
|
18393
18446
|
if (card.disabled) return;
|
|
18394
18447
|
onCardClick?.(card.id);
|
|
@@ -20534,9 +20587,220 @@ var init_ChartLegend = __esm({
|
|
|
20534
20587
|
ChartLegend.displayName = "ChartLegend";
|
|
20535
20588
|
}
|
|
20536
20589
|
});
|
|
20590
|
+
|
|
20591
|
+
// components/core/organisms/trace-edit-focus.ts
|
|
20592
|
+
function asString(v) {
|
|
20593
|
+
return typeof v === "string" ? v : void 0;
|
|
20594
|
+
}
|
|
20595
|
+
function asLevel(v) {
|
|
20596
|
+
if (typeof v === "string" && EDIT_FOCUS_LEVELS.has(v)) {
|
|
20597
|
+
return v;
|
|
20598
|
+
}
|
|
20599
|
+
return "node";
|
|
20600
|
+
}
|
|
20601
|
+
function isEventPayload(v) {
|
|
20602
|
+
return v !== null && v !== void 0 && typeof v === "object" && !Array.isArray(v) && !(v instanceof Date);
|
|
20603
|
+
}
|
|
20604
|
+
function parseEditFocus(value) {
|
|
20605
|
+
if (!isEventPayload(value)) return null;
|
|
20606
|
+
const payload = value;
|
|
20607
|
+
const orbital = asString(payload.orbital);
|
|
20608
|
+
if (orbital === void 0 || orbital.length === 0) return null;
|
|
20609
|
+
const focus = {
|
|
20610
|
+
level: asLevel(payload.level),
|
|
20611
|
+
orbital,
|
|
20612
|
+
label: asString(payload.label) ?? orbital
|
|
20613
|
+
};
|
|
20614
|
+
const trait = asString(payload.trait);
|
|
20615
|
+
if (trait !== void 0) focus.trait = trait;
|
|
20616
|
+
const transition = asString(payload.transition);
|
|
20617
|
+
if (transition !== void 0) focus.transition = transition;
|
|
20618
|
+
const state = asString(payload.state);
|
|
20619
|
+
if (state !== void 0) focus.state = state;
|
|
20620
|
+
const slot = asString(payload.slot);
|
|
20621
|
+
if (slot !== void 0) focus.slot = slot;
|
|
20622
|
+
const path = asString(payload.path);
|
|
20623
|
+
if (path !== void 0) focus.path = path;
|
|
20624
|
+
const patternType = asString(payload.patternType);
|
|
20625
|
+
if (patternType !== void 0) focus.patternType = patternType;
|
|
20626
|
+
const entity = asString(payload.entity);
|
|
20627
|
+
if (entity !== void 0) focus.entity = entity;
|
|
20628
|
+
const source = asString(payload.source);
|
|
20629
|
+
if (source !== void 0) focus.source = source;
|
|
20630
|
+
return focus;
|
|
20631
|
+
}
|
|
20632
|
+
var ELEMENT_SELECTED_EVENT, EDIT_FOCUS_LEVELS;
|
|
20633
|
+
var init_trace_edit_focus = __esm({
|
|
20634
|
+
"components/core/organisms/trace-edit-focus.ts"() {
|
|
20635
|
+
ELEMENT_SELECTED_EVENT = "UI:ELEMENT_SELECTED";
|
|
20636
|
+
EDIT_FOCUS_LEVELS = /* @__PURE__ */ new Set([
|
|
20637
|
+
"node",
|
|
20638
|
+
"slot",
|
|
20639
|
+
"field",
|
|
20640
|
+
"effect",
|
|
20641
|
+
"trait",
|
|
20642
|
+
"page",
|
|
20643
|
+
"orbital"
|
|
20644
|
+
]);
|
|
20645
|
+
}
|
|
20646
|
+
});
|
|
20647
|
+
function getJepaBadgeVariant(probability) {
|
|
20648
|
+
if (probability >= 0.9) return "success";
|
|
20649
|
+
if (probability >= 0.5) return "warning";
|
|
20650
|
+
return "danger";
|
|
20651
|
+
}
|
|
20652
|
+
function ChatBar({
|
|
20653
|
+
status = "idle",
|
|
20654
|
+
activeGate,
|
|
20655
|
+
jepaValidity,
|
|
20656
|
+
placeholder,
|
|
20657
|
+
context,
|
|
20658
|
+
className
|
|
20659
|
+
}) {
|
|
20660
|
+
const { t } = useTranslate();
|
|
20661
|
+
const eventBus = useEventBus();
|
|
20662
|
+
const [inputValue, setInputValue] = useState("");
|
|
20663
|
+
const [focus, setFocus] = useState(null);
|
|
20664
|
+
const clearFocus = useCallback(() => {
|
|
20665
|
+
setFocus(null);
|
|
20666
|
+
eventBus.emit(ELEMENT_SELECTED_EVENT, { focus: null });
|
|
20667
|
+
}, [eventBus]);
|
|
20668
|
+
const handleKeyDown = useCallback((e) => {
|
|
20669
|
+
if (e.key !== "Enter" || e.shiftKey) return;
|
|
20670
|
+
const trimmed = inputValue.trim();
|
|
20671
|
+
if (!trimmed) return;
|
|
20672
|
+
e.preventDefault();
|
|
20673
|
+
eventBus.emit("UI:CHAT_SEND", { message: trimmed });
|
|
20674
|
+
}, [inputValue, eventBus]);
|
|
20675
|
+
useEffect(() => {
|
|
20676
|
+
const unsubSend = eventBus.on("UI:CHAT_SEND", () => {
|
|
20677
|
+
setInputValue("");
|
|
20678
|
+
setFocus(null);
|
|
20679
|
+
});
|
|
20680
|
+
const unsubSelect = eventBus.on(ELEMENT_SELECTED_EVENT, (e) => {
|
|
20681
|
+
setFocus(parseEditFocus(e.payload?.focus));
|
|
20682
|
+
});
|
|
20683
|
+
return () => {
|
|
20684
|
+
unsubSend();
|
|
20685
|
+
unsubSelect();
|
|
20686
|
+
};
|
|
20687
|
+
}, [eventBus]);
|
|
20688
|
+
const trailingAction = status === "error" ? /* @__PURE__ */ jsxs(Button, { variant: "secondary", size: "sm", action: "RETRY_GENERATION", className: "rounded-none flex-shrink-0 h-auto", children: [
|
|
20689
|
+
/* @__PURE__ */ jsx(Icon, { name: "refresh-cw", size: "xs" }),
|
|
20690
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", children: t("openFile.retry") })
|
|
20691
|
+
] }) : status === "running" ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
20692
|
+
/* @__PURE__ */ jsx(
|
|
20693
|
+
Button,
|
|
20694
|
+
{
|
|
20695
|
+
variant: "ghost",
|
|
20696
|
+
size: "sm",
|
|
20697
|
+
action: "PAUSE",
|
|
20698
|
+
title: t("chatBar.pauseTheAgentYouCanEdit"),
|
|
20699
|
+
className: "rounded-none flex-shrink-0 h-auto",
|
|
20700
|
+
children: /* @__PURE__ */ jsx(Icon, { name: "pause", size: "xs" })
|
|
20701
|
+
}
|
|
20702
|
+
),
|
|
20703
|
+
/* @__PURE__ */ jsx(
|
|
20704
|
+
Button,
|
|
20705
|
+
{
|
|
20706
|
+
variant: "ghost",
|
|
20707
|
+
size: "sm",
|
|
20708
|
+
action: "STOP",
|
|
20709
|
+
title: t("chatBar.cancelGeneration"),
|
|
20710
|
+
className: "rounded-none flex-shrink-0 h-auto border-l border-[var(--color-border)]",
|
|
20711
|
+
children: /* @__PURE__ */ jsx(Icon, { name: "square", size: "xs" })
|
|
20712
|
+
}
|
|
20713
|
+
)
|
|
20714
|
+
] }) : status === "paused" ? /* @__PURE__ */ jsxs(
|
|
20715
|
+
Button,
|
|
20716
|
+
{
|
|
20717
|
+
variant: "primary",
|
|
20718
|
+
size: "sm",
|
|
20719
|
+
action: "RESUME",
|
|
20720
|
+
title: t("chatBar.resumeTheAgentYourCanvasEdits"),
|
|
20721
|
+
className: "rounded-none flex-shrink-0 h-auto",
|
|
20722
|
+
children: [
|
|
20723
|
+
/* @__PURE__ */ jsx(Icon, { name: "play", size: "xs" }),
|
|
20724
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", children: t("chatBar.resume") })
|
|
20725
|
+
]
|
|
20726
|
+
}
|
|
20727
|
+
) : /* @__PURE__ */ jsx(
|
|
20728
|
+
Button,
|
|
20729
|
+
{
|
|
20730
|
+
variant: "primary",
|
|
20731
|
+
size: "sm",
|
|
20732
|
+
action: "CHAT_SEND",
|
|
20733
|
+
actionPayload: { message: inputValue.trim() },
|
|
20734
|
+
disabled: !inputValue.trim(),
|
|
20735
|
+
"aria-label": t("chatBar.sendMessage"),
|
|
20736
|
+
className: "rounded-none flex-shrink-0 h-auto",
|
|
20737
|
+
children: /* @__PURE__ */ jsx(Icon, { name: "send", size: "xs" })
|
|
20738
|
+
}
|
|
20739
|
+
);
|
|
20740
|
+
return /* @__PURE__ */ jsxs(Box, { className: `border-t border-[var(--color-border)] bg-[var(--color-card)] ${className ?? ""}`, children: [
|
|
20741
|
+
focus && /* @__PURE__ */ jsx(HStack, { gap: "xs", className: "items-center px-4 pt-2", children: /* @__PURE__ */ jsxs(Badge, { variant: "secondary", size: "sm", className: "flex items-center gap-1 max-w-full", children: [
|
|
20742
|
+
/* @__PURE__ */ jsx(Icon, { name: "mouse-pointer-2", size: "xs" }),
|
|
20743
|
+
/* @__PURE__ */ jsxs(Typography, { variant: "caption", className: "text-inherit truncate", children: [
|
|
20744
|
+
t("chatBar.editing"),
|
|
20745
|
+
": ",
|
|
20746
|
+
focus.label
|
|
20747
|
+
] }),
|
|
20748
|
+
/* @__PURE__ */ jsx(
|
|
20749
|
+
Box,
|
|
20750
|
+
{
|
|
20751
|
+
onClick: clearFocus,
|
|
20752
|
+
title: t("chatBar.clearSelection"),
|
|
20753
|
+
className: "cursor-pointer flex items-center ml-1 hover:opacity-70",
|
|
20754
|
+
children: /* @__PURE__ */ jsx(Icon, { name: "x", size: "xs" })
|
|
20755
|
+
}
|
|
20756
|
+
)
|
|
20757
|
+
] }) }),
|
|
20758
|
+
/* @__PURE__ */ jsxs(HStack, { gap: "sm", className: "items-center px-4 py-2", children: [
|
|
20759
|
+
context && /* @__PURE__ */ jsx(Badge, { variant: "primary", size: "sm", className: "whitespace-nowrap flex-shrink-0", children: /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-inherit", children: context }) }),
|
|
20760
|
+
/* @__PURE__ */ jsxs(Box, { className: "flex-1 min-w-0 flex items-stretch rounded-[var(--radius-md)] border border-[var(--color-border)] bg-[var(--color-background)] focus-within:border-[var(--color-primary)] overflow-hidden", children: [
|
|
20761
|
+
/* @__PURE__ */ jsx(
|
|
20762
|
+
Textarea,
|
|
20763
|
+
{
|
|
20764
|
+
value: inputValue,
|
|
20765
|
+
placeholder: placeholder ?? t("chatBar.askTheAgentAnything"),
|
|
20766
|
+
onChange: (e) => setInputValue(e.target.value),
|
|
20767
|
+
onKeyDown: handleKeyDown,
|
|
20768
|
+
rows: 1,
|
|
20769
|
+
className: "flex-1 min-w-0 min-h-0 text-sm border-0 rounded-none shadow-none bg-transparent resize-none focus:ring-0"
|
|
20770
|
+
}
|
|
20771
|
+
),
|
|
20772
|
+
trailingAction
|
|
20773
|
+
] }),
|
|
20774
|
+
(activeGate || jepaValidity !== void 0) && /* @__PURE__ */ jsxs(HStack, { gap: "xs", className: "items-center flex-shrink-0", children: [
|
|
20775
|
+
activeGate && /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "whitespace-nowrap", children: activeGate }),
|
|
20776
|
+
jepaValidity !== void 0 && /* @__PURE__ */ jsx(Badge, { variant: getJepaBadgeVariant(jepaValidity), size: "sm", children: /* @__PURE__ */ jsxs(Typography, { variant: "caption", className: "text-inherit", children: [
|
|
20777
|
+
(jepaValidity * 100).toFixed(1),
|
|
20778
|
+
"%"
|
|
20779
|
+
] }) })
|
|
20780
|
+
] })
|
|
20781
|
+
] })
|
|
20782
|
+
] });
|
|
20783
|
+
}
|
|
20784
|
+
var init_ChatBar = __esm({
|
|
20785
|
+
"components/core/organisms/ChatBar.tsx"() {
|
|
20786
|
+
"use client";
|
|
20787
|
+
init_Box();
|
|
20788
|
+
init_Stack();
|
|
20789
|
+
init_Typography();
|
|
20790
|
+
init_Button();
|
|
20791
|
+
init_Badge();
|
|
20792
|
+
init_Icon();
|
|
20793
|
+
init_Textarea();
|
|
20794
|
+
init_useEventBus();
|
|
20795
|
+
init_trace_edit_focus();
|
|
20796
|
+
ChatBar.displayName = "ChatBar";
|
|
20797
|
+
}
|
|
20798
|
+
});
|
|
20537
20799
|
function ChoiceButton({
|
|
20538
20800
|
text = "Charge forward into the fray",
|
|
20539
20801
|
index,
|
|
20802
|
+
assetUrl,
|
|
20803
|
+
icon,
|
|
20540
20804
|
disabled = false,
|
|
20541
20805
|
selected = false,
|
|
20542
20806
|
onClick,
|
|
@@ -20569,6 +20833,23 @@ function ChoiceButton({
|
|
|
20569
20833
|
]
|
|
20570
20834
|
}
|
|
20571
20835
|
),
|
|
20836
|
+
assetUrl ? /* @__PURE__ */ jsx(
|
|
20837
|
+
"img",
|
|
20838
|
+
{
|
|
20839
|
+
src: assetUrl,
|
|
20840
|
+
alt: "",
|
|
20841
|
+
width: 16,
|
|
20842
|
+
height: 16,
|
|
20843
|
+
style: { imageRendering: "pixelated", objectFit: "contain" },
|
|
20844
|
+
className: "flex-shrink-0"
|
|
20845
|
+
}
|
|
20846
|
+
) : icon ? /* @__PURE__ */ jsx("span", { className: "flex-shrink-0 text-sm", children: typeof icon === "string" ? (() => {
|
|
20847
|
+
const I = resolveIcon(icon);
|
|
20848
|
+
return I ? /* @__PURE__ */ jsx(I, { className: "w-4 h-4" }) : null;
|
|
20849
|
+
})() : /* @__PURE__ */ (() => {
|
|
20850
|
+
const I = icon;
|
|
20851
|
+
return /* @__PURE__ */ jsx(I, { className: "w-4 h-4" });
|
|
20852
|
+
})() }) : null,
|
|
20572
20853
|
/* @__PURE__ */ jsx("span", { className: "text-sm leading-snug", children: text })
|
|
20573
20854
|
]
|
|
20574
20855
|
}
|
|
@@ -20577,6 +20858,7 @@ function ChoiceButton({
|
|
|
20577
20858
|
var init_ChoiceButton = __esm({
|
|
20578
20859
|
"components/game/atoms/ChoiceButton.tsx"() {
|
|
20579
20860
|
init_cn();
|
|
20861
|
+
init_Icon();
|
|
20580
20862
|
ChoiceButton.displayName = "ChoiceButton";
|
|
20581
20863
|
}
|
|
20582
20864
|
});
|
|
@@ -21867,7 +22149,7 @@ function CraftingRecipe({
|
|
|
21867
22149
|
className
|
|
21868
22150
|
}) {
|
|
21869
22151
|
const eventBus = useEventBus();
|
|
21870
|
-
const handleCraft =
|
|
22152
|
+
const handleCraft = React80.useCallback(() => {
|
|
21871
22153
|
onCraft?.();
|
|
21872
22154
|
if (craftEvent) {
|
|
21873
22155
|
eventBus.emit(craftEvent, { output: output.label });
|
|
@@ -21884,7 +22166,7 @@ function CraftingRecipe({
|
|
|
21884
22166
|
children: [
|
|
21885
22167
|
/* @__PURE__ */ jsx(HStack, { gap: "xs", className: "flex-wrap items-center", children: inputs.map((ingredient, index) => {
|
|
21886
22168
|
const hasSufficient = ingredient.available >= ingredient.required;
|
|
21887
|
-
return /* @__PURE__ */ jsxs(
|
|
22169
|
+
return /* @__PURE__ */ jsxs(React80.Fragment, { children: [
|
|
21888
22170
|
/* @__PURE__ */ jsx(Box, { className: "relative", children: /* @__PURE__ */ jsx(
|
|
21889
22171
|
ItemSlot,
|
|
21890
22172
|
{
|
|
@@ -21956,8 +22238,8 @@ function DPad({
|
|
|
21956
22238
|
}) {
|
|
21957
22239
|
const eventBus = useEventBus();
|
|
21958
22240
|
const sizes = sizeMap6[size];
|
|
21959
|
-
const [activeDirections, setActiveDirections] =
|
|
21960
|
-
const handlePress =
|
|
22241
|
+
const [activeDirections, setActiveDirections] = React80.useState(/* @__PURE__ */ new Set());
|
|
22242
|
+
const handlePress = React80.useCallback(
|
|
21961
22243
|
(direction) => {
|
|
21962
22244
|
setActiveDirections((prev) => new Set(prev).add(direction));
|
|
21963
22245
|
if (directionEvent) eventBus.emit(`UI:${directionEvent}`, { direction, pressed: true });
|
|
@@ -21965,7 +22247,7 @@ function DPad({
|
|
|
21965
22247
|
},
|
|
21966
22248
|
[directionEvent, eventBus, onDirection]
|
|
21967
22249
|
);
|
|
21968
|
-
const handleRelease =
|
|
22250
|
+
const handleRelease = React80.useCallback(
|
|
21969
22251
|
(direction) => {
|
|
21970
22252
|
setActiveDirections((prev) => {
|
|
21971
22253
|
const next = new Set(prev);
|
|
@@ -22914,8 +23196,8 @@ var init_Menu = __esm({
|
|
|
22914
23196
|
"bottom-end": "bottom-start"
|
|
22915
23197
|
};
|
|
22916
23198
|
const effectivePosition = direction === "rtl" ? rtlMirror[position] ?? position : position;
|
|
22917
|
-
const triggerChild =
|
|
22918
|
-
const triggerElement =
|
|
23199
|
+
const triggerChild = React80__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx(Typography, { variant: "small", as: "span", children: trigger });
|
|
23200
|
+
const triggerElement = React80__default.cloneElement(
|
|
22919
23201
|
triggerChild,
|
|
22920
23202
|
{
|
|
22921
23203
|
ref: triggerRef,
|
|
@@ -23010,14 +23292,14 @@ function useDataDnd(args) {
|
|
|
23010
23292
|
const isZone = Boolean(dragGroup || accepts || sortable);
|
|
23011
23293
|
const enabled = isZone || Boolean(dndRoot);
|
|
23012
23294
|
const eventBus = useEventBus();
|
|
23013
|
-
const parentRoot =
|
|
23295
|
+
const parentRoot = React80__default.useContext(RootCtx);
|
|
23014
23296
|
const isRoot = enabled && parentRoot === null;
|
|
23015
|
-
const zoneId =
|
|
23297
|
+
const zoneId = React80__default.useId();
|
|
23016
23298
|
const ownGroup = dragGroup ?? accepts ?? zoneId;
|
|
23017
|
-
const [optimisticOrders, setOptimisticOrders] =
|
|
23018
|
-
const optimisticOrdersRef =
|
|
23299
|
+
const [optimisticOrders, setOptimisticOrders] = React80__default.useState(() => /* @__PURE__ */ new Map());
|
|
23300
|
+
const optimisticOrdersRef = React80__default.useRef(optimisticOrders);
|
|
23019
23301
|
optimisticOrdersRef.current = optimisticOrders;
|
|
23020
|
-
const clearOptimisticOrder =
|
|
23302
|
+
const clearOptimisticOrder = React80__default.useCallback((group) => {
|
|
23021
23303
|
setOptimisticOrders((prev) => {
|
|
23022
23304
|
if (!prev.has(group)) return prev;
|
|
23023
23305
|
const next = new Map(prev);
|
|
@@ -23042,7 +23324,7 @@ function useDataDnd(args) {
|
|
|
23042
23324
|
const raw = it[dndItemIdField];
|
|
23043
23325
|
return String(raw ?? `__idx_${idx}`);
|
|
23044
23326
|
}).join("|");
|
|
23045
|
-
const itemIds =
|
|
23327
|
+
const itemIds = React80__default.useMemo(
|
|
23046
23328
|
() => orderedItems.map((it, idx) => {
|
|
23047
23329
|
const raw = it[dndItemIdField];
|
|
23048
23330
|
return raw ?? `__idx_${idx}`;
|
|
@@ -23050,7 +23332,7 @@ function useDataDnd(args) {
|
|
|
23050
23332
|
[itemIdsSignature]
|
|
23051
23333
|
);
|
|
23052
23334
|
const itemsContentSig = items.map((it, idx) => String(it[dndItemIdField] ?? `__${idx}`)).join("|");
|
|
23053
|
-
|
|
23335
|
+
React80__default.useEffect(() => {
|
|
23054
23336
|
const root = isRoot ? null : parentRoot;
|
|
23055
23337
|
if (root) {
|
|
23056
23338
|
root.clearOptimisticOrder(ownGroup);
|
|
@@ -23058,20 +23340,20 @@ function useDataDnd(args) {
|
|
|
23058
23340
|
clearOptimisticOrder(ownGroup);
|
|
23059
23341
|
}
|
|
23060
23342
|
}, [itemsContentSig, ownGroup]);
|
|
23061
|
-
const zonesRef =
|
|
23062
|
-
const registerZone =
|
|
23343
|
+
const zonesRef = React80__default.useRef(/* @__PURE__ */ new Map());
|
|
23344
|
+
const registerZone = React80__default.useCallback((zoneId2, meta2) => {
|
|
23063
23345
|
zonesRef.current.set(zoneId2, meta2);
|
|
23064
23346
|
}, []);
|
|
23065
|
-
const unregisterZone =
|
|
23347
|
+
const unregisterZone = React80__default.useCallback((zoneId2) => {
|
|
23066
23348
|
zonesRef.current.delete(zoneId2);
|
|
23067
23349
|
}, []);
|
|
23068
|
-
const [activeDrag, setActiveDrag] =
|
|
23069
|
-
const [overZoneGroup, setOverZoneGroup] =
|
|
23070
|
-
const meta =
|
|
23350
|
+
const [activeDrag, setActiveDrag] = React80__default.useState(null);
|
|
23351
|
+
const [overZoneGroup, setOverZoneGroup] = React80__default.useState(null);
|
|
23352
|
+
const meta = React80__default.useMemo(
|
|
23071
23353
|
() => ({ group: ownGroup, dropEvent, reorderEvent, positionEvent, itemIds, rawItems: items, idField: dndItemIdField }),
|
|
23072
23354
|
[ownGroup, dropEvent, reorderEvent, positionEvent, itemIds, items, dndItemIdField]
|
|
23073
23355
|
);
|
|
23074
|
-
|
|
23356
|
+
React80__default.useEffect(() => {
|
|
23075
23357
|
const target = isRoot ? null : parentRoot;
|
|
23076
23358
|
if (!target) {
|
|
23077
23359
|
zonesRef.current.set(zoneId, meta);
|
|
@@ -23090,7 +23372,7 @@ function useDataDnd(args) {
|
|
|
23090
23372
|
}, [parentRoot, isRoot, zoneId, meta]);
|
|
23091
23373
|
const sensors = useAlmadarDndSensors(true);
|
|
23092
23374
|
const collisionDetection = almadarDndCollisionDetection;
|
|
23093
|
-
const findZoneByItem =
|
|
23375
|
+
const findZoneByItem = React80__default.useCallback(
|
|
23094
23376
|
(id) => {
|
|
23095
23377
|
for (const z of zonesRef.current.values()) {
|
|
23096
23378
|
if (z.itemIds.includes(id)) return z;
|
|
@@ -23099,7 +23381,7 @@ function useDataDnd(args) {
|
|
|
23099
23381
|
},
|
|
23100
23382
|
[]
|
|
23101
23383
|
);
|
|
23102
|
-
|
|
23384
|
+
React80__default.useCallback(
|
|
23103
23385
|
(group) => {
|
|
23104
23386
|
for (const z of zonesRef.current.values()) {
|
|
23105
23387
|
if (z.group === group) return z;
|
|
@@ -23108,7 +23390,7 @@ function useDataDnd(args) {
|
|
|
23108
23390
|
},
|
|
23109
23391
|
[]
|
|
23110
23392
|
);
|
|
23111
|
-
const handleDragEnd =
|
|
23393
|
+
const handleDragEnd = React80__default.useCallback(
|
|
23112
23394
|
(event) => {
|
|
23113
23395
|
const { active, over } = event;
|
|
23114
23396
|
const activeIdStr = String(active.id);
|
|
@@ -23199,8 +23481,8 @@ function useDataDnd(args) {
|
|
|
23199
23481
|
},
|
|
23200
23482
|
[eventBus]
|
|
23201
23483
|
);
|
|
23202
|
-
const sortableData =
|
|
23203
|
-
const SortableItem =
|
|
23484
|
+
const sortableData = React80__default.useMemo(() => ({ dndGroup: ownGroup }), [ownGroup]);
|
|
23485
|
+
const SortableItem = React80__default.useCallback(
|
|
23204
23486
|
({ id, children }) => {
|
|
23205
23487
|
const {
|
|
23206
23488
|
attributes,
|
|
@@ -23240,7 +23522,7 @@ function useDataDnd(args) {
|
|
|
23240
23522
|
id: droppableId,
|
|
23241
23523
|
data: sortableData
|
|
23242
23524
|
});
|
|
23243
|
-
const ctx =
|
|
23525
|
+
const ctx = React80__default.useContext(RootCtx);
|
|
23244
23526
|
const activeDrag2 = ctx?.activeDrag ?? null;
|
|
23245
23527
|
const overZoneGroup2 = ctx?.overZoneGroup ?? null;
|
|
23246
23528
|
const isThisZoneOver = overZoneGroup2 === ownGroup;
|
|
@@ -23255,7 +23537,7 @@ function useDataDnd(args) {
|
|
|
23255
23537
|
showForeignPlaceholder,
|
|
23256
23538
|
ctxAvailable: ctx != null
|
|
23257
23539
|
});
|
|
23258
|
-
|
|
23540
|
+
React80__default.useEffect(() => {
|
|
23259
23541
|
dndLog.info("dropzone:isOver:change", { droppableId, group: ownGroup, isOver, isThisZoneOver, showForeignPlaceholder, activeDragSourceGroup: activeDrag2?.sourceGroup ?? null });
|
|
23260
23542
|
}, [droppableId, isOver, isThisZoneOver, showForeignPlaceholder]);
|
|
23261
23543
|
return /* @__PURE__ */ jsx(
|
|
@@ -23269,11 +23551,11 @@ function useDataDnd(args) {
|
|
|
23269
23551
|
}
|
|
23270
23552
|
);
|
|
23271
23553
|
};
|
|
23272
|
-
const rootContextValue =
|
|
23554
|
+
const rootContextValue = React80__default.useMemo(
|
|
23273
23555
|
() => ({ registerZone, unregisterZone, activeDrag, overZoneGroup, optimisticOrders, clearOptimisticOrder }),
|
|
23274
23556
|
[registerZone, unregisterZone, activeDrag, overZoneGroup, optimisticOrders, clearOptimisticOrder]
|
|
23275
23557
|
);
|
|
23276
|
-
const handleDragStart =
|
|
23558
|
+
const handleDragStart = React80__default.useCallback((event) => {
|
|
23277
23559
|
const sourceZone = findZoneByItem(event.active.id);
|
|
23278
23560
|
const rect = event.active.rect.current.initial;
|
|
23279
23561
|
const height = rect?.height && rect.height > 0 ? rect.height : 64;
|
|
@@ -23292,7 +23574,7 @@ function useDataDnd(args) {
|
|
|
23292
23574
|
isRoot
|
|
23293
23575
|
});
|
|
23294
23576
|
}, [findZoneByItem, isRoot, zoneId]);
|
|
23295
|
-
const handleDragOver =
|
|
23577
|
+
const handleDragOver = React80__default.useCallback((event) => {
|
|
23296
23578
|
const { active, over } = event;
|
|
23297
23579
|
const overData = over?.data?.current;
|
|
23298
23580
|
const overGroup = overData?.dndGroup ?? null;
|
|
@@ -23362,7 +23644,7 @@ function useDataDnd(args) {
|
|
|
23362
23644
|
return next;
|
|
23363
23645
|
});
|
|
23364
23646
|
}, []);
|
|
23365
|
-
const handleDragCancel =
|
|
23647
|
+
const handleDragCancel = React80__default.useCallback((event) => {
|
|
23366
23648
|
setActiveDrag(null);
|
|
23367
23649
|
setOverZoneGroup(null);
|
|
23368
23650
|
dndLog.warn("dragCancel", {
|
|
@@ -23370,12 +23652,12 @@ function useDataDnd(args) {
|
|
|
23370
23652
|
reason: "dnd-kit cancelled the drag (escape key, pointer interrupted, or external)"
|
|
23371
23653
|
});
|
|
23372
23654
|
}, []);
|
|
23373
|
-
const handleDragEndWithCleanup =
|
|
23655
|
+
const handleDragEndWithCleanup = React80__default.useCallback((event) => {
|
|
23374
23656
|
handleDragEnd(event);
|
|
23375
23657
|
setActiveDrag(null);
|
|
23376
23658
|
setOverZoneGroup(null);
|
|
23377
23659
|
}, [handleDragEnd]);
|
|
23378
|
-
const wrapContainer =
|
|
23660
|
+
const wrapContainer = React80__default.useCallback(
|
|
23379
23661
|
(children) => {
|
|
23380
23662
|
if (!enabled) return children;
|
|
23381
23663
|
const strategy = layout === "grid" ? rectSortingStrategy : verticalListSortingStrategy;
|
|
@@ -23429,7 +23711,7 @@ var init_useDataDnd = __esm({
|
|
|
23429
23711
|
init_useAlmadarDndCollision();
|
|
23430
23712
|
init_Box();
|
|
23431
23713
|
dndLog = createLogger("almadar:ui:dnd");
|
|
23432
|
-
RootCtx =
|
|
23714
|
+
RootCtx = React80__default.createContext(null);
|
|
23433
23715
|
}
|
|
23434
23716
|
});
|
|
23435
23717
|
function renderIconInput(icon, props) {
|
|
@@ -23955,7 +24237,7 @@ function DataList({
|
|
|
23955
24237
|
}) {
|
|
23956
24238
|
const eventBus = useEventBus();
|
|
23957
24239
|
const { t } = useTranslate();
|
|
23958
|
-
const [visibleCount, setVisibleCount] =
|
|
24240
|
+
const [visibleCount, setVisibleCount] = React80__default.useState(pageSize || Infinity);
|
|
23959
24241
|
const fieldDefs = fields ?? columns ?? [];
|
|
23960
24242
|
const allDataRaw = Array.isArray(entity) ? entity : entity ? [entity] : [];
|
|
23961
24243
|
const dnd = useDataDnd({
|
|
@@ -23974,7 +24256,7 @@ function DataList({
|
|
|
23974
24256
|
const data = pageSize > 0 ? allData.slice(0, visibleCount) : allData;
|
|
23975
24257
|
const hasMoreLocal = pageSize > 0 && visibleCount < allData.length;
|
|
23976
24258
|
const hasRenderProp = typeof children === "function";
|
|
23977
|
-
|
|
24259
|
+
React80__default.useEffect(() => {
|
|
23978
24260
|
const renderItemTypeOf = typeof schemaRenderItem;
|
|
23979
24261
|
const childrenTypeOf = typeof children;
|
|
23980
24262
|
if (data.length > 0 && !hasRenderProp) {
|
|
@@ -24079,7 +24361,7 @@ function DataList({
|
|
|
24079
24361
|
const items2 = data.map((item) => item);
|
|
24080
24362
|
const groups2 = groupBy ? groupData(items2, groupBy) : [{ label: "", items: items2 }];
|
|
24081
24363
|
const contentField = titleField?.name ?? fieldDefs[0]?.name ?? "";
|
|
24082
|
-
return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(
|
|
24364
|
+
return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React80__default.Fragment, { children: [
|
|
24083
24365
|
group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: "my-2" }),
|
|
24084
24366
|
group.items.map((itemData, index) => {
|
|
24085
24367
|
const id = itemData.id || `${gi}-${index}`;
|
|
@@ -24220,7 +24502,7 @@ function DataList({
|
|
|
24220
24502
|
className
|
|
24221
24503
|
),
|
|
24222
24504
|
children: [
|
|
24223
|
-
groups.map((group, gi) => /* @__PURE__ */ jsxs(
|
|
24505
|
+
groups.map((group, gi) => /* @__PURE__ */ jsxs(React80__default.Fragment, { children: [
|
|
24224
24506
|
group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: gi > 0 ? "mt-4" : "mt-0" }),
|
|
24225
24507
|
group.items.map(
|
|
24226
24508
|
(itemData, index) => renderItem(itemData, index, gi === groups.length - 1 && index === group.items.length - 1)
|
|
@@ -24327,8 +24609,8 @@ function ScalarControl({
|
|
|
24327
24609
|
}
|
|
24328
24610
|
const numeric = typeof value === "number";
|
|
24329
24611
|
const initial = value === null ? "" : String(value);
|
|
24330
|
-
const [draft, setDraft] =
|
|
24331
|
-
|
|
24612
|
+
const [draft, setDraft] = React80__default.useState(initial);
|
|
24613
|
+
React80__default.useEffect(() => setDraft(initial), [initial]);
|
|
24332
24614
|
const commit = () => {
|
|
24333
24615
|
if (numeric) {
|
|
24334
24616
|
const n = draft.trim() === "" ? 0 : Number(draft);
|
|
@@ -24396,8 +24678,8 @@ function Row({
|
|
|
24396
24678
|
onRemove,
|
|
24397
24679
|
readonly
|
|
24398
24680
|
}) {
|
|
24399
|
-
const [keyDraft, setKeyDraft] =
|
|
24400
|
-
|
|
24681
|
+
const [keyDraft, setKeyDraft] = React80__default.useState(rowKey);
|
|
24682
|
+
React80__default.useEffect(() => setKeyDraft(rowKey), [rowKey]);
|
|
24401
24683
|
const container = isObj(value) || isArr(value);
|
|
24402
24684
|
return /* @__PURE__ */ jsxs(VStack, { gap: "none", className: "group w-max min-w-full", children: [
|
|
24403
24685
|
/* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", className: "py-0.5 w-max", children: [
|
|
@@ -24440,7 +24722,7 @@ function ContainerNode({
|
|
|
24440
24722
|
depth,
|
|
24441
24723
|
readonly
|
|
24442
24724
|
}) {
|
|
24443
|
-
const [open, setOpen] =
|
|
24725
|
+
const [open, setOpen] = React80__default.useState(depth < 2);
|
|
24444
24726
|
const array = isArr(value);
|
|
24445
24727
|
const entries = array ? value.map((v, i) => [String(i), v]) : Object.entries(value);
|
|
24446
24728
|
const setObjValue = (key, next) => {
|
|
@@ -24582,7 +24864,7 @@ var init_FormSection = __esm({
|
|
|
24582
24864
|
columns = 1,
|
|
24583
24865
|
className
|
|
24584
24866
|
}) => {
|
|
24585
|
-
const [collapsed, setCollapsed] =
|
|
24867
|
+
const [collapsed, setCollapsed] = React80__default.useState(defaultCollapsed);
|
|
24586
24868
|
const { t } = useTranslate();
|
|
24587
24869
|
const eventBus = useEventBus();
|
|
24588
24870
|
const gridClass = {
|
|
@@ -24590,7 +24872,7 @@ var init_FormSection = __esm({
|
|
|
24590
24872
|
2: "grid-cols-1 md:grid-cols-2",
|
|
24591
24873
|
3: "grid-cols-1 md:grid-cols-2 lg:grid-cols-3"
|
|
24592
24874
|
}[columns];
|
|
24593
|
-
|
|
24875
|
+
React80__default.useCallback(() => {
|
|
24594
24876
|
if (collapsible) {
|
|
24595
24877
|
setCollapsed((prev) => !prev);
|
|
24596
24878
|
eventBus.emit("UI:TOGGLE_COLLAPSE", { collapsed: !collapsed });
|
|
@@ -24998,8 +25280,8 @@ function TextLikeControl({
|
|
|
24998
25280
|
onCommit
|
|
24999
25281
|
}) {
|
|
25000
25282
|
const initial = value === void 0 || value === null ? "" : String(value);
|
|
25001
|
-
const [draft, setDraft] =
|
|
25002
|
-
|
|
25283
|
+
const [draft, setDraft] = React80__default.useState(initial);
|
|
25284
|
+
React80__default.useEffect(() => setDraft(initial), [initial]);
|
|
25003
25285
|
const commit = () => {
|
|
25004
25286
|
if (numeric) {
|
|
25005
25287
|
const n = draft.trim() === "" ? 0 : Number(draft);
|
|
@@ -25165,14 +25447,14 @@ var init_NodeSlotEditor = __esm({
|
|
|
25165
25447
|
isObj2 = (v) => v !== null && v !== void 0 && typeof v === "object" && !Array.isArray(v);
|
|
25166
25448
|
NodeSlotEditor = ({ value, onChange, className }) => {
|
|
25167
25449
|
const { type, props, wasArray } = normalize(value);
|
|
25168
|
-
const patterns =
|
|
25450
|
+
const patterns = React80__default.useMemo(() => {
|
|
25169
25451
|
try {
|
|
25170
25452
|
return [...getKnownPatterns()].sort();
|
|
25171
25453
|
} catch {
|
|
25172
25454
|
return [];
|
|
25173
25455
|
}
|
|
25174
25456
|
}, []);
|
|
25175
|
-
const options =
|
|
25457
|
+
const options = React80__default.useMemo(
|
|
25176
25458
|
() => [{ value: "", label: "\u2014 none \u2014" }, ...patterns.map((p2) => ({ value: p2, label: p2 }))],
|
|
25177
25459
|
[patterns]
|
|
25178
25460
|
);
|
|
@@ -25184,7 +25466,7 @@ var init_NodeSlotEditor = __esm({
|
|
|
25184
25466
|
const pattern = { type: nextType, ...nextProps };
|
|
25185
25467
|
onChange(wasArray || value === void 0 ? [pattern] : pattern);
|
|
25186
25468
|
};
|
|
25187
|
-
const schemaEntries =
|
|
25469
|
+
const schemaEntries = React80__default.useMemo(() => {
|
|
25188
25470
|
if (!type) return [];
|
|
25189
25471
|
const def = getPatternDefinition(type);
|
|
25190
25472
|
if (!def?.propsSchema) return [];
|
|
@@ -26078,7 +26360,7 @@ var init_Grid = __esm({
|
|
|
26078
26360
|
as: Component2 = "div"
|
|
26079
26361
|
}) => {
|
|
26080
26362
|
const mergedStyle = rows2 ? { gridTemplateRows: `repeat(${rows2}, minmax(0, 1fr))`, ...style } : style;
|
|
26081
|
-
return
|
|
26363
|
+
return React80__default.createElement(
|
|
26082
26364
|
Component2,
|
|
26083
26365
|
{
|
|
26084
26366
|
className: cn(
|
|
@@ -26274,9 +26556,9 @@ var init_Popover = __esm({
|
|
|
26274
26556
|
onMouseLeave: handleClose,
|
|
26275
26557
|
onPointerDown: tapTriggerProps.onPointerDown
|
|
26276
26558
|
};
|
|
26277
|
-
const childElement =
|
|
26559
|
+
const childElement = React80__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
|
|
26278
26560
|
const childPointerDown = childElement.props.onPointerDown;
|
|
26279
|
-
const triggerElement =
|
|
26561
|
+
const triggerElement = React80__default.cloneElement(
|
|
26280
26562
|
childElement,
|
|
26281
26563
|
{
|
|
26282
26564
|
ref: triggerRef,
|
|
@@ -27128,9 +27410,9 @@ var init_Tooltip = __esm({
|
|
|
27128
27410
|
if (hideTimeoutRef.current) clearTimeout(hideTimeoutRef.current);
|
|
27129
27411
|
};
|
|
27130
27412
|
}, []);
|
|
27131
|
-
const triggerElement =
|
|
27413
|
+
const triggerElement = React80__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
|
|
27132
27414
|
const childPointerDown = triggerElement.props.onPointerDown;
|
|
27133
|
-
const trigger =
|
|
27415
|
+
const trigger = React80__default.cloneElement(triggerElement, {
|
|
27134
27416
|
ref: triggerRef,
|
|
27135
27417
|
onMouseEnter: handleMouseEnter,
|
|
27136
27418
|
onMouseLeave: handleMouseLeave,
|
|
@@ -27220,7 +27502,7 @@ var init_WizardProgress = __esm({
|
|
|
27220
27502
|
children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: normalizedSteps.map((step, index) => {
|
|
27221
27503
|
const isActive = index === currentStep;
|
|
27222
27504
|
const isCompleted = index < currentStep;
|
|
27223
|
-
return /* @__PURE__ */ jsxs(
|
|
27505
|
+
return /* @__PURE__ */ jsxs(React80__default.Fragment, { children: [
|
|
27224
27506
|
/* @__PURE__ */ jsx(
|
|
27225
27507
|
"button",
|
|
27226
27508
|
{
|
|
@@ -28265,9 +28547,9 @@ function ScoreDisplay({
|
|
|
28265
28547
|
...rest
|
|
28266
28548
|
}) {
|
|
28267
28549
|
const resolvedValue = typeof value === "number" && !Number.isNaN(value) ? value : typeof rest.score === "number" && !Number.isNaN(rest.score) ? rest.score : 0;
|
|
28268
|
-
const [displayValue, setDisplayValue] =
|
|
28269
|
-
const [isAnimating, setIsAnimating] =
|
|
28270
|
-
|
|
28550
|
+
const [displayValue, setDisplayValue] = React80.useState(resolvedValue);
|
|
28551
|
+
const [isAnimating, setIsAnimating] = React80.useState(false);
|
|
28552
|
+
React80.useEffect(() => {
|
|
28271
28553
|
if (!animated || displayValue === resolvedValue) {
|
|
28272
28554
|
setDisplayValue(resolvedValue);
|
|
28273
28555
|
return;
|
|
@@ -28437,7 +28719,7 @@ function InventoryGrid({
|
|
|
28437
28719
|
const eventBus = useEventBus();
|
|
28438
28720
|
const slotCount = totalSlots ?? items.length;
|
|
28439
28721
|
const emptySlotCount = Math.max(0, slotCount - items.length);
|
|
28440
|
-
const handleSelect =
|
|
28722
|
+
const handleSelect = React80.useCallback(
|
|
28441
28723
|
(id) => {
|
|
28442
28724
|
onSelect?.(id);
|
|
28443
28725
|
if (selectEvent) {
|
|
@@ -28690,6 +28972,7 @@ function PowerupSlots({
|
|
|
28690
28972
|
/* @__PURE__ */ jsx(
|
|
28691
28973
|
ItemSlot,
|
|
28692
28974
|
{
|
|
28975
|
+
assetUrl: powerup.assetUrl,
|
|
28693
28976
|
icon: powerup.icon,
|
|
28694
28977
|
label: powerup.label,
|
|
28695
28978
|
rarity: "uncommon",
|
|
@@ -28753,31 +29036,31 @@ function GameCanvas2D({
|
|
|
28753
29036
|
assetBaseUrl,
|
|
28754
29037
|
className
|
|
28755
29038
|
}) {
|
|
28756
|
-
const canvasRef =
|
|
28757
|
-
const rafRef =
|
|
28758
|
-
const frameRef =
|
|
28759
|
-
const lastTimeRef =
|
|
28760
|
-
const imageCache =
|
|
29039
|
+
const canvasRef = React80.useRef(null);
|
|
29040
|
+
const rafRef = React80.useRef(0);
|
|
29041
|
+
const frameRef = React80.useRef(0);
|
|
29042
|
+
const lastTimeRef = React80.useRef(0);
|
|
29043
|
+
const imageCache = React80.useRef(/* @__PURE__ */ new Map());
|
|
28761
29044
|
const emit = useEmitEvent();
|
|
28762
|
-
const onDrawRef =
|
|
29045
|
+
const onDrawRef = React80.useRef(onDraw);
|
|
28763
29046
|
onDrawRef.current = onDraw;
|
|
28764
|
-
const onTickRef =
|
|
29047
|
+
const onTickRef = React80.useRef(onTick);
|
|
28765
29048
|
onTickRef.current = onTick;
|
|
28766
|
-
const tickEventRef =
|
|
29049
|
+
const tickEventRef = React80.useRef(tickEvent);
|
|
28767
29050
|
tickEventRef.current = tickEvent;
|
|
28768
|
-
const drawEventRef =
|
|
29051
|
+
const drawEventRef = React80.useRef(drawEvent);
|
|
28769
29052
|
drawEventRef.current = drawEvent;
|
|
28770
|
-
const emitRef =
|
|
29053
|
+
const emitRef = React80.useRef(emit);
|
|
28771
29054
|
emitRef.current = emit;
|
|
28772
|
-
const assetBaseUrlRef =
|
|
29055
|
+
const assetBaseUrlRef = React80.useRef(assetBaseUrl);
|
|
28773
29056
|
assetBaseUrlRef.current = assetBaseUrl;
|
|
28774
|
-
const backgroundImageRef =
|
|
29057
|
+
const backgroundImageRef = React80.useRef(backgroundImage);
|
|
28775
29058
|
backgroundImageRef.current = backgroundImage;
|
|
28776
|
-
const widthRef =
|
|
29059
|
+
const widthRef = React80.useRef(width);
|
|
28777
29060
|
widthRef.current = width;
|
|
28778
|
-
const heightRef =
|
|
29061
|
+
const heightRef = React80.useRef(height);
|
|
28779
29062
|
heightRef.current = height;
|
|
28780
|
-
const loadImage =
|
|
29063
|
+
const loadImage = React80.useCallback((url) => {
|
|
28781
29064
|
const base = assetBaseUrlRef.current;
|
|
28782
29065
|
if (!url.startsWith("http") && !base) return null;
|
|
28783
29066
|
const fullUrl = url.startsWith("http") ? url : `${base}${url}`;
|
|
@@ -28791,7 +29074,7 @@ function GameCanvas2D({
|
|
|
28791
29074
|
}
|
|
28792
29075
|
return null;
|
|
28793
29076
|
}, []);
|
|
28794
|
-
|
|
29077
|
+
React80.useEffect(() => {
|
|
28795
29078
|
const canvas = canvasRef.current;
|
|
28796
29079
|
if (!canvas) return;
|
|
28797
29080
|
const ctx = canvas.getContext("2d");
|
|
@@ -28939,13 +29222,26 @@ function HealthPanel({
|
|
|
28939
29222
|
)
|
|
28940
29223
|
}
|
|
28941
29224
|
),
|
|
28942
|
-
effects && effects.length > 0 && /* @__PURE__ */ jsx(Box, { className: "flex items-center gap-1 flex-wrap", children: effects.map((effect, i) => /* @__PURE__ */
|
|
29225
|
+
effects && effects.length > 0 && /* @__PURE__ */ jsx(Box, { className: "flex items-center gap-1 flex-wrap", children: effects.map((effect, i) => /* @__PURE__ */ jsxs(
|
|
28943
29226
|
Badge,
|
|
28944
29227
|
{
|
|
28945
29228
|
variant: effectVariantMap[effect.variant ?? "neutral"],
|
|
28946
29229
|
size: "sm",
|
|
28947
|
-
icon: effect.icon,
|
|
28948
|
-
children:
|
|
29230
|
+
icon: effect.assetUrl ? void 0 : effect.icon,
|
|
29231
|
+
children: [
|
|
29232
|
+
effect.assetUrl && /* @__PURE__ */ jsx(
|
|
29233
|
+
"img",
|
|
29234
|
+
{
|
|
29235
|
+
src: effect.assetUrl,
|
|
29236
|
+
alt: "",
|
|
29237
|
+
width: 12,
|
|
29238
|
+
height: 12,
|
|
29239
|
+
style: { imageRendering: "pixelated", objectFit: "contain" },
|
|
29240
|
+
className: "flex-shrink-0 inline-block"
|
|
29241
|
+
}
|
|
29242
|
+
),
|
|
29243
|
+
effect.label
|
|
29244
|
+
]
|
|
28949
29245
|
},
|
|
28950
29246
|
i
|
|
28951
29247
|
)) })
|
|
@@ -29167,7 +29463,7 @@ function TurnPanel({
|
|
|
29167
29463
|
className
|
|
29168
29464
|
}) {
|
|
29169
29465
|
const eventBus = useEventBus();
|
|
29170
|
-
const handleAction =
|
|
29466
|
+
const handleAction = React80.useCallback(
|
|
29171
29467
|
(event) => {
|
|
29172
29468
|
if (event) {
|
|
29173
29469
|
eventBus.emit(event, { turn: currentTurn, phase, activeTeam });
|
|
@@ -29192,15 +29488,28 @@ function TurnPanel({
|
|
|
29192
29488
|
activeTeam
|
|
29193
29489
|
}
|
|
29194
29490
|
),
|
|
29195
|
-
actions && actions.length > 0 && /* @__PURE__ */ jsx(Box, { className: "flex items-center gap-1.5 ml-auto", children: actions.map((action, i) => /* @__PURE__ */
|
|
29491
|
+
actions && actions.length > 0 && /* @__PURE__ */ jsx(Box, { className: "flex items-center gap-1.5 ml-auto", children: actions.map((action, i) => /* @__PURE__ */ jsxs(
|
|
29196
29492
|
Button,
|
|
29197
29493
|
{
|
|
29198
29494
|
variant: "ghost",
|
|
29199
29495
|
size: "sm",
|
|
29200
29496
|
disabled: action.disabled,
|
|
29201
|
-
leftIcon: action.icon,
|
|
29497
|
+
leftIcon: action.assetUrl ? void 0 : action.icon,
|
|
29202
29498
|
onClick: () => handleAction(action.event),
|
|
29203
|
-
children:
|
|
29499
|
+
children: [
|
|
29500
|
+
action.assetUrl && /* @__PURE__ */ jsx(
|
|
29501
|
+
"img",
|
|
29502
|
+
{
|
|
29503
|
+
src: action.assetUrl,
|
|
29504
|
+
alt: "",
|
|
29505
|
+
width: 14,
|
|
29506
|
+
height: 14,
|
|
29507
|
+
style: { imageRendering: "pixelated", objectFit: "contain" },
|
|
29508
|
+
className: "flex-shrink-0"
|
|
29509
|
+
}
|
|
29510
|
+
),
|
|
29511
|
+
action.label
|
|
29512
|
+
]
|
|
29204
29513
|
},
|
|
29205
29514
|
i
|
|
29206
29515
|
)) })
|
|
@@ -29335,7 +29644,7 @@ function UnitCommandBar({
|
|
|
29335
29644
|
className
|
|
29336
29645
|
}) {
|
|
29337
29646
|
const eventBus = useEventBus();
|
|
29338
|
-
const handleCommand =
|
|
29647
|
+
const handleCommand = React80.useCallback(
|
|
29339
29648
|
(event) => {
|
|
29340
29649
|
if (event) {
|
|
29341
29650
|
eventBus.emit(event, { unitId: selectedUnitId });
|
|
@@ -29886,7 +30195,7 @@ function GameMenu({
|
|
|
29886
30195
|
} catch {
|
|
29887
30196
|
}
|
|
29888
30197
|
const eventBus = eventBusProp || eventBusFromHook;
|
|
29889
|
-
const handleOptionClick =
|
|
30198
|
+
const handleOptionClick = React80.useCallback(
|
|
29890
30199
|
(option) => {
|
|
29891
30200
|
if (option.event && eventBus) {
|
|
29892
30201
|
eventBus.emit(`UI:${option.event}`, { option });
|
|
@@ -30005,7 +30314,7 @@ function GameOverScreen({
|
|
|
30005
30314
|
} catch {
|
|
30006
30315
|
}
|
|
30007
30316
|
const eventBus = eventBusProp || eventBusFromHook;
|
|
30008
|
-
const handleActionClick =
|
|
30317
|
+
const handleActionClick = React80.useCallback(
|
|
30009
30318
|
(action) => {
|
|
30010
30319
|
if (action.event && eventBus) {
|
|
30011
30320
|
eventBus.emit(`UI:${action.event}`, { action });
|
|
@@ -30960,13 +31269,13 @@ var init_MapView = __esm({
|
|
|
30960
31269
|
shadowSize: [41, 41]
|
|
30961
31270
|
});
|
|
30962
31271
|
L.Marker.prototype.options.icon = defaultIcon;
|
|
30963
|
-
const { useEffect:
|
|
31272
|
+
const { useEffect: useEffect84, useRef: useRef83, useCallback: useCallback128, useState: useState114 } = React80__default;
|
|
30964
31273
|
const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
|
|
30965
31274
|
const { useEventBus: useEventBus3 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
|
|
30966
31275
|
function MapUpdater({ centerLat, centerLng, zoom }) {
|
|
30967
31276
|
const map = useMap();
|
|
30968
31277
|
const prevRef = useRef83({ centerLat, centerLng, zoom });
|
|
30969
|
-
|
|
31278
|
+
useEffect84(() => {
|
|
30970
31279
|
const prev = prevRef.current;
|
|
30971
31280
|
if (prev.centerLat !== centerLat || prev.centerLng !== centerLng || prev.zoom !== zoom) {
|
|
30972
31281
|
map.setView([centerLat, centerLng], zoom);
|
|
@@ -30977,7 +31286,7 @@ var init_MapView = __esm({
|
|
|
30977
31286
|
}
|
|
30978
31287
|
function MapClickHandler({ onMapClick }) {
|
|
30979
31288
|
const map = useMap();
|
|
30980
|
-
|
|
31289
|
+
useEffect84(() => {
|
|
30981
31290
|
if (!onMapClick) return;
|
|
30982
31291
|
const handler = (e) => {
|
|
30983
31292
|
onMapClick(e.latlng.lat, e.latlng.lng);
|
|
@@ -31005,8 +31314,8 @@ var init_MapView = __esm({
|
|
|
31005
31314
|
showAttribution = true
|
|
31006
31315
|
}) {
|
|
31007
31316
|
const eventBus = useEventBus3();
|
|
31008
|
-
const [clickedPosition, setClickedPosition] =
|
|
31009
|
-
const handleMapClick =
|
|
31317
|
+
const [clickedPosition, setClickedPosition] = useState114(null);
|
|
31318
|
+
const handleMapClick = useCallback128((lat, lng) => {
|
|
31010
31319
|
if (showClickedPin) {
|
|
31011
31320
|
setClickedPosition({ lat, lng });
|
|
31012
31321
|
}
|
|
@@ -31015,7 +31324,7 @@ var init_MapView = __esm({
|
|
|
31015
31324
|
eventBus.emit(`UI:${mapClickEvent}`, { latitude: lat, longitude: lng });
|
|
31016
31325
|
}
|
|
31017
31326
|
}, [onMapClick, mapClickEvent, eventBus, showClickedPin]);
|
|
31018
|
-
const handleMarkerClick =
|
|
31327
|
+
const handleMarkerClick = useCallback128((marker) => {
|
|
31019
31328
|
onMarkerClick?.(marker);
|
|
31020
31329
|
if (markerClickEvent) {
|
|
31021
31330
|
eventBus.emit(`UI:${markerClickEvent}`, { ...marker });
|
|
@@ -31866,8 +32175,8 @@ function TableView({
|
|
|
31866
32175
|
}) {
|
|
31867
32176
|
const eventBus = useEventBus();
|
|
31868
32177
|
const { t } = useTranslate();
|
|
31869
|
-
const [visibleCount, setVisibleCount] =
|
|
31870
|
-
const [localSelected, setLocalSelected] =
|
|
32178
|
+
const [visibleCount, setVisibleCount] = React80__default.useState(pageSize > 0 ? pageSize : Infinity);
|
|
32179
|
+
const [localSelected, setLocalSelected] = React80__default.useState(/* @__PURE__ */ new Set());
|
|
31871
32180
|
const colDefs = columns ?? fields ?? [];
|
|
31872
32181
|
const allDataRaw = Array.isArray(entity) ? entity : entity ? [entity] : [];
|
|
31873
32182
|
const dnd = useDataDnd({
|
|
@@ -32062,12 +32371,12 @@ function TableView({
|
|
|
32062
32371
|
]
|
|
32063
32372
|
}
|
|
32064
32373
|
);
|
|
32065
|
-
return dnd.isZone ? /* @__PURE__ */ jsx(dnd.SortableItem, { id: row[idField] ?? id, children: rowInner }, id) : /* @__PURE__ */ jsx(
|
|
32374
|
+
return dnd.isZone ? /* @__PURE__ */ jsx(dnd.SortableItem, { id: row[idField] ?? id, children: rowInner }, id) : /* @__PURE__ */ jsx(React80__default.Fragment, { children: rowInner }, id);
|
|
32066
32375
|
};
|
|
32067
32376
|
const items = data.map((row) => row);
|
|
32068
32377
|
const groups = groupBy ? groupData2(items, groupBy) : [{ label: "", items }];
|
|
32069
32378
|
let runningIndex = 0;
|
|
32070
|
-
const body = /* @__PURE__ */ jsx(Box, { role: "rowgroup", children: groups.map((group, gi) => /* @__PURE__ */ jsxs(
|
|
32379
|
+
const body = /* @__PURE__ */ jsx(Box, { role: "rowgroup", children: groups.map((group, gi) => /* @__PURE__ */ jsxs(React80__default.Fragment, { children: [
|
|
32071
32380
|
group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: gi > 0 ? "mt-3" : "mt-0" }),
|
|
32072
32381
|
group.items.map((row) => renderRow(row, runningIndex++))
|
|
32073
32382
|
] }, gi)) });
|
|
@@ -33424,7 +33733,7 @@ var init_StepFlow = __esm({
|
|
|
33424
33733
|
className
|
|
33425
33734
|
}) => {
|
|
33426
33735
|
if (orientation === "vertical") {
|
|
33427
|
-
return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(
|
|
33736
|
+
return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React80__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
|
|
33428
33737
|
/* @__PURE__ */ jsxs(VStack, { gap: "none", align: "center", children: [
|
|
33429
33738
|
/* @__PURE__ */ jsx(StepCircle, { step, index }),
|
|
33430
33739
|
showConnectors && index < steps.length - 1 && /* @__PURE__ */ jsx(Box, { className: "w-px h-8 bg-border" })
|
|
@@ -33435,7 +33744,7 @@ var init_StepFlow = __esm({
|
|
|
33435
33744
|
] })
|
|
33436
33745
|
] }) }, index)) });
|
|
33437
33746
|
}
|
|
33438
|
-
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(
|
|
33747
|
+
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(React80__default.Fragment, { children: [
|
|
33439
33748
|
/* @__PURE__ */ jsxs(VStack, { gap: "sm", align: "center", className: "flex-1 w-full md:w-auto", children: [
|
|
33440
33749
|
/* @__PURE__ */ jsx(StepCircle, { step, index }),
|
|
33441
33750
|
/* @__PURE__ */ jsx(Typography, { variant: "h4", className: "text-center", children: step.title }),
|
|
@@ -34420,7 +34729,7 @@ var init_LikertScale = __esm({
|
|
|
34420
34729
|
md: "text-base",
|
|
34421
34730
|
lg: "text-lg"
|
|
34422
34731
|
};
|
|
34423
|
-
LikertScale =
|
|
34732
|
+
LikertScale = React80__default.forwardRef(
|
|
34424
34733
|
({
|
|
34425
34734
|
question,
|
|
34426
34735
|
options = DEFAULT_LIKERT_OPTIONS,
|
|
@@ -34432,7 +34741,7 @@ var init_LikertScale = __esm({
|
|
|
34432
34741
|
variant = "radios",
|
|
34433
34742
|
className
|
|
34434
34743
|
}, ref) => {
|
|
34435
|
-
const groupId =
|
|
34744
|
+
const groupId = React80__default.useId();
|
|
34436
34745
|
const eventBus = useEventBus();
|
|
34437
34746
|
const handleSelect = useCallback(
|
|
34438
34747
|
(next) => {
|
|
@@ -36714,7 +37023,7 @@ var init_DocBreadcrumb = __esm({
|
|
|
36714
37023
|
"aria-label": t("aria.breadcrumb"),
|
|
36715
37024
|
children: /* @__PURE__ */ jsx(HStack, { gap: "xs", align: "center", wrap: true, children: items.map((item, idx) => {
|
|
36716
37025
|
const isLast = idx === items.length - 1;
|
|
36717
|
-
return /* @__PURE__ */ jsxs(
|
|
37026
|
+
return /* @__PURE__ */ jsxs(React80__default.Fragment, { children: [
|
|
36718
37027
|
idx > 0 && /* @__PURE__ */ jsx(
|
|
36719
37028
|
Icon,
|
|
36720
37029
|
{
|
|
@@ -37583,7 +37892,7 @@ var init_MiniStateMachine = __esm({
|
|
|
37583
37892
|
const x = 2 + i * (NODE_W + GAP2 + ARROW_W + GAP2);
|
|
37584
37893
|
const tc = transitionCounts[s.name] ?? 0;
|
|
37585
37894
|
const role = getStateRole(s.name, s.isInitial, s.isTerminal, tc, maxTC);
|
|
37586
|
-
return /* @__PURE__ */ jsxs(
|
|
37895
|
+
return /* @__PURE__ */ jsxs(React80__default.Fragment, { children: [
|
|
37587
37896
|
/* @__PURE__ */ jsx(
|
|
37588
37897
|
AvlState,
|
|
37589
37898
|
{
|
|
@@ -37787,7 +38096,7 @@ var init_PageHeader = __esm({
|
|
|
37787
38096
|
info: "bg-info/10 text-info"
|
|
37788
38097
|
};
|
|
37789
38098
|
return /* @__PURE__ */ jsxs(Box, { className: cn("mb-6", className), children: [
|
|
37790
|
-
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(
|
|
38099
|
+
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(React80__default.Fragment, { children: [
|
|
37791
38100
|
idx > 0 && /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: "/" }),
|
|
37792
38101
|
crumb.href ? /* @__PURE__ */ jsx(
|
|
37793
38102
|
"a",
|
|
@@ -38516,7 +38825,7 @@ var init_WizardContainer = __esm({
|
|
|
38516
38825
|
const isCompleted = index < currentStep;
|
|
38517
38826
|
const stepKey = step.id ?? step.tabId ?? `step-${index}`;
|
|
38518
38827
|
const stepTitle = step.title ?? step.name ?? `Step ${index + 1}`;
|
|
38519
|
-
return /* @__PURE__ */ jsxs(
|
|
38828
|
+
return /* @__PURE__ */ jsxs(React80__default.Fragment, { children: [
|
|
38520
38829
|
/* @__PURE__ */ jsx(
|
|
38521
38830
|
Button,
|
|
38522
38831
|
{
|
|
@@ -41326,7 +41635,7 @@ var init_DialogueBubble = __esm({
|
|
|
41326
41635
|
}
|
|
41327
41636
|
});
|
|
41328
41637
|
function extractTitle(children) {
|
|
41329
|
-
if (!
|
|
41638
|
+
if (!React80__default.isValidElement(children)) return void 0;
|
|
41330
41639
|
const props = children.props;
|
|
41331
41640
|
if (typeof props.title === "string") {
|
|
41332
41641
|
return props.title;
|
|
@@ -41451,7 +41760,7 @@ function LinearView({
|
|
|
41451
41760
|
/* @__PURE__ */ jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
|
|
41452
41761
|
const isDone = i < currentIdx;
|
|
41453
41762
|
const isCurrent = i === currentIdx;
|
|
41454
|
-
return /* @__PURE__ */ jsxs(
|
|
41763
|
+
return /* @__PURE__ */ jsxs(React80__default.Fragment, { children: [
|
|
41455
41764
|
i > 0 && /* @__PURE__ */ jsx(
|
|
41456
41765
|
Typography,
|
|
41457
41766
|
{
|
|
@@ -42220,6 +42529,42 @@ var init_FeatureGridOrganism = __esm({
|
|
|
42220
42529
|
FeatureGridOrganism.displayName = "FeatureGridOrganism";
|
|
42221
42530
|
}
|
|
42222
42531
|
});
|
|
42532
|
+
function FishingBoard({
|
|
42533
|
+
backgroundImage,
|
|
42534
|
+
assetBaseUrl,
|
|
42535
|
+
scale = 1,
|
|
42536
|
+
showMinimap = false,
|
|
42537
|
+
enableCamera = true,
|
|
42538
|
+
width = 800,
|
|
42539
|
+
height = 600,
|
|
42540
|
+
isLoading,
|
|
42541
|
+
error,
|
|
42542
|
+
className
|
|
42543
|
+
}) {
|
|
42544
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("fishing-board relative w-full h-full", className), children: [
|
|
42545
|
+
isLoading && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-black/40 z-10", children: /* @__PURE__ */ jsx("span", { className: "text-white text-sm", children: "Loading\u2026" }) }),
|
|
42546
|
+
error && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-black/40 z-10", children: /* @__PURE__ */ jsx("span", { className: "text-red-400 text-sm", children: error.message }) }),
|
|
42547
|
+
/* @__PURE__ */ jsx(
|
|
42548
|
+
GameCanvas2D,
|
|
42549
|
+
{
|
|
42550
|
+
width,
|
|
42551
|
+
height,
|
|
42552
|
+
backgroundImage: backgroundImage ?? "",
|
|
42553
|
+
assetBaseUrl,
|
|
42554
|
+
fps: 60,
|
|
42555
|
+
className: "w-full h-full"
|
|
42556
|
+
}
|
|
42557
|
+
)
|
|
42558
|
+
] });
|
|
42559
|
+
}
|
|
42560
|
+
var init_FishingBoard = __esm({
|
|
42561
|
+
"components/game/organisms/FishingBoard.tsx"() {
|
|
42562
|
+
"use client";
|
|
42563
|
+
init_cn();
|
|
42564
|
+
init_GameCanvas2D();
|
|
42565
|
+
FishingBoard.displayName = "FishingBoard";
|
|
42566
|
+
}
|
|
42567
|
+
});
|
|
42223
42568
|
function toSharedContext2(formCtx) {
|
|
42224
42569
|
return createMinimalContext(
|
|
42225
42570
|
{
|
|
@@ -42401,12 +42746,12 @@ var init_Form = __esm({
|
|
|
42401
42746
|
const isSchemaEntity = isOrbitalEntitySchema(entity);
|
|
42402
42747
|
const resolvedEntity = isSchemaEntity ? entity : void 0;
|
|
42403
42748
|
const entityName = typeof entity === "string" ? entity : resolvedEntity?.name;
|
|
42404
|
-
const normalizedInitialData =
|
|
42749
|
+
const normalizedInitialData = React80__default.useMemo(() => {
|
|
42405
42750
|
const entityRowAsInitial = isPlainEntityRow(entity) ? entity : void 0;
|
|
42406
42751
|
const callerInitial = initialData !== null && typeof initialData === "object" && !Array.isArray(initialData) ? initialData : {};
|
|
42407
42752
|
return entityRowAsInitial !== void 0 ? { ...entityRowAsInitial, ...callerInitial } : callerInitial;
|
|
42408
42753
|
}, [entity, initialData]);
|
|
42409
|
-
const entityDerivedFields =
|
|
42754
|
+
const entityDerivedFields = React80__default.useMemo(() => {
|
|
42410
42755
|
if (fields && fields.length > 0) return void 0;
|
|
42411
42756
|
if (!resolvedEntity) return void 0;
|
|
42412
42757
|
return resolvedEntity.fields.map(
|
|
@@ -42426,16 +42771,16 @@ var init_Form = __esm({
|
|
|
42426
42771
|
const conditionalFields = typeof conditionalFieldsRaw === "boolean" ? {} : conditionalFieldsRaw;
|
|
42427
42772
|
const hiddenCalculations = typeof hiddenCalculationsRaw === "boolean" ? [] : hiddenCalculationsRaw;
|
|
42428
42773
|
const violationTriggers = typeof violationTriggersRaw === "boolean" ? [] : violationTriggersRaw;
|
|
42429
|
-
const [formData, setFormData] =
|
|
42774
|
+
const [formData, setFormData] = React80__default.useState(
|
|
42430
42775
|
normalizedInitialData
|
|
42431
42776
|
);
|
|
42432
|
-
const [collapsedSections, setCollapsedSections] =
|
|
42777
|
+
const [collapsedSections, setCollapsedSections] = React80__default.useState(
|
|
42433
42778
|
/* @__PURE__ */ new Set()
|
|
42434
42779
|
);
|
|
42435
|
-
const [submitError, setSubmitError] =
|
|
42436
|
-
const formRef =
|
|
42780
|
+
const [submitError, setSubmitError] = React80__default.useState(null);
|
|
42781
|
+
const formRef = React80__default.useRef(null);
|
|
42437
42782
|
const formMode = props.mode;
|
|
42438
|
-
const mountedRef =
|
|
42783
|
+
const mountedRef = React80__default.useRef(false);
|
|
42439
42784
|
if (!mountedRef.current) {
|
|
42440
42785
|
mountedRef.current = true;
|
|
42441
42786
|
debug("forms", "mount", {
|
|
@@ -42448,7 +42793,7 @@ var init_Form = __esm({
|
|
|
42448
42793
|
});
|
|
42449
42794
|
}
|
|
42450
42795
|
const shouldShowCancel = showCancel ?? (fields && fields.length > 0);
|
|
42451
|
-
const evalContext =
|
|
42796
|
+
const evalContext = React80__default.useMemo(
|
|
42452
42797
|
() => ({
|
|
42453
42798
|
formValues: formData,
|
|
42454
42799
|
globalVariables: externalContext?.globalVariables ?? {},
|
|
@@ -42457,7 +42802,7 @@ var init_Form = __esm({
|
|
|
42457
42802
|
}),
|
|
42458
42803
|
[formData, externalContext]
|
|
42459
42804
|
);
|
|
42460
|
-
|
|
42805
|
+
React80__default.useEffect(() => {
|
|
42461
42806
|
debug("forms", "initialData-sync", {
|
|
42462
42807
|
mode: formMode,
|
|
42463
42808
|
normalizedInitialData,
|
|
@@ -42468,7 +42813,7 @@ var init_Form = __esm({
|
|
|
42468
42813
|
setFormData(normalizedInitialData);
|
|
42469
42814
|
}
|
|
42470
42815
|
}, [normalizedInitialData]);
|
|
42471
|
-
const processCalculations =
|
|
42816
|
+
const processCalculations = React80__default.useCallback(
|
|
42472
42817
|
(changedFieldId, newFormData) => {
|
|
42473
42818
|
if (!hiddenCalculations.length) return;
|
|
42474
42819
|
const context = {
|
|
@@ -42493,7 +42838,7 @@ var init_Form = __esm({
|
|
|
42493
42838
|
},
|
|
42494
42839
|
[hiddenCalculations, externalContext, eventBus]
|
|
42495
42840
|
);
|
|
42496
|
-
const checkViolations =
|
|
42841
|
+
const checkViolations = React80__default.useCallback(
|
|
42497
42842
|
(changedFieldId, newFormData) => {
|
|
42498
42843
|
if (!violationTriggers.length) return;
|
|
42499
42844
|
const context = {
|
|
@@ -42531,7 +42876,7 @@ var init_Form = __esm({
|
|
|
42531
42876
|
processCalculations(name, newFormData);
|
|
42532
42877
|
checkViolations(name, newFormData);
|
|
42533
42878
|
};
|
|
42534
|
-
const isFieldVisible =
|
|
42879
|
+
const isFieldVisible = React80__default.useCallback(
|
|
42535
42880
|
(fieldName) => {
|
|
42536
42881
|
const condition = conditionalFields[fieldName];
|
|
42537
42882
|
if (!condition) return true;
|
|
@@ -42539,7 +42884,7 @@ var init_Form = __esm({
|
|
|
42539
42884
|
},
|
|
42540
42885
|
[conditionalFields, evalContext]
|
|
42541
42886
|
);
|
|
42542
|
-
const isSectionVisible =
|
|
42887
|
+
const isSectionVisible = React80__default.useCallback(
|
|
42543
42888
|
(section) => {
|
|
42544
42889
|
if (!section.condition) return true;
|
|
42545
42890
|
return Boolean(evaluateFormExpression(section.condition, evalContext));
|
|
@@ -42615,7 +42960,7 @@ var init_Form = __esm({
|
|
|
42615
42960
|
eventBus.emit(`UI:${onCancel}`);
|
|
42616
42961
|
}
|
|
42617
42962
|
};
|
|
42618
|
-
const renderField =
|
|
42963
|
+
const renderField = React80__default.useCallback(
|
|
42619
42964
|
(field) => {
|
|
42620
42965
|
const fieldName = field.name || field.field;
|
|
42621
42966
|
if (!fieldName) return null;
|
|
@@ -42636,7 +42981,7 @@ var init_Form = __esm({
|
|
|
42636
42981
|
[formData, isFieldVisible, relationsData, relationsLoading, isLoading]
|
|
42637
42982
|
);
|
|
42638
42983
|
const effectiveFields = entityDerivedFields ?? fields;
|
|
42639
|
-
const normalizedFields =
|
|
42984
|
+
const normalizedFields = React80__default.useMemo(() => {
|
|
42640
42985
|
if (!effectiveFields || effectiveFields.length === 0) return [];
|
|
42641
42986
|
return effectiveFields.map((field) => {
|
|
42642
42987
|
if (typeof field === "string") {
|
|
@@ -42659,7 +43004,7 @@ var init_Form = __esm({
|
|
|
42659
43004
|
return field;
|
|
42660
43005
|
});
|
|
42661
43006
|
}, [effectiveFields, resolvedEntity]);
|
|
42662
|
-
const schemaFields =
|
|
43007
|
+
const schemaFields = React80__default.useMemo(() => {
|
|
42663
43008
|
if (normalizedFields.length === 0) return null;
|
|
42664
43009
|
if (isDebugEnabled()) {
|
|
42665
43010
|
debugGroup(`Form: ${entityName || "unknown"}`);
|
|
@@ -42669,7 +43014,7 @@ var init_Form = __esm({
|
|
|
42669
43014
|
}
|
|
42670
43015
|
return normalizedFields.map(renderField).filter(Boolean);
|
|
42671
43016
|
}, [normalizedFields, renderField, entityName, conditionalFields]);
|
|
42672
|
-
const sectionElements =
|
|
43017
|
+
const sectionElements = React80__default.useMemo(() => {
|
|
42673
43018
|
if (!sections || sections.length === 0) return null;
|
|
42674
43019
|
return sections.map((section) => {
|
|
42675
43020
|
if (!isSectionVisible(section)) {
|
|
@@ -44466,9 +44811,9 @@ var init_GameCanvas3D2 = __esm({
|
|
|
44466
44811
|
const color = unit.faction === "player" ? 4491519 : unit.faction === "enemy" ? 16729156 : 16777028;
|
|
44467
44812
|
const hasAtlas = unitAtlasUrl(unit) !== null;
|
|
44468
44813
|
const initialFrame = hasAtlas ? resolveUnitFrame(unit.id) : null;
|
|
44469
|
-
const modelScale = UNIT_BASE_MODEL_SCALE * unitScale;
|
|
44470
|
-
const billboardHeight = UNIT_BASE_BILLBOARD_HEIGHT * unitScale;
|
|
44471
|
-
const primitiveRadius = UNIT_BASE_PRIMITIVE_RADIUS * unitScale;
|
|
44814
|
+
const modelScale = UNIT_BASE_MODEL_SCALE * unitScale * gridConfig.cellSize;
|
|
44815
|
+
const billboardHeight = UNIT_BASE_BILLBOARD_HEIGHT * unitScale * gridConfig.cellSize;
|
|
44816
|
+
const primitiveRadius = UNIT_BASE_PRIMITIVE_RADIUS * unitScale * gridConfig.cellSize;
|
|
44472
44817
|
return /* @__PURE__ */ jsxs(
|
|
44473
44818
|
"group",
|
|
44474
44819
|
{
|
|
@@ -44515,7 +44860,7 @@ var init_GameCanvas3D2 = __esm({
|
|
|
44515
44860
|
/* @__PURE__ */ jsx("meshStandardMaterial", { color })
|
|
44516
44861
|
] })
|
|
44517
44862
|
] }),
|
|
44518
|
-
unit.health !== void 0 && unit.maxHealth !== void 0 && /* @__PURE__ */ jsxs("group", { position: [0,
|
|
44863
|
+
unit.health !== void 0 && unit.maxHealth !== void 0 && /* @__PURE__ */ jsxs("group", { position: [0, billboardHeight, 0], children: [
|
|
44519
44864
|
/* @__PURE__ */ jsxs("mesh", { position: [-0.25, 0, 0], children: [
|
|
44520
44865
|
/* @__PURE__ */ jsx("planeGeometry", { args: [0.5, 0.05] }),
|
|
44521
44866
|
/* @__PURE__ */ jsx("meshBasicMaterial", { color: 3355443 })
|
|
@@ -44544,7 +44889,7 @@ var init_GameCanvas3D2 = __esm({
|
|
|
44544
44889
|
}
|
|
44545
44890
|
);
|
|
44546
44891
|
},
|
|
44547
|
-
[selectedUnitId, handleUnitClick, resolveUnitFrame, unitScale]
|
|
44892
|
+
[selectedUnitId, handleUnitClick, resolveUnitFrame, unitScale, gridConfig]
|
|
44548
44893
|
);
|
|
44549
44894
|
const DefaultFeatureRenderer = useCallback(
|
|
44550
44895
|
({
|
|
@@ -44632,7 +44977,7 @@ var init_GameCanvas3D2 = __esm({
|
|
|
44632
44977
|
{
|
|
44633
44978
|
ref: containerRef,
|
|
44634
44979
|
className: cn("game-canvas-3d relative w-full overflow-hidden", className),
|
|
44635
|
-
style: {
|
|
44980
|
+
style: { flex: "1 1 0", minHeight: "400px" },
|
|
44636
44981
|
"data-orientation": orientation,
|
|
44637
44982
|
"data-camera-mode": cameraMode,
|
|
44638
44983
|
"data-overlay": overlay,
|
|
@@ -44932,13 +45277,39 @@ var init_GameBoard3D = __esm({
|
|
|
44932
45277
|
GameBoard3D.displayName = "GameBoard3D";
|
|
44933
45278
|
}
|
|
44934
45279
|
});
|
|
44935
|
-
|
|
45280
|
+
function getSlotContentRenderer() {
|
|
45281
|
+
if (_scr) return _scr;
|
|
45282
|
+
const mod = (init_UISlotRenderer(), __toCommonJS(UISlotRenderer_exports));
|
|
45283
|
+
_scr = mod.SlotContentRenderer;
|
|
45284
|
+
return _scr;
|
|
45285
|
+
}
|
|
45286
|
+
function resolveDescriptor(value, idPrefix) {
|
|
45287
|
+
if (value === null || value === void 0) return value;
|
|
45288
|
+
if (React80__default.isValidElement(value)) return value;
|
|
45289
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") return value;
|
|
45290
|
+
if (Array.isArray(value)) {
|
|
45291
|
+
return value.map((item, i) => /* @__PURE__ */ jsx(React80__default.Fragment, { children: resolveDescriptor(item, `${idPrefix}-${i}`) }, i));
|
|
45292
|
+
}
|
|
45293
|
+
if (typeof value === "object") {
|
|
45294
|
+
const rec = value;
|
|
45295
|
+
if (typeof rec.type === "string" && getComponentForPattern(rec.type) !== null) {
|
|
45296
|
+
const { type, props: nestedProps, _id, ...flatProps } = rec;
|
|
45297
|
+
const resolvedProps = nestedProps !== void 0 ? nestedProps : flatProps;
|
|
45298
|
+
const content = { id: _id ?? idPrefix, pattern: type, props: resolvedProps, priority: 0 };
|
|
45299
|
+
const SCR = getSlotContentRenderer();
|
|
45300
|
+
return /* @__PURE__ */ jsx(SCR, { content, onDismiss: () => void 0 });
|
|
45301
|
+
}
|
|
45302
|
+
}
|
|
45303
|
+
return null;
|
|
45304
|
+
}
|
|
45305
|
+
var _scr, GameShell;
|
|
44936
45306
|
var init_GameShell = __esm({
|
|
44937
45307
|
"components/game/templates/GameShell.tsx"() {
|
|
44938
45308
|
init_cn();
|
|
44939
45309
|
init_Box();
|
|
44940
45310
|
init_Stack();
|
|
44941
45311
|
init_Typography();
|
|
45312
|
+
_scr = null;
|
|
44942
45313
|
GameShell = ({
|
|
44943
45314
|
appName = "Game",
|
|
44944
45315
|
hud,
|
|
@@ -44987,7 +45358,7 @@ var init_GameShell = __esm({
|
|
|
44987
45358
|
children: appName
|
|
44988
45359
|
}
|
|
44989
45360
|
),
|
|
44990
|
-
hud && /* @__PURE__ */ jsx(Box, { className: "game-shell__hud", children: hud })
|
|
45361
|
+
hud && /* @__PURE__ */ jsx(Box, { className: "game-shell__hud", children: resolveDescriptor(hud, "gs-hud") })
|
|
44991
45362
|
]
|
|
44992
45363
|
}
|
|
44993
45364
|
),
|
|
@@ -45000,7 +45371,7 @@ var init_GameShell = __esm({
|
|
|
45000
45371
|
overflow: "hidden",
|
|
45001
45372
|
position: "relative"
|
|
45002
45373
|
},
|
|
45003
|
-
children
|
|
45374
|
+
children: resolveDescriptor(children, "gs-children")
|
|
45004
45375
|
}
|
|
45005
45376
|
)
|
|
45006
45377
|
]
|
|
@@ -45010,7 +45381,32 @@ var init_GameShell = __esm({
|
|
|
45010
45381
|
GameShell.displayName = "GameShell";
|
|
45011
45382
|
}
|
|
45012
45383
|
});
|
|
45013
|
-
|
|
45384
|
+
function getSlotContentRenderer2() {
|
|
45385
|
+
if (_scr2) return _scr2;
|
|
45386
|
+
const mod = (init_UISlotRenderer(), __toCommonJS(UISlotRenderer_exports));
|
|
45387
|
+
_scr2 = mod.SlotContentRenderer;
|
|
45388
|
+
return _scr2;
|
|
45389
|
+
}
|
|
45390
|
+
function resolveDescriptor2(value, idPrefix) {
|
|
45391
|
+
if (value === null || value === void 0) return value;
|
|
45392
|
+
if (React80__default.isValidElement(value)) return value;
|
|
45393
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") return value;
|
|
45394
|
+
if (Array.isArray(value)) {
|
|
45395
|
+
return value.map((item, i) => /* @__PURE__ */ jsx(React80__default.Fragment, { children: resolveDescriptor2(item, `${idPrefix}-${i}`) }, i));
|
|
45396
|
+
}
|
|
45397
|
+
if (typeof value === "object") {
|
|
45398
|
+
const rec = value;
|
|
45399
|
+
if (typeof rec.type === "string" && getComponentForPattern(rec.type) !== null) {
|
|
45400
|
+
const { type, props: nestedProps, _id, ...flatProps } = rec;
|
|
45401
|
+
const resolvedProps = nestedProps !== void 0 ? nestedProps : flatProps;
|
|
45402
|
+
const content = { id: _id ?? idPrefix, pattern: type, props: resolvedProps, priority: 0 };
|
|
45403
|
+
const SCR = getSlotContentRenderer2();
|
|
45404
|
+
return /* @__PURE__ */ jsx(SCR, { content, onDismiss: () => void 0 });
|
|
45405
|
+
}
|
|
45406
|
+
}
|
|
45407
|
+
return null;
|
|
45408
|
+
}
|
|
45409
|
+
var _scr2, GameTemplate;
|
|
45014
45410
|
var init_GameTemplate = __esm({
|
|
45015
45411
|
"components/game/templates/GameTemplate.tsx"() {
|
|
45016
45412
|
init_cn();
|
|
@@ -45018,6 +45414,7 @@ var init_GameTemplate = __esm({
|
|
|
45018
45414
|
init_Stack();
|
|
45019
45415
|
init_Typography();
|
|
45020
45416
|
init_Button();
|
|
45417
|
+
_scr2 = null;
|
|
45021
45418
|
GameTemplate = ({
|
|
45022
45419
|
entity,
|
|
45023
45420
|
title = "Game",
|
|
@@ -45085,13 +45482,13 @@ var init_GameTemplate = __esm({
|
|
|
45085
45482
|
fullWidth: true,
|
|
45086
45483
|
className: "flex-1 bg-muted",
|
|
45087
45484
|
children: [
|
|
45088
|
-
children,
|
|
45485
|
+
resolveDescriptor2(children, "gt-children"),
|
|
45089
45486
|
hud && /* @__PURE__ */ jsx(
|
|
45090
45487
|
Box,
|
|
45091
45488
|
{
|
|
45092
45489
|
position: "absolute",
|
|
45093
45490
|
className: "top-0 left-0 right-0 pointer-events-none",
|
|
45094
|
-
children: /* @__PURE__ */ jsx(Box, { padding: "md", className: "pointer-events-auto w-fit", children: hud })
|
|
45491
|
+
children: /* @__PURE__ */ jsx(Box, { padding: "md", className: "pointer-events-auto w-fit", children: resolveDescriptor2(hud, "gt-hud") })
|
|
45095
45492
|
}
|
|
45096
45493
|
)
|
|
45097
45494
|
]
|
|
@@ -45116,7 +45513,7 @@ var init_GameTemplate = __esm({
|
|
|
45116
45513
|
children: /* @__PURE__ */ jsx(Typography, { variant: "h6", children: "Debug Panel" })
|
|
45117
45514
|
}
|
|
45118
45515
|
),
|
|
45119
|
-
/* @__PURE__ */ jsx(Box, { padding: "md", children: debugPanel })
|
|
45516
|
+
/* @__PURE__ */ jsx(Box, { padding: "md", children: resolveDescriptor2(debugPanel, "gt-debug") })
|
|
45120
45517
|
]
|
|
45121
45518
|
}
|
|
45122
45519
|
)
|
|
@@ -45328,6 +45725,39 @@ var init_HexStrategyBoard = __esm({
|
|
|
45328
45725
|
HexStrategyBoard.displayName = "HexStrategyBoard";
|
|
45329
45726
|
}
|
|
45330
45727
|
});
|
|
45728
|
+
function HolidayRunnerBoard({
|
|
45729
|
+
backgroundImage,
|
|
45730
|
+
assetBaseUrl,
|
|
45731
|
+
width = 800,
|
|
45732
|
+
height = 400,
|
|
45733
|
+
fps = 60,
|
|
45734
|
+
isLoading,
|
|
45735
|
+
error,
|
|
45736
|
+
className
|
|
45737
|
+
}) {
|
|
45738
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("holiday-runner-board relative w-full h-full", className), children: [
|
|
45739
|
+
isLoading && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-black/40 z-10", children: /* @__PURE__ */ jsx("span", { className: "text-white text-sm", children: "Loading\u2026" }) }),
|
|
45740
|
+
error && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-black/60 z-10", children: /* @__PURE__ */ jsx("span", { className: "text-red-400 text-sm", children: error.message }) }),
|
|
45741
|
+
/* @__PURE__ */ jsx(
|
|
45742
|
+
GameCanvas2D,
|
|
45743
|
+
{
|
|
45744
|
+
width,
|
|
45745
|
+
height,
|
|
45746
|
+
fps,
|
|
45747
|
+
backgroundImage: backgroundImage ?? "",
|
|
45748
|
+
assetBaseUrl
|
|
45749
|
+
}
|
|
45750
|
+
)
|
|
45751
|
+
] });
|
|
45752
|
+
}
|
|
45753
|
+
var init_HolidayRunnerBoard = __esm({
|
|
45754
|
+
"components/game/organisms/HolidayRunnerBoard.tsx"() {
|
|
45755
|
+
"use client";
|
|
45756
|
+
init_cn();
|
|
45757
|
+
init_GameCanvas2D();
|
|
45758
|
+
HolidayRunnerBoard.displayName = "HolidayRunnerBoard";
|
|
45759
|
+
}
|
|
45760
|
+
});
|
|
45331
45761
|
var LandingPageTemplate;
|
|
45332
45762
|
var init_LandingPageTemplate = __esm({
|
|
45333
45763
|
"components/marketing/templates/LandingPageTemplate.tsx"() {
|
|
@@ -45663,7 +46093,7 @@ var init_List = __esm({
|
|
|
45663
46093
|
if (entity && typeof entity === "object" && "id" in entity) return [entity];
|
|
45664
46094
|
return [];
|
|
45665
46095
|
}, [entity]);
|
|
45666
|
-
const getItemActions =
|
|
46096
|
+
const getItemActions = React80__default.useCallback(
|
|
45667
46097
|
(item) => {
|
|
45668
46098
|
if (!itemActions) return [];
|
|
45669
46099
|
if (typeof itemActions === "function") {
|
|
@@ -46082,6 +46512,48 @@ var init_MasterDetailLayout = __esm({
|
|
|
46082
46512
|
MasterDetailLayout.displayName = "MasterDetailLayout";
|
|
46083
46513
|
}
|
|
46084
46514
|
});
|
|
46515
|
+
function MatchPuzzleBoard({
|
|
46516
|
+
tiles,
|
|
46517
|
+
units,
|
|
46518
|
+
features,
|
|
46519
|
+
assetManifest,
|
|
46520
|
+
assetBaseUrl,
|
|
46521
|
+
scale = 0.45,
|
|
46522
|
+
showMinimap = false,
|
|
46523
|
+
enableCamera = false,
|
|
46524
|
+
tileClickEvent,
|
|
46525
|
+
unitClickEvent,
|
|
46526
|
+
isLoading,
|
|
46527
|
+
error,
|
|
46528
|
+
className
|
|
46529
|
+
}) {
|
|
46530
|
+
return /* @__PURE__ */ jsx("div", { className: cn("match-puzzle-board relative w-full h-full", className), children: /* @__PURE__ */ jsx(
|
|
46531
|
+
IsometricCanvas_default,
|
|
46532
|
+
{
|
|
46533
|
+
tileLayout: "flat",
|
|
46534
|
+
tiles,
|
|
46535
|
+
units,
|
|
46536
|
+
features,
|
|
46537
|
+
assetManifest,
|
|
46538
|
+
assetBaseUrl,
|
|
46539
|
+
scale,
|
|
46540
|
+
showMinimap,
|
|
46541
|
+
enableCamera,
|
|
46542
|
+
tileClickEvent,
|
|
46543
|
+
unitClickEvent,
|
|
46544
|
+
isLoading,
|
|
46545
|
+
error
|
|
46546
|
+
}
|
|
46547
|
+
) });
|
|
46548
|
+
}
|
|
46549
|
+
var init_MatchPuzzleBoard = __esm({
|
|
46550
|
+
"components/game/organisms/MatchPuzzleBoard.tsx"() {
|
|
46551
|
+
"use client";
|
|
46552
|
+
init_cn();
|
|
46553
|
+
init_IsometricCanvas();
|
|
46554
|
+
MatchPuzzleBoard.displayName = "MatchPuzzleBoard";
|
|
46555
|
+
}
|
|
46556
|
+
});
|
|
46085
46557
|
var COLUMN_CLASSES, ASPECT_CLASSES, MediaGallery;
|
|
46086
46558
|
var init_MediaGallery = __esm({
|
|
46087
46559
|
"components/core/organisms/MediaGallery.tsx"() {
|
|
@@ -46139,7 +46611,7 @@ var init_MediaGallery = __esm({
|
|
|
46139
46611
|
[selectable, selectedItems, selectionEvent, eventBus]
|
|
46140
46612
|
);
|
|
46141
46613
|
const entityData = Array.isArray(entity) ? entity : [];
|
|
46142
|
-
const items =
|
|
46614
|
+
const items = React80__default.useMemo(() => {
|
|
46143
46615
|
if (propItems) return propItems;
|
|
46144
46616
|
if (entityData.length === 0) return [];
|
|
46145
46617
|
return entityData.map((record, idx) => ({
|
|
@@ -46309,9 +46781,9 @@ function MiniMap({
|
|
|
46309
46781
|
viewportRect = DEFAULT_VIEWPORT,
|
|
46310
46782
|
className
|
|
46311
46783
|
}) {
|
|
46312
|
-
const canvasRef =
|
|
46313
|
-
const frameRef =
|
|
46314
|
-
|
|
46784
|
+
const canvasRef = React80.useRef(null);
|
|
46785
|
+
const frameRef = React80.useRef(0);
|
|
46786
|
+
React80.useEffect(() => {
|
|
46315
46787
|
const canvas = canvasRef.current;
|
|
46316
46788
|
if (!canvas) return;
|
|
46317
46789
|
const ctx = canvas.getContext("2d");
|
|
@@ -46407,8 +46879,50 @@ var init_MiniMap = __esm({
|
|
|
46407
46879
|
MiniMap.displayName = "MiniMap";
|
|
46408
46880
|
}
|
|
46409
46881
|
});
|
|
46882
|
+
function MinigolfBoard({
|
|
46883
|
+
tiles,
|
|
46884
|
+
units,
|
|
46885
|
+
features,
|
|
46886
|
+
assetManifest,
|
|
46887
|
+
assetBaseUrl,
|
|
46888
|
+
scale = 0.45,
|
|
46889
|
+
showMinimap = true,
|
|
46890
|
+
enableCamera = true,
|
|
46891
|
+
tileClickEvent,
|
|
46892
|
+
unitClickEvent,
|
|
46893
|
+
isLoading,
|
|
46894
|
+
error,
|
|
46895
|
+
className
|
|
46896
|
+
}) {
|
|
46897
|
+
return /* @__PURE__ */ jsx("div", { className: cn("minigolf-board relative w-full h-full", className), children: /* @__PURE__ */ jsx(
|
|
46898
|
+
IsometricCanvas_default,
|
|
46899
|
+
{
|
|
46900
|
+
tileLayout: "isometric",
|
|
46901
|
+
tiles,
|
|
46902
|
+
units,
|
|
46903
|
+
features,
|
|
46904
|
+
assetManifest,
|
|
46905
|
+
assetBaseUrl,
|
|
46906
|
+
scale,
|
|
46907
|
+
showMinimap,
|
|
46908
|
+
enableCamera,
|
|
46909
|
+
tileClickEvent,
|
|
46910
|
+
unitClickEvent,
|
|
46911
|
+
isLoading,
|
|
46912
|
+
error
|
|
46913
|
+
}
|
|
46914
|
+
) });
|
|
46915
|
+
}
|
|
46916
|
+
var init_MinigolfBoard = __esm({
|
|
46917
|
+
"components/game/organisms/MinigolfBoard.tsx"() {
|
|
46918
|
+
"use client";
|
|
46919
|
+
init_cn();
|
|
46920
|
+
init_IsometricCanvas();
|
|
46921
|
+
MinigolfBoard.displayName = "MinigolfBoard";
|
|
46922
|
+
}
|
|
46923
|
+
});
|
|
46410
46924
|
function extractTitle2(children) {
|
|
46411
|
-
if (!
|
|
46925
|
+
if (!React80__default.isValidElement(children)) return void 0;
|
|
46412
46926
|
const props = children.props;
|
|
46413
46927
|
if (typeof props.title === "string") {
|
|
46414
46928
|
return props.title;
|
|
@@ -46624,6 +47138,87 @@ var init_NegotiatorBoard = __esm({
|
|
|
46624
47138
|
NegotiatorBoard.displayName = "NegotiatorBoard";
|
|
46625
47139
|
}
|
|
46626
47140
|
});
|
|
47141
|
+
function PinballBoard({
|
|
47142
|
+
tiles: _tiles,
|
|
47143
|
+
units: _units,
|
|
47144
|
+
features: _features,
|
|
47145
|
+
assetManifest: _assetManifest,
|
|
47146
|
+
assetBaseUrl,
|
|
47147
|
+
scale = 1,
|
|
47148
|
+
showMinimap: _showMinimap = false,
|
|
47149
|
+
enableCamera: _enableCamera = false,
|
|
47150
|
+
tileClickEvent: _tileClickEvent,
|
|
47151
|
+
unitClickEvent: _unitClickEvent,
|
|
47152
|
+
isLoading,
|
|
47153
|
+
error,
|
|
47154
|
+
className
|
|
47155
|
+
}) {
|
|
47156
|
+
if (isLoading) {
|
|
47157
|
+
return /* @__PURE__ */ jsx("div", { className: cn("pinball-board relative w-full h-full flex items-center justify-center", className), children: /* @__PURE__ */ jsx("span", { className: "text-sm text-muted-foreground", children: "Loading..." }) });
|
|
47158
|
+
}
|
|
47159
|
+
if (error) {
|
|
47160
|
+
return /* @__PURE__ */ jsx("div", { className: cn("pinball-board relative w-full h-full flex items-center justify-center", className), children: /* @__PURE__ */ jsx("span", { className: "text-sm text-destructive", children: error.message }) });
|
|
47161
|
+
}
|
|
47162
|
+
return /* @__PURE__ */ jsx("div", { className: cn("pinball-board relative w-full h-full", className), children: /* @__PURE__ */ jsx(
|
|
47163
|
+
GameCanvas2D,
|
|
47164
|
+
{
|
|
47165
|
+
width: Math.round(400 * scale),
|
|
47166
|
+
height: Math.round(800 * scale),
|
|
47167
|
+
assetBaseUrl,
|
|
47168
|
+
fps: 60
|
|
47169
|
+
}
|
|
47170
|
+
) });
|
|
47171
|
+
}
|
|
47172
|
+
var init_PinballBoard = __esm({
|
|
47173
|
+
"components/game/organisms/PinballBoard.tsx"() {
|
|
47174
|
+
"use client";
|
|
47175
|
+
init_cn();
|
|
47176
|
+
init_GameCanvas2D();
|
|
47177
|
+
PinballBoard.displayName = "PinballBoard";
|
|
47178
|
+
}
|
|
47179
|
+
});
|
|
47180
|
+
function PirateBoard({
|
|
47181
|
+
tiles,
|
|
47182
|
+
units,
|
|
47183
|
+
features,
|
|
47184
|
+
assetManifest,
|
|
47185
|
+
assetBaseUrl,
|
|
47186
|
+
scale = 0.45,
|
|
47187
|
+
showMinimap = true,
|
|
47188
|
+
enableCamera = true,
|
|
47189
|
+
tileClickEvent,
|
|
47190
|
+
unitClickEvent,
|
|
47191
|
+
isLoading,
|
|
47192
|
+
error,
|
|
47193
|
+
className
|
|
47194
|
+
}) {
|
|
47195
|
+
return /* @__PURE__ */ jsx("div", { className: cn("pirate-board relative w-full h-full", className), children: /* @__PURE__ */ jsx(
|
|
47196
|
+
IsometricCanvas_default,
|
|
47197
|
+
{
|
|
47198
|
+
tileLayout: "flat",
|
|
47199
|
+
tiles,
|
|
47200
|
+
units,
|
|
47201
|
+
features,
|
|
47202
|
+
assetManifest,
|
|
47203
|
+
assetBaseUrl,
|
|
47204
|
+
scale,
|
|
47205
|
+
showMinimap,
|
|
47206
|
+
enableCamera,
|
|
47207
|
+
tileClickEvent,
|
|
47208
|
+
unitClickEvent,
|
|
47209
|
+
isLoading,
|
|
47210
|
+
error
|
|
47211
|
+
}
|
|
47212
|
+
) });
|
|
47213
|
+
}
|
|
47214
|
+
var init_PirateBoard = __esm({
|
|
47215
|
+
"components/game/organisms/PirateBoard.tsx"() {
|
|
47216
|
+
"use client";
|
|
47217
|
+
init_cn();
|
|
47218
|
+
init_IsometricCanvas();
|
|
47219
|
+
PirateBoard.displayName = "PirateBoard";
|
|
47220
|
+
}
|
|
47221
|
+
});
|
|
46627
47222
|
function resolveEntity(entity) {
|
|
46628
47223
|
if (!entity) return {};
|
|
46629
47224
|
if (Array.isArray(entity)) return entity[0] ?? {};
|
|
@@ -46984,6 +47579,37 @@ var init_PricingPageTemplate = __esm({
|
|
|
46984
47579
|
PricingPageTemplate.displayName = "PricingPageTemplate";
|
|
46985
47580
|
}
|
|
46986
47581
|
});
|
|
47582
|
+
function RacingBoard({
|
|
47583
|
+
backgroundImage,
|
|
47584
|
+
assetBaseUrl,
|
|
47585
|
+
width = 800,
|
|
47586
|
+
height = 600,
|
|
47587
|
+
fps = 60,
|
|
47588
|
+
tickEvent,
|
|
47589
|
+
drawEvent,
|
|
47590
|
+
className
|
|
47591
|
+
}) {
|
|
47592
|
+
return /* @__PURE__ */ jsx("div", { className: cn("racing-board relative w-full h-full", className), children: /* @__PURE__ */ jsx(
|
|
47593
|
+
GameCanvas2D,
|
|
47594
|
+
{
|
|
47595
|
+
backgroundImage,
|
|
47596
|
+
assetBaseUrl,
|
|
47597
|
+
width,
|
|
47598
|
+
height,
|
|
47599
|
+
fps,
|
|
47600
|
+
tickEvent: typeof tickEvent === "string" ? tickEvent : void 0,
|
|
47601
|
+
drawEvent: typeof drawEvent === "string" ? drawEvent : void 0
|
|
47602
|
+
}
|
|
47603
|
+
) });
|
|
47604
|
+
}
|
|
47605
|
+
var init_RacingBoard = __esm({
|
|
47606
|
+
"components/game/organisms/RacingBoard.tsx"() {
|
|
47607
|
+
"use client";
|
|
47608
|
+
init_cn();
|
|
47609
|
+
init_GameCanvas2D();
|
|
47610
|
+
RacingBoard.displayName = "RacingBoard";
|
|
47611
|
+
}
|
|
47612
|
+
});
|
|
46987
47613
|
function ResourceCounter({
|
|
46988
47614
|
assetUrl = DEFAULT_ASSET_URL10,
|
|
46989
47615
|
icon,
|
|
@@ -47525,7 +48151,7 @@ var init_debugRegistry = __esm({
|
|
|
47525
48151
|
}
|
|
47526
48152
|
});
|
|
47527
48153
|
function useDebugData() {
|
|
47528
|
-
const [data, setData] =
|
|
48154
|
+
const [data, setData] = React80.useState(() => ({
|
|
47529
48155
|
traits: [],
|
|
47530
48156
|
ticks: [],
|
|
47531
48157
|
guards: [],
|
|
@@ -47539,7 +48165,7 @@ function useDebugData() {
|
|
|
47539
48165
|
},
|
|
47540
48166
|
lastUpdate: Date.now()
|
|
47541
48167
|
}));
|
|
47542
|
-
|
|
48168
|
+
React80.useEffect(() => {
|
|
47543
48169
|
const updateData = () => {
|
|
47544
48170
|
setData({
|
|
47545
48171
|
traits: getAllTraits(),
|
|
@@ -47648,12 +48274,12 @@ function layoutGraph(states, transitions, initialState, width, height) {
|
|
|
47648
48274
|
return positions;
|
|
47649
48275
|
}
|
|
47650
48276
|
function WalkMinimap() {
|
|
47651
|
-
const [walkStep, setWalkStep] =
|
|
47652
|
-
const [traits2, setTraits] =
|
|
47653
|
-
const [coveredEdges, setCoveredEdges] =
|
|
47654
|
-
const [completedTraits, setCompletedTraits] =
|
|
47655
|
-
const prevTraitRef =
|
|
47656
|
-
|
|
48277
|
+
const [walkStep, setWalkStep] = React80.useState(null);
|
|
48278
|
+
const [traits2, setTraits] = React80.useState([]);
|
|
48279
|
+
const [coveredEdges, setCoveredEdges] = React80.useState([]);
|
|
48280
|
+
const [completedTraits, setCompletedTraits] = React80.useState(/* @__PURE__ */ new Set());
|
|
48281
|
+
const prevTraitRef = React80.useRef(null);
|
|
48282
|
+
React80.useEffect(() => {
|
|
47657
48283
|
const interval = setInterval(() => {
|
|
47658
48284
|
const w = window;
|
|
47659
48285
|
const step = w.__orbitalWalkStep;
|
|
@@ -48089,15 +48715,15 @@ var init_EntitiesTab = __esm({
|
|
|
48089
48715
|
});
|
|
48090
48716
|
function EventFlowTab({ events: events2 }) {
|
|
48091
48717
|
const { t } = useTranslate();
|
|
48092
|
-
const [filter, setFilter] =
|
|
48093
|
-
const containerRef =
|
|
48094
|
-
const [autoScroll, setAutoScroll] =
|
|
48095
|
-
|
|
48718
|
+
const [filter, setFilter] = React80.useState("all");
|
|
48719
|
+
const containerRef = React80.useRef(null);
|
|
48720
|
+
const [autoScroll, setAutoScroll] = React80.useState(true);
|
|
48721
|
+
React80.useEffect(() => {
|
|
48096
48722
|
if (autoScroll && containerRef.current) {
|
|
48097
48723
|
containerRef.current.scrollTop = containerRef.current.scrollHeight;
|
|
48098
48724
|
}
|
|
48099
48725
|
}, [events2.length, autoScroll]);
|
|
48100
|
-
const filteredEvents =
|
|
48726
|
+
const filteredEvents = React80.useMemo(() => {
|
|
48101
48727
|
if (filter === "all") return events2;
|
|
48102
48728
|
return events2.filter((e) => e.type === filter);
|
|
48103
48729
|
}, [events2, filter]);
|
|
@@ -48213,7 +48839,7 @@ var init_EventFlowTab = __esm({
|
|
|
48213
48839
|
});
|
|
48214
48840
|
function GuardsPanel({ guards }) {
|
|
48215
48841
|
const { t } = useTranslate();
|
|
48216
|
-
const [filter, setFilter] =
|
|
48842
|
+
const [filter, setFilter] = React80.useState("all");
|
|
48217
48843
|
if (guards.length === 0) {
|
|
48218
48844
|
return /* @__PURE__ */ jsx(
|
|
48219
48845
|
EmptyState,
|
|
@@ -48226,7 +48852,7 @@ function GuardsPanel({ guards }) {
|
|
|
48226
48852
|
}
|
|
48227
48853
|
const passedCount = guards.filter((g) => g.result).length;
|
|
48228
48854
|
const failedCount = guards.length - passedCount;
|
|
48229
|
-
const filteredGuards =
|
|
48855
|
+
const filteredGuards = React80.useMemo(() => {
|
|
48230
48856
|
if (filter === "all") return guards;
|
|
48231
48857
|
if (filter === "passed") return guards.filter((g) => g.result);
|
|
48232
48858
|
return guards.filter((g) => !g.result);
|
|
@@ -48389,10 +49015,10 @@ function EffectBadge({ effect }) {
|
|
|
48389
49015
|
}
|
|
48390
49016
|
function TransitionTimeline({ transitions }) {
|
|
48391
49017
|
const { t } = useTranslate();
|
|
48392
|
-
const containerRef =
|
|
48393
|
-
const [autoScroll, setAutoScroll] =
|
|
48394
|
-
const [expandedId, setExpandedId] =
|
|
48395
|
-
|
|
49018
|
+
const containerRef = React80.useRef(null);
|
|
49019
|
+
const [autoScroll, setAutoScroll] = React80.useState(true);
|
|
49020
|
+
const [expandedId, setExpandedId] = React80.useState(null);
|
|
49021
|
+
React80.useEffect(() => {
|
|
48396
49022
|
if (autoScroll && containerRef.current) {
|
|
48397
49023
|
containerRef.current.scrollTop = containerRef.current.scrollHeight;
|
|
48398
49024
|
}
|
|
@@ -48672,9 +49298,9 @@ function getAllEvents(traits2) {
|
|
|
48672
49298
|
function EventDispatcherTab({ traits: traits2, schema }) {
|
|
48673
49299
|
const eventBus = useEventBus();
|
|
48674
49300
|
const { t } = useTranslate();
|
|
48675
|
-
const [log10, setLog] =
|
|
48676
|
-
const prevStatesRef =
|
|
48677
|
-
|
|
49301
|
+
const [log10, setLog] = React80.useState([]);
|
|
49302
|
+
const prevStatesRef = React80.useRef(/* @__PURE__ */ new Map());
|
|
49303
|
+
React80.useEffect(() => {
|
|
48678
49304
|
for (const trait of traits2) {
|
|
48679
49305
|
const prev = prevStatesRef.current.get(trait.id);
|
|
48680
49306
|
if (prev && prev !== trait.currentState) {
|
|
@@ -48843,10 +49469,10 @@ function VerifyModePanel({
|
|
|
48843
49469
|
localCount
|
|
48844
49470
|
}) {
|
|
48845
49471
|
const { t } = useTranslate();
|
|
48846
|
-
const [expanded, setExpanded] =
|
|
48847
|
-
const scrollRef =
|
|
48848
|
-
const prevCountRef =
|
|
48849
|
-
|
|
49472
|
+
const [expanded, setExpanded] = React80.useState(true);
|
|
49473
|
+
const scrollRef = React80.useRef(null);
|
|
49474
|
+
const prevCountRef = React80.useRef(0);
|
|
49475
|
+
React80.useEffect(() => {
|
|
48850
49476
|
if (expanded && transitions.length > prevCountRef.current && scrollRef.current) {
|
|
48851
49477
|
scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
|
|
48852
49478
|
}
|
|
@@ -48903,10 +49529,10 @@ function RuntimeDebugger({
|
|
|
48903
49529
|
schema
|
|
48904
49530
|
}) {
|
|
48905
49531
|
const { t } = useTranslate();
|
|
48906
|
-
const [isCollapsed, setIsCollapsed] =
|
|
48907
|
-
const [isVisible, setIsVisible] =
|
|
49532
|
+
const [isCollapsed, setIsCollapsed] = React80.useState(mode === "verify" ? true : defaultCollapsed);
|
|
49533
|
+
const [isVisible, setIsVisible] = React80.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
|
|
48908
49534
|
const debugData = useDebugData();
|
|
48909
|
-
|
|
49535
|
+
React80.useEffect(() => {
|
|
48910
49536
|
if (mode === "inline") return;
|
|
48911
49537
|
return onDebugToggle((enabled) => {
|
|
48912
49538
|
setIsVisible(enabled);
|
|
@@ -48915,7 +49541,7 @@ function RuntimeDebugger({
|
|
|
48915
49541
|
}
|
|
48916
49542
|
});
|
|
48917
49543
|
}, [mode]);
|
|
48918
|
-
|
|
49544
|
+
React80.useEffect(() => {
|
|
48919
49545
|
if (mode === "inline") return;
|
|
48920
49546
|
const handleKeyDown = (e) => {
|
|
48921
49547
|
if (e.key === "`" && isVisible) {
|
|
@@ -49475,7 +50101,7 @@ function SequenceBar({
|
|
|
49475
50101
|
onSlotRemove(index);
|
|
49476
50102
|
}, [onSlotRemove, playing]);
|
|
49477
50103
|
const paddedSlots = Array.from({ length: maxSlots }, (_, i) => slots[i]);
|
|
49478
|
-
return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(
|
|
50104
|
+
return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React80__default.Fragment, { children: [
|
|
49479
50105
|
i > 0 && /* @__PURE__ */ jsx(
|
|
49480
50106
|
Typography,
|
|
49481
50107
|
{
|
|
@@ -50236,6 +50862,123 @@ var init_SimulatorBoard = __esm({
|
|
|
50236
50862
|
SimulatorBoard.displayName = "SimulatorBoard";
|
|
50237
50863
|
}
|
|
50238
50864
|
});
|
|
50865
|
+
function SokobanBoard({
|
|
50866
|
+
tiles,
|
|
50867
|
+
units,
|
|
50868
|
+
features,
|
|
50869
|
+
assetManifest,
|
|
50870
|
+
assetBaseUrl,
|
|
50871
|
+
scale = 0.45,
|
|
50872
|
+
showMinimap = false,
|
|
50873
|
+
enableCamera = false,
|
|
50874
|
+
tileClickEvent,
|
|
50875
|
+
unitClickEvent,
|
|
50876
|
+
isLoading,
|
|
50877
|
+
error,
|
|
50878
|
+
className
|
|
50879
|
+
}) {
|
|
50880
|
+
return /* @__PURE__ */ jsx("div", { className: cn("sokoban-board relative w-full h-full", className), children: /* @__PURE__ */ jsx(
|
|
50881
|
+
IsometricCanvas_default,
|
|
50882
|
+
{
|
|
50883
|
+
tileLayout: "flat",
|
|
50884
|
+
tiles,
|
|
50885
|
+
units,
|
|
50886
|
+
features,
|
|
50887
|
+
assetManifest,
|
|
50888
|
+
assetBaseUrl,
|
|
50889
|
+
scale,
|
|
50890
|
+
showMinimap,
|
|
50891
|
+
enableCamera,
|
|
50892
|
+
tileClickEvent,
|
|
50893
|
+
unitClickEvent,
|
|
50894
|
+
isLoading,
|
|
50895
|
+
error
|
|
50896
|
+
}
|
|
50897
|
+
) });
|
|
50898
|
+
}
|
|
50899
|
+
var init_SokobanBoard = __esm({
|
|
50900
|
+
"components/game/organisms/SokobanBoard.tsx"() {
|
|
50901
|
+
"use client";
|
|
50902
|
+
init_cn();
|
|
50903
|
+
init_IsometricCanvas();
|
|
50904
|
+
SokobanBoard.displayName = "SokobanBoard";
|
|
50905
|
+
}
|
|
50906
|
+
});
|
|
50907
|
+
function SpaceShmupBoard({
|
|
50908
|
+
backgroundImage,
|
|
50909
|
+
assetBaseUrl,
|
|
50910
|
+
width = 800,
|
|
50911
|
+
height = 600,
|
|
50912
|
+
fps = 60,
|
|
50913
|
+
isLoading,
|
|
50914
|
+
error,
|
|
50915
|
+
className
|
|
50916
|
+
}) {
|
|
50917
|
+
return /* @__PURE__ */ jsxs("div", { className: cn("space-shmup-board relative w-full h-full", className), children: [
|
|
50918
|
+
isLoading && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-black/60 z-10", children: /* @__PURE__ */ jsx("span", { className: "text-white text-sm", children: "Loading\u2026" }) }),
|
|
50919
|
+
error && /* @__PURE__ */ jsx("div", { className: "absolute inset-0 flex items-center justify-center bg-red-900/60 z-10", children: /* @__PURE__ */ jsx("span", { className: "text-white text-sm", children: error.message }) }),
|
|
50920
|
+
/* @__PURE__ */ jsx(
|
|
50921
|
+
GameCanvas2D,
|
|
50922
|
+
{
|
|
50923
|
+
backgroundImage,
|
|
50924
|
+
assetBaseUrl,
|
|
50925
|
+
width,
|
|
50926
|
+
height,
|
|
50927
|
+
fps
|
|
50928
|
+
}
|
|
50929
|
+
)
|
|
50930
|
+
] });
|
|
50931
|
+
}
|
|
50932
|
+
var init_SpaceShmupBoard = __esm({
|
|
50933
|
+
"components/game/organisms/SpaceShmupBoard.tsx"() {
|
|
50934
|
+
"use client";
|
|
50935
|
+
init_cn();
|
|
50936
|
+
init_GameCanvas2D();
|
|
50937
|
+
SpaceShmupBoard.displayName = "SpaceShmupBoard";
|
|
50938
|
+
}
|
|
50939
|
+
});
|
|
50940
|
+
function SpaceStationBoard({
|
|
50941
|
+
tiles,
|
|
50942
|
+
units,
|
|
50943
|
+
features,
|
|
50944
|
+
assetManifest,
|
|
50945
|
+
assetBaseUrl,
|
|
50946
|
+
scale = 0.45,
|
|
50947
|
+
showMinimap = true,
|
|
50948
|
+
enableCamera = true,
|
|
50949
|
+
tileClickEvent,
|
|
50950
|
+
unitClickEvent,
|
|
50951
|
+
isLoading,
|
|
50952
|
+
error,
|
|
50953
|
+
className
|
|
50954
|
+
}) {
|
|
50955
|
+
return /* @__PURE__ */ jsx("div", { className: cn("space-station-board relative w-full h-full", className), children: /* @__PURE__ */ jsx(
|
|
50956
|
+
IsometricCanvas_default,
|
|
50957
|
+
{
|
|
50958
|
+
tileLayout: "isometric",
|
|
50959
|
+
tiles,
|
|
50960
|
+
units,
|
|
50961
|
+
features,
|
|
50962
|
+
assetManifest,
|
|
50963
|
+
assetBaseUrl,
|
|
50964
|
+
scale,
|
|
50965
|
+
showMinimap,
|
|
50966
|
+
enableCamera,
|
|
50967
|
+
tileClickEvent,
|
|
50968
|
+
unitClickEvent,
|
|
50969
|
+
isLoading,
|
|
50970
|
+
error
|
|
50971
|
+
}
|
|
50972
|
+
) });
|
|
50973
|
+
}
|
|
50974
|
+
var init_SpaceStationBoard = __esm({
|
|
50975
|
+
"components/game/organisms/SpaceStationBoard.tsx"() {
|
|
50976
|
+
"use client";
|
|
50977
|
+
init_cn();
|
|
50978
|
+
init_IsometricCanvas();
|
|
50979
|
+
SpaceStationBoard.displayName = "SpaceStationBoard";
|
|
50980
|
+
}
|
|
50981
|
+
});
|
|
50239
50982
|
var SplitPane;
|
|
50240
50983
|
var init_SplitPane = __esm({
|
|
50241
50984
|
"components/core/organisms/layout/SplitPane.tsx"() {
|
|
@@ -50329,6 +51072,48 @@ var init_SplitPane = __esm({
|
|
|
50329
51072
|
SplitPane.displayName = "SplitPane";
|
|
50330
51073
|
}
|
|
50331
51074
|
});
|
|
51075
|
+
function SportsBoard({
|
|
51076
|
+
tiles,
|
|
51077
|
+
units,
|
|
51078
|
+
features,
|
|
51079
|
+
assetManifest,
|
|
51080
|
+
assetBaseUrl,
|
|
51081
|
+
scale = 0.45,
|
|
51082
|
+
showMinimap = false,
|
|
51083
|
+
enableCamera = true,
|
|
51084
|
+
tileClickEvent,
|
|
51085
|
+
unitClickEvent,
|
|
51086
|
+
isLoading,
|
|
51087
|
+
error,
|
|
51088
|
+
className
|
|
51089
|
+
}) {
|
|
51090
|
+
return /* @__PURE__ */ jsx("div", { className: cn("sports-board relative w-full h-full", className), children: /* @__PURE__ */ jsx(
|
|
51091
|
+
IsometricCanvas_default,
|
|
51092
|
+
{
|
|
51093
|
+
tileLayout: "flat",
|
|
51094
|
+
tiles,
|
|
51095
|
+
units,
|
|
51096
|
+
features,
|
|
51097
|
+
assetManifest,
|
|
51098
|
+
assetBaseUrl,
|
|
51099
|
+
scale,
|
|
51100
|
+
showMinimap,
|
|
51101
|
+
enableCamera,
|
|
51102
|
+
tileClickEvent,
|
|
51103
|
+
unitClickEvent,
|
|
51104
|
+
isLoading,
|
|
51105
|
+
error
|
|
51106
|
+
}
|
|
51107
|
+
) });
|
|
51108
|
+
}
|
|
51109
|
+
var init_SportsBoard = __esm({
|
|
51110
|
+
"components/game/organisms/SportsBoard.tsx"() {
|
|
51111
|
+
"use client";
|
|
51112
|
+
init_cn();
|
|
51113
|
+
init_IsometricCanvas();
|
|
51114
|
+
SportsBoard.displayName = "SportsBoard";
|
|
51115
|
+
}
|
|
51116
|
+
});
|
|
50332
51117
|
function Sprite({
|
|
50333
51118
|
spritesheet = "https://almadar-kflow-assets.web.app/shared/isometric-blocks/Spritesheet/allTiles_sheet.png",
|
|
50334
51119
|
frameWidth = 64,
|
|
@@ -50474,7 +51259,7 @@ var init_StatCard = __esm({
|
|
|
50474
51259
|
const labelToUse = propLabel ?? propTitle;
|
|
50475
51260
|
const eventBus = useEventBus();
|
|
50476
51261
|
const { t } = useTranslate();
|
|
50477
|
-
const handleActionClick =
|
|
51262
|
+
const handleActionClick = React80__default.useCallback(() => {
|
|
50478
51263
|
if (action?.event) {
|
|
50479
51264
|
eventBus.emit(`UI:${action.event}`, {});
|
|
50480
51265
|
}
|
|
@@ -50485,7 +51270,7 @@ var init_StatCard = __esm({
|
|
|
50485
51270
|
const data = Array.isArray(entity) ? entity : entity ? [entity] : [];
|
|
50486
51271
|
const isLoading = externalLoading ?? false;
|
|
50487
51272
|
const error = externalError;
|
|
50488
|
-
const computeMetricValue =
|
|
51273
|
+
const computeMetricValue = React80__default.useCallback(
|
|
50489
51274
|
(metric, items) => {
|
|
50490
51275
|
if (metric.value !== void 0) {
|
|
50491
51276
|
return metric.value;
|
|
@@ -50524,7 +51309,7 @@ var init_StatCard = __esm({
|
|
|
50524
51309
|
},
|
|
50525
51310
|
[]
|
|
50526
51311
|
);
|
|
50527
|
-
const schemaStats =
|
|
51312
|
+
const schemaStats = React80__default.useMemo(() => {
|
|
50528
51313
|
if (!metrics || metrics.length === 0) return null;
|
|
50529
51314
|
return metrics.map((metric) => ({
|
|
50530
51315
|
label: metric.label,
|
|
@@ -50532,7 +51317,7 @@ var init_StatCard = __esm({
|
|
|
50532
51317
|
format: metric.format
|
|
50533
51318
|
}));
|
|
50534
51319
|
}, [metrics, data, computeMetricValue]);
|
|
50535
|
-
const calculatedTrend =
|
|
51320
|
+
const calculatedTrend = React80__default.useMemo(() => {
|
|
50536
51321
|
if (manualTrend !== void 0) return manualTrend;
|
|
50537
51322
|
if (previousValue === void 0 || currentValue2 === void 0)
|
|
50538
51323
|
return void 0;
|
|
@@ -51365,6 +52150,832 @@ var init_StepFlowOrganism = __esm({
|
|
|
51365
52150
|
StepFlowOrganism.displayName = "StepFlowOrganism";
|
|
51366
52151
|
}
|
|
51367
52152
|
});
|
|
52153
|
+
|
|
52154
|
+
// components/core/molecules/markdown/index.ts
|
|
52155
|
+
var init_markdown = __esm({
|
|
52156
|
+
"components/core/molecules/markdown/index.ts"() {
|
|
52157
|
+
init_MarkdownContent();
|
|
52158
|
+
init_CodeBlock();
|
|
52159
|
+
}
|
|
52160
|
+
});
|
|
52161
|
+
function groupByOrbital(subagents) {
|
|
52162
|
+
const map = /* @__PURE__ */ new Map();
|
|
52163
|
+
for (const sub of subagents) {
|
|
52164
|
+
const key = sub.orbitalName ?? "(unattached)";
|
|
52165
|
+
const arr = map.get(key) ?? [];
|
|
52166
|
+
arr.push(sub);
|
|
52167
|
+
map.set(key, arr);
|
|
52168
|
+
}
|
|
52169
|
+
return map;
|
|
52170
|
+
}
|
|
52171
|
+
function statusIconName(status) {
|
|
52172
|
+
switch (status) {
|
|
52173
|
+
case "running":
|
|
52174
|
+
return "loader";
|
|
52175
|
+
case "complete":
|
|
52176
|
+
return "check";
|
|
52177
|
+
case "error":
|
|
52178
|
+
return "x";
|
|
52179
|
+
default:
|
|
52180
|
+
return "circle";
|
|
52181
|
+
}
|
|
52182
|
+
}
|
|
52183
|
+
function lastMessage(sub) {
|
|
52184
|
+
if (sub.messages.length === 0) return void 0;
|
|
52185
|
+
return sub.messages[sub.messages.length - 1].message;
|
|
52186
|
+
}
|
|
52187
|
+
function formatHHMMSS(ts) {
|
|
52188
|
+
const d = new Date(ts);
|
|
52189
|
+
const hh = String(d.getHours()).padStart(2, "0");
|
|
52190
|
+
const mm = String(d.getMinutes()).padStart(2, "0");
|
|
52191
|
+
const ss = String(d.getSeconds()).padStart(2, "0");
|
|
52192
|
+
return `${hh}:${mm}:${ss}`;
|
|
52193
|
+
}
|
|
52194
|
+
function compactJson(value) {
|
|
52195
|
+
if (value === void 0 || value === null) return "";
|
|
52196
|
+
if (typeof value === "string") return value;
|
|
52197
|
+
try {
|
|
52198
|
+
const json = JSON.stringify(value);
|
|
52199
|
+
if (json.length <= 240) return json;
|
|
52200
|
+
return json.slice(0, 239) + "\u2026";
|
|
52201
|
+
} catch {
|
|
52202
|
+
return String(value);
|
|
52203
|
+
}
|
|
52204
|
+
}
|
|
52205
|
+
function tryPrettyJson(s) {
|
|
52206
|
+
try {
|
|
52207
|
+
return JSON.stringify(JSON.parse(s), null, 2);
|
|
52208
|
+
} catch {
|
|
52209
|
+
return null;
|
|
52210
|
+
}
|
|
52211
|
+
}
|
|
52212
|
+
function summarizeArgs(args) {
|
|
52213
|
+
const keys = Object.keys(args);
|
|
52214
|
+
if (keys.length === 0) return "";
|
|
52215
|
+
return keys.slice(0, 3).join(", ") + (keys.length > 3 ? ", \u2026" : "");
|
|
52216
|
+
}
|
|
52217
|
+
function previewText(text, max = 120) {
|
|
52218
|
+
if (!text) return "";
|
|
52219
|
+
return text.length > max ? text.slice(0, max - 1) + "\u2026" : text;
|
|
52220
|
+
}
|
|
52221
|
+
function coordinatorToActivityItems(activities) {
|
|
52222
|
+
return activities.flatMap((a) => {
|
|
52223
|
+
switch (a.type) {
|
|
52224
|
+
case "tool_call":
|
|
52225
|
+
return [{
|
|
52226
|
+
type: "tool_call",
|
|
52227
|
+
tool: a.tool,
|
|
52228
|
+
args: a.args,
|
|
52229
|
+
timestamp: a.timestamp
|
|
52230
|
+
}];
|
|
52231
|
+
case "tool_result":
|
|
52232
|
+
return [{
|
|
52233
|
+
type: "tool_result",
|
|
52234
|
+
tool: a.tool,
|
|
52235
|
+
result: a.result,
|
|
52236
|
+
success: a.success,
|
|
52237
|
+
timestamp: a.timestamp
|
|
52238
|
+
}];
|
|
52239
|
+
case "message":
|
|
52240
|
+
return [{
|
|
52241
|
+
type: "message",
|
|
52242
|
+
role: a.role,
|
|
52243
|
+
content: a.content,
|
|
52244
|
+
timestamp: a.timestamp
|
|
52245
|
+
}];
|
|
52246
|
+
case "error":
|
|
52247
|
+
return [{
|
|
52248
|
+
type: "message",
|
|
52249
|
+
role: "system",
|
|
52250
|
+
content: `Error: ${a.message}`,
|
|
52251
|
+
timestamp: a.timestamp
|
|
52252
|
+
}];
|
|
52253
|
+
case "coordinator_decision":
|
|
52254
|
+
case "plan_committed":
|
|
52255
|
+
case "pending_question":
|
|
52256
|
+
case "clarification_question":
|
|
52257
|
+
return [];
|
|
52258
|
+
case "file_operation":
|
|
52259
|
+
return [{
|
|
52260
|
+
type: "file_operation",
|
|
52261
|
+
operation: a.operation,
|
|
52262
|
+
path: a.path,
|
|
52263
|
+
success: a.success,
|
|
52264
|
+
timestamp: a.timestamp
|
|
52265
|
+
}];
|
|
52266
|
+
case "schema_diff":
|
|
52267
|
+
return [{
|
|
52268
|
+
type: "schema_diff",
|
|
52269
|
+
filePath: a.filePath,
|
|
52270
|
+
hunks: a.hunks,
|
|
52271
|
+
timestamp: a.timestamp
|
|
52272
|
+
}];
|
|
52273
|
+
}
|
|
52274
|
+
});
|
|
52275
|
+
}
|
|
52276
|
+
function pluckCoordinatorState(activities) {
|
|
52277
|
+
let decision = null;
|
|
52278
|
+
let plan = null;
|
|
52279
|
+
const pendingQuestions = [];
|
|
52280
|
+
for (const a of activities) {
|
|
52281
|
+
if (a.type === "coordinator_decision") decision = a;
|
|
52282
|
+
else if (a.type === "plan_committed") plan = a;
|
|
52283
|
+
else if (a.type === "pending_question") pendingQuestions.push(a);
|
|
52284
|
+
}
|
|
52285
|
+
return { decision, plan, pendingQuestions };
|
|
52286
|
+
}
|
|
52287
|
+
function subagentMessagesToActivities(messages) {
|
|
52288
|
+
return messages.map((m) => {
|
|
52289
|
+
if (m.tool) {
|
|
52290
|
+
return {
|
|
52291
|
+
type: "tool_call",
|
|
52292
|
+
tool: m.tool,
|
|
52293
|
+
args: { preview: m.message },
|
|
52294
|
+
timestamp: m.timestamp
|
|
52295
|
+
};
|
|
52296
|
+
}
|
|
52297
|
+
return {
|
|
52298
|
+
type: "message",
|
|
52299
|
+
role: "system",
|
|
52300
|
+
content: m.message,
|
|
52301
|
+
timestamp: m.timestamp
|
|
52302
|
+
};
|
|
52303
|
+
});
|
|
52304
|
+
}
|
|
52305
|
+
function buildTimelineItems(messages, activities, subagents) {
|
|
52306
|
+
const items = [];
|
|
52307
|
+
if (messages) {
|
|
52308
|
+
messages.forEach((m, i) => items.push({ source: "message", data: m, index: i }));
|
|
52309
|
+
}
|
|
52310
|
+
if (activities) {
|
|
52311
|
+
activities.forEach((a) => items.push({ source: "activity", data: a }));
|
|
52312
|
+
}
|
|
52313
|
+
subagents.forEach((s) => items.push({ source: "subagent", data: s }));
|
|
52314
|
+
return items;
|
|
52315
|
+
}
|
|
52316
|
+
function timelineItemIcon(item) {
|
|
52317
|
+
switch (item.source) {
|
|
52318
|
+
case "message": {
|
|
52319
|
+
const m = item.data;
|
|
52320
|
+
if (m.role === "tool") return { name: "terminal", color: "text-[var(--color-primary)]" };
|
|
52321
|
+
if (m.reasoningContent) return { name: "sparkles", color: "text-[var(--color-primary)]" };
|
|
52322
|
+
if (m.role === "user") return { name: "user", color: "text-[var(--color-primary)]" };
|
|
52323
|
+
return { name: "message-square", color: "text-[var(--color-muted-foreground)]" };
|
|
52324
|
+
}
|
|
52325
|
+
case "activity": {
|
|
52326
|
+
const a = item.data;
|
|
52327
|
+
switch (a.type) {
|
|
52328
|
+
case "tool_call":
|
|
52329
|
+
return { name: "terminal", color: "text-[var(--color-primary)]" };
|
|
52330
|
+
case "tool_result":
|
|
52331
|
+
return { name: a.success !== false ? "check" : "x", color: a.success !== false ? "text-[var(--color-success)]" : "text-[var(--color-danger)]" };
|
|
52332
|
+
case "error":
|
|
52333
|
+
return { name: "alert-triangle", color: "text-[var(--color-danger)]" };
|
|
52334
|
+
case "file_operation":
|
|
52335
|
+
return { name: "file", color: "text-[var(--color-muted-foreground)]" };
|
|
52336
|
+
case "schema_diff":
|
|
52337
|
+
return { name: "git-commit", color: "text-[var(--color-muted-foreground)]" };
|
|
52338
|
+
default:
|
|
52339
|
+
return { name: "info", color: "text-[var(--color-muted-foreground)]" };
|
|
52340
|
+
}
|
|
52341
|
+
}
|
|
52342
|
+
case "subagent":
|
|
52343
|
+
return { name: "bot", color: "text-[var(--color-primary)]" };
|
|
52344
|
+
}
|
|
52345
|
+
}
|
|
52346
|
+
function timelineItemLabel(item) {
|
|
52347
|
+
switch (item.source) {
|
|
52348
|
+
case "message": {
|
|
52349
|
+
const m = item.data;
|
|
52350
|
+
if (m.role === "tool") return "tool";
|
|
52351
|
+
if (m.reasoningContent) return "thinking";
|
|
52352
|
+
return m.role;
|
|
52353
|
+
}
|
|
52354
|
+
case "activity":
|
|
52355
|
+
return item.data.type;
|
|
52356
|
+
case "subagent":
|
|
52357
|
+
return "subagent";
|
|
52358
|
+
}
|
|
52359
|
+
}
|
|
52360
|
+
function timelineItemPreview(item) {
|
|
52361
|
+
switch (item.source) {
|
|
52362
|
+
case "message": {
|
|
52363
|
+
const m = item.data;
|
|
52364
|
+
if (m.role === "tool") return `${m.toolName ?? "tool"} \u2192 ${m.toolCallId?.slice(0, 8) ?? ""}`;
|
|
52365
|
+
if (m.reasoningContent) return previewText(m.reasoningContent, 120);
|
|
52366
|
+
return previewText(m.content, 120);
|
|
52367
|
+
}
|
|
52368
|
+
case "activity": {
|
|
52369
|
+
const a = item.data;
|
|
52370
|
+
switch (a.type) {
|
|
52371
|
+
case "tool_call":
|
|
52372
|
+
return `${a.tool}(${summarizeArgs(a.args)})`;
|
|
52373
|
+
case "tool_result":
|
|
52374
|
+
return `${a.tool}: ${compactJson(a.result)}`;
|
|
52375
|
+
case "message":
|
|
52376
|
+
return previewText(a.content, 120);
|
|
52377
|
+
case "error":
|
|
52378
|
+
return previewText(a.message, 120);
|
|
52379
|
+
case "file_operation":
|
|
52380
|
+
return `${a.operation} ${a.path}`;
|
|
52381
|
+
case "schema_diff":
|
|
52382
|
+
return `diff ${a.filePath}`;
|
|
52383
|
+
default:
|
|
52384
|
+
return String(a.type);
|
|
52385
|
+
}
|
|
52386
|
+
}
|
|
52387
|
+
case "subagent":
|
|
52388
|
+
return `${item.data.name} \xB7 ${item.data.task}`;
|
|
52389
|
+
}
|
|
52390
|
+
}
|
|
52391
|
+
function timelineItemTimeLabel(item) {
|
|
52392
|
+
if (item.source === "activity") return formatHHMMSS(item.data.timestamp);
|
|
52393
|
+
if (item.source === "subagent") {
|
|
52394
|
+
const ts = item.data.messages[0]?.timestamp;
|
|
52395
|
+
return ts !== void 0 ? formatHHMMSS(ts) : void 0;
|
|
52396
|
+
}
|
|
52397
|
+
return void 0;
|
|
52398
|
+
}
|
|
52399
|
+
function TraceDetailContent({ item }) {
|
|
52400
|
+
const { t } = useTranslate();
|
|
52401
|
+
switch (item.source) {
|
|
52402
|
+
case "message": {
|
|
52403
|
+
const m = item.data;
|
|
52404
|
+
return /* @__PURE__ */ jsxs(VStack, { gap: "md", children: [
|
|
52405
|
+
/* @__PURE__ */ jsx(HStack, { gap: "xs", className: "items-center", children: /* @__PURE__ */ jsx(Badge, { variant: roleBadgeVariant[m.role], className: "text-[10px] uppercase", children: m.role }) }),
|
|
52406
|
+
typeof m.reasoningContent === "string" && m.reasoningContent.length > 0 && /* @__PURE__ */ jsxs(Box, { children: [
|
|
52407
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "mb-1", children: t("subagentTrace.reasoning") }),
|
|
52408
|
+
/* @__PURE__ */ jsx(MarkdownContent, { content: m.reasoningContent })
|
|
52409
|
+
] }),
|
|
52410
|
+
m.content.length > 0 && /* @__PURE__ */ jsxs(Box, { children: [
|
|
52411
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "mb-1", children: t("subagentTrace.content") }),
|
|
52412
|
+
m.role === "tool" ? (() => {
|
|
52413
|
+
const pretty = tryPrettyJson(m.content);
|
|
52414
|
+
return pretty !== null ? /* @__PURE__ */ jsx(CodeBlock, { code: pretty, language: "json", maxHeight: "24rem" }) : /* @__PURE__ */ jsx(Typography, { variant: "body", className: "whitespace-pre-wrap font-mono text-[11px]", children: m.content });
|
|
52415
|
+
})() : /* @__PURE__ */ jsx(MarkdownContent, { content: m.content })
|
|
52416
|
+
] }),
|
|
52417
|
+
Array.isArray(m.toolCalls) && m.toolCalls.length > 0 && /* @__PURE__ */ jsxs(Box, { children: [
|
|
52418
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "mb-1", children: t("subagentTrace.toolCalls") }),
|
|
52419
|
+
/* @__PURE__ */ jsx(
|
|
52420
|
+
Accordion,
|
|
52421
|
+
{
|
|
52422
|
+
multiple: true,
|
|
52423
|
+
items: m.toolCalls.map((tc, i) => ({
|
|
52424
|
+
id: `tc-detail-${i}`,
|
|
52425
|
+
title: `${tc.name}(${summarizeArgs(tc.args)})`,
|
|
52426
|
+
content: /* @__PURE__ */ jsx(CodeBlock, { code: JSON.stringify(tc.args, null, 2), language: "json", maxHeight: "24rem" })
|
|
52427
|
+
}))
|
|
52428
|
+
}
|
|
52429
|
+
)
|
|
52430
|
+
] })
|
|
52431
|
+
] });
|
|
52432
|
+
}
|
|
52433
|
+
case "activity": {
|
|
52434
|
+
const a = item.data;
|
|
52435
|
+
switch (a.type) {
|
|
52436
|
+
case "tool_call":
|
|
52437
|
+
return /* @__PURE__ */ jsxs(VStack, { gap: "md", children: [
|
|
52438
|
+
/* @__PURE__ */ jsxs(HStack, { gap: "xs", className: "items-center", children: [
|
|
52439
|
+
/* @__PURE__ */ jsx(Badge, { variant: "default", className: "text-[10px]", children: "tool_call" }),
|
|
52440
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: formatHHMMSS(a.timestamp) })
|
|
52441
|
+
] }),
|
|
52442
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", children: a.tool }),
|
|
52443
|
+
/* @__PURE__ */ jsx(CodeBlock, { code: JSON.stringify(a.args, null, 2), language: "json", maxHeight: "60vh" })
|
|
52444
|
+
] });
|
|
52445
|
+
case "tool_result":
|
|
52446
|
+
return /* @__PURE__ */ jsxs(VStack, { gap: "md", children: [
|
|
52447
|
+
/* @__PURE__ */ jsxs(HStack, { gap: "xs", className: "items-center", children: [
|
|
52448
|
+
/* @__PURE__ */ jsx(Badge, { variant: a.success !== false ? "default" : "warning", className: "text-[10px]", children: a.success !== false ? "success" : "fail" }),
|
|
52449
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: formatHHMMSS(a.timestamp) })
|
|
52450
|
+
] }),
|
|
52451
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", children: a.tool }),
|
|
52452
|
+
/* @__PURE__ */ jsx(CodeBlock, { code: JSON.stringify(a.result, null, 2), language: "json", maxHeight: "60vh" })
|
|
52453
|
+
] });
|
|
52454
|
+
case "message":
|
|
52455
|
+
return /* @__PURE__ */ jsxs(VStack, { gap: "md", children: [
|
|
52456
|
+
/* @__PURE__ */ jsxs(HStack, { gap: "xs", className: "items-center", children: [
|
|
52457
|
+
/* @__PURE__ */ jsx(Badge, { variant: "neutral", className: "text-[10px]", children: a.role }),
|
|
52458
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: formatHHMMSS(a.timestamp) })
|
|
52459
|
+
] }),
|
|
52460
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", className: "whitespace-pre-wrap", children: a.content })
|
|
52461
|
+
] });
|
|
52462
|
+
case "error":
|
|
52463
|
+
return /* @__PURE__ */ jsxs(VStack, { gap: "md", children: [
|
|
52464
|
+
/* @__PURE__ */ jsxs(HStack, { gap: "xs", className: "items-center", children: [
|
|
52465
|
+
/* @__PURE__ */ jsx(Badge, { variant: "warning", className: "text-[10px]", children: "error" }),
|
|
52466
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: formatHHMMSS(a.timestamp) })
|
|
52467
|
+
] }),
|
|
52468
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", className: "whitespace-pre-wrap text-[var(--color-danger)]", children: a.message })
|
|
52469
|
+
] });
|
|
52470
|
+
case "file_operation":
|
|
52471
|
+
return /* @__PURE__ */ jsxs(VStack, { gap: "md", children: [
|
|
52472
|
+
/* @__PURE__ */ jsxs(HStack, { gap: "xs", className: "items-center", children: [
|
|
52473
|
+
/* @__PURE__ */ jsx(Badge, { variant: "neutral", className: "text-[10px]", children: "file" }),
|
|
52474
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: formatHHMMSS(a.timestamp) })
|
|
52475
|
+
] }),
|
|
52476
|
+
/* @__PURE__ */ jsxs(Typography, { variant: "body2", children: [
|
|
52477
|
+
a.operation,
|
|
52478
|
+
" ",
|
|
52479
|
+
a.path
|
|
52480
|
+
] })
|
|
52481
|
+
] });
|
|
52482
|
+
case "schema_diff":
|
|
52483
|
+
return /* @__PURE__ */ jsxs(VStack, { gap: "md", children: [
|
|
52484
|
+
/* @__PURE__ */ jsxs(HStack, { gap: "xs", className: "items-center", children: [
|
|
52485
|
+
/* @__PURE__ */ jsx(Badge, { variant: "neutral", className: "text-[10px]", children: "diff" }),
|
|
52486
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: formatHHMMSS(a.timestamp) })
|
|
52487
|
+
] }),
|
|
52488
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", children: a.filePath })
|
|
52489
|
+
] });
|
|
52490
|
+
default:
|
|
52491
|
+
return /* @__PURE__ */ jsxs(VStack, { gap: "md", children: [
|
|
52492
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: formatHHMMSS(a.timestamp) }),
|
|
52493
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", children: String(a.type) })
|
|
52494
|
+
] });
|
|
52495
|
+
}
|
|
52496
|
+
}
|
|
52497
|
+
case "subagent": {
|
|
52498
|
+
const s = item.data;
|
|
52499
|
+
const activities = subagentMessagesToActivities(s.messages);
|
|
52500
|
+
const ts = s.messages[0]?.timestamp;
|
|
52501
|
+
return /* @__PURE__ */ jsxs(VStack, { gap: "md", children: [
|
|
52502
|
+
/* @__PURE__ */ jsxs(HStack, { gap: "xs", className: "items-center", children: [
|
|
52503
|
+
/* @__PURE__ */ jsx(Badge, { variant: "default", className: "text-[10px]", children: s.role }),
|
|
52504
|
+
ts !== void 0 && /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: formatHHMMSS(ts) })
|
|
52505
|
+
] }),
|
|
52506
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", weight: "semibold", children: s.name }),
|
|
52507
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", color: "muted", children: s.task }),
|
|
52508
|
+
activities.length > 0 && /* @__PURE__ */ jsx(Box, { className: "border-t border-[var(--color-border)] pt-2", children: /* @__PURE__ */ jsx(InlineActivityStream, { activities, autoScroll: false }) })
|
|
52509
|
+
] });
|
|
52510
|
+
}
|
|
52511
|
+
}
|
|
52512
|
+
}
|
|
52513
|
+
var InlineActivityRow, InlineActivityStream, CoordinatorCard, SubagentRow, OrbitalGroup, SubagentRichCard, roleBadgeVariant, ChatMessageRow, CoordinatorConversation, SubagentTracePanel;
|
|
52514
|
+
var init_SubagentTracePanel = __esm({
|
|
52515
|
+
"components/core/organisms/SubagentTracePanel.tsx"() {
|
|
52516
|
+
"use client";
|
|
52517
|
+
init_Box();
|
|
52518
|
+
init_Stack();
|
|
52519
|
+
init_Typography();
|
|
52520
|
+
init_Badge();
|
|
52521
|
+
init_Icon();
|
|
52522
|
+
init_Button();
|
|
52523
|
+
init_Modal();
|
|
52524
|
+
init_Accordion();
|
|
52525
|
+
init_markdown();
|
|
52526
|
+
InlineActivityRow = ({ activity }) => {
|
|
52527
|
+
const time = formatHHMMSS(activity.timestamp);
|
|
52528
|
+
const baseRow = "items-start px-3 py-1 hover:bg-[var(--color-surface)]";
|
|
52529
|
+
if (activity.type === "tool_call") {
|
|
52530
|
+
return /* @__PURE__ */ jsxs(HStack, { gap: "sm", className: baseRow, children: [
|
|
52531
|
+
/* @__PURE__ */ jsx(Icon, { name: "terminal", size: "xs", className: "mt-0.5 flex-shrink-0 text-[var(--color-primary)]" }),
|
|
52532
|
+
/* @__PURE__ */ jsxs(Typography, { variant: "caption", className: "flex-1 min-w-0 text-[11px] font-mono break-all whitespace-pre-wrap", children: [
|
|
52533
|
+
/* @__PURE__ */ jsx(Typography, { as: "span", variant: "caption", weight: "semibold", className: "text-[11px] font-mono", children: activity.tool }),
|
|
52534
|
+
activity.args !== void 0 && /* @__PURE__ */ jsxs(Typography, { as: "span", variant: "caption", color: "muted", className: "text-[11px] font-mono", children: [
|
|
52535
|
+
" ",
|
|
52536
|
+
compactJson(activity.args)
|
|
52537
|
+
] })
|
|
52538
|
+
] }),
|
|
52539
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "text-[10px] flex-shrink-0 tabular-nums mt-0.5", children: time })
|
|
52540
|
+
] });
|
|
52541
|
+
}
|
|
52542
|
+
if (activity.type === "tool_result") {
|
|
52543
|
+
const success = activity.success !== false;
|
|
52544
|
+
return /* @__PURE__ */ jsxs(HStack, { gap: "sm", className: baseRow, children: [
|
|
52545
|
+
/* @__PURE__ */ jsx(
|
|
52546
|
+
Icon,
|
|
52547
|
+
{
|
|
52548
|
+
name: success ? "check" : "x",
|
|
52549
|
+
size: "xs",
|
|
52550
|
+
className: `mt-0.5 flex-shrink-0 ${success ? "text-[var(--color-success)]" : "text-[var(--color-danger)]"}`
|
|
52551
|
+
}
|
|
52552
|
+
),
|
|
52553
|
+
/* @__PURE__ */ jsxs(Typography, { variant: "caption", className: "flex-1 min-w-0 text-[11px] font-mono break-all whitespace-pre-wrap", children: [
|
|
52554
|
+
/* @__PURE__ */ jsxs(Typography, { as: "span", variant: "caption", color: "muted", className: "text-[11px] font-mono", children: [
|
|
52555
|
+
activity.tool,
|
|
52556
|
+
":",
|
|
52557
|
+
" "
|
|
52558
|
+
] }),
|
|
52559
|
+
/* @__PURE__ */ jsx(Typography, { as: "span", variant: "caption", className: "text-[11px] font-mono", children: compactJson(activity.result) })
|
|
52560
|
+
] }),
|
|
52561
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "text-[10px] flex-shrink-0 tabular-nums mt-0.5", children: time })
|
|
52562
|
+
] });
|
|
52563
|
+
}
|
|
52564
|
+
if (activity.type === "message") {
|
|
52565
|
+
const role = activity.role;
|
|
52566
|
+
const iconName = role === "user" ? "user" : role === "system" ? "info" : "sparkles";
|
|
52567
|
+
const roleColor = role === "user" ? "text-[var(--color-primary)]" : role === "system" ? "text-[var(--color-muted-foreground)]" : "text-[var(--color-foreground)]";
|
|
52568
|
+
return /* @__PURE__ */ jsxs(HStack, { gap: "sm", className: baseRow, children: [
|
|
52569
|
+
/* @__PURE__ */ jsx(Icon, { name: iconName, size: "xs", className: `mt-0.5 flex-shrink-0 ${roleColor}` }),
|
|
52570
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", className: "flex-1 min-w-0 text-[11px] whitespace-pre-wrap break-words", children: activity.content }),
|
|
52571
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "text-[10px] flex-shrink-0 tabular-nums mt-0.5", children: time })
|
|
52572
|
+
] });
|
|
52573
|
+
}
|
|
52574
|
+
if (activity.type === "error") {
|
|
52575
|
+
return /* @__PURE__ */ jsxs(HStack, { gap: "sm", className: baseRow, children: [
|
|
52576
|
+
/* @__PURE__ */ jsx(Icon, { name: "alert-triangle", size: "xs", className: "mt-0.5 flex-shrink-0 text-[var(--color-danger)]" }),
|
|
52577
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", className: "flex-1 min-w-0 text-[11px] text-[var(--color-danger)] whitespace-pre-wrap break-words", children: activity.message }),
|
|
52578
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "text-[10px] flex-shrink-0 tabular-nums mt-0.5", children: time })
|
|
52579
|
+
] });
|
|
52580
|
+
}
|
|
52581
|
+
return /* @__PURE__ */ jsxs(HStack, { gap: "sm", className: baseRow, children: [
|
|
52582
|
+
/* @__PURE__ */ jsx(Icon, { name: "file", size: "xs", className: "mt-0.5 flex-shrink-0 text-[var(--color-muted-foreground)]" }),
|
|
52583
|
+
/* @__PURE__ */ jsxs(Typography, { variant: "caption", color: "muted", className: "flex-1 min-w-0 text-[11px] font-mono break-all", children: [
|
|
52584
|
+
"[",
|
|
52585
|
+
activity.type,
|
|
52586
|
+
"] ",
|
|
52587
|
+
compactJson(activity)
|
|
52588
|
+
] }),
|
|
52589
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "text-[10px] flex-shrink-0 tabular-nums mt-0.5", children: time })
|
|
52590
|
+
] });
|
|
52591
|
+
};
|
|
52592
|
+
InlineActivityStream = ({ activities, autoScroll = true, className }) => {
|
|
52593
|
+
const endRef = React80__default.useRef(null);
|
|
52594
|
+
React80__default.useEffect(() => {
|
|
52595
|
+
if (!autoScroll) return;
|
|
52596
|
+
endRef.current?.scrollIntoView({ behavior: "smooth", block: "end" });
|
|
52597
|
+
}, [activities.length, autoScroll]);
|
|
52598
|
+
return /* @__PURE__ */ jsxs(Box, { className, children: [
|
|
52599
|
+
activities.map((a, i) => /* @__PURE__ */ jsx(InlineActivityRow, { activity: a }, `${a.timestamp}-${i}`)),
|
|
52600
|
+
/* @__PURE__ */ jsx(Box, { ref: endRef })
|
|
52601
|
+
] });
|
|
52602
|
+
};
|
|
52603
|
+
CoordinatorCard = ({ snapshot, className }) => {
|
|
52604
|
+
const { t } = useTranslate();
|
|
52605
|
+
const { decision, plan, pendingQuestions } = snapshot;
|
|
52606
|
+
if (!decision && !plan && pendingQuestions.length === 0) return null;
|
|
52607
|
+
return /* @__PURE__ */ jsxs(
|
|
52608
|
+
Box,
|
|
52609
|
+
{
|
|
52610
|
+
className: `px-3 py-2 border-b border-[var(--color-border)] bg-[var(--color-muted)]/30 ${className ?? ""}`,
|
|
52611
|
+
children: [
|
|
52612
|
+
/* @__PURE__ */ jsxs(HStack, { gap: "xs", className: "items-center mb-2", children: [
|
|
52613
|
+
/* @__PURE__ */ jsx(Icon, { name: "compass", size: "xs" }),
|
|
52614
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", className: "font-semibold text-[11px]", children: t("subagentTrace.coordinator") })
|
|
52615
|
+
] }),
|
|
52616
|
+
decision && /* @__PURE__ */ jsxs(VStack, { gap: "none", className: "mb-2", children: [
|
|
52617
|
+
/* @__PURE__ */ jsxs(HStack, { gap: "xs", className: "items-center", children: [
|
|
52618
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "text-[10px] uppercase tracking-wide", children: t("subagentTrace.organism") }),
|
|
52619
|
+
/* @__PURE__ */ jsx(Badge, { variant: "default", className: "text-[10px]", children: decision.organism }),
|
|
52620
|
+
decision.priorOrganism && decision.priorOrganism !== decision.organism && /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "text-[10px]", children: t("subagentTrace.wasOrganism", { organism: decision.priorOrganism }) })
|
|
52621
|
+
] }),
|
|
52622
|
+
decision.reason && /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "text-[11px] mt-0.5", children: decision.reason })
|
|
52623
|
+
] }),
|
|
52624
|
+
plan && plan.orbitals.length > 0 && /* @__PURE__ */ jsxs(VStack, { gap: "none", className: "mb-2", children: [
|
|
52625
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "text-[10px] uppercase tracking-wide mb-0.5", children: plan.orbitals.length === 1 ? t("subagentTrace.planOrbital", { count: plan.orbitals.length }) : t("subagentTrace.planOrbitals", { count: plan.orbitals.length }) }),
|
|
52626
|
+
/* @__PURE__ */ jsx(HStack, { gap: "xs", className: "flex-wrap", children: plan.orbitals.map((o) => /* @__PURE__ */ jsx(Badge, { variant: "neutral", className: "text-[10px]", children: o }, o)) })
|
|
52627
|
+
] }),
|
|
52628
|
+
pendingQuestions.length > 0 && /* @__PURE__ */ jsxs(VStack, { gap: "none", children: [
|
|
52629
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "text-[10px] uppercase tracking-wide mb-0.5", children: pendingQuestions.length === 1 ? t("subagentTrace.pendingQuestion", { count: pendingQuestions.length }) : t("subagentTrace.pendingQuestions", { count: pendingQuestions.length }) }),
|
|
52630
|
+
pendingQuestions.map((q) => /* @__PURE__ */ jsxs(HStack, { gap: "xs", className: "items-start", children: [
|
|
52631
|
+
/* @__PURE__ */ jsx(Icon, { name: "help-circle", size: "xs", className: "mt-0.5 flex-shrink-0 text-[var(--color-warning)]" }),
|
|
52632
|
+
/* @__PURE__ */ jsxs(Typography, { variant: "caption", className: "text-[11px] flex-1 min-w-0", children: [
|
|
52633
|
+
q.question,
|
|
52634
|
+
q.orbitalName && /* @__PURE__ */ jsxs(Typography, { variant: "caption", color: "muted", className: "text-[10px] ml-1", children: [
|
|
52635
|
+
"(",
|
|
52636
|
+
q.orbitalName,
|
|
52637
|
+
")"
|
|
52638
|
+
] })
|
|
52639
|
+
] })
|
|
52640
|
+
] }, q.questionId))
|
|
52641
|
+
] })
|
|
52642
|
+
]
|
|
52643
|
+
}
|
|
52644
|
+
);
|
|
52645
|
+
};
|
|
52646
|
+
SubagentRow = ({ subagent }) => {
|
|
52647
|
+
const recent = lastMessage(subagent);
|
|
52648
|
+
return /* @__PURE__ */ jsxs(
|
|
52649
|
+
HStack,
|
|
52650
|
+
{
|
|
52651
|
+
gap: "sm",
|
|
52652
|
+
className: "items-start px-3 py-2 border-b border-[var(--color-border)]",
|
|
52653
|
+
children: [
|
|
52654
|
+
/* @__PURE__ */ jsx(Box, { className: "pt-0.5", children: /* @__PURE__ */ jsx(Icon, { name: statusIconName(subagent.status), size: "xs" }) }),
|
|
52655
|
+
/* @__PURE__ */ jsxs(VStack, { gap: "none", className: "flex-1 min-w-0", children: [
|
|
52656
|
+
/* @__PURE__ */ jsxs(HStack, { gap: "sm", className: "items-center", children: [
|
|
52657
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", className: "font-medium truncate", children: subagent.name }),
|
|
52658
|
+
/* @__PURE__ */ jsx(Badge, { variant: "default", children: subagent.role })
|
|
52659
|
+
] }),
|
|
52660
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "truncate", children: recent ?? subagent.task })
|
|
52661
|
+
] })
|
|
52662
|
+
]
|
|
52663
|
+
}
|
|
52664
|
+
);
|
|
52665
|
+
};
|
|
52666
|
+
OrbitalGroup = ({ orbitalName, subagents }) => {
|
|
52667
|
+
const { t } = useTranslate();
|
|
52668
|
+
const runningCount = subagents.filter((s) => s.status === "running").length;
|
|
52669
|
+
const completeCount = subagents.filter((s) => s.status === "complete").length;
|
|
52670
|
+
return /* @__PURE__ */ jsxs(VStack, { gap: "none", className: "border-b border-[var(--color-border)]", children: [
|
|
52671
|
+
/* @__PURE__ */ jsxs(
|
|
52672
|
+
HStack,
|
|
52673
|
+
{
|
|
52674
|
+
gap: "sm",
|
|
52675
|
+
className: "items-center px-3 py-2 bg-[var(--color-surface)] border-b border-[var(--color-border)]",
|
|
52676
|
+
children: [
|
|
52677
|
+
/* @__PURE__ */ jsx(Icon, { name: "circle", size: "xs" }),
|
|
52678
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", className: "font-semibold flex-1 truncate", children: orbitalName }),
|
|
52679
|
+
/* @__PURE__ */ jsx(Badge, { variant: "default", children: runningCount > 0 ? t("subagentTrace.countRunning", { count: runningCount }) : t("subagentTrace.countDone", { count: completeCount }) })
|
|
52680
|
+
]
|
|
52681
|
+
}
|
|
52682
|
+
),
|
|
52683
|
+
subagents.map((sub) => /* @__PURE__ */ jsx(SubagentRow, { subagent: sub }, sub.id))
|
|
52684
|
+
] });
|
|
52685
|
+
};
|
|
52686
|
+
SubagentRichCard = ({ subagent }) => {
|
|
52687
|
+
const { t } = useTranslate();
|
|
52688
|
+
const activities = React80__default.useMemo(
|
|
52689
|
+
() => subagentMessagesToActivities(subagent.messages),
|
|
52690
|
+
[subagent.messages]
|
|
52691
|
+
);
|
|
52692
|
+
return /* @__PURE__ */ jsxs(VStack, { gap: "none", className: "border-b border-[var(--color-border)] p-3", children: [
|
|
52693
|
+
/* @__PURE__ */ jsxs(HStack, { gap: "sm", className: "items-center mb-2", children: [
|
|
52694
|
+
/* @__PURE__ */ jsx(
|
|
52695
|
+
Box,
|
|
52696
|
+
{
|
|
52697
|
+
style: {
|
|
52698
|
+
width: 8,
|
|
52699
|
+
height: 8,
|
|
52700
|
+
borderRadius: "50%",
|
|
52701
|
+
flexShrink: 0,
|
|
52702
|
+
backgroundColor: subagent.status === "complete" ? "var(--color-success)" : subagent.status === "error" ? "var(--color-error)" : "var(--color-primary)",
|
|
52703
|
+
...subagent.status === "running" ? { animation: "pulse 1.5s infinite" } : {}
|
|
52704
|
+
}
|
|
52705
|
+
}
|
|
52706
|
+
),
|
|
52707
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", className: "font-semibold flex-1 truncate", children: subagent.name }),
|
|
52708
|
+
/* @__PURE__ */ jsx(Badge, { variant: subagent.role === "deterministic" ? "default" : subagent.role === "llm" ? "info" : "warning", children: subagent.role }),
|
|
52709
|
+
subagent.durationMs !== void 0 && subagent.durationMs > 0 && /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: subagent.durationMs < 1e3 ? `${subagent.durationMs}ms` : `${(subagent.durationMs / 1e3).toFixed(1)}s` })
|
|
52710
|
+
] }),
|
|
52711
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "mb-2", children: subagent.task }),
|
|
52712
|
+
activities.length > 0 ? /* @__PURE__ */ jsx(Box, { className: "max-h-64 overflow-y-auto border-t border-[var(--color-border)]", children: /* @__PURE__ */ jsx(InlineActivityStream, { activities, autoScroll: true }) }) : /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "italic text-[10px]", children: subagent.status === "complete" ? t("subagentTrace.noConversationLog") : t("subagentTrace.waitingForProcessData") })
|
|
52713
|
+
] });
|
|
52714
|
+
};
|
|
52715
|
+
roleBadgeVariant = {
|
|
52716
|
+
system: "neutral",
|
|
52717
|
+
user: "info",
|
|
52718
|
+
assistant: "default",
|
|
52719
|
+
tool: "warning"
|
|
52720
|
+
};
|
|
52721
|
+
ChatMessageRow = ({ message, index }) => {
|
|
52722
|
+
const { t } = useTranslate();
|
|
52723
|
+
const { role, content, toolCalls, reasoningContent, toolCallId, toolName } = message;
|
|
52724
|
+
if (role === "tool") {
|
|
52725
|
+
const pretty = tryPrettyJson(content);
|
|
52726
|
+
const title = `${toolName ?? "tool"} \u2192${toolCallId ? ` ${toolCallId.slice(0, 8)}` : ""}`;
|
|
52727
|
+
const body = pretty !== null ? /* @__PURE__ */ jsx(CodeBlock, { code: pretty, language: "json", maxHeight: "24rem" }) : /* @__PURE__ */ jsx(Typography, { variant: "body", className: "whitespace-pre-wrap font-mono text-[11px]", children: content });
|
|
52728
|
+
const items = [{ id: `tool-${index}`, title, content: body }];
|
|
52729
|
+
return /* @__PURE__ */ jsx(Box, { className: "px-3 py-2 border-b border-[var(--color-border)]", children: /* @__PURE__ */ jsx(Accordion, { items }) });
|
|
52730
|
+
}
|
|
52731
|
+
const hasReasoning = typeof reasoningContent === "string" && reasoningContent.length > 0;
|
|
52732
|
+
const hasToolCalls = Array.isArray(toolCalls) && toolCalls.length > 0;
|
|
52733
|
+
return /* @__PURE__ */ jsxs(VStack, { gap: "xs", className: "px-3 py-2 border-b border-[var(--color-border)]", children: [
|
|
52734
|
+
/* @__PURE__ */ jsxs(HStack, { gap: "xs", className: "items-center", children: [
|
|
52735
|
+
/* @__PURE__ */ jsx(Badge, { variant: roleBadgeVariant[role], className: "text-[10px] uppercase", children: role }),
|
|
52736
|
+
hasReasoning && /* @__PURE__ */ jsxs(Typography, { variant: "caption", color: "muted", className: "text-[10px]", children: [
|
|
52737
|
+
"\xB7 ",
|
|
52738
|
+
t("subagentTrace.thinking")
|
|
52739
|
+
] }),
|
|
52740
|
+
hasToolCalls && /* @__PURE__ */ jsxs(Typography, { variant: "caption", color: "muted", className: "text-[10px]", children: [
|
|
52741
|
+
"\xB7 ",
|
|
52742
|
+
toolCalls.length === 1 ? t("subagentTrace.toolCallCount", { count: toolCalls.length }) : t("subagentTrace.toolCallCountPlural", { count: toolCalls.length })
|
|
52743
|
+
] })
|
|
52744
|
+
] }),
|
|
52745
|
+
hasReasoning && /* @__PURE__ */ jsx(Accordion, { items: [{
|
|
52746
|
+
id: `reasoning-${index}`,
|
|
52747
|
+
title: t("subagentTrace.reasoning"),
|
|
52748
|
+
content: /* @__PURE__ */ jsx(MarkdownContent, { content: reasoningContent })
|
|
52749
|
+
}] }),
|
|
52750
|
+
content.length > 0 && /* @__PURE__ */ jsx(MarkdownContent, { content }),
|
|
52751
|
+
hasToolCalls && /* @__PURE__ */ jsx(
|
|
52752
|
+
Accordion,
|
|
52753
|
+
{
|
|
52754
|
+
multiple: true,
|
|
52755
|
+
items: toolCalls.map((tc, i) => ({
|
|
52756
|
+
id: `tc-${index}-${i}`,
|
|
52757
|
+
title: `${tc.name}(${summarizeArgs(tc.args)})`,
|
|
52758
|
+
content: /* @__PURE__ */ jsx(CodeBlock, { code: JSON.stringify(tc.args, null, 2), language: "json", maxHeight: "24rem" })
|
|
52759
|
+
}))
|
|
52760
|
+
}
|
|
52761
|
+
)
|
|
52762
|
+
] });
|
|
52763
|
+
};
|
|
52764
|
+
CoordinatorConversation = ({ messages, autoScroll = true, className }) => {
|
|
52765
|
+
const endRef = React80__default.useRef(null);
|
|
52766
|
+
React80__default.useEffect(() => {
|
|
52767
|
+
if (!autoScroll) return;
|
|
52768
|
+
endRef.current?.scrollIntoView({ behavior: "smooth", block: "end" });
|
|
52769
|
+
}, [messages.length, autoScroll]);
|
|
52770
|
+
return /* @__PURE__ */ jsxs(Box, { className, children: [
|
|
52771
|
+
messages.map((m, i) => /* @__PURE__ */ jsx(ChatMessageRow, { message: m, index: i }, `msg-${i}`)),
|
|
52772
|
+
/* @__PURE__ */ jsx(Box, { ref: endRef })
|
|
52773
|
+
] });
|
|
52774
|
+
};
|
|
52775
|
+
SubagentTracePanel = ({
|
|
52776
|
+
subagents,
|
|
52777
|
+
focusedOrbital,
|
|
52778
|
+
disclosureLevel,
|
|
52779
|
+
open,
|
|
52780
|
+
onClose,
|
|
52781
|
+
className,
|
|
52782
|
+
mode = "overlay",
|
|
52783
|
+
coordinatorActivities,
|
|
52784
|
+
coordinatorMessages
|
|
52785
|
+
}) => {
|
|
52786
|
+
const { t } = useTranslate();
|
|
52787
|
+
const [selectedItem, setSelectedItem] = useState(null);
|
|
52788
|
+
const densityLabel = (rich) => rich ? t("subagentTrace.densityRich") : t("subagentTrace.densityCompact");
|
|
52789
|
+
if (mode === "overlay" && !open) return null;
|
|
52790
|
+
const isTabMode = mode === "tab";
|
|
52791
|
+
const isRichMode = isTabMode || disclosureLevel >= 3;
|
|
52792
|
+
if (isTabMode) {
|
|
52793
|
+
const timelineItems = buildTimelineItems(coordinatorMessages, coordinatorActivities, subagents);
|
|
52794
|
+
const hasData = timelineItems.length > 0;
|
|
52795
|
+
return /* @__PURE__ */ jsxs(Box, { className: `h-full w-full bg-[var(--color-card)] overflow-hidden flex flex-col ${className ?? ""}`, children: [
|
|
52796
|
+
/* @__PURE__ */ jsxs(
|
|
52797
|
+
HStack,
|
|
52798
|
+
{
|
|
52799
|
+
gap: "sm",
|
|
52800
|
+
className: "items-center px-3 py-2 border-b border-[var(--color-border)]",
|
|
52801
|
+
children: [
|
|
52802
|
+
/* @__PURE__ */ jsx(Icon, { name: "activity", size: "sm" }),
|
|
52803
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", className: "font-semibold flex-1", children: t("subagentTrace.trace") }),
|
|
52804
|
+
onClose && /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: onClose, children: /* @__PURE__ */ jsx(Icon, { name: "x", size: "xs" }) })
|
|
52805
|
+
]
|
|
52806
|
+
}
|
|
52807
|
+
),
|
|
52808
|
+
!hasData && /* @__PURE__ */ jsx(Box, { className: "flex-1 flex items-center justify-center px-4", children: /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "muted", className: "text-center", children: t("subagentTrace.noAgentActivity") }) }),
|
|
52809
|
+
hasData && /* @__PURE__ */ jsx(Box, { className: "flex-1 overflow-y-auto", children: /* @__PURE__ */ jsx(VStack, { gap: "none", children: timelineItems.map((item, i) => {
|
|
52810
|
+
const { name: iconName, color: iconColor } = timelineItemIcon(item);
|
|
52811
|
+
const isLast = i === timelineItems.length - 1;
|
|
52812
|
+
return /* @__PURE__ */ jsxs(
|
|
52813
|
+
Box,
|
|
52814
|
+
{
|
|
52815
|
+
className: "flex items-start px-3 py-2 border-b border-[var(--color-border)] hover:bg-[var(--color-muted)]/30 transition-colors duration-fast cursor-pointer",
|
|
52816
|
+
onClick: () => setSelectedItem(item),
|
|
52817
|
+
children: [
|
|
52818
|
+
/* @__PURE__ */ jsxs(Box, { className: "flex flex-col items-center mr-3 mt-0.5", style: { width: 20 }, children: [
|
|
52819
|
+
/* @__PURE__ */ jsx(
|
|
52820
|
+
Box,
|
|
52821
|
+
{
|
|
52822
|
+
className: "rounded-full flex-shrink-0",
|
|
52823
|
+
style: {
|
|
52824
|
+
width: 8,
|
|
52825
|
+
height: 8,
|
|
52826
|
+
backgroundColor: "var(--color-primary)"
|
|
52827
|
+
}
|
|
52828
|
+
}
|
|
52829
|
+
),
|
|
52830
|
+
!isLast && /* @__PURE__ */ jsx(
|
|
52831
|
+
Box,
|
|
52832
|
+
{
|
|
52833
|
+
className: "flex-1",
|
|
52834
|
+
style: {
|
|
52835
|
+
width: 2,
|
|
52836
|
+
backgroundColor: "var(--color-border)",
|
|
52837
|
+
marginTop: 4,
|
|
52838
|
+
minHeight: 24
|
|
52839
|
+
}
|
|
52840
|
+
}
|
|
52841
|
+
)
|
|
52842
|
+
] }),
|
|
52843
|
+
/* @__PURE__ */ jsxs(VStack, { gap: "xs", className: "flex-1 min-w-0", children: [
|
|
52844
|
+
/* @__PURE__ */ jsxs(HStack, { gap: "xs", className: "items-center", children: [
|
|
52845
|
+
/* @__PURE__ */ jsx(Icon, { name: iconName, size: "xs", className: `flex-shrink-0 ${iconColor}` }),
|
|
52846
|
+
timelineItemTimeLabel(item) && /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: timelineItemTimeLabel(item) }),
|
|
52847
|
+
/* @__PURE__ */ jsx(Badge, { variant: "neutral", className: "text-[10px]", children: timelineItemLabel(item) })
|
|
52848
|
+
] }),
|
|
52849
|
+
/* @__PURE__ */ jsxs(HStack, { gap: "sm", className: "items-start", children: [
|
|
52850
|
+
/* @__PURE__ */ jsx(Typography, { variant: "body2", color: "muted", className: "flex-1 min-w-0 line-clamp-2", children: timelineItemPreview(item) }),
|
|
52851
|
+
/* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", className: "flex-shrink-0 mt-0", onClick: (e) => {
|
|
52852
|
+
e.stopPropagation();
|
|
52853
|
+
setSelectedItem(item);
|
|
52854
|
+
}, children: /* @__PURE__ */ jsx(Icon, { name: "maximize-2", size: "xs" }) })
|
|
52855
|
+
] })
|
|
52856
|
+
] })
|
|
52857
|
+
]
|
|
52858
|
+
},
|
|
52859
|
+
`${item.source}-${i}`
|
|
52860
|
+
);
|
|
52861
|
+
}) }) }),
|
|
52862
|
+
/* @__PURE__ */ jsx(
|
|
52863
|
+
Modal,
|
|
52864
|
+
{
|
|
52865
|
+
isOpen: selectedItem !== null,
|
|
52866
|
+
onClose: () => setSelectedItem(null),
|
|
52867
|
+
title: selectedItem ? `${timelineItemLabel(selectedItem)}${timelineItemTimeLabel(selectedItem) ? ` \xB7 ${timelineItemTimeLabel(selectedItem)}` : ""}` : "",
|
|
52868
|
+
size: "lg",
|
|
52869
|
+
children: selectedItem && /* @__PURE__ */ jsx(TraceDetailContent, { item: selectedItem })
|
|
52870
|
+
}
|
|
52871
|
+
)
|
|
52872
|
+
] });
|
|
52873
|
+
}
|
|
52874
|
+
const filtered = focusedOrbital ? subagents.filter((s) => s.orbitalName === focusedOrbital) : subagents;
|
|
52875
|
+
const wrapperClass = isRichMode ? `absolute inset-x-3 bottom-3 sm:inset-x-auto sm:top-3 sm:right-3 sm:bottom-3 w-full sm:w-[28rem] max-w-[calc(100vw-1.5rem)] max-h-[60vh] sm:max-h-none bg-[var(--color-card)] border border-[var(--color-border)] rounded-md shadow-lg overflow-hidden flex flex-col ${className ?? ""}` : `absolute inset-x-3 bottom-3 sm:inset-x-auto sm:top-3 sm:right-3 sm:bottom-3 w-full sm:w-80 max-w-[calc(100vw-1.5rem)] max-h-[60vh] sm:max-h-none bg-[var(--color-card)] border border-[var(--color-border)] rounded-md shadow-lg overflow-hidden flex flex-col ${className ?? ""}`;
|
|
52876
|
+
const wrapperStyle = { zIndex: 20 };
|
|
52877
|
+
const hasCoordinatorData = coordinatorMessages && coordinatorMessages.length > 0 || coordinatorActivities && coordinatorActivities.length > 0;
|
|
52878
|
+
if (filtered.length === 0 && !hasCoordinatorData) {
|
|
52879
|
+
return /* @__PURE__ */ jsxs(Box, { className: wrapperClass, style: wrapperStyle, children: [
|
|
52880
|
+
/* @__PURE__ */ jsxs(
|
|
52881
|
+
HStack,
|
|
52882
|
+
{
|
|
52883
|
+
gap: "sm",
|
|
52884
|
+
className: "items-center px-3 py-2 border-b border-[var(--color-border)]",
|
|
52885
|
+
children: [
|
|
52886
|
+
/* @__PURE__ */ jsx(Icon, { name: "activity", size: "sm" }),
|
|
52887
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", className: "font-semibold flex-1", children: t("subagentTrace.subagents") }),
|
|
52888
|
+
onClose && /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: onClose, children: /* @__PURE__ */ jsx(Icon, { name: "x", size: "xs" }) })
|
|
52889
|
+
]
|
|
52890
|
+
}
|
|
52891
|
+
),
|
|
52892
|
+
/* @__PURE__ */ jsx(Box, { className: "flex-1 flex items-center justify-center px-4", children: /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "text-center", children: focusedOrbital ? t("subagentTrace.noSubagentsForOrbital", { orbital: focusedOrbital }) : t("subagentTrace.noSubagentsActive") }) })
|
|
52893
|
+
] });
|
|
52894
|
+
}
|
|
52895
|
+
if (focusedOrbital) {
|
|
52896
|
+
return /* @__PURE__ */ jsxs(Box, { className: wrapperClass, style: wrapperStyle, children: [
|
|
52897
|
+
/* @__PURE__ */ jsxs(
|
|
52898
|
+
HStack,
|
|
52899
|
+
{
|
|
52900
|
+
gap: "sm",
|
|
52901
|
+
className: "items-center px-3 py-2 border-b border-[var(--color-border)]",
|
|
52902
|
+
children: [
|
|
52903
|
+
/* @__PURE__ */ jsx(Icon, { name: "activity", size: "sm" }),
|
|
52904
|
+
/* @__PURE__ */ jsxs(VStack, { gap: "none", className: "flex-1 min-w-0", children: [
|
|
52905
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", className: "font-semibold truncate", children: focusedOrbital }),
|
|
52906
|
+
/* @__PURE__ */ jsxs(Typography, { variant: "caption", color: "muted", children: [
|
|
52907
|
+
filtered.length === 1 ? t("subagentTrace.subagentCount", { count: filtered.length }) : t("subagentTrace.subagentCountPlural", { count: filtered.length }),
|
|
52908
|
+
" \xB7 ",
|
|
52909
|
+
densityLabel(isRichMode)
|
|
52910
|
+
] })
|
|
52911
|
+
] }),
|
|
52912
|
+
onClose && /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: onClose, children: /* @__PURE__ */ jsx(Icon, { name: "x", size: "xs" }) })
|
|
52913
|
+
]
|
|
52914
|
+
}
|
|
52915
|
+
),
|
|
52916
|
+
/* @__PURE__ */ jsx(Box, { className: "flex-1 overflow-y-auto", children: filtered.map((sub) => isRichMode ? /* @__PURE__ */ jsx(SubagentRichCard, { subagent: sub }, sub.id) : /* @__PURE__ */ jsx(SubagentRow, { subagent: sub }, sub.id)) })
|
|
52917
|
+
] });
|
|
52918
|
+
}
|
|
52919
|
+
const grouped = groupByOrbital(filtered);
|
|
52920
|
+
const coordinatorSnapshot = pluckCoordinatorState(coordinatorActivities ?? []);
|
|
52921
|
+
return /* @__PURE__ */ jsxs(Box, { className: wrapperClass, style: wrapperStyle, children: [
|
|
52922
|
+
/* @__PURE__ */ jsxs(
|
|
52923
|
+
HStack,
|
|
52924
|
+
{
|
|
52925
|
+
gap: "sm",
|
|
52926
|
+
className: "items-center px-3 py-2 border-b border-[var(--color-border)]",
|
|
52927
|
+
children: [
|
|
52928
|
+
/* @__PURE__ */ jsx(Icon, { name: "activity", size: "sm" }),
|
|
52929
|
+
/* @__PURE__ */ jsxs(Typography, { variant: "caption", className: "font-semibold flex-1", children: [
|
|
52930
|
+
t("subagentTrace.subagentsWithCount", { count: filtered.length }),
|
|
52931
|
+
" \xB7 ",
|
|
52932
|
+
densityLabel(isRichMode)
|
|
52933
|
+
] }),
|
|
52934
|
+
onClose && /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", onClick: onClose, children: /* @__PURE__ */ jsx(Icon, { name: "x", size: "xs" }) })
|
|
52935
|
+
]
|
|
52936
|
+
}
|
|
52937
|
+
),
|
|
52938
|
+
/* @__PURE__ */ jsxs(Box, { className: "flex-1 overflow-y-auto", children: [
|
|
52939
|
+
!focusedOrbital && isRichMode && /* @__PURE__ */ jsx(CoordinatorCard, { snapshot: coordinatorSnapshot }),
|
|
52940
|
+
coordinatorMessages && coordinatorMessages.length > 0 ? /* @__PURE__ */ jsxs(Box, { className: "border-b border-[var(--color-border)]", children: [
|
|
52941
|
+
/* @__PURE__ */ jsxs(HStack, { gap: "xs", className: "items-center px-3 py-1.5 bg-[var(--color-card)] border-b border-[var(--color-border)]", children: [
|
|
52942
|
+
/* @__PURE__ */ jsx(Box, { style: { width: 6, height: 6, borderRadius: "50%", backgroundColor: "var(--color-primary)", flexShrink: 0 } }),
|
|
52943
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", className: "font-semibold text-[11px]", children: t("subagentTrace.coordinator") }),
|
|
52944
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "text-[10px]", children: t("subagentTrace.messagesCount", { count: coordinatorMessages.length }) })
|
|
52945
|
+
] }),
|
|
52946
|
+
/* @__PURE__ */ jsx(Box, { className: "max-h-[36rem] overflow-y-auto", children: /* @__PURE__ */ jsx(CoordinatorConversation, { messages: coordinatorMessages, autoScroll: true }) })
|
|
52947
|
+
] }) : coordinatorActivities && coordinatorActivities.length > 0 && (() => {
|
|
52948
|
+
const filteredCoordinator = coordinatorActivities;
|
|
52949
|
+
if (filteredCoordinator.length === 0) return null;
|
|
52950
|
+
return /* @__PURE__ */ jsxs(Box, { className: "border-b border-[var(--color-border)]", children: [
|
|
52951
|
+
/* @__PURE__ */ jsxs(HStack, { gap: "xs", className: "items-center px-3 py-1.5 bg-[var(--color-card)] border-b border-[var(--color-border)]", children: [
|
|
52952
|
+
/* @__PURE__ */ jsx(Box, { style: { width: 6, height: 6, borderRadius: "50%", backgroundColor: "var(--color-primary)", flexShrink: 0 } }),
|
|
52953
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", className: "font-semibold text-[11px]", children: t("subagentTrace.coordinator") }),
|
|
52954
|
+
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "text-[10px]", children: t("subagentTrace.eventsCount", { count: filteredCoordinator.length }) })
|
|
52955
|
+
] }),
|
|
52956
|
+
/* @__PURE__ */ jsx(Box, { className: "max-h-60 overflow-y-auto", children: /* @__PURE__ */ jsx(
|
|
52957
|
+
InlineActivityStream,
|
|
52958
|
+
{
|
|
52959
|
+
activities: coordinatorToActivityItems(filteredCoordinator),
|
|
52960
|
+
autoScroll: true
|
|
52961
|
+
}
|
|
52962
|
+
) })
|
|
52963
|
+
] });
|
|
52964
|
+
})(),
|
|
52965
|
+
isRichMode ? filtered.map((sub) => /* @__PURE__ */ jsx(SubagentRichCard, { subagent: sub }, sub.id)) : Array.from(grouped.entries()).map(([orbitalName, subs]) => /* @__PURE__ */ jsx(
|
|
52966
|
+
OrbitalGroup,
|
|
52967
|
+
{
|
|
52968
|
+
orbitalName,
|
|
52969
|
+
subagents: subs
|
|
52970
|
+
},
|
|
52971
|
+
orbitalName
|
|
52972
|
+
))
|
|
52973
|
+
] })
|
|
52974
|
+
] });
|
|
52975
|
+
};
|
|
52976
|
+
SubagentTracePanel.displayName = "SubagentTracePanel";
|
|
52977
|
+
}
|
|
52978
|
+
});
|
|
51368
52979
|
var TabbedContainer;
|
|
51369
52980
|
var init_TabbedContainer = __esm({
|
|
51370
52981
|
"components/core/organisms/layout/TabbedContainer.tsx"() {
|
|
@@ -51479,6 +53090,48 @@ var init_TabbedContainer = __esm({
|
|
|
51479
53090
|
TabbedContainer.displayName = "TabbedContainer";
|
|
51480
53091
|
}
|
|
51481
53092
|
});
|
|
53093
|
+
function TanksBoard({
|
|
53094
|
+
tiles,
|
|
53095
|
+
units,
|
|
53096
|
+
features,
|
|
53097
|
+
assetManifest,
|
|
53098
|
+
assetBaseUrl,
|
|
53099
|
+
scale = 0.45,
|
|
53100
|
+
showMinimap = true,
|
|
53101
|
+
enableCamera = true,
|
|
53102
|
+
tileClickEvent,
|
|
53103
|
+
unitClickEvent,
|
|
53104
|
+
isLoading,
|
|
53105
|
+
error,
|
|
53106
|
+
className
|
|
53107
|
+
}) {
|
|
53108
|
+
return /* @__PURE__ */ jsx("div", { className: cn("tanks-board relative w-full h-full", className), children: /* @__PURE__ */ jsx(
|
|
53109
|
+
IsometricCanvas_default,
|
|
53110
|
+
{
|
|
53111
|
+
tileLayout: "flat",
|
|
53112
|
+
tiles,
|
|
53113
|
+
units,
|
|
53114
|
+
features,
|
|
53115
|
+
assetManifest,
|
|
53116
|
+
assetBaseUrl,
|
|
53117
|
+
scale,
|
|
53118
|
+
showMinimap,
|
|
53119
|
+
enableCamera,
|
|
53120
|
+
tileClickEvent,
|
|
53121
|
+
unitClickEvent,
|
|
53122
|
+
isLoading,
|
|
53123
|
+
error
|
|
53124
|
+
}
|
|
53125
|
+
) });
|
|
53126
|
+
}
|
|
53127
|
+
var init_TanksBoard = __esm({
|
|
53128
|
+
"components/game/organisms/TanksBoard.tsx"() {
|
|
53129
|
+
"use client";
|
|
53130
|
+
init_cn();
|
|
53131
|
+
init_IsometricCanvas();
|
|
53132
|
+
TanksBoard.displayName = "TanksBoard";
|
|
53133
|
+
}
|
|
53134
|
+
});
|
|
51482
53135
|
var TeamOrganism;
|
|
51483
53136
|
var init_TeamOrganism = __esm({
|
|
51484
53137
|
"components/marketing/organisms/TeamOrganism.tsx"() {
|
|
@@ -51582,7 +53235,7 @@ var init_Timeline = __esm({
|
|
|
51582
53235
|
}) => {
|
|
51583
53236
|
const { t } = useTranslate();
|
|
51584
53237
|
const entityData = Array.isArray(entity) ? entity : [];
|
|
51585
|
-
const items =
|
|
53238
|
+
const items = React80__default.useMemo(() => {
|
|
51586
53239
|
if (propItems) return propItems;
|
|
51587
53240
|
if (entityData.length === 0) return [];
|
|
51588
53241
|
return entityData.map((record, idx) => {
|
|
@@ -51739,7 +53392,7 @@ var init_TimerDisplay = __esm({
|
|
|
51739
53392
|
}
|
|
51740
53393
|
});
|
|
51741
53394
|
function extractToastProps(children) {
|
|
51742
|
-
if (!
|
|
53395
|
+
if (!React80__default.isValidElement(children)) {
|
|
51743
53396
|
if (typeof children === "string") {
|
|
51744
53397
|
return { message: children };
|
|
51745
53398
|
}
|
|
@@ -51777,7 +53430,7 @@ var init_ToastSlot = __esm({
|
|
|
51777
53430
|
eventBus.emit("UI:CLOSE");
|
|
51778
53431
|
};
|
|
51779
53432
|
if (!isVisible) return null;
|
|
51780
|
-
const isCustomContent =
|
|
53433
|
+
const isCustomContent = React80__default.isValidElement(children) && !message;
|
|
51781
53434
|
return /* @__PURE__ */ jsx(Box, { className: "fixed bottom-4 right-4 z-50", children: isCustomContent ? children : /* @__PURE__ */ jsx(
|
|
51782
53435
|
Toast,
|
|
51783
53436
|
{
|
|
@@ -53403,8 +55056,8 @@ function XPBar({
|
|
|
53403
55056
|
}) {
|
|
53404
55057
|
const sizes = sizeMap18[size];
|
|
53405
55058
|
const percentage = max > 0 ? Math.max(0, Math.min(100, current / max * 100)) : 0;
|
|
53406
|
-
const [fillWidth, setFillWidth] =
|
|
53407
|
-
|
|
55059
|
+
const [fillWidth, setFillWidth] = React80.useState(animated ? 0 : percentage);
|
|
55060
|
+
React80.useEffect(() => {
|
|
53408
55061
|
if (!animated) {
|
|
53409
55062
|
setFillWidth(percentage);
|
|
53410
55063
|
return;
|
|
@@ -53477,7 +55130,7 @@ var init_XPBar = __esm({
|
|
|
53477
55130
|
}
|
|
53478
55131
|
});
|
|
53479
55132
|
function lazyThree(name, loader) {
|
|
53480
|
-
const Lazy =
|
|
55133
|
+
const Lazy = React80__default.lazy(
|
|
53481
55134
|
() => loader().then((m) => {
|
|
53482
55135
|
const Resolved = m[name];
|
|
53483
55136
|
if (!Resolved) {
|
|
@@ -53489,13 +55142,13 @@ function lazyThree(name, loader) {
|
|
|
53489
55142
|
})
|
|
53490
55143
|
);
|
|
53491
55144
|
function ThreeWrapper(props) {
|
|
53492
|
-
return
|
|
55145
|
+
return React80__default.createElement(
|
|
53493
55146
|
ThreeBoundary,
|
|
53494
55147
|
{ name },
|
|
53495
|
-
|
|
53496
|
-
|
|
55148
|
+
React80__default.createElement(
|
|
55149
|
+
React80__default.Suspense,
|
|
53497
55150
|
{ fallback: null },
|
|
53498
|
-
|
|
55151
|
+
React80__default.createElement(Lazy, props)
|
|
53499
55152
|
)
|
|
53500
55153
|
);
|
|
53501
55154
|
}
|
|
@@ -53525,6 +55178,7 @@ var init_component_registry_generated = __esm({
|
|
|
53525
55178
|
init_BattleTemplate();
|
|
53526
55179
|
init_BehaviorView();
|
|
53527
55180
|
init_BloomQuizBlock();
|
|
55181
|
+
init_BoardgameBoard();
|
|
53528
55182
|
init_BookChapterView();
|
|
53529
55183
|
init_BookCoverPage();
|
|
53530
55184
|
init_BookNavBar();
|
|
@@ -53551,6 +55205,7 @@ var init_component_registry_generated = __esm({
|
|
|
53551
55205
|
init_Center();
|
|
53552
55206
|
init_Chart();
|
|
53553
55207
|
init_ChartLegend();
|
|
55208
|
+
init_ChatBar();
|
|
53554
55209
|
init_Checkbox();
|
|
53555
55210
|
init_ChoiceButton();
|
|
53556
55211
|
init_CityBuilderBoard();
|
|
@@ -53608,6 +55263,7 @@ var init_component_registry_generated = __esm({
|
|
|
53608
55263
|
init_FileTree();
|
|
53609
55264
|
init_FilterGroup();
|
|
53610
55265
|
init_FilterPill();
|
|
55266
|
+
init_FishingBoard();
|
|
53611
55267
|
init_Flex();
|
|
53612
55268
|
init_FlipCard();
|
|
53613
55269
|
init_FlipContainer();
|
|
@@ -53637,6 +55293,7 @@ var init_component_registry_generated = __esm({
|
|
|
53637
55293
|
init_HeroOrganism();
|
|
53638
55294
|
init_HeroSection();
|
|
53639
55295
|
init_HexStrategyBoard();
|
|
55296
|
+
init_HolidayRunnerBoard();
|
|
53640
55297
|
init_Icon();
|
|
53641
55298
|
init_InfiniteScrollSentinel();
|
|
53642
55299
|
init_Input();
|
|
@@ -53659,11 +55316,13 @@ var init_component_registry_generated = __esm({
|
|
|
53659
55316
|
init_MarketingFooter();
|
|
53660
55317
|
init_MasterDetail();
|
|
53661
55318
|
init_MasterDetailLayout();
|
|
55319
|
+
init_MatchPuzzleBoard();
|
|
53662
55320
|
init_MatrixQuestion();
|
|
53663
55321
|
init_MediaGallery();
|
|
53664
55322
|
init_Menu();
|
|
53665
55323
|
init_Meter();
|
|
53666
55324
|
init_MiniMap();
|
|
55325
|
+
init_MinigolfBoard();
|
|
53667
55326
|
init_Modal();
|
|
53668
55327
|
init_ModalSlot();
|
|
53669
55328
|
init_ModuleCard();
|
|
@@ -53676,6 +55335,8 @@ var init_component_registry_generated = __esm({
|
|
|
53676
55335
|
init_PageHeader();
|
|
53677
55336
|
init_Pagination();
|
|
53678
55337
|
init_PatternTile();
|
|
55338
|
+
init_PinballBoard();
|
|
55339
|
+
init_PirateBoard();
|
|
53679
55340
|
init_PlatformerBoard();
|
|
53680
55341
|
init_PlatformerCanvas();
|
|
53681
55342
|
init_PlatformerTemplate();
|
|
@@ -53693,6 +55354,7 @@ var init_component_registry_generated = __esm({
|
|
|
53693
55354
|
init_QrScanner();
|
|
53694
55355
|
init_QuestTracker();
|
|
53695
55356
|
init_QuizBlock();
|
|
55357
|
+
init_RacingBoard();
|
|
53696
55358
|
init_Radio();
|
|
53697
55359
|
init_RangeSlider();
|
|
53698
55360
|
init_ReflectionBlock();
|
|
@@ -53726,12 +55388,16 @@ var init_component_registry_generated = __esm({
|
|
|
53726
55388
|
init_SimulatorBoard();
|
|
53727
55389
|
init_Skeleton();
|
|
53728
55390
|
init_SocialProof();
|
|
55391
|
+
init_SokobanBoard();
|
|
53729
55392
|
init_SortableList();
|
|
55393
|
+
init_SpaceShmupBoard();
|
|
55394
|
+
init_SpaceStationBoard();
|
|
53730
55395
|
init_Sparkline();
|
|
53731
55396
|
init_Spinner();
|
|
53732
55397
|
init_Split();
|
|
53733
55398
|
init_SplitPane();
|
|
53734
55399
|
init_SplitSection();
|
|
55400
|
+
init_SportsBoard();
|
|
53735
55401
|
init_Sprite();
|
|
53736
55402
|
init_StarRating();
|
|
53737
55403
|
init_StatBadge();
|
|
@@ -53746,6 +55412,7 @@ var init_component_registry_generated = __esm({
|
|
|
53746
55412
|
init_StatusEffect();
|
|
53747
55413
|
init_StepFlow();
|
|
53748
55414
|
init_StepFlowOrganism();
|
|
55415
|
+
init_SubagentTracePanel();
|
|
53749
55416
|
init_SvgBranch();
|
|
53750
55417
|
init_SvgConnection();
|
|
53751
55418
|
init_SvgFlow();
|
|
@@ -53765,6 +55432,7 @@ var init_component_registry_generated = __esm({
|
|
|
53765
55432
|
init_Tabs();
|
|
53766
55433
|
init_TagCloud();
|
|
53767
55434
|
init_TagInput();
|
|
55435
|
+
init_TanksBoard();
|
|
53768
55436
|
init_TeamCard();
|
|
53769
55437
|
init_TeamOrganism();
|
|
53770
55438
|
init_TextHighlight();
|
|
@@ -53803,7 +55471,7 @@ var init_component_registry_generated = __esm({
|
|
|
53803
55471
|
init_WorldMapBoard();
|
|
53804
55472
|
init_WorldMapTemplate();
|
|
53805
55473
|
init_XPBar();
|
|
53806
|
-
ThreeBoundary = class extends
|
|
55474
|
+
ThreeBoundary = class extends React80__default.Component {
|
|
53807
55475
|
constructor() {
|
|
53808
55476
|
super(...arguments);
|
|
53809
55477
|
__publicField(this, "state", { failed: false });
|
|
@@ -53813,7 +55481,7 @@ var init_component_registry_generated = __esm({
|
|
|
53813
55481
|
}
|
|
53814
55482
|
render() {
|
|
53815
55483
|
if (this.state.failed) {
|
|
53816
|
-
return
|
|
55484
|
+
return React80__default.createElement(
|
|
53817
55485
|
"div",
|
|
53818
55486
|
{
|
|
53819
55487
|
"data-testid": "three-unavailable",
|
|
@@ -53852,6 +55520,7 @@ var init_component_registry_generated = __esm({
|
|
|
53852
55520
|
"BattleTemplate": BattleTemplate,
|
|
53853
55521
|
"BehaviorView": BehaviorView,
|
|
53854
55522
|
"BloomQuizBlock": BloomQuizBlock,
|
|
55523
|
+
"BoardgameBoard": BoardgameBoard,
|
|
53855
55524
|
"BookChapterView": BookChapterView,
|
|
53856
55525
|
"BookCoverPage": BookCoverPage,
|
|
53857
55526
|
"BookNavBar": BookNavBar,
|
|
@@ -53881,6 +55550,7 @@ var init_component_registry_generated = __esm({
|
|
|
53881
55550
|
"Center": Center,
|
|
53882
55551
|
"Chart": Chart,
|
|
53883
55552
|
"ChartLegend": ChartLegend,
|
|
55553
|
+
"ChatBar": ChatBar,
|
|
53884
55554
|
"Checkbox": Checkbox,
|
|
53885
55555
|
"ChoiceButton": ChoiceButton,
|
|
53886
55556
|
"CityBuilderBoard": CityBuilderBoard,
|
|
@@ -53941,6 +55611,7 @@ var init_component_registry_generated = __esm({
|
|
|
53941
55611
|
"FileTree": FileTree,
|
|
53942
55612
|
"FilterGroup": FilterGroup,
|
|
53943
55613
|
"FilterPill": FilterPill,
|
|
55614
|
+
"FishingBoard": FishingBoard,
|
|
53944
55615
|
"Flex": Flex,
|
|
53945
55616
|
"FlipCard": FlipCard,
|
|
53946
55617
|
"FlipContainer": FlipContainer,
|
|
@@ -53974,6 +55645,7 @@ var init_component_registry_generated = __esm({
|
|
|
53974
55645
|
"HeroOrganism": HeroOrganism,
|
|
53975
55646
|
"HeroSection": HeroSection,
|
|
53976
55647
|
"HexStrategyBoard": HexStrategyBoard,
|
|
55648
|
+
"HolidayRunnerBoard": HolidayRunnerBoard,
|
|
53977
55649
|
"Icon": Icon,
|
|
53978
55650
|
"InfiniteScrollSentinel": InfiniteScrollSentinel,
|
|
53979
55651
|
"Input": Input,
|
|
@@ -53998,11 +55670,13 @@ var init_component_registry_generated = __esm({
|
|
|
53998
55670
|
"MarketingFooter": MarketingFooter,
|
|
53999
55671
|
"MasterDetail": MasterDetail,
|
|
54000
55672
|
"MasterDetailLayout": MasterDetailLayout,
|
|
55673
|
+
"MatchPuzzleBoard": MatchPuzzleBoard,
|
|
54001
55674
|
"MatrixQuestion": MatrixQuestion,
|
|
54002
55675
|
"MediaGallery": MediaGallery,
|
|
54003
55676
|
"Menu": Menu,
|
|
54004
55677
|
"Meter": Meter,
|
|
54005
55678
|
"MiniMap": MiniMap,
|
|
55679
|
+
"MinigolfBoard": MinigolfBoard,
|
|
54006
55680
|
"Modal": Modal,
|
|
54007
55681
|
"ModalSlot": ModalSlot,
|
|
54008
55682
|
"ModuleCard": ModuleCard,
|
|
@@ -54015,6 +55689,8 @@ var init_component_registry_generated = __esm({
|
|
|
54015
55689
|
"PageHeader": PageHeader,
|
|
54016
55690
|
"Pagination": Pagination,
|
|
54017
55691
|
"PatternTile": PatternTile,
|
|
55692
|
+
"PinballBoard": PinballBoard,
|
|
55693
|
+
"PirateBoard": PirateBoard,
|
|
54018
55694
|
"PlatformerBoard": PlatformerBoard,
|
|
54019
55695
|
"PlatformerCanvas": PlatformerCanvas,
|
|
54020
55696
|
"PlatformerTemplate": PlatformerTemplate,
|
|
@@ -54032,6 +55708,7 @@ var init_component_registry_generated = __esm({
|
|
|
54032
55708
|
"QrScanner": QrScanner,
|
|
54033
55709
|
"QuestTracker": QuestTracker,
|
|
54034
55710
|
"QuizBlock": QuizBlock,
|
|
55711
|
+
"RacingBoard": RacingBoard,
|
|
54035
55712
|
"Radio": Radio,
|
|
54036
55713
|
"RangeSlider": RangeSlider,
|
|
54037
55714
|
"ReflectionBlock": ReflectionBlock,
|
|
@@ -54065,7 +55742,10 @@ var init_component_registry_generated = __esm({
|
|
|
54065
55742
|
"SimulatorBoard": SimulatorBoard,
|
|
54066
55743
|
"Skeleton": Skeleton,
|
|
54067
55744
|
"SocialProof": SocialProof,
|
|
55745
|
+
"SokobanBoard": SokobanBoard,
|
|
54068
55746
|
"SortableList": SortableList,
|
|
55747
|
+
"SpaceShmupBoard": SpaceShmupBoard,
|
|
55748
|
+
"SpaceStationBoard": SpaceStationBoard,
|
|
54069
55749
|
"Spacer": SpacerPattern,
|
|
54070
55750
|
"SpacerPattern": SpacerPattern,
|
|
54071
55751
|
"Sparkline": Sparkline,
|
|
@@ -54073,6 +55753,7 @@ var init_component_registry_generated = __esm({
|
|
|
54073
55753
|
"Split": Split,
|
|
54074
55754
|
"SplitPane": SplitPane,
|
|
54075
55755
|
"SplitSection": SplitSection,
|
|
55756
|
+
"SportsBoard": SportsBoard,
|
|
54076
55757
|
"Sprite": Sprite,
|
|
54077
55758
|
"Stack": Stack,
|
|
54078
55759
|
"StarRating": StarRating,
|
|
@@ -54088,6 +55769,7 @@ var init_component_registry_generated = __esm({
|
|
|
54088
55769
|
"StatusEffect": StatusEffect,
|
|
54089
55770
|
"StepFlow": StepFlow,
|
|
54090
55771
|
"StepFlowOrganism": StepFlowOrganism,
|
|
55772
|
+
"SubagentTracePanel": SubagentTracePanel,
|
|
54091
55773
|
"SvgBranch": SvgBranch,
|
|
54092
55774
|
"SvgConnection": SvgConnection,
|
|
54093
55775
|
"SvgFlow": SvgFlow,
|
|
@@ -54107,6 +55789,7 @@ var init_component_registry_generated = __esm({
|
|
|
54107
55789
|
"Tabs": Tabs,
|
|
54108
55790
|
"TagCloud": TagCloud,
|
|
54109
55791
|
"TagInput": TagInput,
|
|
55792
|
+
"TanksBoard": TanksBoard,
|
|
54110
55793
|
"TeamCard": TeamCard,
|
|
54111
55794
|
"TeamOrganism": TeamOrganism,
|
|
54112
55795
|
"TextHighlight": TextHighlight,
|
|
@@ -54164,7 +55847,7 @@ function SuspenseConfigProvider({
|
|
|
54164
55847
|
config,
|
|
54165
55848
|
children
|
|
54166
55849
|
}) {
|
|
54167
|
-
return
|
|
55850
|
+
return React80__default.createElement(
|
|
54168
55851
|
SuspenseConfigContext.Provider,
|
|
54169
55852
|
{ value: config },
|
|
54170
55853
|
children
|
|
@@ -54175,8 +55858,8 @@ function getSlotFallback(slot, config) {
|
|
|
54175
55858
|
const variant = SLOT_SKELETON_MAP[slot] ?? "text";
|
|
54176
55859
|
return /* @__PURE__ */ jsx(Skeleton, { variant });
|
|
54177
55860
|
}
|
|
54178
|
-
function
|
|
54179
|
-
const mapping = getComponentForPattern
|
|
55861
|
+
function getComponentForPattern3(patternType) {
|
|
55862
|
+
const mapping = getComponentForPattern(patternType);
|
|
54180
55863
|
if (!mapping) {
|
|
54181
55864
|
return null;
|
|
54182
55865
|
}
|
|
@@ -54654,7 +56337,7 @@ function renderPatternChildren(children, onDismiss, parentId = "root", parentPat
|
|
|
54654
56337
|
const key = `${parentId}-${index}-trait:${traitName}`;
|
|
54655
56338
|
return /* @__PURE__ */ jsx(TraitFrame, { traitName }, key);
|
|
54656
56339
|
}
|
|
54657
|
-
return /* @__PURE__ */ jsx(
|
|
56340
|
+
return /* @__PURE__ */ jsx(React80__default.Fragment, { children: child }, `${parentId}-${index}`);
|
|
54658
56341
|
}
|
|
54659
56342
|
if (!child || typeof child !== "object") return null;
|
|
54660
56343
|
const childId = `${parentId}-${index}`;
|
|
@@ -54694,14 +56377,14 @@ function isPatternConfig(value) {
|
|
|
54694
56377
|
if (value === null || value === void 0) return false;
|
|
54695
56378
|
if (typeof value !== "object") return false;
|
|
54696
56379
|
if (Array.isArray(value)) return false;
|
|
54697
|
-
if (
|
|
56380
|
+
if (React80__default.isValidElement(value)) return false;
|
|
54698
56381
|
if (value instanceof Date) return false;
|
|
54699
56382
|
if (typeof value === "function") return false;
|
|
54700
56383
|
const record = value;
|
|
54701
|
-
return "type" in record && typeof record.type === "string" && getComponentForPattern
|
|
56384
|
+
return "type" in record && typeof record.type === "string" && getComponentForPattern(record.type) !== null;
|
|
54702
56385
|
}
|
|
54703
56386
|
function isPlainConfigObject(value) {
|
|
54704
|
-
if (
|
|
56387
|
+
if (React80__default.isValidElement(value)) return false;
|
|
54705
56388
|
if (value instanceof Date) return false;
|
|
54706
56389
|
const proto = Object.getPrototypeOf(value);
|
|
54707
56390
|
return proto === Object.prototype || proto === null;
|
|
@@ -54806,7 +56489,8 @@ function SlotContentRenderer({
|
|
|
54806
56489
|
entityDef = schemaCtx.entities.get(linkedEntity);
|
|
54807
56490
|
}
|
|
54808
56491
|
}
|
|
54809
|
-
const
|
|
56492
|
+
const orbitalName = schemaCtx && content.sourceTrait !== void 0 ? schemaCtx.orbitalsByTrait.get(content.sourceTrait) : void 0;
|
|
56493
|
+
const PatternComponent = getComponentForPattern3(content.pattern);
|
|
54810
56494
|
if (PatternComponent) {
|
|
54811
56495
|
const childrenConfig = content.props.children;
|
|
54812
56496
|
const isSingleChild = typeof childrenConfig === "string" || typeof childrenConfig === "object" && childrenConfig !== null && !Array.isArray(childrenConfig) && "type" in childrenConfig;
|
|
@@ -54826,7 +56510,7 @@ function SlotContentRenderer({
|
|
|
54826
56510
|
for (const slotKey of CONTENT_NODE_SLOTS) {
|
|
54827
56511
|
const slotVal = restProps[slotKey];
|
|
54828
56512
|
if (slotVal === void 0 || slotVal === null) continue;
|
|
54829
|
-
if (
|
|
56513
|
+
if (React80__default.isValidElement(slotVal) || typeof slotVal === "string" || typeof slotVal === "number" || typeof slotVal === "boolean") continue;
|
|
54830
56514
|
if (Array.isArray(slotVal) || typeof slotVal === "object" && "type" in slotVal) {
|
|
54831
56515
|
nodeSlotOverrides[slotKey] = renderPatternChildren(
|
|
54832
56516
|
slotVal,
|
|
@@ -54904,6 +56588,7 @@ function SlotContentRenderer({
|
|
|
54904
56588
|
"data-orb-entity": content.entity,
|
|
54905
56589
|
"data-orb-path": myPath,
|
|
54906
56590
|
"data-orb-pattern": content.pattern,
|
|
56591
|
+
"data-orb-orbital": orbitalName,
|
|
54907
56592
|
children: renderedChildren !== void 0 ? /* @__PURE__ */ jsx(PatternComponent, { ...finalProps, children: renderedChildren }) : /* @__PURE__ */ jsx(PatternComponent, { ...finalProps })
|
|
54908
56593
|
}
|
|
54909
56594
|
);
|
|
@@ -54923,6 +56608,7 @@ function SlotContentRenderer({
|
|
|
54923
56608
|
"data-orb-entity": content.entity,
|
|
54924
56609
|
"data-orb-path": patternPath ?? "root",
|
|
54925
56610
|
"data-orb-pattern": content.pattern,
|
|
56611
|
+
"data-orb-orbital": orbitalName,
|
|
54926
56612
|
children: content.props.children ?? /* @__PURE__ */ jsxs(Box, { className: "p-4 text-sm text-muted-foreground border border-dashed border-border rounded", children: [
|
|
54927
56613
|
"Unknown pattern: ",
|
|
54928
56614
|
content.pattern,
|
|
@@ -55092,7 +56778,7 @@ function TraitFrame({
|
|
|
55092
56778
|
if (!content) {
|
|
55093
56779
|
return /* @__PURE__ */ jsx(Fragment, { children: fallback });
|
|
55094
56780
|
}
|
|
55095
|
-
const SlotContentRenderer2 =
|
|
56781
|
+
const SlotContentRenderer2 = getSlotContentRenderer3();
|
|
55096
56782
|
const rendered = /* @__PURE__ */ jsx(
|
|
55097
56783
|
SlotContentRenderer2,
|
|
55098
56784
|
{
|
|
@@ -55106,7 +56792,7 @@ function TraitFrame({
|
|
|
55106
56792
|
}
|
|
55107
56793
|
return /* @__PURE__ */ jsx(TraitScopeProvider, { orbital, trait: traitName, children: rendered });
|
|
55108
56794
|
}
|
|
55109
|
-
function
|
|
56795
|
+
function getSlotContentRenderer3() {
|
|
55110
56796
|
if (_slotContentRenderer) return _slotContentRenderer;
|
|
55111
56797
|
const mod = (init_UISlotRenderer(), __toCommonJS(UISlotRenderer_exports));
|
|
55112
56798
|
_slotContentRenderer = mod.SlotContentRenderer;
|
|
@@ -56099,6 +57785,21 @@ function generateCombatMessage(event) {
|
|
|
56099
57785
|
return event.message;
|
|
56100
57786
|
}
|
|
56101
57787
|
|
|
57788
|
+
// components/game/organisms/index.ts
|
|
57789
|
+
init_RacingBoard();
|
|
57790
|
+
init_TanksBoard();
|
|
57791
|
+
init_SpaceShmupBoard();
|
|
57792
|
+
init_SportsBoard();
|
|
57793
|
+
init_SokobanBoard();
|
|
57794
|
+
init_BoardgameBoard();
|
|
57795
|
+
init_PirateBoard();
|
|
57796
|
+
init_PinballBoard();
|
|
57797
|
+
init_FishingBoard();
|
|
57798
|
+
init_MatchPuzzleBoard();
|
|
57799
|
+
init_HolidayRunnerBoard();
|
|
57800
|
+
init_MinigolfBoard();
|
|
57801
|
+
init_SpaceStationBoard();
|
|
57802
|
+
|
|
56102
57803
|
// components/core/organisms/index.ts
|
|
56103
57804
|
init_UISlotRenderer();
|
|
56104
57805
|
init_ModalSlot();
|
|
@@ -56181,6 +57882,9 @@ init_TeamOrganism();
|
|
|
56181
57882
|
init_CaseStudyOrganism();
|
|
56182
57883
|
init_CodeRunnerPanel();
|
|
56183
57884
|
init_SegmentRenderer();
|
|
57885
|
+
init_ChatBar();
|
|
57886
|
+
init_trace_edit_focus();
|
|
57887
|
+
init_SubagentTracePanel();
|
|
56184
57888
|
|
|
56185
57889
|
// components/core/templates/index.ts
|
|
56186
57890
|
init_DashboardLayout();
|
|
@@ -56207,4 +57911,4 @@ init_AboutPageTemplate();
|
|
|
56207
57911
|
// components/index.ts
|
|
56208
57912
|
init_cn();
|
|
56209
57913
|
|
|
56210
|
-
export { ALL_PRESETS, AR_BOOK_FIELDS, AboutPageTemplate, Accordion, ActionButton, ActionButtons, Card2 as ActionCard, ActionPalette, ActionTile, ActivationBlock, Alert, AnimatedCounter, AnimatedGraphic, AnimatedReveal, ArticleSection, Aside, AssetPicker, AuthLayout, Avatar, Badge, BattleBoard, BattleTemplate, BehaviorView, BloomQuizBlock, BookChapterView, BookCoverPage, BookNavBar, BookTableOfContents, BookViewer, Box, BranchingLogicBuilder, Breadcrumb, BuilderBoard, Button, ButtonGroup, CTABanner, CalendarGrid, CanvasEffect, Card, CardBattlerBoard, CardBattlerTemplate, CardBody, CardContent, CardFooter, CardGrid, CardHand, CardHeader, CardTitle, Carousel, CaseStudyCard, CaseStudyOrganism, CastleBoard, CastleTemplate, Center, Chart, ChartLegend, Checkbox, ChoiceButton, CityBuilderBoard, CityBuilderTemplate, ClassifierBoard, Coachmark, CodeBlock, CodeRunnerPanel, CollapsibleSection, CombatLog, ComboCounter, CommunityLinks, ConditionalWrapper, ConfettiEffect, ConfirmDialog, ConnectionBlock, Container, ContentRenderer, ContentSection, ControlButton, CounterTemplate, CraftingRecipe, DEFAULT_LIKERT_OPTIONS, DEFAULT_MATRIX_COLUMNS, DIAMOND_TOP_Y, DPad, DamageNumber, DashboardGrid, DashboardLayout, DataGrid, DataList, DataTable, DateRangePicker, DateRangeSelector, DayCell, DebuggerBoard, DetailPanel, Dialog, DialogueBox, DialogueBubble, Divider, DocBreadcrumb, DocPagination, DocSearch, DocSidebar, DocTOC, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, EdgeDecoration, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EmptyState, EnemyPlate, EntityDisplayEvents, ErrorBoundary, ErrorState, EventHandlerBoard, EventLog, FEATURE_COLORS, FEATURE_TYPES, FLOOR_HEIGHT, FeatureCard, FeatureDetailPageTemplate, FeatureGrid, FeatureGridOrganism, FileTree, FilterGroup, FilterPill, Flex, FlipCard, FlipContainer, FloatingActionButton, Form, FormActions, FormField, FormLayout, FormSection, FormSectionHeader, GameAudioContext, GameAudioProvider, GameAudioToggle, GameBoard3D, GameCanvas2D, GameHud, GameMenu, GameOverScreen, GameShell, GameTemplate, GenericAppTemplate, GeometricPattern, GradientDivider, GraphCanvas, GraphView, Grid, GridPicker, HStack, Header, HealthBar, HealthPanel, HeroOrganism, HeroSection, HexStrategyBoard, IDENTITY_BOOK_FIELDS, Icon, IconPicker, InfiniteScrollSentinel, Input, InputGroup, InstallBox, InventoryGrid, InventoryPanel, IsometricCanvas, ItemSlot, JazariStateMachine, JsonTreeEditor, Label, LandingPageTemplate, LawReferenceTooltip, Lightbox, LikertScale, LineChart2 as LineChart, List3 as List, LoadingState, MapView, MarkdownContent, MarketingFooter, MarketingStatCard, MasterDetail, MasterDetailLayout, MatrixQuestion, MediaGallery, Menu, Meter, MiniMap, Modal, ModalSlot, ModuleCard, Navigation, NegotiatorBoard, NodeSlotEditor, NotifyListener, NumberStepper, ObjectRulePanel, OnboardingSpotlight, OptionConstraintGroup, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, Pagination, PatternTile, PhysicsManager, PlatformerBoard, PlatformerCanvas, PlatformerTemplate, Popover, PositionedCanvas, PowerupSlots, PricingCard, PricingGrid, PricingOrganism, PricingPageTemplate, ProgressBar, ProgressDots, PropertyInspector, PullQuote, PullToRefresh, QrScanner, QuestTracker, QuizBlock, Radio, RangeSlider, ReflectionBlock, RelationSelect, RepeatableFormSection, ReplyTree, ResourceBar, ResourceCounter, RichBlockEditor, RoguelikeBoard, RoguelikeTemplate, RuleEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, ScoreBoard, ScoreDisplay, SearchInput, Section, SectionHeader, SegmentRenderer, Select, SequenceBar, SequencerBoard, ServiceCatalog, ShowcaseCard, ShowcaseOrganism, SidePanel, Sidebar, SignaturePad, SimpleGrid, SimulationCanvas, SimulationControls, SimulationGraph, SimulatorBoard, Skeleton, SlotContentRenderer, SocialProof, SortableList, Spacer, Sparkline, Spinner, Split, SplitPane, SplitSection, Sprite, Stack, StarRating, StatBadge, StatCard, StatDisplay, StateArchitectBoard, StateIndicator, StateJsonView, StateMachineView, StateNode2 as StateNode, StatsGrid, StatsOrganism, StatusBar, StatusDot, StatusEffect, StepFlow, StepFlowOrganism, SvgBranch, SvgConnection, SvgFlow, SvgGrid, SvgLobe, SvgMesh, SvgMorph, SvgNode, SvgPulse, SvgRing, SvgShield, SvgStack, SwipeableRow, Switch, TERRAIN_COLORS, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, TableView, Tabs, TagCloud, TagInput, TeamCard, TeamOrganism, TerrainPalette, TextHighlight, Textarea, ThemeSelector, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TopDownShooterBoard, TopDownShooterTemplate, TowerDefenseBoard, TowerDefenseTemplate, TraitFrame, TraitSlot, TraitStateViewer, TransitionArrow, TrendIndicator, TurnIndicator, TurnPanel, TypewriterText, Typography, UISlotComponent, UISlotRenderer, UncontrolledBattleBoard, UnitCommandBar, UploadDropZone, VStack, VariablePanel, VersionDiff, ViolationAlert, VisualNovelBoard, VisualNovelTemplate, VoteStack, WaypointMarker, WizardContainer, WizardNavigation, WizardProgress, WorldMapBoard, WorldMapTemplate, XPBar, applyTemporaryEffect, calculateAttackTargets, calculateDamage, calculateValidMoves, cn, combatAnimations, combatClasses, combatEffects, createInitialGameState, createUnitAnimationState, drawSprite, generateCombatMessage, getCurrentFrame, getTileDimensions, inferDirection, isoToScreen, mapBookData, parseLessonSegments, parseMarkdownWithCodeBlocks, pendulum, projectileMotion, resolveFieldMap, resolveFrame, resolveSheetDirection, screenToIso, springOscillator, tickAnimationState, toCodeLanguage, transitionAnimation, useAnchorRect, useBattleState, useCamera, useGameAudio, useGameAudioContext, useImageCache, usePhysics2D, useSpriteAnimations };
|
|
57914
|
+
export { ALL_PRESETS, AR_BOOK_FIELDS, AboutPageTemplate, Accordion, ActionButton, ActionButtons, Card2 as ActionCard, ActionPalette, ActionTile, ActivationBlock, Alert, AnimatedCounter, AnimatedGraphic, AnimatedReveal, ArticleSection, Aside, AssetPicker, AuthLayout, Avatar, Badge, BattleBoard, BattleTemplate, BehaviorView, BloomQuizBlock, BoardgameBoard, BookChapterView, BookCoverPage, BookNavBar, BookTableOfContents, BookViewer, Box, BranchingLogicBuilder, Breadcrumb, BuilderBoard, Button, ButtonGroup, CTABanner, CalendarGrid, CanvasEffect, Card, CardBattlerBoard, CardBattlerTemplate, CardBody, CardContent, CardFooter, CardGrid, CardHand, CardHeader, CardTitle, Carousel, CaseStudyCard, CaseStudyOrganism, CastleBoard, CastleTemplate, Center, Chart, ChartLegend, ChatBar, Checkbox, ChoiceButton, CityBuilderBoard, CityBuilderTemplate, ClassifierBoard, Coachmark, CodeBlock, CodeRunnerPanel, CollapsibleSection, CombatLog, ComboCounter, CommunityLinks, ConditionalWrapper, ConfettiEffect, ConfirmDialog, ConnectionBlock, Container, ContentRenderer, ContentSection, ControlButton, CounterTemplate, CraftingRecipe, DEFAULT_LIKERT_OPTIONS, DEFAULT_MATRIX_COLUMNS, DIAMOND_TOP_Y, DPad, DamageNumber, DashboardGrid, DashboardLayout, DataGrid, DataList, DataTable, DateRangePicker, DateRangeSelector, DayCell, DebuggerBoard, DetailPanel, Dialog, DialogueBox, DialogueBubble, Divider, DocBreadcrumb, DocPagination, DocSearch, DocSidebar, DocTOC, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, ELEMENT_SELECTED_EVENT, EdgeDecoration, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EmptyState, EnemyPlate, EntityDisplayEvents, ErrorBoundary, ErrorState, EventHandlerBoard, EventLog, FEATURE_COLORS, FEATURE_TYPES, FLOOR_HEIGHT, FeatureCard, FeatureDetailPageTemplate, FeatureGrid, FeatureGridOrganism, FileTree, FilterGroup, FilterPill, FishingBoard, Flex, FlipCard, FlipContainer, FloatingActionButton, Form, FormActions, FormField, FormLayout, FormSection, FormSectionHeader, GameAudioContext, GameAudioProvider, GameAudioToggle, GameBoard3D, GameCanvas2D, GameHud, GameMenu, GameOverScreen, GameShell, GameTemplate, GenericAppTemplate, GeometricPattern, GradientDivider, GraphCanvas, GraphView, Grid, GridPicker, HStack, Header, HealthBar, HealthPanel, HeroOrganism, HeroSection, HexStrategyBoard, HolidayRunnerBoard, IDENTITY_BOOK_FIELDS, Icon, IconPicker, InfiniteScrollSentinel, Input, InputGroup, InstallBox, InventoryGrid, InventoryPanel, IsometricCanvas, ItemSlot, JazariStateMachine, JsonTreeEditor, Label, LandingPageTemplate, LawReferenceTooltip, Lightbox, LikertScale, LineChart2 as LineChart, List3 as List, LoadingState, MapView, MarkdownContent, MarketingFooter, MarketingStatCard, MasterDetail, MasterDetailLayout, MatchPuzzleBoard, MatrixQuestion, MediaGallery, Menu, Meter, MiniMap, MinigolfBoard, Modal, ModalSlot, ModuleCard, Navigation, NegotiatorBoard, NodeSlotEditor, NotifyListener, NumberStepper, ObjectRulePanel, OnboardingSpotlight, OptionConstraintGroup, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, Pagination, PatternTile, PhysicsManager, PinballBoard, PirateBoard, PlatformerBoard, PlatformerCanvas, PlatformerTemplate, Popover, PositionedCanvas, PowerupSlots, PricingCard, PricingGrid, PricingOrganism, PricingPageTemplate, ProgressBar, ProgressDots, PropertyInspector, PullQuote, PullToRefresh, QrScanner, QuestTracker, QuizBlock, RacingBoard, Radio, RangeSlider, ReflectionBlock, RelationSelect, RepeatableFormSection, ReplyTree, ResourceBar, ResourceCounter, RichBlockEditor, RoguelikeBoard, RoguelikeTemplate, RuleEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, ScoreBoard, ScoreDisplay, SearchInput, Section, SectionHeader, SegmentRenderer, Select, SequenceBar, SequencerBoard, ServiceCatalog, ShowcaseCard, ShowcaseOrganism, SidePanel, Sidebar, SignaturePad, SimpleGrid, SimulationCanvas, SimulationControls, SimulationGraph, SimulatorBoard, Skeleton, SlotContentRenderer, SocialProof, SokobanBoard, SortableList, SpaceShmupBoard, SpaceStationBoard, Spacer, Sparkline, Spinner, Split, SplitPane, SplitSection, SportsBoard, Sprite, Stack, StarRating, StatBadge, StatCard, StatDisplay, StateArchitectBoard, StateIndicator, StateJsonView, StateMachineView, StateNode2 as StateNode, StatsGrid, StatsOrganism, StatusBar, StatusDot, StatusEffect, StepFlow, StepFlowOrganism, SubagentTracePanel, SvgBranch, SvgConnection, SvgFlow, SvgGrid, SvgLobe, SvgMesh, SvgMorph, SvgNode, SvgPulse, SvgRing, SvgShield, SvgStack, SwipeableRow, Switch, TERRAIN_COLORS, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, TableView, Tabs, TagCloud, TagInput, TanksBoard, TeamCard, TeamOrganism, TerrainPalette, TextHighlight, Textarea, ThemeSelector, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TopDownShooterBoard, TopDownShooterTemplate, TowerDefenseBoard, TowerDefenseTemplate, TraitFrame, TraitSlot, TraitStateViewer, TransitionArrow, TrendIndicator, TurnIndicator, TurnPanel, TypewriterText, Typography, UISlotComponent, UISlotRenderer, UncontrolledBattleBoard, UnitCommandBar, UploadDropZone, VStack, VariablePanel, VersionDiff, ViolationAlert, VisualNovelBoard, VisualNovelTemplate, VoteStack, WaypointMarker, WizardContainer, WizardNavigation, WizardProgress, WorldMapBoard, WorldMapTemplate, XPBar, applyTemporaryEffect, calculateAttackTargets, calculateDamage, calculateValidMoves, cn, combatAnimations, combatClasses, combatEffects, createInitialGameState, createUnitAnimationState, drawSprite, generateCombatMessage, getCurrentFrame, getTileDimensions, inferDirection, isoToScreen, mapBookData, parseEditFocus, parseLessonSegments, parseMarkdownWithCodeBlocks, pendulum, projectileMotion, resolveFieldMap, resolveFrame, resolveSheetDirection, screenToIso, springOscillator, tickAnimationState, toCodeLanguage, transitionAnimation, useAnchorRect, useBattleState, useCamera, useGameAudio, useGameAudioContext, useImageCache, usePhysics2D, useSpriteAnimations };
|