@almadar/ui 5.83.0 → 5.85.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.
@@ -1,6 +1,6 @@
1
1
  import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
- import * as React76 from 'react';
3
- import React76__default, { createContext, useContext, useMemo, useRef, useEffect, useCallback, useState, Suspense, lazy, useLayoutEffect, useId, useSyncExternalStore } from 'react';
2
+ import * as React74 from 'react';
3
+ import React74__default, { createContext, useContext, useMemo, useRef, useEffect, useCallback, useState, Suspense, lazy, useLayoutEffect, useId, useSyncExternalStore } from 'react';
4
4
  import { clsx } from 'clsx';
5
5
  import { twMerge } from 'tailwind-merge';
6
6
  import { EventBusContext, useTraitScope, useCurrentPagePath, useEntitySchemaOptional, TraitScopeProvider } from '@almadar/ui/providers';
@@ -227,7 +227,7 @@ var init_SvgFlow = __esm({
227
227
  width = 100,
228
228
  height = 100
229
229
  }) => {
230
- const markerId = React76__default.useMemo(() => {
230
+ const markerId = React74__default.useMemo(() => {
231
231
  flowIdCounter += 1;
232
232
  return `almadar-flow-arrow-${flowIdCounter}`;
233
233
  }, []);
@@ -820,7 +820,7 @@ var init_SvgRing = __esm({
820
820
  width = 100,
821
821
  height = 100
822
822
  }) => {
823
- const gradientId = React76__default.useMemo(() => {
823
+ const gradientId = React74__default.useMemo(() => {
824
824
  ringIdCounter += 1;
825
825
  return `almadar-ring-glow-${ringIdCounter}`;
826
826
  }, []);
@@ -1232,7 +1232,7 @@ function loadLib(key, importer) {
1232
1232
  return p2;
1233
1233
  }
1234
1234
  function lazyFamilyIcon(libKey, importer, pick, fallbackName, family) {
1235
- const Lazy = React76__default.lazy(async () => {
1235
+ const Lazy = React74__default.lazy(async () => {
1236
1236
  const lib = await loadLib(libKey, importer);
1237
1237
  const Comp = pick(lib);
1238
1238
  if (!Comp) {
@@ -1242,7 +1242,7 @@ function lazyFamilyIcon(libKey, importer, pick, fallbackName, family) {
1242
1242
  return { default: Comp };
1243
1243
  });
1244
1244
  const Wrapped = (props) => /* @__PURE__ */ jsx(
1245
- React76__default.Suspense,
1245
+ React74__default.Suspense,
1246
1246
  {
1247
1247
  fallback: /* @__PURE__ */ jsx(
1248
1248
  "span",
@@ -1973,7 +1973,7 @@ var init_Icon = __esm({
1973
1973
  const directIcon = typeof icon === "string" ? void 0 : icon;
1974
1974
  const effectiveName = typeof icon === "string" ? icon : name;
1975
1975
  const family = useIconFamily();
1976
- const RenderedComponent = React76__default.useMemo(() => {
1976
+ const RenderedComponent = React74__default.useMemo(() => {
1977
1977
  if (directIcon) return null;
1978
1978
  return effectiveName ? resolveIconForFamily(effectiveName, family) : null;
1979
1979
  }, [directIcon, effectiveName, family]);
@@ -2035,7 +2035,7 @@ function resolveIconProp(value, sizeClass) {
2035
2035
  const IconComp = value;
2036
2036
  return /* @__PURE__ */ jsx(IconComp, { className: sizeClass });
2037
2037
  }
2038
- if (React76__default.isValidElement(value)) {
2038
+ if (React74__default.isValidElement(value)) {
2039
2039
  return value;
2040
2040
  }
2041
2041
  if (typeof value === "object" && value !== null && isIconLike(value)) {
@@ -2111,7 +2111,7 @@ var init_Button = __esm({
2111
2111
  md: "h-icon-default w-icon-default",
2112
2112
  lg: "h-icon-default w-icon-default"
2113
2113
  };
2114
- Button = React76__default.forwardRef(
2114
+ Button = React74__default.forwardRef(
2115
2115
  ({
2116
2116
  className,
2117
2117
  variant = "primary",
@@ -2181,7 +2181,7 @@ var init_Input = __esm({
2181
2181
  init_cn();
2182
2182
  init_Icon();
2183
2183
  init_useEventBus();
2184
- Input = React76__default.forwardRef(
2184
+ Input = React74__default.forwardRef(
2185
2185
  ({
2186
2186
  className,
2187
2187
  inputType,
@@ -2341,7 +2341,7 @@ var Label;
2341
2341
  var init_Label = __esm({
2342
2342
  "components/core/atoms/Label.tsx"() {
2343
2343
  init_cn();
2344
- Label = React76__default.forwardRef(
2344
+ Label = React74__default.forwardRef(
2345
2345
  ({ className, required, children, ...props }, ref) => {
2346
2346
  return /* @__PURE__ */ jsxs(
2347
2347
  "label",
@@ -2368,7 +2368,7 @@ var init_Textarea = __esm({
2368
2368
  "components/core/atoms/Textarea.tsx"() {
2369
2369
  init_cn();
2370
2370
  init_useEventBus();
2371
- Textarea = React76__default.forwardRef(
2371
+ Textarea = React74__default.forwardRef(
2372
2372
  ({ className, error, onChange, ...props }, ref) => {
2373
2373
  const eventBus = useEventBus();
2374
2374
  const handleChange = (e) => {
@@ -2607,7 +2607,7 @@ var init_Select = __esm({
2607
2607
  init_cn();
2608
2608
  init_Icon();
2609
2609
  init_useEventBus();
2610
- Select = React76__default.forwardRef(
2610
+ Select = React74__default.forwardRef(
2611
2611
  (props, _ref) => {
2612
2612
  const { multiple, searchable, clearable } = props;
2613
2613
  if (multiple || searchable || clearable) {
@@ -2624,7 +2624,7 @@ var init_Checkbox = __esm({
2624
2624
  "components/core/atoms/Checkbox.tsx"() {
2625
2625
  init_cn();
2626
2626
  init_useEventBus();
2627
- Checkbox = React76__default.forwardRef(
2627
+ Checkbox = React74__default.forwardRef(
2628
2628
  ({ className, label, id, onChange, ...props }, ref) => {
2629
2629
  const inputId = id || `checkbox-${Math.random().toString(36).substr(2, 9)}`;
2630
2630
  const eventBus = useEventBus();
@@ -2678,7 +2678,7 @@ var init_Spinner = __esm({
2678
2678
  md: "h-6 w-6",
2679
2679
  lg: "h-8 w-8"
2680
2680
  };
2681
- Spinner = React76__default.forwardRef(
2681
+ Spinner = React74__default.forwardRef(
2682
2682
  ({ className, size = "md", overlay, ...props }, ref) => {
2683
2683
  if (overlay) {
2684
2684
  return /* @__PURE__ */ jsx(
@@ -2768,7 +2768,7 @@ var init_Card = __esm({
2768
2768
  chip: "shadow-none rounded-pill border-[length:var(--border-width)] border-border",
2769
2769
  "tile-image-first": "p-0 overflow-hidden"
2770
2770
  };
2771
- Card = React76__default.forwardRef(
2771
+ Card = React74__default.forwardRef(
2772
2772
  ({
2773
2773
  className,
2774
2774
  variant = "bordered",
@@ -2816,9 +2816,9 @@ var init_Card = __esm({
2816
2816
  }
2817
2817
  );
2818
2818
  Card.displayName = "Card";
2819
- CardHeader = React76__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
2819
+ CardHeader = React74__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
2820
2820
  CardHeader.displayName = "CardHeader";
2821
- CardTitle = React76__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2821
+ CardTitle = React74__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2822
2822
  "h3",
2823
2823
  {
2824
2824
  ref,
@@ -2831,11 +2831,11 @@ var init_Card = __esm({
2831
2831
  }
2832
2832
  ));
2833
2833
  CardTitle.displayName = "CardTitle";
2834
- CardContent = React76__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
2834
+ CardContent = React74__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
2835
2835
  CardContent.displayName = "CardContent";
2836
2836
  CardBody = CardContent;
2837
2837
  CardBody.displayName = "CardBody";
2838
- CardFooter = React76__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2838
+ CardFooter = React74__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2839
2839
  "div",
2840
2840
  {
2841
2841
  ref,
@@ -2888,7 +2888,7 @@ var init_Badge = __esm({
2888
2888
  md: "px-2.5 py-1 text-sm",
2889
2889
  lg: "px-3 py-1.5 text-base"
2890
2890
  };
2891
- Badge = React76__default.forwardRef(
2891
+ Badge = React74__default.forwardRef(
2892
2892
  ({ className, variant = "default", size = "sm", amount, label, icon, iconAsset, children, onRemove, removeLabel, ...props }, ref) => {
2893
2893
  const iconSizes3 = {
2894
2894
  sm: "h-icon-default w-icon-default",
@@ -2982,7 +2982,7 @@ var init_FilterPill = __esm({
2982
2982
  md: "w-3.5 h-3.5",
2983
2983
  lg: "w-4 h-4"
2984
2984
  };
2985
- FilterPill = React76__default.forwardRef(
2985
+ FilterPill = React74__default.forwardRef(
2986
2986
  ({
2987
2987
  className,
2988
2988
  variant = "default",
@@ -3111,8 +3111,8 @@ var init_Avatar = __esm({
3111
3111
  actionPayload
3112
3112
  }) => {
3113
3113
  const eventBus = useEventBus();
3114
- const [imgFailed, setImgFailed] = React76__default.useState(false);
3115
- React76__default.useEffect(() => {
3114
+ const [imgFailed, setImgFailed] = React74__default.useState(false);
3115
+ React74__default.useEffect(() => {
3116
3116
  setImgFailed(false);
3117
3117
  }, [src]);
3118
3118
  const initials = providedInitials ?? (name ? generateInitials(name) : void 0);
@@ -3364,7 +3364,7 @@ var init_Box = __esm({
3364
3364
  fixed: "fixed",
3365
3365
  sticky: "sticky"
3366
3366
  };
3367
- Box = React76__default.forwardRef(
3367
+ Box = React74__default.forwardRef(
3368
3368
  ({
3369
3369
  padding,
3370
3370
  paddingX,
@@ -3429,7 +3429,7 @@ var init_Box = __esm({
3429
3429
  onPointerDown?.(e);
3430
3430
  }, [hoverEvent, tapReveal, triggerProps, onPointerDown]);
3431
3431
  const isClickable = action || onClick;
3432
- return React76__default.createElement(
3432
+ return React74__default.createElement(
3433
3433
  Component,
3434
3434
  {
3435
3435
  ref,
@@ -3483,7 +3483,7 @@ var init_Center = __esm({
3483
3483
  as: Component = "div"
3484
3484
  }) => {
3485
3485
  const mergedStyle = minHeight ? { minHeight, ...style } : style;
3486
- return React76__default.createElement(Component, {
3486
+ return React74__default.createElement(Component, {
3487
3487
  className: cn(
3488
3488
  inline ? "inline-flex" : "flex",
3489
3489
  horizontal && "justify-center",
@@ -3751,7 +3751,7 @@ var init_Radio = __esm({
3751
3751
  md: "w-2.5 h-2.5",
3752
3752
  lg: "w-3 h-3"
3753
3753
  };
3754
- Radio = React76__default.forwardRef(
3754
+ Radio = React74__default.forwardRef(
3755
3755
  ({
3756
3756
  label,
3757
3757
  helperText,
@@ -3768,12 +3768,12 @@ var init_Radio = __esm({
3768
3768
  onChange,
3769
3769
  ...props
3770
3770
  }, ref) => {
3771
- const reactId = React76__default.useId();
3771
+ const reactId = React74__default.useId();
3772
3772
  const baseId = id || `radio-${reactId}`;
3773
3773
  const hasError = !!error;
3774
3774
  const eventBus = useEventBus();
3775
- const [selected, setSelected] = React76__default.useState(value);
3776
- React76__default.useEffect(() => {
3775
+ const [selected, setSelected] = React74__default.useState(value);
3776
+ React74__default.useEffect(() => {
3777
3777
  if (value !== void 0) setSelected(value);
3778
3778
  }, [value]);
3779
3779
  const pick = (next, e) => {
@@ -3955,7 +3955,7 @@ var init_Switch = __esm({
3955
3955
  "components/core/atoms/Switch.tsx"() {
3956
3956
  "use client";
3957
3957
  init_cn();
3958
- Switch = React76.forwardRef(
3958
+ Switch = React74.forwardRef(
3959
3959
  ({
3960
3960
  checked,
3961
3961
  defaultChecked = false,
@@ -3966,10 +3966,10 @@ var init_Switch = __esm({
3966
3966
  name,
3967
3967
  className
3968
3968
  }, ref) => {
3969
- const [isChecked, setIsChecked] = React76.useState(
3969
+ const [isChecked, setIsChecked] = React74.useState(
3970
3970
  checked !== void 0 ? checked : defaultChecked
3971
3971
  );
3972
- React76.useEffect(() => {
3972
+ React74.useEffect(() => {
3973
3973
  if (checked !== void 0) {
3974
3974
  setIsChecked(checked);
3975
3975
  }
@@ -4132,7 +4132,7 @@ var init_Stack = __esm({
4132
4132
  };
4133
4133
  const isHorizontal = direction === "horizontal";
4134
4134
  const directionClass = responsive && isHorizontal ? reverse ? "flex-col-reverse md:flex-row-reverse" : "flex-col md:flex-row" : isHorizontal ? reverse ? "flex-row-reverse" : "flex-row" : reverse ? "flex-col-reverse" : "flex-col";
4135
- return React76__default.createElement(
4135
+ return React74__default.createElement(
4136
4136
  Component,
4137
4137
  {
4138
4138
  className: cn(
@@ -4328,7 +4328,7 @@ var init_Typography = __esm({
4328
4328
  }) => {
4329
4329
  const variant = variantProp ?? (level ? `h${level}` : "body1");
4330
4330
  const Component = as || defaultElements[variant];
4331
- return React76__default.createElement(
4331
+ return React74__default.createElement(
4332
4332
  Component,
4333
4333
  {
4334
4334
  id,
@@ -4487,7 +4487,7 @@ var Dialog;
4487
4487
  var init_Dialog = __esm({
4488
4488
  "components/core/atoms/Dialog.tsx"() {
4489
4489
  init_cn();
4490
- Dialog = React76__default.forwardRef(
4490
+ Dialog = React74__default.forwardRef(
4491
4491
  ({
4492
4492
  role = "dialog",
4493
4493
  "aria-modal": ariaModal = true,
@@ -4513,7 +4513,7 @@ var Aside;
4513
4513
  var init_Aside = __esm({
4514
4514
  "components/core/atoms/Aside.tsx"() {
4515
4515
  init_cn();
4516
- Aside = React76__default.forwardRef(
4516
+ Aside = React74__default.forwardRef(
4517
4517
  ({ className, children, ...rest }, ref) => /* @__PURE__ */ jsx("aside", { ref, className: cn(className), ...rest, children })
4518
4518
  );
4519
4519
  Aside.displayName = "Aside";
@@ -4592,9 +4592,9 @@ var init_LawReferenceTooltip = __esm({
4592
4592
  className
4593
4593
  }) => {
4594
4594
  const { t } = useTranslate();
4595
- const [isVisible, setIsVisible] = React76__default.useState(false);
4596
- const timeoutRef = React76__default.useRef(null);
4597
- const triggerRef = React76__default.useRef(null);
4595
+ const [isVisible, setIsVisible] = React74__default.useState(false);
4596
+ const timeoutRef = React74__default.useRef(null);
4597
+ const triggerRef = React74__default.useRef(null);
4598
4598
  const handleMouseEnter = () => {
4599
4599
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
4600
4600
  timeoutRef.current = setTimeout(() => setIsVisible(true), 200);
@@ -4605,7 +4605,7 @@ var init_LawReferenceTooltip = __esm({
4605
4605
  };
4606
4606
  const { revealed, triggerProps } = useTapReveal({ refs: [triggerRef] });
4607
4607
  const open = isVisible || revealed;
4608
- React76__default.useEffect(() => {
4608
+ React74__default.useEffect(() => {
4609
4609
  return () => {
4610
4610
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
4611
4611
  };
@@ -4815,7 +4815,7 @@ var init_StatusDot = __esm({
4815
4815
  md: "w-2.5 h-2.5",
4816
4816
  lg: "w-3 h-3"
4817
4817
  };
4818
- StatusDot = React76__default.forwardRef(
4818
+ StatusDot = React74__default.forwardRef(
4819
4819
  ({ className, status = "offline", pulse = false, size = "md", label, ...props }, ref) => {
4820
4820
  return /* @__PURE__ */ jsx(
4821
4821
  "span",
@@ -4869,7 +4869,7 @@ var init_TrendIndicator = __esm({
4869
4869
  down: "trending-down",
4870
4870
  flat: "arrow-right"
4871
4871
  };
4872
- TrendIndicator = React76__default.forwardRef(
4872
+ TrendIndicator = React74__default.forwardRef(
4873
4873
  ({
4874
4874
  className,
4875
4875
  value,
@@ -4936,7 +4936,7 @@ var init_RangeSlider = __esm({
4936
4936
  md: "w-4 h-4",
4937
4937
  lg: "w-5 h-5"
4938
4938
  };
4939
- RangeSlider = React76__default.forwardRef(
4939
+ RangeSlider = React74__default.forwardRef(
4940
4940
  ({
4941
4941
  className,
4942
4942
  min = 0,
@@ -5530,7 +5530,7 @@ var init_ContentSection = __esm({
5530
5530
  md: "py-16",
5531
5531
  lg: "py-24"
5532
5532
  };
5533
- ContentSection = React76__default.forwardRef(
5533
+ ContentSection = React74__default.forwardRef(
5534
5534
  ({ children, background = "default", padding = "lg", id, className }, ref) => {
5535
5535
  return /* @__PURE__ */ jsx(
5536
5536
  Box,
@@ -6064,7 +6064,7 @@ var init_AnimatedReveal = __esm({
6064
6064
  "scale-up": { opacity: 1, transform: "scale(1) translateY(0)" },
6065
6065
  "none": {}
6066
6066
  };
6067
- AnimatedReveal = React76__default.forwardRef(
6067
+ AnimatedReveal = React74__default.forwardRef(
6068
6068
  ({
6069
6069
  trigger = "scroll",
6070
6070
  animation = "fade-up",
@@ -6224,7 +6224,7 @@ var init_AnimatedGraphic = __esm({
6224
6224
  "components/marketing/atoms/AnimatedGraphic.tsx"() {
6225
6225
  "use client";
6226
6226
  init_cn();
6227
- AnimatedGraphic = React76__default.forwardRef(
6227
+ AnimatedGraphic = React74__default.forwardRef(
6228
6228
  ({
6229
6229
  src,
6230
6230
  svgContent,
@@ -6247,7 +6247,7 @@ var init_AnimatedGraphic = __esm({
6247
6247
  const fetchedSvg = useFetchedSvg(svgContent ? void 0 : src);
6248
6248
  const resolvedSvg = svgContent ?? fetchedSvg;
6249
6249
  const prevAnimateRef = useRef(animate);
6250
- const setRef = React76__default.useCallback(
6250
+ const setRef = React74__default.useCallback(
6251
6251
  (node) => {
6252
6252
  containerRef.current = node;
6253
6253
  if (typeof ref === "function") ref(node);
@@ -6920,7 +6920,7 @@ var init_ErrorBoundary = __esm({
6920
6920
  }
6921
6921
  );
6922
6922
  };
6923
- ErrorBoundary = class extends React76__default.Component {
6923
+ ErrorBoundary = class extends React74__default.Component {
6924
6924
  constructor(props) {
6925
6925
  super(props);
6926
6926
  __publicField(this, "reset", () => {
@@ -7216,7 +7216,7 @@ var init_Container = __esm({
7216
7216
  as: Component = "div"
7217
7217
  }) => {
7218
7218
  const resolvedSize = maxWidth ?? size ?? "lg";
7219
- return React76__default.createElement(
7219
+ return React74__default.createElement(
7220
7220
  Component,
7221
7221
  {
7222
7222
  className: cn(
@@ -10410,7 +10410,7 @@ var init_CodeBlock = __esm({
10410
10410
  DIFF_STYLE_FALLBACK = { bg: "", prefix: " ", text: "text-foreground" };
10411
10411
  LINE_PROPS_FN = (n) => ({ "data-line": String(n - 1) });
10412
10412
  HIDDEN_LINE_NUMBERS = { display: "none" };
10413
- CodeBlock = React76__default.memo(
10413
+ CodeBlock = React74__default.memo(
10414
10414
  ({
10415
10415
  code: rawCode,
10416
10416
  language = "text",
@@ -10997,7 +10997,7 @@ var init_MarkdownContent = __esm({
10997
10997
  init_Box();
10998
10998
  init_CodeBlock();
10999
10999
  init_cn();
11000
- MarkdownContent = React76__default.memo(
11000
+ MarkdownContent = React74__default.memo(
11001
11001
  ({ content, direction = "ltr", className }) => {
11002
11002
  const { t: _t } = useTranslate();
11003
11003
  const safeContent = typeof content === "string" ? content : String(content ?? "");
@@ -12324,7 +12324,7 @@ var init_StateMachineView = __esm({
12324
12324
  style: { top: title ? 30 : 0 },
12325
12325
  children: [
12326
12326
  entity && /* @__PURE__ */ jsx(EntityBox, { entity, config }),
12327
- states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React76__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
12327
+ states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React74__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
12328
12328
  StateNode,
12329
12329
  {
12330
12330
  state,
@@ -14948,8 +14948,8 @@ function MiniMap({
14948
14948
  tileAssets,
14949
14949
  unitAssets
14950
14950
  }) {
14951
- const canvasRef = React76.useRef(null);
14952
- const imgCacheRef = React76.useRef(/* @__PURE__ */ new Map());
14951
+ const canvasRef = React74.useRef(null);
14952
+ const imgCacheRef = React74.useRef(/* @__PURE__ */ new Map());
14953
14953
  function loadImg(url) {
14954
14954
  const cached = imgCacheRef.current.get(url);
14955
14955
  if (cached) return cached.complete ? cached : null;
@@ -14964,7 +14964,7 @@ function MiniMap({
14964
14964
  imgCacheRef.current.set(url, img);
14965
14965
  return null;
14966
14966
  }
14967
- React76.useEffect(() => {
14967
+ React74.useEffect(() => {
14968
14968
  const canvas = canvasRef.current;
14969
14969
  if (!canvas) return;
14970
14970
  const ctx = canvas.getContext("2d");
@@ -18399,278 +18399,6 @@ var init_CanvasEffect = __esm({
18399
18399
  CanvasEffect.displayName = "CanvasEffect";
18400
18400
  }
18401
18401
  });
18402
- function GameCard({
18403
- id,
18404
- cost,
18405
- art,
18406
- frameAsset,
18407
- attack,
18408
- defense,
18409
- name,
18410
- selected = false,
18411
- disabled = false,
18412
- size = "md",
18413
- onClick,
18414
- clickEvent,
18415
- className
18416
- }) {
18417
- const eventBus = useEventBus();
18418
- const handleClick = React76.useCallback(() => {
18419
- if (disabled) return;
18420
- onClick?.(id);
18421
- if (clickEvent) eventBus.emit(`UI:${clickEvent}`, { cardId: id });
18422
- }, [disabled, id, onClick, clickEvent, eventBus]);
18423
- const artPx = artPxMap[size];
18424
- const frameStyle = frameAsset?.url ? { backgroundImage: `url(${frameAsset.url})`, backgroundSize: "100% 100%", backgroundRepeat: "no-repeat" } : {};
18425
- return /* @__PURE__ */ jsxs(
18426
- Button,
18427
- {
18428
- variant: "ghost",
18429
- onClick: handleClick,
18430
- disabled,
18431
- title: name,
18432
- style: frameStyle,
18433
- className: cn(
18434
- "relative flex flex-col items-center rounded-interactive",
18435
- "bg-card/90 px-1.5 pt-1.5 pb-1 transition-all duration-150",
18436
- frameAsset?.url ? "border-0" : "border-2",
18437
- cardSizeMap[size],
18438
- disabled ? "border-border opacity-50 cursor-not-allowed" : "border-accent hover:brightness-125 hover:-translate-y-1 cursor-pointer",
18439
- selected && "ring-2 ring-foreground ring-offset-1 ring-offset-background -translate-y-1",
18440
- className
18441
- ),
18442
- children: [
18443
- cost != null && /* @__PURE__ */ jsx(
18444
- Typography,
18445
- {
18446
- as: "span",
18447
- className: cn(
18448
- "absolute -top-2 -left-2 flex items-center justify-center",
18449
- "min-w-[22px] h-[22px] rounded-full px-1",
18450
- "bg-info text-foreground text-xs font-bold border border-background"
18451
- ),
18452
- children: cost
18453
- }
18454
- ),
18455
- /* @__PURE__ */ jsx(Box, { className: "flex-1 flex items-center justify-center w-full", children: art ? /* @__PURE__ */ jsx(GameIcon, { assetUrl: art, icon: "image", size: artPx, alt: name ?? id, className: "flex-shrink-0" }) : /* @__PURE__ */ jsx(Box, { className: "rounded bg-muted/40", style: { width: artPx, height: artPx } }) }),
18456
- name != null && /* @__PURE__ */ jsx(
18457
- Typography,
18458
- {
18459
- variant: "small",
18460
- className: "w-full truncate text-center text-[10px] leading-tight font-semibold",
18461
- children: name
18462
- }
18463
- ),
18464
- (attack != null || defense != null) && /* @__PURE__ */ jsxs(Box, { className: "flex w-full items-center justify-between px-0.5 text-[10px] font-bold leading-none", children: [
18465
- /* @__PURE__ */ jsx(Typography, { as: "span", className: "text-error", children: attack != null ? `\u2694${attack}` : "" }),
18466
- /* @__PURE__ */ jsx(Typography, { as: "span", className: "text-info", children: defense != null ? `\u{1F6E1}${defense}` : "" })
18467
- ] })
18468
- ]
18469
- }
18470
- );
18471
- }
18472
- var cardSizeMap, artPxMap;
18473
- var init_GameCard = __esm({
18474
- "components/game/2d/atoms/GameCard.tsx"() {
18475
- "use client";
18476
- init_cn();
18477
- init_useEventBus();
18478
- init_Box();
18479
- init_Button();
18480
- init_Typography();
18481
- init_GameIcon();
18482
- cardSizeMap = {
18483
- sm: "w-16 h-24",
18484
- md: "w-20 h-28",
18485
- lg: "w-24 h-36"
18486
- };
18487
- artPxMap = { sm: 40, md: 52, lg: 64 };
18488
- GameCard.displayName = "GameCard";
18489
- }
18490
- });
18491
- function rowToCard(r) {
18492
- return {
18493
- id: str(r.id),
18494
- iconKey: r.iconKey == null ? void 0 : str(r.iconKey),
18495
- title: r.title == null ? void 0 : str(r.title),
18496
- cost: r.cost == null ? void 0 : num(r.cost),
18497
- attack: r.attack == null ? void 0 : num(r.attack),
18498
- defense: r.defense == null ? void 0 : num(r.defense)
18499
- };
18500
- }
18501
- function resolveCardArt(card, manifest) {
18502
- const key = card.iconKey ?? card.id;
18503
- return manifest?.cards?.[key];
18504
- }
18505
- function CardBattlerBoard({
18506
- entity,
18507
- deck: propDeck,
18508
- hand: propHand,
18509
- board: propBoard,
18510
- mana: propMana,
18511
- maxMana: propMaxMana,
18512
- turn: propTurn,
18513
- result: propResult,
18514
- assetManifest: propAssetManifest,
18515
- playCardEvent,
18516
- endTurnEvent,
18517
- playAgainEvent,
18518
- gameEndEvent,
18519
- className
18520
- }) {
18521
- const board = boardEntity(entity) ?? {};
18522
- const eventBus = useEventBus();
18523
- const { t } = useTranslate();
18524
- const assetManifest = propAssetManifest ?? board.assetManifest;
18525
- const entityHand = useMemo(() => rows(board.hand).map(rowToCard), [board.hand]);
18526
- const rawHand = propHand ?? entityHand;
18527
- const hand = rawHand.length > 0 ? rawHand : DEFAULT_HAND;
18528
- const entityBoard = useMemo(() => rows(board.board).map(rowToCard), [board.board]);
18529
- const playedCards = propBoard ?? entityBoard;
18530
- const entityDeck = useMemo(() => rows(board.deck).map(rowToCard), [board.deck]);
18531
- const deck = propDeck ?? entityDeck;
18532
- const mana = propMana ?? num(board.mana, 3);
18533
- const maxMana = propMaxMana ?? num(board.maxMana, 3);
18534
- const turn = propTurn ?? num(board.turn, 1);
18535
- const result = propResult ?? (str(board.result) || "none");
18536
- const handCards = hand;
18537
- const boardCards = playedCards;
18538
- const emittedGameEnd = useRef(false);
18539
- if (result !== "none" && !emittedGameEnd.current) {
18540
- emittedGameEnd.current = true;
18541
- if (gameEndEvent) {
18542
- eventBus.emit(`UI:${gameEndEvent}`, { result });
18543
- }
18544
- }
18545
- if (result === "none") {
18546
- emittedGameEnd.current = false;
18547
- }
18548
- const handlePlayCard = useCallback((cardId) => {
18549
- if (result !== "none") return;
18550
- if (playCardEvent) {
18551
- eventBus.emit(`UI:${playCardEvent}`, { cardId });
18552
- }
18553
- }, [result, playCardEvent, eventBus]);
18554
- const handleEndTurn = useCallback(() => {
18555
- if (result !== "none") return;
18556
- if (endTurnEvent) {
18557
- eventBus.emit(`UI:${endTurnEvent}`, {});
18558
- }
18559
- }, [result, endTurnEvent, eventBus]);
18560
- const handlePlayAgain = useCallback(() => {
18561
- if (playAgainEvent) {
18562
- eventBus.emit(`UI:${playAgainEvent}`, {});
18563
- }
18564
- }, [playAgainEvent, eventBus]);
18565
- return /* @__PURE__ */ jsxs(VStack, { className: cn("card-battler-board relative min-h-[600px] bg-background", className), gap: "none", children: [
18566
- /* @__PURE__ */ jsxs(
18567
- HStack,
18568
- {
18569
- className: "px-4 py-2 border-b border-border bg-surface",
18570
- gap: "lg",
18571
- align: "center",
18572
- children: [
18573
- /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
18574
- /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: t("cb.mana") ?? "Mana" }),
18575
- /* @__PURE__ */ jsxs(Typography, { variant: "body2", weight: "bold", className: "text-info", children: [
18576
- mana,
18577
- " / ",
18578
- maxMana
18579
- ] })
18580
- ] }),
18581
- /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
18582
- /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: t("cb.turn") ?? "Turn" }),
18583
- /* @__PURE__ */ jsx(Typography, { variant: "body2", weight: "bold", children: turn })
18584
- ] }),
18585
- /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", children: [
18586
- /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: t("cb.deck") ?? "Deck" }),
18587
- /* @__PURE__ */ jsx(Typography, { variant: "body2", weight: "bold", children: deck.length })
18588
- ] }),
18589
- /* @__PURE__ */ jsx(Box, { className: "ml-auto", children: result === "none" && /* @__PURE__ */ jsx(Button, { variant: "primary", size: "sm", onClick: handleEndTurn, children: t("cb.endTurn") ?? "End Turn" }) })
18590
- ]
18591
- }
18592
- ),
18593
- /* @__PURE__ */ jsxs(Box, { className: "flex-1 relative p-4 overflow-auto", children: [
18594
- /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", className: "mb-2 uppercase tracking-wide", children: t("cb.battlefield") ?? "Battlefield" }),
18595
- boardCards.length > 0 ? /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2 items-end justify-start", children: boardCards.map((card) => /* @__PURE__ */ jsx(
18596
- GameCard,
18597
- {
18598
- id: card.id,
18599
- cost: card.cost,
18600
- art: resolveCardArt(card, assetManifest),
18601
- attack: card.attack,
18602
- defense: card.defense,
18603
- name: card.title,
18604
- disabled: card.cost != null && card.cost > mana,
18605
- size: "md"
18606
- },
18607
- card.id
18608
- )) }) : /* @__PURE__ */ jsx(Box, { className: "flex items-center justify-center h-32 rounded-interactive border-2 border-dashed border-border", children: /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: t("cb.emptyBoard") ?? "Play a card to begin" }) })
18609
- ] }),
18610
- /* @__PURE__ */ jsxs(Box, { className: "border-t border-border bg-surface px-4 py-3", children: [
18611
- /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", className: "mb-2 uppercase tracking-wide", children: t("cb.hand") ?? "Your Hand" }),
18612
- handCards.length === 0 ? /* @__PURE__ */ jsx("div", { className: "flex items-center justify-center p-4", children: /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: t("cb.emptyHand") ?? "No cards in hand" }) }) : /* @__PURE__ */ jsx("div", { className: "flex flex-wrap gap-2 items-end justify-center", children: handCards.map((card) => /* @__PURE__ */ jsx(
18613
- GameCard,
18614
- {
18615
- id: card.id,
18616
- cost: card.cost,
18617
- art: resolveCardArt(card, assetManifest),
18618
- attack: card.attack,
18619
- defense: card.defense,
18620
- name: card.title,
18621
- disabled: card.cost != null && card.cost > mana,
18622
- size: "lg",
18623
- onClick: handlePlayCard
18624
- },
18625
- card.id
18626
- )) })
18627
- ] }),
18628
- result !== "none" && /* @__PURE__ */ jsx(Box, { className: "absolute inset-0 z-50 flex items-center justify-center bg-background/70 backdrop-blur-sm", children: /* @__PURE__ */ jsxs(VStack, { className: "text-center p-8", gap: "lg", children: [
18629
- /* @__PURE__ */ jsx(
18630
- Typography,
18631
- {
18632
- variant: "h2",
18633
- className: cn(
18634
- "text-4xl font-black tracking-widest uppercase",
18635
- result === "won" ? "text-warning" : "text-error"
18636
- ),
18637
- children: result === "won" ? t("cb.victory") ?? "Victory!" : t("cb.defeat") ?? "Defeat!"
18638
- }
18639
- ),
18640
- /* @__PURE__ */ jsx(
18641
- Button,
18642
- {
18643
- variant: "primary",
18644
- className: "px-8 py-3 font-semibold",
18645
- onClick: handlePlayAgain,
18646
- children: t("cb.playAgain") ?? "Play Again"
18647
- }
18648
- )
18649
- ] }) })
18650
- ] });
18651
- }
18652
- var DEFAULT_HAND;
18653
- var init_CardBattlerBoard = __esm({
18654
- "components/game/2d/organisms/CardBattlerBoard.tsx"() {
18655
- "use client";
18656
- init_cn();
18657
- init_useEventBus();
18658
- init_Box();
18659
- init_Button();
18660
- init_Typography();
18661
- init_Stack();
18662
- init_GameCard();
18663
- init_boardEntity();
18664
- DEFAULT_HAND = [
18665
- { id: "c1", iconKey: "bear", title: "Bear", cost: 3, attack: 5, defense: 4 },
18666
- { id: "c2", iconKey: "owl", title: "Owl", cost: 1, attack: 2, defense: 1 },
18667
- { id: "c3", iconKey: "gorilla", title: "Gorilla", cost: 4, attack: 6, defense: 5 },
18668
- { id: "c4", iconKey: "frog", title: "Frog", cost: 1, attack: 1, defense: 2 },
18669
- { id: "c5", iconKey: "snake", title: "Snake", cost: 2, attack: 4, defense: 1 }
18670
- ];
18671
- CardBattlerBoard.displayName = "CardBattlerBoard";
18672
- }
18673
- });
18674
18402
 
18675
18403
  // lib/getNestedValue.ts
18676
18404
  function getNestedValue(obj, path) {
@@ -20531,6 +20259,7 @@ function ChoiceButton({
20531
20259
  selected = false,
20532
20260
  onClick,
20533
20261
  action,
20262
+ payload,
20534
20263
  className
20535
20264
  }) {
20536
20265
  const eventBus = useEventBus();
@@ -20540,7 +20269,7 @@ function ChoiceButton({
20540
20269
  variant: "ghost",
20541
20270
  disabled,
20542
20271
  onClick: () => {
20543
- if (action) eventBus.emit(`UI:${action}`, {});
20272
+ if (action) eventBus.emit(`UI:${action}`, payload ?? {});
20544
20273
  onClick?.();
20545
20274
  },
20546
20275
  className: cn(
@@ -21186,9 +20915,9 @@ function ControlButton({
21186
20915
  className
21187
20916
  }) {
21188
20917
  const eventBus = useEventBus();
21189
- const [isPressed, setIsPressed] = React76.useState(false);
20918
+ const [isPressed, setIsPressed] = React74.useState(false);
21190
20919
  const actualPressed = pressed ?? isPressed;
21191
- const handlePointerDown = React76.useCallback(
20920
+ const handlePointerDown = React74.useCallback(
21192
20921
  (e) => {
21193
20922
  e.preventDefault();
21194
20923
  if (disabled) return;
@@ -21198,7 +20927,7 @@ function ControlButton({
21198
20927
  },
21199
20928
  [disabled, pressEvent, eventBus, onPress]
21200
20929
  );
21201
- const handlePointerUp = React76.useCallback(
20930
+ const handlePointerUp = React74.useCallback(
21202
20931
  (e) => {
21203
20932
  e.preventDefault();
21204
20933
  if (disabled) return;
@@ -21208,7 +20937,7 @@ function ControlButton({
21208
20937
  },
21209
20938
  [disabled, releaseEvent, eventBus, onRelease]
21210
20939
  );
21211
- const handlePointerLeave = React76.useCallback(
20940
+ const handlePointerLeave = React74.useCallback(
21212
20941
  (e) => {
21213
20942
  if (isPressed) {
21214
20943
  setIsPressed(false);
@@ -21301,8 +21030,8 @@ function ControlGrid({
21301
21030
  className
21302
21031
  }) {
21303
21032
  const eventBus = useEventBus();
21304
- const [active, setActive] = React76.useState(/* @__PURE__ */ new Set());
21305
- const handlePress = React76.useCallback(
21033
+ const [active, setActive] = React74.useState(/* @__PURE__ */ new Set());
21034
+ const handlePress = React74.useCallback(
21306
21035
  (id) => {
21307
21036
  setActive((prev) => new Set(prev).add(id));
21308
21037
  if (actionEvent) eventBus.emit(`UI:${actionEvent}`, { id, pressed: true });
@@ -21316,7 +21045,7 @@ function ControlGrid({
21316
21045
  },
21317
21046
  [kind, actionEvent, directionEvent, directionEvents, eventBus, onAction, onDirection]
21318
21047
  );
21319
- const handleRelease = React76.useCallback(
21048
+ const handleRelease = React74.useCallback(
21320
21049
  (id) => {
21321
21050
  setActive((prev) => {
21322
21051
  const next = new Set(prev);
@@ -22582,8 +22311,8 @@ var init_Menu = __esm({
22582
22311
  "bottom-end": "bottom-start"
22583
22312
  };
22584
22313
  const effectivePosition = direction === "rtl" ? rtlMirror[position] ?? position : position;
22585
- const triggerChild = React76__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx(Typography, { variant: "small", as: "span", children: trigger });
22586
- const triggerElement = React76__default.cloneElement(
22314
+ const triggerChild = React74__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx(Typography, { variant: "small", as: "span", children: trigger });
22315
+ const triggerElement = React74__default.cloneElement(
22587
22316
  triggerChild,
22588
22317
  {
22589
22318
  ref: triggerRef,
@@ -22678,14 +22407,14 @@ function useDataDnd(args) {
22678
22407
  const isZone = Boolean(dragGroup || accepts || sortable);
22679
22408
  const enabled = isZone || Boolean(dndRoot);
22680
22409
  const eventBus = useEventBus();
22681
- const parentRoot = React76__default.useContext(RootCtx);
22410
+ const parentRoot = React74__default.useContext(RootCtx);
22682
22411
  const isRoot = enabled && parentRoot === null;
22683
- const zoneId = React76__default.useId();
22412
+ const zoneId = React74__default.useId();
22684
22413
  const ownGroup = dragGroup ?? accepts ?? zoneId;
22685
- const [optimisticOrders, setOptimisticOrders] = React76__default.useState(() => /* @__PURE__ */ new Map());
22686
- const optimisticOrdersRef = React76__default.useRef(optimisticOrders);
22414
+ const [optimisticOrders, setOptimisticOrders] = React74__default.useState(() => /* @__PURE__ */ new Map());
22415
+ const optimisticOrdersRef = React74__default.useRef(optimisticOrders);
22687
22416
  optimisticOrdersRef.current = optimisticOrders;
22688
- const clearOptimisticOrder = React76__default.useCallback((group) => {
22417
+ const clearOptimisticOrder = React74__default.useCallback((group) => {
22689
22418
  setOptimisticOrders((prev) => {
22690
22419
  if (!prev.has(group)) return prev;
22691
22420
  const next = new Map(prev);
@@ -22710,7 +22439,7 @@ function useDataDnd(args) {
22710
22439
  const raw = it[dndItemIdField];
22711
22440
  return raw != null ? String(raw) : `__idx_${idx}`;
22712
22441
  }).join("|");
22713
- const itemIds = React76__default.useMemo(
22442
+ const itemIds = React74__default.useMemo(
22714
22443
  () => orderedItems.map((it, idx) => {
22715
22444
  const raw = it[dndItemIdField];
22716
22445
  return raw != null ? String(raw) : `__idx_${idx}`;
@@ -22721,7 +22450,7 @@ function useDataDnd(args) {
22721
22450
  const raw = it[dndItemIdField];
22722
22451
  return raw != null ? String(raw) : `__${idx}`;
22723
22452
  }).join("|");
22724
- React76__default.useEffect(() => {
22453
+ React74__default.useEffect(() => {
22725
22454
  const root = isRoot ? null : parentRoot;
22726
22455
  if (root) {
22727
22456
  root.clearOptimisticOrder(ownGroup);
@@ -22729,20 +22458,20 @@ function useDataDnd(args) {
22729
22458
  clearOptimisticOrder(ownGroup);
22730
22459
  }
22731
22460
  }, [itemsContentSig, ownGroup]);
22732
- const zonesRef = React76__default.useRef(/* @__PURE__ */ new Map());
22733
- const registerZone = React76__default.useCallback((zoneId2, meta2) => {
22461
+ const zonesRef = React74__default.useRef(/* @__PURE__ */ new Map());
22462
+ const registerZone = React74__default.useCallback((zoneId2, meta2) => {
22734
22463
  zonesRef.current.set(zoneId2, meta2);
22735
22464
  }, []);
22736
- const unregisterZone = React76__default.useCallback((zoneId2) => {
22465
+ const unregisterZone = React74__default.useCallback((zoneId2) => {
22737
22466
  zonesRef.current.delete(zoneId2);
22738
22467
  }, []);
22739
- const [activeDrag, setActiveDrag] = React76__default.useState(null);
22740
- const [overZoneGroup, setOverZoneGroup] = React76__default.useState(null);
22741
- const meta = React76__default.useMemo(
22468
+ const [activeDrag, setActiveDrag] = React74__default.useState(null);
22469
+ const [overZoneGroup, setOverZoneGroup] = React74__default.useState(null);
22470
+ const meta = React74__default.useMemo(
22742
22471
  () => ({ group: ownGroup, dropEvent, reorderEvent, positionEvent, itemIds, rawItems: items, idField: dndItemIdField }),
22743
22472
  [ownGroup, dropEvent, reorderEvent, positionEvent, itemIds, items, dndItemIdField]
22744
22473
  );
22745
- React76__default.useEffect(() => {
22474
+ React74__default.useEffect(() => {
22746
22475
  const target = isRoot ? null : parentRoot;
22747
22476
  if (!target) {
22748
22477
  zonesRef.current.set(zoneId, meta);
@@ -22761,7 +22490,7 @@ function useDataDnd(args) {
22761
22490
  }, [parentRoot, isRoot, zoneId, meta]);
22762
22491
  const sensors = useAlmadarDndSensors(true);
22763
22492
  const collisionDetection = almadarDndCollisionDetection;
22764
- const findZoneByItem = React76__default.useCallback(
22493
+ const findZoneByItem = React74__default.useCallback(
22765
22494
  (id) => {
22766
22495
  for (const z of zonesRef.current.values()) {
22767
22496
  if (z.itemIds.includes(id)) return z;
@@ -22770,7 +22499,7 @@ function useDataDnd(args) {
22770
22499
  },
22771
22500
  []
22772
22501
  );
22773
- React76__default.useCallback(
22502
+ React74__default.useCallback(
22774
22503
  (group) => {
22775
22504
  for (const z of zonesRef.current.values()) {
22776
22505
  if (z.group === group) return z;
@@ -22779,7 +22508,7 @@ function useDataDnd(args) {
22779
22508
  },
22780
22509
  []
22781
22510
  );
22782
- const handleDragEnd = React76__default.useCallback(
22511
+ const handleDragEnd = React74__default.useCallback(
22783
22512
  (event) => {
22784
22513
  const { active, over } = event;
22785
22514
  const activeIdStr = String(active.id);
@@ -22870,8 +22599,8 @@ function useDataDnd(args) {
22870
22599
  },
22871
22600
  [eventBus]
22872
22601
  );
22873
- const sortableData = React76__default.useMemo(() => ({ dndGroup: ownGroup }), [ownGroup]);
22874
- const SortableItem = React76__default.useCallback(
22602
+ const sortableData = React74__default.useMemo(() => ({ dndGroup: ownGroup }), [ownGroup]);
22603
+ const SortableItem = React74__default.useCallback(
22875
22604
  ({ id, children }) => {
22876
22605
  const {
22877
22606
  attributes,
@@ -22911,7 +22640,7 @@ function useDataDnd(args) {
22911
22640
  id: droppableId,
22912
22641
  data: sortableData
22913
22642
  });
22914
- const ctx = React76__default.useContext(RootCtx);
22643
+ const ctx = React74__default.useContext(RootCtx);
22915
22644
  const activeDrag2 = ctx?.activeDrag ?? null;
22916
22645
  const overZoneGroup2 = ctx?.overZoneGroup ?? null;
22917
22646
  const isThisZoneOver = overZoneGroup2 === ownGroup;
@@ -22926,7 +22655,7 @@ function useDataDnd(args) {
22926
22655
  showForeignPlaceholder,
22927
22656
  ctxAvailable: ctx != null
22928
22657
  });
22929
- React76__default.useEffect(() => {
22658
+ React74__default.useEffect(() => {
22930
22659
  dndLog.info("dropzone:isOver:change", { droppableId, group: ownGroup, isOver, isThisZoneOver, showForeignPlaceholder, activeDragSourceGroup: activeDrag2?.sourceGroup ?? null });
22931
22660
  }, [droppableId, isOver, isThisZoneOver, showForeignPlaceholder]);
22932
22661
  return /* @__PURE__ */ jsx(
@@ -22940,11 +22669,11 @@ function useDataDnd(args) {
22940
22669
  }
22941
22670
  );
22942
22671
  };
22943
- const rootContextValue = React76__default.useMemo(
22672
+ const rootContextValue = React74__default.useMemo(
22944
22673
  () => ({ registerZone, unregisterZone, activeDrag, overZoneGroup, optimisticOrders, clearOptimisticOrder }),
22945
22674
  [registerZone, unregisterZone, activeDrag, overZoneGroup, optimisticOrders, clearOptimisticOrder]
22946
22675
  );
22947
- const handleDragStart = React76__default.useCallback((event) => {
22676
+ const handleDragStart = React74__default.useCallback((event) => {
22948
22677
  const sourceZone = findZoneByItem(event.active.id);
22949
22678
  const rect = event.active.rect.current.initial;
22950
22679
  const height = rect?.height && rect.height > 0 ? rect.height : 64;
@@ -22963,7 +22692,7 @@ function useDataDnd(args) {
22963
22692
  isRoot
22964
22693
  });
22965
22694
  }, [findZoneByItem, isRoot, zoneId]);
22966
- const handleDragOver = React76__default.useCallback((event) => {
22695
+ const handleDragOver = React74__default.useCallback((event) => {
22967
22696
  const { active, over } = event;
22968
22697
  const overData = over?.data?.current;
22969
22698
  const overGroup = overData?.dndGroup ?? null;
@@ -23033,7 +22762,7 @@ function useDataDnd(args) {
23033
22762
  return next;
23034
22763
  });
23035
22764
  }, []);
23036
- const handleDragCancel = React76__default.useCallback((event) => {
22765
+ const handleDragCancel = React74__default.useCallback((event) => {
23037
22766
  setActiveDrag(null);
23038
22767
  setOverZoneGroup(null);
23039
22768
  dndLog.warn("dragCancel", {
@@ -23041,12 +22770,12 @@ function useDataDnd(args) {
23041
22770
  reason: "dnd-kit cancelled the drag (escape key, pointer interrupted, or external)"
23042
22771
  });
23043
22772
  }, []);
23044
- const handleDragEndWithCleanup = React76__default.useCallback((event) => {
22773
+ const handleDragEndWithCleanup = React74__default.useCallback((event) => {
23045
22774
  handleDragEnd(event);
23046
22775
  setActiveDrag(null);
23047
22776
  setOverZoneGroup(null);
23048
22777
  }, [handleDragEnd]);
23049
- const wrapContainer = React76__default.useCallback(
22778
+ const wrapContainer = React74__default.useCallback(
23050
22779
  (children) => {
23051
22780
  if (!enabled) return children;
23052
22781
  const strategy = layout === "grid" ? rectSortingStrategy : verticalListSortingStrategy;
@@ -23100,7 +22829,7 @@ var init_useDataDnd = __esm({
23100
22829
  init_useAlmadarDndCollision();
23101
22830
  init_Box();
23102
22831
  dndLog = createLogger("almadar:ui:dnd");
23103
- RootCtx = React76__default.createContext(null);
22832
+ RootCtx = React74__default.createContext(null);
23104
22833
  }
23105
22834
  });
23106
22835
  function renderIconInput(icon, props) {
@@ -23626,7 +23355,7 @@ function DataList({
23626
23355
  }) {
23627
23356
  const eventBus = useEventBus();
23628
23357
  const { t } = useTranslate();
23629
- const [visibleCount, setVisibleCount] = React76__default.useState(pageSize || Infinity);
23358
+ const [visibleCount, setVisibleCount] = React74__default.useState(pageSize || Infinity);
23630
23359
  const fieldDefs = fields ?? columns ?? [];
23631
23360
  const allDataRaw = Array.isArray(entity) ? entity : entity ? [entity] : [];
23632
23361
  const dnd = useDataDnd({
@@ -23645,7 +23374,7 @@ function DataList({
23645
23374
  const data = pageSize > 0 ? allData.slice(0, visibleCount) : allData;
23646
23375
  const hasMoreLocal = pageSize > 0 && visibleCount < allData.length;
23647
23376
  const hasRenderProp = typeof children === "function";
23648
- React76__default.useEffect(() => {
23377
+ React74__default.useEffect(() => {
23649
23378
  const renderItemTypeOf = typeof schemaRenderItem;
23650
23379
  const childrenTypeOf = typeof children;
23651
23380
  if (data.length > 0 && !hasRenderProp) {
@@ -23749,7 +23478,7 @@ function DataList({
23749
23478
  const items2 = [...data];
23750
23479
  const groups2 = groupBy ? groupData(items2, groupBy) : [{ label: "", items: items2 }];
23751
23480
  const contentField = titleField?.name ?? fieldDefs[0]?.name ?? "";
23752
- return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React76__default.Fragment, { children: [
23481
+ return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
23753
23482
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: "my-2" }),
23754
23483
  group.items.map((itemData, index) => {
23755
23484
  const id = itemData.id || `${gi}-${index}`;
@@ -23890,7 +23619,7 @@ function DataList({
23890
23619
  className
23891
23620
  ),
23892
23621
  children: [
23893
- groups.map((group, gi) => /* @__PURE__ */ jsxs(React76__default.Fragment, { children: [
23622
+ groups.map((group, gi) => /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
23894
23623
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: gi > 0 ? "mt-4" : "mt-0" }),
23895
23624
  group.items.map(
23896
23625
  (itemData, index) => renderItem(itemData, index, gi === groups.length - 1 && index === group.items.length - 1)
@@ -23997,8 +23726,8 @@ function ScalarControl({
23997
23726
  }
23998
23727
  const numeric = typeof value === "number";
23999
23728
  const initial = value === null ? "" : String(value);
24000
- const [draft, setDraft] = React76__default.useState(initial);
24001
- React76__default.useEffect(() => setDraft(initial), [initial]);
23729
+ const [draft, setDraft] = React74__default.useState(initial);
23730
+ React74__default.useEffect(() => setDraft(initial), [initial]);
24002
23731
  const commit = () => {
24003
23732
  if (numeric) {
24004
23733
  const n = draft.trim() === "" ? 0 : Number(draft);
@@ -24066,8 +23795,8 @@ function Row({
24066
23795
  onRemove,
24067
23796
  readonly
24068
23797
  }) {
24069
- const [keyDraft, setKeyDraft] = React76__default.useState(rowKey);
24070
- React76__default.useEffect(() => setKeyDraft(rowKey), [rowKey]);
23798
+ const [keyDraft, setKeyDraft] = React74__default.useState(rowKey);
23799
+ React74__default.useEffect(() => setKeyDraft(rowKey), [rowKey]);
24071
23800
  const container = isObj(value) || isArr(value);
24072
23801
  return /* @__PURE__ */ jsxs(VStack, { gap: "none", className: "group w-max min-w-full", children: [
24073
23802
  /* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", className: "py-0.5 w-max", children: [
@@ -24110,7 +23839,7 @@ function ContainerNode({
24110
23839
  depth,
24111
23840
  readonly
24112
23841
  }) {
24113
- const [open, setOpen] = React76__default.useState(depth < 2);
23842
+ const [open, setOpen] = React74__default.useState(depth < 2);
24114
23843
  const array = isArr(value);
24115
23844
  const entries = array ? value.map((v, i) => [String(i), v]) : Object.entries(value);
24116
23845
  const setObjValue = (key, next) => {
@@ -24252,7 +23981,7 @@ var init_FormSection = __esm({
24252
23981
  columns = 1,
24253
23982
  className
24254
23983
  }) => {
24255
- const [collapsed, setCollapsed] = React76__default.useState(defaultCollapsed);
23984
+ const [collapsed, setCollapsed] = React74__default.useState(defaultCollapsed);
24256
23985
  const { t } = useTranslate();
24257
23986
  const eventBus = useEventBus();
24258
23987
  const gridClass = {
@@ -24260,7 +23989,7 @@ var init_FormSection = __esm({
24260
23989
  2: "grid-cols-1 md:grid-cols-2",
24261
23990
  3: "grid-cols-1 md:grid-cols-2 lg:grid-cols-3"
24262
23991
  }[columns];
24263
- React76__default.useCallback(() => {
23992
+ React74__default.useCallback(() => {
24264
23993
  if (collapsible) {
24265
23994
  setCollapsed((prev) => !prev);
24266
23995
  eventBus.emit("UI:TOGGLE_COLLAPSE", { collapsed: !collapsed });
@@ -24668,8 +24397,8 @@ function TextLikeControl({
24668
24397
  onCommit
24669
24398
  }) {
24670
24399
  const initial = value === void 0 || value === null ? "" : String(value);
24671
- const [draft, setDraft] = React76__default.useState(initial);
24672
- React76__default.useEffect(() => setDraft(initial), [initial]);
24400
+ const [draft, setDraft] = React74__default.useState(initial);
24401
+ React74__default.useEffect(() => setDraft(initial), [initial]);
24673
24402
  const commit = () => {
24674
24403
  if (numeric) {
24675
24404
  const n = draft.trim() === "" ? 0 : Number(draft);
@@ -24854,14 +24583,14 @@ var init_NodeSlotEditor = __esm({
24854
24583
  isObj2 = (v) => v !== null && v !== void 0 && typeof v === "object" && !Array.isArray(v);
24855
24584
  NodeSlotEditor = ({ value, onChange, className }) => {
24856
24585
  const { type, props, wasArray } = normalize(value);
24857
- const patterns = React76__default.useMemo(() => {
24586
+ const patterns = React74__default.useMemo(() => {
24858
24587
  try {
24859
24588
  return [...getKnownPatterns()].sort();
24860
24589
  } catch {
24861
24590
  return [];
24862
24591
  }
24863
24592
  }, []);
24864
- const options = React76__default.useMemo(
24593
+ const options = React74__default.useMemo(
24865
24594
  () => [{ value: "", label: "\u2014 none \u2014" }, ...patterns.map((p2) => ({ value: p2, label: p2 }))],
24866
24595
  [patterns]
24867
24596
  );
@@ -24873,7 +24602,7 @@ var init_NodeSlotEditor = __esm({
24873
24602
  const pattern = { type: nextType, ...nextProps };
24874
24603
  onChange(wasArray || value === void 0 ? [pattern] : pattern);
24875
24604
  };
24876
- const schemaEntries = React76__default.useMemo(() => {
24605
+ const schemaEntries = React74__default.useMemo(() => {
24877
24606
  if (!type) return [];
24878
24607
  const def = getPatternDefinition(type);
24879
24608
  if (!def?.propsSchema) return [];
@@ -25775,7 +25504,7 @@ var init_Flex = __esm({
25775
25504
  flexStyle.flexBasis = typeof basis === "number" ? `${basis}px` : basis;
25776
25505
  }
25777
25506
  }
25778
- return React76__default.createElement(Component, {
25507
+ return React74__default.createElement(Component, {
25779
25508
  className: cn(
25780
25509
  inline ? "inline-flex" : "flex",
25781
25510
  directionStyles[direction],
@@ -25894,7 +25623,7 @@ var init_Grid = __esm({
25894
25623
  as: Component = "div"
25895
25624
  }) => {
25896
25625
  const mergedStyle = rows2 ? { gridTemplateRows: `repeat(${rows2}, minmax(0, 1fr))`, ...style } : style;
25897
- return React76__default.createElement(
25626
+ return React74__default.createElement(
25898
25627
  Component,
25899
25628
  {
25900
25629
  className: cn(
@@ -26090,9 +25819,9 @@ var init_Popover = __esm({
26090
25819
  onMouseLeave: handleClose,
26091
25820
  onPointerDown: tapTriggerProps.onPointerDown
26092
25821
  };
26093
- const childElement = React76__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
25822
+ const childElement = React74__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
26094
25823
  const childPointerDown = childElement.props.onPointerDown;
26095
- const triggerElement = React76__default.cloneElement(
25824
+ const triggerElement = React74__default.cloneElement(
26096
25825
  childElement,
26097
25826
  {
26098
25827
  ref: triggerRef,
@@ -26944,9 +26673,9 @@ var init_Tooltip = __esm({
26944
26673
  if (hideTimeoutRef.current) clearTimeout(hideTimeoutRef.current);
26945
26674
  };
26946
26675
  }, []);
26947
- const triggerElement = React76__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
26676
+ const triggerElement = React74__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
26948
26677
  const childPointerDown = triggerElement.props.onPointerDown;
26949
- const trigger = React76__default.cloneElement(triggerElement, {
26678
+ const trigger = React74__default.cloneElement(triggerElement, {
26950
26679
  ref: triggerRef,
26951
26680
  onMouseEnter: handleMouseEnter,
26952
26681
  onMouseLeave: handleMouseLeave,
@@ -27036,7 +26765,7 @@ var init_WizardProgress = __esm({
27036
26765
  children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: normalizedSteps.map((step, index) => {
27037
26766
  const isActive = index === currentStep;
27038
26767
  const isCompleted = index < currentStep;
27039
- return /* @__PURE__ */ jsxs(React76__default.Fragment, { children: [
26768
+ return /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
27040
26769
  /* @__PURE__ */ jsx(
27041
26770
  "button",
27042
26771
  {
@@ -28123,6 +27852,95 @@ var init_shared = __esm({
28123
27852
  init_canvasEffects();
28124
27853
  }
28125
27854
  });
27855
+ function GameCard({
27856
+ id,
27857
+ cost,
27858
+ art,
27859
+ frameAsset,
27860
+ attack,
27861
+ defense,
27862
+ name,
27863
+ selected = false,
27864
+ disabled = false,
27865
+ size = "md",
27866
+ onClick,
27867
+ clickEvent,
27868
+ className
27869
+ }) {
27870
+ const eventBus = useEventBus();
27871
+ const handleClick = React74.useCallback(() => {
27872
+ if (disabled) return;
27873
+ onClick?.(id);
27874
+ if (clickEvent) eventBus.emit(`UI:${clickEvent}`, { cardId: id });
27875
+ }, [disabled, id, onClick, clickEvent, eventBus]);
27876
+ const artPx = artPxMap[size];
27877
+ const frameStyle = frameAsset?.url ? { backgroundImage: `url(${frameAsset.url})`, backgroundSize: "100% 100%", backgroundRepeat: "no-repeat" } : {};
27878
+ return /* @__PURE__ */ jsxs(
27879
+ Button,
27880
+ {
27881
+ variant: "ghost",
27882
+ onClick: handleClick,
27883
+ disabled,
27884
+ title: name,
27885
+ style: frameStyle,
27886
+ className: cn(
27887
+ "relative flex flex-col items-center rounded-interactive",
27888
+ "bg-card/90 px-1.5 pt-1.5 pb-1 transition-all duration-150",
27889
+ frameAsset?.url ? "border-0" : "border-2",
27890
+ cardSizeMap[size],
27891
+ disabled ? "border-border opacity-50 cursor-not-allowed" : "border-accent hover:brightness-125 hover:-translate-y-1 cursor-pointer",
27892
+ selected && "ring-2 ring-foreground ring-offset-1 ring-offset-background -translate-y-1",
27893
+ className
27894
+ ),
27895
+ children: [
27896
+ cost != null && /* @__PURE__ */ jsx(
27897
+ Typography,
27898
+ {
27899
+ as: "span",
27900
+ className: cn(
27901
+ "absolute -top-2 -left-2 flex items-center justify-center",
27902
+ "min-w-[22px] h-[22px] rounded-full px-1",
27903
+ "bg-info text-foreground text-xs font-bold border border-background"
27904
+ ),
27905
+ children: cost
27906
+ }
27907
+ ),
27908
+ /* @__PURE__ */ jsx(Box, { className: "flex-1 flex items-center justify-center w-full", children: art ? /* @__PURE__ */ jsx(GameIcon, { assetUrl: art, icon: "image", size: artPx, alt: name ?? id, className: "flex-shrink-0" }) : /* @__PURE__ */ jsx(Box, { className: "rounded bg-muted/40", style: { width: artPx, height: artPx } }) }),
27909
+ name != null && /* @__PURE__ */ jsx(
27910
+ Typography,
27911
+ {
27912
+ variant: "small",
27913
+ className: "w-full truncate text-center text-[10px] leading-tight font-semibold",
27914
+ children: name
27915
+ }
27916
+ ),
27917
+ (attack != null || defense != null) && /* @__PURE__ */ jsxs(Box, { className: "flex w-full items-center justify-between px-0.5 text-[10px] font-bold leading-none", children: [
27918
+ /* @__PURE__ */ jsx(Typography, { as: "span", className: "text-error", children: attack != null ? `\u2694${attack}` : "" }),
27919
+ /* @__PURE__ */ jsx(Typography, { as: "span", className: "text-info", children: defense != null ? `\u{1F6E1}${defense}` : "" })
27920
+ ] })
27921
+ ]
27922
+ }
27923
+ );
27924
+ }
27925
+ var cardSizeMap, artPxMap;
27926
+ var init_GameCard = __esm({
27927
+ "components/game/2d/atoms/GameCard.tsx"() {
27928
+ "use client";
27929
+ init_cn();
27930
+ init_useEventBus();
27931
+ init_Box();
27932
+ init_Button();
27933
+ init_Typography();
27934
+ init_GameIcon();
27935
+ cardSizeMap = {
27936
+ sm: "w-16 h-24",
27937
+ md: "w-20 h-28",
27938
+ lg: "w-24 h-36"
27939
+ };
27940
+ artPxMap = { sm: 40, md: 52, lg: 64 };
27941
+ GameCard.displayName = "GameCard";
27942
+ }
27943
+ });
28126
27944
  function ScoreDisplay({
28127
27945
  assetUrl = DEFAULT_ASSET_URL5,
28128
27946
  value,
@@ -28942,7 +28760,7 @@ function InventoryGrid({
28942
28760
  const eventBus = useEventBus();
28943
28761
  const slotCount = totalSlots ?? items.length;
28944
28762
  const emptySlotCount = Math.max(0, slotCount - items.length);
28945
- const handleSelect = React76.useCallback(
28763
+ const handleSelect = React74.useCallback(
28946
28764
  (id) => {
28947
28765
  onSelect?.(id);
28948
28766
  if (selectEvent) {
@@ -29159,7 +28977,7 @@ function GameMenu({
29159
28977
  }) {
29160
28978
  const resolvedOptions = options ?? menuItems ?? DEFAULT_MENU_OPTIONS;
29161
28979
  const eventBus = useEventBus();
29162
- const handleOptionClick = React76.useCallback(
28980
+ const handleOptionClick = React74.useCallback(
29163
28981
  (option) => {
29164
28982
  if (option.event) {
29165
28983
  eventBus.emit(`UI:${option.event}`, { option });
@@ -29679,227 +29497,6 @@ var init_GameAudioToggle = __esm({
29679
29497
  GameAudioToggle.displayName = "GameAudioToggle";
29680
29498
  }
29681
29499
  });
29682
- function VisualNovelBoard({
29683
- entity,
29684
- nodes: propNodes,
29685
- currentNodeId: propCurrentNodeId,
29686
- assetManifest: propAssetManifest,
29687
- typewriterSpeed = 30,
29688
- portraitScale = 1,
29689
- chooseEvent,
29690
- advanceEvent,
29691
- restartEvent,
29692
- className
29693
- }) {
29694
- const board = boardEntity(entity) ?? {};
29695
- const eventBus = useEventBus();
29696
- const assetManifest = propAssetManifest ?? board.assetManifest;
29697
- const entityNodes = useMemo(
29698
- () => rows(board.nodes).map((r) => ({
29699
- id: str(r.id),
29700
- speaker: str(r.speaker),
29701
- text: str(r.text),
29702
- backgroundKey: r.backgroundKey == null ? void 0 : str(r.backgroundKey),
29703
- portraitKey: r.portraitKey == null ? void 0 : str(r.portraitKey),
29704
- choices: rows(r.choices).map((c) => ({
29705
- label: str(c.label),
29706
- nextId: str(c.nextId)
29707
- }))
29708
- })),
29709
- [board.nodes]
29710
- );
29711
- const rawNodes = propNodes ?? entityNodes;
29712
- const nodes = rawNodes.length > 0 ? rawNodes : DEFAULT_NODES;
29713
- const currentNodeId = propCurrentNodeId ?? (str(board.currentNodeId) || nodes[0]?.id);
29714
- const currentNode = nodes.find((n) => n.id === currentNodeId) ?? nodes[0];
29715
- const backgroundImage = useMemo(
29716
- () => assetManifest?.backgrounds?.[currentNode?.backgroundKey ?? ""],
29717
- [assetManifest, currentNode?.backgroundKey]
29718
- );
29719
- const portraitAsset = useMemo(
29720
- () => assetManifest?.portraits?.[currentNode?.portraitKey ?? ""],
29721
- [assetManifest, currentNode?.portraitKey]
29722
- );
29723
- const [displayedText, setDisplayedText] = useState("");
29724
- const [isTyping, setIsTyping] = useState(false);
29725
- const textRef = useRef(currentNode?.text ?? "");
29726
- const charIndexRef = useRef(0);
29727
- useEffect(() => {
29728
- const fullText = currentNode?.text ?? "";
29729
- textRef.current = fullText;
29730
- charIndexRef.current = 0;
29731
- if (typewriterSpeed === 0) {
29732
- setDisplayedText(fullText);
29733
- setIsTyping(false);
29734
- } else {
29735
- setDisplayedText("");
29736
- setIsTyping(true);
29737
- }
29738
- }, [currentNode?.id, typewriterSpeed]);
29739
- useEffect(() => {
29740
- if (!isTyping || typewriterSpeed === 0) return;
29741
- const interval = setInterval(() => {
29742
- if (charIndexRef.current < textRef.current.length) {
29743
- charIndexRef.current++;
29744
- setDisplayedText(textRef.current.slice(0, charIndexRef.current));
29745
- } else {
29746
- setIsTyping(false);
29747
- clearInterval(interval);
29748
- }
29749
- }, typewriterSpeed);
29750
- return () => clearInterval(interval);
29751
- }, [isTyping, typewriterSpeed]);
29752
- const skipTypewriter = useCallback(() => {
29753
- if (isTyping) {
29754
- charIndexRef.current = textRef.current.length;
29755
- setDisplayedText(textRef.current);
29756
- setIsTyping(false);
29757
- }
29758
- }, [isTyping]);
29759
- const handleChoice = useCallback(
29760
- (index) => {
29761
- if (chooseEvent) {
29762
- eventBus.emit(`UI:${chooseEvent}`, { choiceIndex: index });
29763
- }
29764
- },
29765
- [chooseEvent, eventBus]
29766
- );
29767
- const handleAdvance = useCallback(() => {
29768
- if (advanceEvent) {
29769
- eventBus.emit(`UI:${advanceEvent}`, {});
29770
- }
29771
- }, [advanceEvent, eventBus]);
29772
- const handleRestart = useCallback(() => {
29773
- if (restartEvent) {
29774
- eventBus.emit(`UI:${restartEvent}`, {});
29775
- }
29776
- }, [restartEvent, eventBus]);
29777
- const handleContainerClick = useCallback(() => {
29778
- if (isTyping) {
29779
- skipTypewriter();
29780
- } else if (!currentNode?.choices?.length) {
29781
- handleAdvance();
29782
- }
29783
- }, [isTyping, skipTypewriter, currentNode?.choices, handleAdvance]);
29784
- if (!currentNode) {
29785
- return /* @__PURE__ */ jsxs(VStack, { className: cn("visual-novel-board relative min-h-[600px] bg-background items-center justify-center", className), gap: "lg", children: [
29786
- /* @__PURE__ */ jsx(Typography, { variant: "h3", color: "muted", children: "No dialogue nodes" }),
29787
- /* @__PURE__ */ jsx(Button, { variant: "primary", onClick: handleRestart, children: "Restart" })
29788
- ] });
29789
- }
29790
- return /* @__PURE__ */ jsxs(
29791
- Box,
29792
- {
29793
- className: cn("visual-novel-board relative min-h-[600px] bg-background overflow-hidden", className),
29794
- onClick: handleContainerClick,
29795
- children: [
29796
- backgroundImage && /* @__PURE__ */ jsx(
29797
- "div",
29798
- {
29799
- className: "absolute inset-0 z-0 bg-center bg-cover bg-no-repeat",
29800
- style: { backgroundImage: `url(${backgroundImage.url})` },
29801
- "aria-hidden": "true"
29802
- }
29803
- ),
29804
- portraitAsset && /* @__PURE__ */ jsx(
29805
- "div",
29806
- {
29807
- className: "absolute left-1/2 -translate-x-1/2 bottom-0 z-10 pointer-events-none flex items-end",
29808
- style: { height: `${60 * portraitScale}vh` },
29809
- children: /* @__PURE__ */ jsx(
29810
- "img",
29811
- {
29812
- src: portraitAsset.url,
29813
- alt: currentNode.speaker,
29814
- className: "h-full w-auto object-contain drop-shadow-2xl"
29815
- }
29816
- )
29817
- }
29818
- ),
29819
- /* @__PURE__ */ jsx("div", { className: "absolute left-0 right-0 bottom-0 z-20 mx-4 mb-4", children: /* @__PURE__ */ jsxs("div", { className: cn(
29820
- "rounded-container border-2 overflow-hidden",
29821
- backgroundImage ? "bg-black/80 backdrop-blur-sm border-white/20" : "bg-card/95 border-border"
29822
- ), children: [
29823
- /* @__PURE__ */ jsx(
29824
- DialogueBubble,
29825
- {
29826
- speaker: currentNode.speaker,
29827
- text: displayedText + (isTyping ? "\u258C" : ""),
29828
- portrait: portraitAsset,
29829
- position: "bottom",
29830
- className: "border-0 rounded-none bg-transparent backdrop-blur-none"
29831
- }
29832
- ),
29833
- !isTyping && (currentNode.choices?.length ?? 0) > 0 && /* @__PURE__ */ jsx("div", { className: "px-4 pb-4 space-y-2", onClick: (e) => e.stopPropagation(), children: currentNode.choices.map((choice, index) => /* @__PURE__ */ jsx(
29834
- ChoiceButton,
29835
- {
29836
- text: choice.label,
29837
- index: index + 1,
29838
- onClick: () => handleChoice(index)
29839
- },
29840
- choice.nextId
29841
- )) }),
29842
- !isTyping && !currentNode.choices?.length && /* @__PURE__ */ jsx("div", { className: "px-4 pb-3 text-muted-foreground text-sm animate-pulse", children: "Press click to continue..." })
29843
- ] }) })
29844
- ]
29845
- }
29846
- );
29847
- }
29848
- var DEFAULT_NODES;
29849
- var init_VisualNovelBoard = __esm({
29850
- "components/game/2d/organisms/VisualNovelBoard.tsx"() {
29851
- "use client";
29852
- init_cn();
29853
- init_useEventBus();
29854
- init_Box();
29855
- init_Typography();
29856
- init_Stack();
29857
- init_Button();
29858
- init_DialogueBubble();
29859
- init_ChoiceButton();
29860
- init_boardEntity();
29861
- DEFAULT_NODES = [
29862
- {
29863
- id: "start",
29864
- speaker: "Narrator",
29865
- text: "The corridor stretches into shadow. A lone sentinel blocks your path.",
29866
- backgroundKey: "corridor",
29867
- portraitKey: "guide",
29868
- choices: [
29869
- { label: "Approach the sentinel.", nextId: "meet" },
29870
- { label: "Turn back.", nextId: "retreat" }
29871
- ]
29872
- },
29873
- {
29874
- id: "meet",
29875
- speaker: "Sentinel",
29876
- text: "You carry the old marks. Speak your purpose, traveler.",
29877
- backgroundKey: "forge",
29878
- portraitKey: "rival",
29879
- choices: [
29880
- { label: "I seek the core.", nextId: "end" },
29881
- { label: "I am only passing through.", nextId: "retreat" }
29882
- ]
29883
- },
29884
- {
29885
- id: "retreat",
29886
- speaker: "Narrator",
29887
- text: "You withdraw into the dark. The path will wait for braver feet.",
29888
- backgroundKey: "corridor",
29889
- choices: [{ label: "Begin again.", nextId: "start" }]
29890
- },
29891
- {
29892
- id: "end",
29893
- speaker: "Sentinel",
29894
- text: "Then the way is open. Walk it well.",
29895
- backgroundKey: "core",
29896
- portraitKey: "rival",
29897
- choices: [{ label: "Begin again.", nextId: "start" }]
29898
- }
29899
- ];
29900
- VisualNovelBoard.displayName = "VisualNovelBoard";
29901
- }
29902
- });
29903
29500
  function LinearView({
29904
29501
  trait,
29905
29502
  size = "md",
@@ -29911,7 +29508,7 @@ function LinearView({
29911
29508
  /* @__PURE__ */ jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
29912
29509
  const isDone = i < currentIdx;
29913
29510
  const isCurrent = i === currentIdx;
29914
- return /* @__PURE__ */ jsxs(React76__default.Fragment, { children: [
29511
+ return /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
29915
29512
  i > 0 && /* @__PURE__ */ jsx(
29916
29513
  Typography,
29917
29514
  {
@@ -30537,7 +30134,7 @@ function SequenceBar({
30537
30134
  onSlotRemove(index);
30538
30135
  }, [onSlotRemove, playing]);
30539
30136
  const paddedSlots = Array.from({ length: maxSlots }, (_, i) => slots[i]);
30540
- return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React76__default.Fragment, { children: [
30137
+ return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
30541
30138
  i > 0 && /* @__PURE__ */ jsx(
30542
30139
  Typography,
30543
30140
  {
@@ -33009,8 +32606,6 @@ var init_molecules = __esm({
33009
32606
  init_GameAudioToggle();
33010
32607
  init_useGameAudio();
33011
32608
  init_useCamera();
33012
- init_VisualNovelBoard();
33013
- init_CardBattlerBoard();
33014
32609
  init_TraitStateViewer();
33015
32610
  init_TraitSlot();
33016
32611
  init_editorUtils();
@@ -33640,13 +33235,13 @@ var init_MapView = __esm({
33640
33235
  shadowSize: [41, 41]
33641
33236
  });
33642
33237
  L.Marker.prototype.options.icon = defaultIcon;
33643
- const { useEffect: useEffect73, useRef: useRef70, useCallback: useCallback118, useState: useState111 } = React76__default;
33238
+ const { useEffect: useEffect72, useRef: useRef68, useCallback: useCallback116, useState: useState110 } = React74__default;
33644
33239
  const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
33645
33240
  const { useEventBus: useEventBus2 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
33646
33241
  function MapUpdater({ centerLat, centerLng, zoom }) {
33647
33242
  const map = useMap();
33648
- const prevRef = useRef70({ centerLat, centerLng, zoom });
33649
- useEffect73(() => {
33243
+ const prevRef = useRef68({ centerLat, centerLng, zoom });
33244
+ useEffect72(() => {
33650
33245
  const prev = prevRef.current;
33651
33246
  if (prev.centerLat !== centerLat || prev.centerLng !== centerLng || prev.zoom !== zoom) {
33652
33247
  map.setView([centerLat, centerLng], zoom);
@@ -33657,7 +33252,7 @@ var init_MapView = __esm({
33657
33252
  }
33658
33253
  function MapClickHandler({ onMapClick }) {
33659
33254
  const map = useMap();
33660
- useEffect73(() => {
33255
+ useEffect72(() => {
33661
33256
  if (!onMapClick) return;
33662
33257
  const handler = (e) => {
33663
33258
  onMapClick(e.latlng.lat, e.latlng.lng);
@@ -33685,8 +33280,8 @@ var init_MapView = __esm({
33685
33280
  showAttribution = true
33686
33281
  }) {
33687
33282
  const eventBus = useEventBus2();
33688
- const [clickedPosition, setClickedPosition] = useState111(null);
33689
- const handleMapClick = useCallback118((lat, lng) => {
33283
+ const [clickedPosition, setClickedPosition] = useState110(null);
33284
+ const handleMapClick = useCallback116((lat, lng) => {
33690
33285
  if (showClickedPin) {
33691
33286
  setClickedPosition({ lat, lng });
33692
33287
  }
@@ -33695,7 +33290,7 @@ var init_MapView = __esm({
33695
33290
  eventBus.emit(`UI:${mapClickEvent}`, { latitude: lat, longitude: lng });
33696
33291
  }
33697
33292
  }, [onMapClick, mapClickEvent, eventBus, showClickedPin]);
33698
- const handleMarkerClick = useCallback118((marker) => {
33293
+ const handleMarkerClick = useCallback116((marker) => {
33699
33294
  onMarkerClick?.(marker);
33700
33295
  if (markerClickEvent) {
33701
33296
  eventBus.emit(`UI:${markerClickEvent}`, { ...marker });
@@ -34555,8 +34150,8 @@ function TableView({
34555
34150
  }) {
34556
34151
  const eventBus = useEventBus();
34557
34152
  const { t } = useTranslate();
34558
- const [visibleCount, setVisibleCount] = React76__default.useState(pageSize > 0 ? pageSize : Infinity);
34559
- const [localSelected, setLocalSelected] = React76__default.useState(/* @__PURE__ */ new Set());
34153
+ const [visibleCount, setVisibleCount] = React74__default.useState(pageSize > 0 ? pageSize : Infinity);
34154
+ const [localSelected, setLocalSelected] = React74__default.useState(/* @__PURE__ */ new Set());
34560
34155
  const colDefs = columns ?? fields ?? [];
34561
34156
  const allDataRaw = Array.isArray(entity) ? entity : entity ? [entity] : [];
34562
34157
  const dnd = useDataDnd({
@@ -34751,12 +34346,12 @@ function TableView({
34751
34346
  ]
34752
34347
  }
34753
34348
  );
34754
- return dnd.isZone ? /* @__PURE__ */ jsx(dnd.SortableItem, { id: row[idField] ?? id, children: rowInner }, id) : /* @__PURE__ */ jsx(React76__default.Fragment, { children: rowInner }, id);
34349
+ return dnd.isZone ? /* @__PURE__ */ jsx(dnd.SortableItem, { id: row[idField] ?? id, children: rowInner }, id) : /* @__PURE__ */ jsx(React74__default.Fragment, { children: rowInner }, id);
34755
34350
  };
34756
34351
  const items = Array.from(data);
34757
34352
  const groups = groupBy ? groupData2(items, groupBy) : [{ label: "", items }];
34758
34353
  let runningIndex = 0;
34759
- const body = /* @__PURE__ */ jsx(Box, { role: "rowgroup", children: groups.map((group, gi) => /* @__PURE__ */ jsxs(React76__default.Fragment, { children: [
34354
+ const body = /* @__PURE__ */ jsx(Box, { role: "rowgroup", children: groups.map((group, gi) => /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
34760
34355
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: gi > 0 ? "mt-3" : "mt-0" }),
34761
34356
  group.items.map((row) => renderRow(row, runningIndex++))
34762
34357
  ] }, gi)) });
@@ -36113,7 +35708,7 @@ var init_StepFlow = __esm({
36113
35708
  className
36114
35709
  }) => {
36115
35710
  if (orientation === "vertical") {
36116
- return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React76__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
35711
+ return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React74__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
36117
35712
  /* @__PURE__ */ jsxs(VStack, { gap: "none", align: "center", children: [
36118
35713
  /* @__PURE__ */ jsx(StepCircle, { step, index }),
36119
35714
  showConnectors && index < steps.length - 1 && /* @__PURE__ */ jsx(Box, { className: "w-px h-8 bg-border" })
@@ -36124,7 +35719,7 @@ var init_StepFlow = __esm({
36124
35719
  ] })
36125
35720
  ] }) }, index)) });
36126
35721
  }
36127
- 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(React76__default.Fragment, { children: [
35722
+ return /* @__PURE__ */ jsx(Box, { className: cn("w-full flex flex-col md:flex-row items-start gap-0", className), children: steps.map((step, index) => /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
36128
35723
  /* @__PURE__ */ jsxs(VStack, { gap: "sm", align: "center", className: "flex-1 w-full md:w-auto", children: [
36129
35724
  /* @__PURE__ */ jsx(StepCircle, { step, index }),
36130
35725
  /* @__PURE__ */ jsx(Typography, { variant: "h4", className: "text-center", children: step.title }),
@@ -37109,7 +36704,7 @@ var init_LikertScale = __esm({
37109
36704
  md: "text-base",
37110
36705
  lg: "text-lg"
37111
36706
  };
37112
- LikertScale = React76__default.forwardRef(
36707
+ LikertScale = React74__default.forwardRef(
37113
36708
  ({
37114
36709
  question,
37115
36710
  options = DEFAULT_LIKERT_OPTIONS,
@@ -37121,7 +36716,7 @@ var init_LikertScale = __esm({
37121
36716
  variant = "radios",
37122
36717
  className
37123
36718
  }, ref) => {
37124
- const groupId = React76__default.useId();
36719
+ const groupId = React74__default.useId();
37125
36720
  const eventBus = useEventBus();
37126
36721
  const handleSelect = useCallback(
37127
36722
  (next) => {
@@ -39403,7 +38998,7 @@ var init_DocBreadcrumb = __esm({
39403
38998
  "aria-label": t("aria.breadcrumb"),
39404
38999
  children: /* @__PURE__ */ jsx(HStack, { gap: "xs", align: "center", wrap: true, children: items.map((item, idx) => {
39405
39000
  const isLast = idx === items.length - 1;
39406
- return /* @__PURE__ */ jsxs(React76__default.Fragment, { children: [
39001
+ return /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
39407
39002
  idx > 0 && /* @__PURE__ */ jsx(
39408
39003
  Icon,
39409
39004
  {
@@ -40272,7 +39867,7 @@ var init_MiniStateMachine = __esm({
40272
39867
  const x = 2 + i * (NODE_W + GAP2 + ARROW_W + GAP2);
40273
39868
  const tc = transitionCounts[s.name] ?? 0;
40274
39869
  const role = getStateRole(s.name, s.isInitial ?? void 0, s.isTerminal ?? void 0, tc, maxTC);
40275
- return /* @__PURE__ */ jsxs(React76__default.Fragment, { children: [
39870
+ return /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
40276
39871
  /* @__PURE__ */ jsx(
40277
39872
  AvlState,
40278
39873
  {
@@ -40476,7 +40071,7 @@ var init_PageHeader = __esm({
40476
40071
  info: "bg-info/10 text-info"
40477
40072
  };
40478
40073
  return /* @__PURE__ */ jsxs(Box, { className: cn("mb-6", className), children: [
40479
- 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(React76__default.Fragment, { children: [
40074
+ breadcrumbs && breadcrumbs.length > 0 && /* @__PURE__ */ jsx(Box, { as: "nav", className: "mb-4", children: /* @__PURE__ */ jsx(Box, { as: "ol", className: "flex items-center gap-2 text-sm", children: breadcrumbs.map((crumb, idx) => /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
40480
40075
  idx > 0 && /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: "/" }),
40481
40076
  crumb.href ? /* @__PURE__ */ jsx(
40482
40077
  "a",
@@ -40834,7 +40429,7 @@ var init_Section = __esm({
40834
40429
  as: Component = "section"
40835
40430
  }) => {
40836
40431
  const hasHeader = title || description || action;
40837
- return React76__default.createElement(
40432
+ return React74__default.createElement(
40838
40433
  Component,
40839
40434
  {
40840
40435
  className: cn(
@@ -41208,7 +40803,7 @@ var init_WizardContainer = __esm({
41208
40803
  const isCompleted = index < currentStep;
41209
40804
  const stepKey = step.id ?? step.tabId ?? `step-${index}`;
41210
40805
  const stepTitle = step.title ?? step.name ?? `Step ${index + 1}`;
41211
- return /* @__PURE__ */ jsxs(React76__default.Fragment, { children: [
40806
+ return /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
41212
40807
  /* @__PURE__ */ jsx(
41213
40808
  Button,
41214
40809
  {
@@ -43857,7 +43452,7 @@ var init_DetailPanel = __esm({
43857
43452
  }
43858
43453
  });
43859
43454
  function extractTitle(children) {
43860
- if (!React76__default.isValidElement(children)) return void 0;
43455
+ if (!React74__default.isValidElement(children)) return void 0;
43861
43456
  const props = children.props;
43862
43457
  if (typeof props.title === "string") {
43863
43458
  return props.title;
@@ -44207,12 +43802,12 @@ var init_Form = __esm({
44207
43802
  const isSchemaEntity = isOrbitalEntitySchema(entity);
44208
43803
  const resolvedEntity = isSchemaEntity ? entity : void 0;
44209
43804
  const entityName = typeof entity === "string" ? entity : resolvedEntity?.name;
44210
- const normalizedInitialData = React76__default.useMemo(() => {
43805
+ const normalizedInitialData = React74__default.useMemo(() => {
44211
43806
  const entityRowAsInitial = isPlainEntityRow(entity) ? entity : void 0;
44212
43807
  const callerInitial = initialData !== null && typeof initialData === "object" && !Array.isArray(initialData) ? initialData : {};
44213
43808
  return entityRowAsInitial !== void 0 ? { ...entityRowAsInitial, ...callerInitial } : callerInitial;
44214
43809
  }, [entity, initialData]);
44215
- const entityDerivedFields = React76__default.useMemo(() => {
43810
+ const entityDerivedFields = React74__default.useMemo(() => {
44216
43811
  if (fields && fields.length > 0) return void 0;
44217
43812
  if (!resolvedEntity) return void 0;
44218
43813
  return resolvedEntity.fields.map(
@@ -44233,16 +43828,16 @@ var init_Form = __esm({
44233
43828
  const conditionalFields = typeof conditionalFieldsRaw === "boolean" ? {} : conditionalFieldsRaw;
44234
43829
  const hiddenCalculations = typeof hiddenCalculationsRaw === "boolean" ? [] : hiddenCalculationsRaw;
44235
43830
  const violationTriggers = typeof violationTriggersRaw === "boolean" ? [] : violationTriggersRaw;
44236
- const [formData, setFormData] = React76__default.useState(
43831
+ const [formData, setFormData] = React74__default.useState(
44237
43832
  normalizedInitialData
44238
43833
  );
44239
- const [collapsedSections, setCollapsedSections] = React76__default.useState(
43834
+ const [collapsedSections, setCollapsedSections] = React74__default.useState(
44240
43835
  /* @__PURE__ */ new Set()
44241
43836
  );
44242
- const [submitError, setSubmitError] = React76__default.useState(null);
44243
- const formRef = React76__default.useRef(null);
43837
+ const [submitError, setSubmitError] = React74__default.useState(null);
43838
+ const formRef = React74__default.useRef(null);
44244
43839
  const formMode = props.mode;
44245
- const mountedRef = React76__default.useRef(false);
43840
+ const mountedRef = React74__default.useRef(false);
44246
43841
  if (!mountedRef.current) {
44247
43842
  mountedRef.current = true;
44248
43843
  debug("forms", "mount", {
@@ -44255,7 +43850,7 @@ var init_Form = __esm({
44255
43850
  });
44256
43851
  }
44257
43852
  const shouldShowCancel = showCancel ?? (fields && fields.length > 0);
44258
- const evalContext = React76__default.useMemo(
43853
+ const evalContext = React74__default.useMemo(
44259
43854
  () => ({
44260
43855
  formValues: formData,
44261
43856
  globalVariables: externalContext?.globalVariables ?? {},
@@ -44264,7 +43859,7 @@ var init_Form = __esm({
44264
43859
  }),
44265
43860
  [formData, externalContext]
44266
43861
  );
44267
- React76__default.useEffect(() => {
43862
+ React74__default.useEffect(() => {
44268
43863
  debug("forms", "initialData-sync", {
44269
43864
  mode: formMode,
44270
43865
  normalizedInitialData,
@@ -44275,7 +43870,7 @@ var init_Form = __esm({
44275
43870
  setFormData(normalizedInitialData);
44276
43871
  }
44277
43872
  }, [normalizedInitialData]);
44278
- const processCalculations = React76__default.useCallback(
43873
+ const processCalculations = React74__default.useCallback(
44279
43874
  (changedFieldId, newFormData) => {
44280
43875
  if (!hiddenCalculations.length) return;
44281
43876
  const context = {
@@ -44300,7 +43895,7 @@ var init_Form = __esm({
44300
43895
  },
44301
43896
  [hiddenCalculations, externalContext, eventBus]
44302
43897
  );
44303
- const checkViolations = React76__default.useCallback(
43898
+ const checkViolations = React74__default.useCallback(
44304
43899
  (changedFieldId, newFormData) => {
44305
43900
  if (!violationTriggers.length) return;
44306
43901
  const context = {
@@ -44338,7 +43933,7 @@ var init_Form = __esm({
44338
43933
  processCalculations(name, newFormData);
44339
43934
  checkViolations(name, newFormData);
44340
43935
  };
44341
- const isFieldVisible = React76__default.useCallback(
43936
+ const isFieldVisible = React74__default.useCallback(
44342
43937
  (fieldName) => {
44343
43938
  const condition = conditionalFields[fieldName];
44344
43939
  if (!condition) return true;
@@ -44346,7 +43941,7 @@ var init_Form = __esm({
44346
43941
  },
44347
43942
  [conditionalFields, evalContext]
44348
43943
  );
44349
- const isSectionVisible = React76__default.useCallback(
43944
+ const isSectionVisible = React74__default.useCallback(
44350
43945
  (section) => {
44351
43946
  if (!section.condition) return true;
44352
43947
  return Boolean(evaluateFormExpression(section.condition, evalContext));
@@ -44422,7 +44017,7 @@ var init_Form = __esm({
44422
44017
  eventBus.emit(`UI:${onCancel}`);
44423
44018
  }
44424
44019
  };
44425
- const renderField = React76__default.useCallback(
44020
+ const renderField = React74__default.useCallback(
44426
44021
  (field) => {
44427
44022
  const fieldName = field.name || field.field;
44428
44023
  if (!fieldName) return null;
@@ -44443,7 +44038,7 @@ var init_Form = __esm({
44443
44038
  [formData, isFieldVisible, relationsData, relationsLoading, isLoading]
44444
44039
  );
44445
44040
  const effectiveFields = entityDerivedFields ?? fields;
44446
- const normalizedFields = React76__default.useMemo(() => {
44041
+ const normalizedFields = React74__default.useMemo(() => {
44447
44042
  if (!effectiveFields || effectiveFields.length === 0) return [];
44448
44043
  return effectiveFields.map((field) => {
44449
44044
  if (typeof field === "string") {
@@ -44467,7 +44062,7 @@ var init_Form = __esm({
44467
44062
  return field;
44468
44063
  });
44469
44064
  }, [effectiveFields, resolvedEntity]);
44470
- const schemaFields = React76__default.useMemo(() => {
44065
+ const schemaFields = React74__default.useMemo(() => {
44471
44066
  if (normalizedFields.length === 0) return null;
44472
44067
  if (isDebugEnabled()) {
44473
44068
  debugGroup(`Form: ${entityName || "unknown"}`);
@@ -44477,7 +44072,7 @@ var init_Form = __esm({
44477
44072
  }
44478
44073
  return normalizedFields.map(renderField).filter(Boolean);
44479
44074
  }, [normalizedFields, renderField, entityName, conditionalFields]);
44480
- const sectionElements = React76__default.useMemo(() => {
44075
+ const sectionElements = React74__default.useMemo(() => {
44481
44076
  if (!sections || sections.length === 0) return null;
44482
44077
  return sections.map((section) => {
44483
44078
  if (!isSectionVisible(section)) {
@@ -45202,7 +44797,7 @@ var init_List = __esm({
45202
44797
  if (entity && typeof entity === "object" && "id" in entity) return [entity];
45203
44798
  return [];
45204
44799
  }, [entity]);
45205
- const getItemActions = React76__default.useCallback(
44800
+ const getItemActions = React74__default.useCallback(
45206
44801
  (item) => {
45207
44802
  if (!itemActions) return [];
45208
44803
  if (typeof itemActions === "function") {
@@ -45677,7 +45272,7 @@ var init_MediaGallery = __esm({
45677
45272
  [selectable, selectedItems, selectionEvent, eventBus]
45678
45273
  );
45679
45274
  const entityData = Array.isArray(entity) ? entity : [];
45680
- const items = React76__default.useMemo(() => {
45275
+ const items = React74__default.useMemo(() => {
45681
45276
  if (propItems) return propItems;
45682
45277
  if (entityData.length === 0) return [];
45683
45278
  return entityData.map((record, idx) => {
@@ -45840,7 +45435,7 @@ var init_MediaGallery = __esm({
45840
45435
  }
45841
45436
  });
45842
45437
  function extractTitle2(children) {
45843
- if (!React76__default.isValidElement(children)) return void 0;
45438
+ if (!React74__default.isValidElement(children)) return void 0;
45844
45439
  const props = children.props;
45845
45440
  if (typeof props.title === "string") {
45846
45441
  return props.title;
@@ -46095,7 +45690,7 @@ var init_debugRegistry = __esm({
46095
45690
  }
46096
45691
  });
46097
45692
  function useDebugData() {
46098
- const [data, setData] = React76.useState(() => ({
45693
+ const [data, setData] = React74.useState(() => ({
46099
45694
  traits: [],
46100
45695
  ticks: [],
46101
45696
  guards: [],
@@ -46109,7 +45704,7 @@ function useDebugData() {
46109
45704
  },
46110
45705
  lastUpdate: Date.now()
46111
45706
  }));
46112
- React76.useEffect(() => {
45707
+ React74.useEffect(() => {
46113
45708
  const updateData = () => {
46114
45709
  setData({
46115
45710
  traits: getAllTraits(),
@@ -46218,12 +45813,12 @@ function layoutGraph(states, transitions, initialState, width, height) {
46218
45813
  return positions;
46219
45814
  }
46220
45815
  function WalkMinimap() {
46221
- const [walkStep, setWalkStep] = React76.useState(null);
46222
- const [traits2, setTraits] = React76.useState([]);
46223
- const [coveredEdges, setCoveredEdges] = React76.useState([]);
46224
- const [completedTraits, setCompletedTraits] = React76.useState(/* @__PURE__ */ new Set());
46225
- const prevTraitRef = React76.useRef(null);
46226
- React76.useEffect(() => {
45816
+ const [walkStep, setWalkStep] = React74.useState(null);
45817
+ const [traits2, setTraits] = React74.useState([]);
45818
+ const [coveredEdges, setCoveredEdges] = React74.useState([]);
45819
+ const [completedTraits, setCompletedTraits] = React74.useState(/* @__PURE__ */ new Set());
45820
+ const prevTraitRef = React74.useRef(null);
45821
+ React74.useEffect(() => {
46227
45822
  const interval = setInterval(() => {
46228
45823
  const w = window;
46229
45824
  const step = w.__orbitalWalkStep;
@@ -46659,15 +46254,15 @@ var init_EntitiesTab = __esm({
46659
46254
  });
46660
46255
  function EventFlowTab({ events: events2 }) {
46661
46256
  const { t } = useTranslate();
46662
- const [filter, setFilter] = React76.useState("all");
46663
- const containerRef = React76.useRef(null);
46664
- const [autoScroll, setAutoScroll] = React76.useState(true);
46665
- React76.useEffect(() => {
46257
+ const [filter, setFilter] = React74.useState("all");
46258
+ const containerRef = React74.useRef(null);
46259
+ const [autoScroll, setAutoScroll] = React74.useState(true);
46260
+ React74.useEffect(() => {
46666
46261
  if (autoScroll && containerRef.current) {
46667
46262
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
46668
46263
  }
46669
46264
  }, [events2.length, autoScroll]);
46670
- const filteredEvents = React76.useMemo(() => {
46265
+ const filteredEvents = React74.useMemo(() => {
46671
46266
  if (filter === "all") return events2;
46672
46267
  return events2.filter((e) => e.type === filter);
46673
46268
  }, [events2, filter]);
@@ -46783,7 +46378,7 @@ var init_EventFlowTab = __esm({
46783
46378
  });
46784
46379
  function GuardsPanel({ guards }) {
46785
46380
  const { t } = useTranslate();
46786
- const [filter, setFilter] = React76.useState("all");
46381
+ const [filter, setFilter] = React74.useState("all");
46787
46382
  if (guards.length === 0) {
46788
46383
  return /* @__PURE__ */ jsx(
46789
46384
  EmptyState,
@@ -46796,7 +46391,7 @@ function GuardsPanel({ guards }) {
46796
46391
  }
46797
46392
  const passedCount = guards.filter((g) => g.result).length;
46798
46393
  const failedCount = guards.length - passedCount;
46799
- const filteredGuards = React76.useMemo(() => {
46394
+ const filteredGuards = React74.useMemo(() => {
46800
46395
  if (filter === "all") return guards;
46801
46396
  if (filter === "passed") return guards.filter((g) => g.result);
46802
46397
  return guards.filter((g) => !g.result);
@@ -46959,10 +46554,10 @@ function EffectBadge({ effect }) {
46959
46554
  }
46960
46555
  function TransitionTimeline({ transitions }) {
46961
46556
  const { t } = useTranslate();
46962
- const containerRef = React76.useRef(null);
46963
- const [autoScroll, setAutoScroll] = React76.useState(true);
46964
- const [expandedId, setExpandedId] = React76.useState(null);
46965
- React76.useEffect(() => {
46557
+ const containerRef = React74.useRef(null);
46558
+ const [autoScroll, setAutoScroll] = React74.useState(true);
46559
+ const [expandedId, setExpandedId] = React74.useState(null);
46560
+ React74.useEffect(() => {
46966
46561
  if (autoScroll && containerRef.current) {
46967
46562
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
46968
46563
  }
@@ -47242,9 +46837,9 @@ function getAllEvents(traits2) {
47242
46837
  function EventDispatcherTab({ traits: traits2, schema }) {
47243
46838
  const eventBus = useEventBus();
47244
46839
  const { t } = useTranslate();
47245
- const [log18, setLog] = React76.useState([]);
47246
- const prevStatesRef = React76.useRef(/* @__PURE__ */ new Map());
47247
- React76.useEffect(() => {
46840
+ const [log18, setLog] = React74.useState([]);
46841
+ const prevStatesRef = React74.useRef(/* @__PURE__ */ new Map());
46842
+ React74.useEffect(() => {
47248
46843
  for (const trait of traits2) {
47249
46844
  const prev = prevStatesRef.current.get(trait.id);
47250
46845
  if (prev && prev !== trait.currentState) {
@@ -47413,10 +47008,10 @@ function VerifyModePanel({
47413
47008
  localCount
47414
47009
  }) {
47415
47010
  const { t } = useTranslate();
47416
- const [expanded, setExpanded] = React76.useState(true);
47417
- const scrollRef = React76.useRef(null);
47418
- const prevCountRef = React76.useRef(0);
47419
- React76.useEffect(() => {
47011
+ const [expanded, setExpanded] = React74.useState(true);
47012
+ const scrollRef = React74.useRef(null);
47013
+ const prevCountRef = React74.useRef(0);
47014
+ React74.useEffect(() => {
47420
47015
  if (expanded && transitions.length > prevCountRef.current && scrollRef.current) {
47421
47016
  scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
47422
47017
  }
@@ -47473,10 +47068,10 @@ function RuntimeDebugger({
47473
47068
  schema
47474
47069
  }) {
47475
47070
  const { t } = useTranslate();
47476
- const [isCollapsed, setIsCollapsed] = React76.useState(mode === "verify" ? true : defaultCollapsed);
47477
- const [isVisible, setIsVisible] = React76.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
47071
+ const [isCollapsed, setIsCollapsed] = React74.useState(mode === "verify" ? true : defaultCollapsed);
47072
+ const [isVisible, setIsVisible] = React74.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
47478
47073
  const debugData = useDebugData();
47479
- React76.useEffect(() => {
47074
+ React74.useEffect(() => {
47480
47075
  if (mode === "inline") return;
47481
47076
  return onDebugToggle((enabled) => {
47482
47077
  setIsVisible(enabled);
@@ -47485,7 +47080,7 @@ function RuntimeDebugger({
47485
47080
  }
47486
47081
  });
47487
47082
  }, [mode]);
47488
- React76.useEffect(() => {
47083
+ React74.useEffect(() => {
47489
47084
  if (mode === "inline") return;
47490
47085
  const handleKeyDown = (e) => {
47491
47086
  if (e.key === "`" && isVisible) {
@@ -48005,7 +47600,7 @@ var init_StatCard = __esm({
48005
47600
  const labelToUse = propLabel ?? propTitle;
48006
47601
  const eventBus = useEventBus();
48007
47602
  const { t } = useTranslate();
48008
- const handleActionClick = React76__default.useCallback(() => {
47603
+ const handleActionClick = React74__default.useCallback(() => {
48009
47604
  if (action?.event) {
48010
47605
  eventBus.emit(`UI:${action.event}`, {});
48011
47606
  }
@@ -48016,7 +47611,7 @@ var init_StatCard = __esm({
48016
47611
  const data = Array.isArray(entity) ? entity : entity ? [entity] : [];
48017
47612
  const isLoading = externalLoading ?? false;
48018
47613
  const error = externalError;
48019
- const computeMetricValue = React76__default.useCallback(
47614
+ const computeMetricValue = React74__default.useCallback(
48020
47615
  (metric, items) => {
48021
47616
  if (metric.value !== void 0) {
48022
47617
  return metric.value;
@@ -48055,7 +47650,7 @@ var init_StatCard = __esm({
48055
47650
  },
48056
47651
  []
48057
47652
  );
48058
- const schemaStats = React76__default.useMemo(() => {
47653
+ const schemaStats = React74__default.useMemo(() => {
48059
47654
  if (!metrics || metrics.length === 0) return null;
48060
47655
  return metrics.map((metric) => ({
48061
47656
  label: metric.label,
@@ -48063,7 +47658,7 @@ var init_StatCard = __esm({
48063
47658
  format: metric.format
48064
47659
  }));
48065
47660
  }, [metrics, data, computeMetricValue]);
48066
- const calculatedTrend = React76__default.useMemo(() => {
47661
+ const calculatedTrend = React74__default.useMemo(() => {
48067
47662
  if (manualTrend !== void 0) return manualTrend;
48068
47663
  if (previousValue === void 0 || currentValue2 === void 0)
48069
47664
  return void 0;
@@ -48703,8 +48298,8 @@ var init_SubagentTracePanel = __esm({
48703
48298
  ] });
48704
48299
  };
48705
48300
  InlineActivityStream = ({ activities, autoScroll = true, className }) => {
48706
- const endRef = React76__default.useRef(null);
48707
- React76__default.useEffect(() => {
48301
+ const endRef = React74__default.useRef(null);
48302
+ React74__default.useEffect(() => {
48708
48303
  if (!autoScroll) return;
48709
48304
  endRef.current?.scrollIntoView({ behavior: "smooth", block: "end" });
48710
48305
  }, [activities.length, autoScroll]);
@@ -48798,7 +48393,7 @@ var init_SubagentTracePanel = __esm({
48798
48393
  };
48799
48394
  SubagentRichCard = ({ subagent }) => {
48800
48395
  const { t } = useTranslate();
48801
- const activities = React76__default.useMemo(
48396
+ const activities = React74__default.useMemo(
48802
48397
  () => subagentMessagesToActivities(subagent.messages),
48803
48398
  [subagent.messages]
48804
48399
  );
@@ -48875,8 +48470,8 @@ var init_SubagentTracePanel = __esm({
48875
48470
  ] });
48876
48471
  };
48877
48472
  CoordinatorConversation = ({ messages, autoScroll = true, className }) => {
48878
- const endRef = React76__default.useRef(null);
48879
- React76__default.useEffect(() => {
48473
+ const endRef = React74__default.useRef(null);
48474
+ React74__default.useEffect(() => {
48880
48475
  if (!autoScroll) return;
48881
48476
  endRef.current?.scrollIntoView({ behavior: "smooth", block: "end" });
48882
48477
  }, [messages.length, autoScroll]);
@@ -49306,7 +48901,7 @@ var init_Timeline = __esm({
49306
48901
  }) => {
49307
48902
  const { t } = useTranslate();
49308
48903
  const entityData = entity ?? [];
49309
- const items = React76__default.useMemo(() => {
48904
+ const items = React74__default.useMemo(() => {
49310
48905
  if (propItems) return propItems;
49311
48906
  if (entityData.length === 0) return [];
49312
48907
  return entityData.map((record, idx) => {
@@ -49408,7 +49003,7 @@ var init_Timeline = __esm({
49408
49003
  }
49409
49004
  });
49410
49005
  function extractToastProps(children) {
49411
- if (!React76__default.isValidElement(children)) {
49006
+ if (!React74__default.isValidElement(children)) {
49412
49007
  if (typeof children === "string") {
49413
49008
  return { message: children };
49414
49009
  }
@@ -49450,7 +49045,7 @@ var init_ToastSlot = __esm({
49450
49045
  eventBus.emit(`${prefix}CLOSE`);
49451
49046
  };
49452
49047
  if (!isVisible) return null;
49453
- const isCustomContent = React76__default.isValidElement(children) && !message;
49048
+ const isCustomContent = React74__default.isValidElement(children) && !message;
49454
49049
  return /* @__PURE__ */ jsx(Box, { className: "fixed bottom-4 right-4 z-50", children: isCustomContent ? children : /* @__PURE__ */ jsx(
49455
49050
  Toast,
49456
49051
  {
@@ -49467,7 +49062,7 @@ var init_ToastSlot = __esm({
49467
49062
  }
49468
49063
  });
49469
49064
  function lazyThree(name, loader) {
49470
- const Lazy = React76__default.lazy(
49065
+ const Lazy = React74__default.lazy(
49471
49066
  () => loader().then((m) => {
49472
49067
  const Resolved = m[name];
49473
49068
  if (!Resolved) {
@@ -49479,13 +49074,13 @@ function lazyThree(name, loader) {
49479
49074
  })
49480
49075
  );
49481
49076
  function ThreeWrapper(props) {
49482
- return React76__default.createElement(
49077
+ return React74__default.createElement(
49483
49078
  ThreeBoundary,
49484
49079
  { name },
49485
- React76__default.createElement(
49486
- React76__default.Suspense,
49080
+ React74__default.createElement(
49081
+ React74__default.Suspense,
49487
49082
  { fallback: null },
49488
- React76__default.createElement(Lazy, props)
49083
+ React74__default.createElement(Lazy, props)
49489
49084
  )
49490
49085
  );
49491
49086
  }
@@ -49527,7 +49122,6 @@ var init_component_registry_generated = __esm({
49527
49122
  init_Canvas2D();
49528
49123
  init_CanvasEffect();
49529
49124
  init_Card();
49530
- init_CardBattlerBoard();
49531
49125
  init_CardGrid();
49532
49126
  init_Carousel();
49533
49127
  init_CaseStudyCard();
@@ -49758,13 +49352,12 @@ var init_component_registry_generated = __esm({
49758
49352
  init_UploadDropZone();
49759
49353
  init_VersionDiff();
49760
49354
  init_ViolationAlert();
49761
- init_VisualNovelBoard();
49762
49355
  init_VoteStack();
49763
49356
  init_WaypointMarker();
49764
49357
  init_WizardContainer();
49765
49358
  init_WizardNavigation();
49766
49359
  init_WizardProgress();
49767
- ThreeBoundary = class extends React76__default.Component {
49360
+ ThreeBoundary = class extends React74__default.Component {
49768
49361
  constructor() {
49769
49362
  super(...arguments);
49770
49363
  __publicField(this, "state", { failed: false });
@@ -49774,7 +49367,7 @@ var init_component_registry_generated = __esm({
49774
49367
  }
49775
49368
  render() {
49776
49369
  if (this.state.failed) {
49777
- return React76__default.createElement(
49370
+ return React74__default.createElement(
49778
49371
  "div",
49779
49372
  {
49780
49373
  "data-testid": "three-unavailable",
@@ -49828,7 +49421,6 @@ var init_component_registry_generated = __esm({
49828
49421
  "Canvas2D": Canvas2D,
49829
49422
  "CanvasEffect": CanvasEffect,
49830
49423
  "Card": Card,
49831
- "CardBattlerBoard": CardBattlerBoard,
49832
49424
  "CardGrid": CardGrid,
49833
49425
  "Carousel": Carousel,
49834
49426
  "CaseStudyCard": CaseStudyCard,
@@ -50073,7 +49665,6 @@ var init_component_registry_generated = __esm({
50073
49665
  "VStack": VStack,
50074
49666
  "VersionDiff": VersionDiff,
50075
49667
  "ViolationAlert": ViolationAlert,
50076
- "VisualNovelBoard": VisualNovelBoard,
50077
49668
  "VoteStack": VoteStack,
50078
49669
  "WaypointMarker": WaypointMarker,
50079
49670
  "WizardContainer": WizardContainer,
@@ -50097,7 +49688,7 @@ function SuspenseConfigProvider({
50097
49688
  config,
50098
49689
  children
50099
49690
  }) {
50100
- return React76__default.createElement(
49691
+ return React74__default.createElement(
50101
49692
  SuspenseConfigContext.Provider,
50102
49693
  { value: config },
50103
49694
  children
@@ -50139,7 +49730,7 @@ function enrichFormFields(fields, entityDef) {
50139
49730
  }
50140
49731
  return { name: field, label: field.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/\b\w/g, (c) => c.toUpperCase()) };
50141
49732
  }
50142
- if (field && typeof field === "object" && !Array.isArray(field) && !React76__default.isValidElement(field) && !(field instanceof Date)) {
49733
+ if (field && typeof field === "object" && !Array.isArray(field) && !React74__default.isValidElement(field) && !(field instanceof Date)) {
50143
49734
  const obj = field;
50144
49735
  const fieldName = typeof obj.name === "string" ? obj.name : typeof obj.field === "string" ? obj.field : void 0;
50145
49736
  if (!fieldName) return field;
@@ -50592,7 +50183,7 @@ function renderPatternChildren(children, onDismiss, parentId = "root", parentPat
50592
50183
  const key = `${parentId}-${index}-trait:${traitName}`;
50593
50184
  return /* @__PURE__ */ jsx(TraitFrame, { traitName }, key);
50594
50185
  }
50595
- return /* @__PURE__ */ jsx(React76__default.Fragment, { children: child }, `${parentId}-${index}`);
50186
+ return /* @__PURE__ */ jsx(React74__default.Fragment, { children: child }, `${parentId}-${index}`);
50596
50187
  }
50597
50188
  if (!child || typeof child !== "object") return null;
50598
50189
  const childId = `${parentId}-${index}`;
@@ -50632,14 +50223,14 @@ function isPatternConfig(value) {
50632
50223
  if (value === null || value === void 0) return false;
50633
50224
  if (typeof value !== "object") return false;
50634
50225
  if (Array.isArray(value)) return false;
50635
- if (React76__default.isValidElement(value)) return false;
50226
+ if (React74__default.isValidElement(value)) return false;
50636
50227
  if (value instanceof Date) return false;
50637
50228
  if (typeof value === "function") return false;
50638
50229
  const record = value;
50639
50230
  return "type" in record && typeof record.type === "string" && getComponentForPattern$1(record.type) !== null;
50640
50231
  }
50641
50232
  function isPlainConfigObject(value) {
50642
- if (React76__default.isValidElement(value)) return false;
50233
+ if (React74__default.isValidElement(value)) return false;
50643
50234
  if (value instanceof Date) return false;
50644
50235
  const proto = Object.getPrototypeOf(value);
50645
50236
  return proto === Object.prototype || proto === null;
@@ -50765,7 +50356,7 @@ function SlotContentRenderer({
50765
50356
  for (const slotKey of CONTENT_NODE_SLOTS) {
50766
50357
  const slotVal = restProps[slotKey];
50767
50358
  if (slotVal === void 0 || slotVal === null) continue;
50768
- if (React76__default.isValidElement(slotVal) || typeof slotVal === "string" || typeof slotVal === "number" || typeof slotVal === "boolean") continue;
50359
+ if (React74__default.isValidElement(slotVal) || typeof slotVal === "string" || typeof slotVal === "number" || typeof slotVal === "boolean") continue;
50769
50360
  if (Array.isArray(slotVal) || typeof slotVal === "object" && "type" in slotVal) {
50770
50361
  nodeSlotOverrides[slotKey] = renderPatternChildren(
50771
50362
  slotVal,
@@ -50814,7 +50405,7 @@ function SlotContentRenderer({
50814
50405
  const resolvedItems = Array.isArray(entityVal) && entityVal[0] !== "fn" ? entityVal : null;
50815
50406
  if (resolvedItems && resolvedItems.length > 0 && !finalProps.fields && !finalProps.columns) {
50816
50407
  const sample = resolvedItems[0];
50817
- if (sample && typeof sample === "object" && !Array.isArray(sample) && !React76__default.isValidElement(sample) && !(sample instanceof Date)) {
50408
+ if (sample && typeof sample === "object" && !Array.isArray(sample) && !React74__default.isValidElement(sample) && !(sample instanceof Date)) {
50818
50409
  const keys = Object.keys(sample).filter((k) => k !== "id" && k !== "_id");
50819
50410
  finalProps.fields = keys.map((k, i) => ({ name: k, variant: i === 0 ? "h4" : "body" }));
50820
50411
  }
@@ -53114,7 +52705,7 @@ var I18nContext = createContext({
53114
52705
  });
53115
52706
  I18nContext.displayName = "I18nContext";
53116
52707
  var I18nProvider = I18nContext.Provider;
53117
- function useTranslate128() {
52708
+ function useTranslate127() {
53118
52709
  return useContext(I18nContext);
53119
52710
  }
53120
52711
  function createTranslate(messages) {
@@ -53315,4 +52906,4 @@ function useGitHubBranches(owner, repo, enabled = true) {
53315
52906
  });
53316
52907
  }
53317
52908
 
53318
- export { ALL_PRESETS, ALMADAR_DND_MIME, AR_BOOK_FIELDS, AboutPageTemplate, Accordion, ActionButton, Card2 as ActionCard, ActionPalette, ActionTile, ActivationBlock, Alert, AnimatedCounter, AnimatedGraphic, AnimatedReveal, ArticleSection, Aside, AssetPicker, AuthLayout, Avatar, Badge, BehaviorView, BiologyCanvas, BloomQuizBlock, BookChapterView, BookCoverPage, BookNavBar, BookTableOfContents, BookViewer, Box, BranchingLogicBuilder, Breadcrumb, BuilderBoard, Button, ButtonGroup, CTABanner, CalendarGrid, Canvas2D, CanvasEffect, Card, CardBattlerBoard, CardBody, CardContent, CardFooter, CardGrid, CardHeader, CardTitle, Carousel, CaseStudyCard, CaseStudyOrganism, Center, Chart, ChartLegend, ChatBar, Checkbox, ChemistryCanvas, ChoiceButton, ClassifierBoard, Coachmark, CodeBlock, CodeRunnerPanel, CollapsibleSection, ComboCounter, CommunityLinks, ConditionalWrapper, ConfettiEffect, ConfirmDialog, ConnectionBlock, Container, ContentRenderer, ContentSection, ControlButton, ControlGrid, CounterTemplate, DEFAULT_LIKERT_OPTIONS, DEFAULT_MATRIX_COLUMNS, DEFAULT_SLOTS, DIAMOND_TOP_Y, DamageNumber, DashboardGrid, DashboardLayout, DataGrid, DataList, DataTable, DateRangePicker, DateRangeSelector, DayCell, DebuggerBoard, DetailPanel, Dialog, DialogueBubble, Divider, DocBreadcrumb, DocPagination, DocSearch, DocSidebar, DocTOC, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, ELEMENT_SELECTED_EVENT, EMPTY_EFFECT_STATE, EdgeDecoration, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EmptyState, 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, GameCard, GameHud, GameIcon, GameMenu, GameShell, GameTemplate, GenericAppTemplate, GeometricPattern, GradientDivider, GraphCanvas, GraphView, Grid, GridPicker, HStack, Header, HealthBar, HeroOrganism, HeroSection, I18nProvider, IDENTITY_BOOK_FIELDS, Icon, IconPicker, InfiniteScrollSentinel, Input, InputGroup, InstallBox, InventoryGrid, ItemSlot, JazariStateMachine, JsonTreeEditor, Label, LandingPageTemplate, LawReferenceTooltip, LearningCanvas, Lightbox, LikertScale, LineChart2 as LineChart, List3 as List, LoadingState, MapView, MarkdownContent, MarketingFooter, MarketingStatCard, MasterDetail, MasterDetailLayout, MathCanvas, MatrixQuestion, MediaGallery, Menu, Meter, MiniMap, Modal, ModalSlot, ModuleCard, Navigation, NegotiatorBoard, NodeSlotEditor, NotifyListener, NumberStepper, ObjectRulePanel, OnboardingSpotlight, OptionConstraintGroup, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, Pagination, PatternTile, PhysicsCanvas, Popover, PositionedCanvas, PricingCard, PricingGrid, PricingOrganism, PricingPageTemplate, ProgressBar, ProgressDots, PropertyInspector, PullQuote, PullToRefresh, QrScanner, QuizBlock, Radio, RangeSlider, ReflectionBlock, RelationSelect, RepeatableFormSection, ReplyTree, ResourceBar, ResourceCounter, RichBlockEditor, RuleEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, 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, SubagentTracePanel, SvgBranch, SvgConnection, SvgFlow, SvgGrid, SvgLobe, SvgMesh, SvgMorph, SvgNode, SvgPulse, SvgRing, SvgShield, SvgStack, SwipeableRow, Switch, TERRAIN_COLORS, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, TableView, Tabs, TagCloud, TagInput, TeamCard, TeamOrganism, TerrainPalette, TextHighlight, Textarea, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TraitFrame, TraitSlot, TraitStateViewer, TransitionArrow, TrendIndicator, TurnIndicator, TypewriterText, Typography, UISlotComponent, UISlotRenderer, UploadDropZone, VStack, VariablePanel, VersionDiff, ViolationAlert, VisualNovelBoard, VoteStack, WaypointMarker, WizardContainer, WizardNavigation, WizardProgress, boardEntity, bool, calculateAttackTargets, calculateValidMoves, cn, createCombatPresets, createInitialGameState, createTranslate, createUnitAnimationState, drawEffectState, drawSprite, drawTintedImage, getAllEffectSpriteUrls, getCurrentFrame, getTileDimensions, hasActiveEffects, inferDirection, isoToScreen, makeAsset, makeAssetMap, mapBookData, num, objAvailableActions, objAvailableEvents, objCurrentState, objIcon, objId, objMaxRules, objName, objRules, objStates, parseEditFocus, parseLessonSegments, parseMarkdownWithCodeBlocks, parseQueryBinding, pendulum, projectileMotion, resolveFieldMap, resolveFrame, resolveSheetDirection, rows, screenToIso, spawnOverlay, spawnParticles, spawnSequence, springOscillator, str, tickAnimationState, toCodeLanguage, transitionAnimation, unitHealth, unitPosition, unitTeam, updateEffectState, useAgentChat, useAnchorRect, useAuthContext, useCamera, useCanvasEffects, useCanvasGestures, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useDragReorder, useDraggable, useDropZone, useEmitEvent, useEventBus, useEventListener, useExtensions, useFileEditor, useFileSystem, useGameAudio, useGameAudioContext, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useImageCache, useInfiniteScroll, useLongPress, useOrbitalHistory, usePreview, usePullToRefresh, useQuerySingleton, useRenderInterpolation, useSwipeGesture, useTapReveal, useTraitListens, useTranslate128 as useTranslate, useUIEvents, useUISlotManager, useUnitSpriteAtlas, useValidation, vec2 };
52909
+ export { ALL_PRESETS, ALMADAR_DND_MIME, AR_BOOK_FIELDS, AboutPageTemplate, Accordion, ActionButton, Card2 as ActionCard, ActionPalette, ActionTile, ActivationBlock, Alert, AnimatedCounter, AnimatedGraphic, AnimatedReveal, ArticleSection, Aside, AssetPicker, AuthLayout, Avatar, Badge, BehaviorView, BiologyCanvas, BloomQuizBlock, BookChapterView, BookCoverPage, BookNavBar, BookTableOfContents, BookViewer, Box, BranchingLogicBuilder, Breadcrumb, BuilderBoard, Button, ButtonGroup, CTABanner, CalendarGrid, Canvas2D, CanvasEffect, Card, CardBody, CardContent, CardFooter, CardGrid, CardHeader, CardTitle, Carousel, CaseStudyCard, CaseStudyOrganism, Center, Chart, ChartLegend, ChatBar, Checkbox, ChemistryCanvas, ChoiceButton, ClassifierBoard, Coachmark, CodeBlock, CodeRunnerPanel, CollapsibleSection, ComboCounter, CommunityLinks, ConditionalWrapper, ConfettiEffect, ConfirmDialog, ConnectionBlock, Container, ContentRenderer, ContentSection, ControlButton, ControlGrid, CounterTemplate, DEFAULT_LIKERT_OPTIONS, DEFAULT_MATRIX_COLUMNS, DEFAULT_SLOTS, DIAMOND_TOP_Y, DamageNumber, DashboardGrid, DashboardLayout, DataGrid, DataList, DataTable, DateRangePicker, DateRangeSelector, DayCell, DebuggerBoard, DetailPanel, Dialog, DialogueBubble, Divider, DocBreadcrumb, DocPagination, DocSearch, DocSidebar, DocTOC, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, ELEMENT_SELECTED_EVENT, EMPTY_EFFECT_STATE, EdgeDecoration, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EmptyState, 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, GameCard, GameHud, GameIcon, GameMenu, GameShell, GameTemplate, GenericAppTemplate, GeometricPattern, GradientDivider, GraphCanvas, GraphView, Grid, GridPicker, HStack, Header, HealthBar, HeroOrganism, HeroSection, I18nProvider, IDENTITY_BOOK_FIELDS, Icon, IconPicker, InfiniteScrollSentinel, Input, InputGroup, InstallBox, InventoryGrid, ItemSlot, JazariStateMachine, JsonTreeEditor, Label, LandingPageTemplate, LawReferenceTooltip, LearningCanvas, Lightbox, LikertScale, LineChart2 as LineChart, List3 as List, LoadingState, MapView, MarkdownContent, MarketingFooter, MarketingStatCard, MasterDetail, MasterDetailLayout, MathCanvas, MatrixQuestion, MediaGallery, Menu, Meter, MiniMap, Modal, ModalSlot, ModuleCard, Navigation, NegotiatorBoard, NodeSlotEditor, NotifyListener, NumberStepper, ObjectRulePanel, OnboardingSpotlight, OptionConstraintGroup, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, Pagination, PatternTile, PhysicsCanvas, Popover, PositionedCanvas, PricingCard, PricingGrid, PricingOrganism, PricingPageTemplate, ProgressBar, ProgressDots, PropertyInspector, PullQuote, PullToRefresh, QrScanner, QuizBlock, Radio, RangeSlider, ReflectionBlock, RelationSelect, RepeatableFormSection, ReplyTree, ResourceBar, ResourceCounter, RichBlockEditor, RuleEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, 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, SubagentTracePanel, SvgBranch, SvgConnection, SvgFlow, SvgGrid, SvgLobe, SvgMesh, SvgMorph, SvgNode, SvgPulse, SvgRing, SvgShield, SvgStack, SwipeableRow, Switch, TERRAIN_COLORS, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, TableView, Tabs, TagCloud, TagInput, TeamCard, TeamOrganism, TerrainPalette, TextHighlight, Textarea, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TraitFrame, TraitSlot, TraitStateViewer, TransitionArrow, TrendIndicator, TurnIndicator, TypewriterText, Typography, UISlotComponent, UISlotRenderer, UploadDropZone, VStack, VariablePanel, VersionDiff, ViolationAlert, VoteStack, WaypointMarker, WizardContainer, WizardNavigation, WizardProgress, boardEntity, bool, calculateAttackTargets, calculateValidMoves, cn, createCombatPresets, createInitialGameState, createTranslate, createUnitAnimationState, drawEffectState, drawSprite, drawTintedImage, getAllEffectSpriteUrls, getCurrentFrame, getTileDimensions, hasActiveEffects, inferDirection, isoToScreen, makeAsset, makeAssetMap, mapBookData, num, objAvailableActions, objAvailableEvents, objCurrentState, objIcon, objId, objMaxRules, objName, objRules, objStates, parseEditFocus, parseLessonSegments, parseMarkdownWithCodeBlocks, parseQueryBinding, pendulum, projectileMotion, resolveFieldMap, resolveFrame, resolveSheetDirection, rows, screenToIso, spawnOverlay, spawnParticles, spawnSequence, springOscillator, str, tickAnimationState, toCodeLanguage, transitionAnimation, unitHealth, unitPosition, unitTeam, updateEffectState, useAgentChat, useAnchorRect, useAuthContext, useCamera, useCanvasEffects, useCanvasGestures, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useDragReorder, useDraggable, useDropZone, useEmitEvent, useEventBus, useEventListener, useExtensions, useFileEditor, useFileSystem, useGameAudio, useGameAudioContext, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useImageCache, useInfiniteScroll, useLongPress, useOrbitalHistory, usePreview, usePullToRefresh, useQuerySingleton, useRenderInterpolation, useSwipeGesture, useTapReveal, useTraitListens, useTranslate127 as useTranslate, useUIEvents, useUISlotManager, useUnitSpriteAtlas, useValidation, vec2 };