@almadar/ui 2.23.0 → 2.24.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,5 +1,5 @@
1
- import * as React86 from 'react';
2
- import React86__default, { useCallback, createContext, useState, useRef, useLayoutEffect, useEffect, lazy, useContext, useMemo, useId, Suspense, useSyncExternalStore } from 'react';
1
+ import * as React88 from 'react';
2
+ import React88__default, { useCallback, createContext, useState, useRef, useLayoutEffect, useEffect, lazy, useContext, useMemo, useId, Suspense, useSyncExternalStore } from 'react';
3
3
  import { clsx } from 'clsx';
4
4
  import { twMerge } from 'tailwind-merge';
5
5
  import * as LucideIcons from 'lucide-react';
@@ -208,9 +208,9 @@ var variantStyles = {
208
208
  "active:scale-[var(--active-scale)] active:shadow-[var(--shadow-active)]"
209
209
  ].join(" "),
210
210
  secondary: [
211
- "bg-[var(--color-secondary)] text-[var(--color-secondary-foreground)]",
212
- "border-[length:var(--border-width-thin)] border-[var(--color-border)]",
213
- "hover:bg-[var(--color-secondary-hover)]",
211
+ "bg-transparent text-[var(--color-accent)]",
212
+ "border-[length:var(--border-width)] border-[var(--color-accent)]",
213
+ "hover:bg-[var(--color-accent)] hover:text-white",
214
214
  "active:scale-[var(--active-scale)]"
215
215
  ].join(" "),
216
216
  ghost: [
@@ -268,7 +268,7 @@ function resolveIconProp(value, sizeClass) {
268
268
  const IconComp = value;
269
269
  return /* @__PURE__ */ jsx(IconComp, { className: sizeClass });
270
270
  }
271
- if (React86__default.isValidElement(value)) {
271
+ if (React88__default.isValidElement(value)) {
272
272
  return value;
273
273
  }
274
274
  if (typeof value === "object" && value !== null && "render" in value) {
@@ -277,7 +277,7 @@ function resolveIconProp(value, sizeClass) {
277
277
  }
278
278
  return value;
279
279
  }
280
- var Button = React86__default.forwardRef(
280
+ var Button = React88__default.forwardRef(
281
281
  ({
282
282
  className,
283
283
  variant = "primary",
@@ -335,7 +335,7 @@ var Button = React86__default.forwardRef(
335
335
  }
336
336
  );
337
337
  Button.displayName = "Button";
338
- var Input = React86__default.forwardRef(
338
+ var Input = React88__default.forwardRef(
339
339
  ({
340
340
  className,
341
341
  inputType,
@@ -447,7 +447,7 @@ var Input = React86__default.forwardRef(
447
447
  }
448
448
  );
449
449
  Input.displayName = "Input";
450
- var Label = React86__default.forwardRef(
450
+ var Label = React88__default.forwardRef(
451
451
  ({ className, required, children, ...props }, ref) => {
452
452
  return /* @__PURE__ */ jsxs(
453
453
  "label",
@@ -467,7 +467,7 @@ var Label = React86__default.forwardRef(
467
467
  }
468
468
  );
469
469
  Label.displayName = "Label";
470
- var Textarea = React86__default.forwardRef(
470
+ var Textarea = React88__default.forwardRef(
471
471
  ({ className, error, ...props }, ref) => {
472
472
  return /* @__PURE__ */ jsx(
473
473
  "textarea",
@@ -490,7 +490,7 @@ var Textarea = React86__default.forwardRef(
490
490
  }
491
491
  );
492
492
  Textarea.displayName = "Textarea";
493
- var Select = React86__default.forwardRef(
493
+ var Select = React88__default.forwardRef(
494
494
  ({ className, options, placeholder, error, ...props }, ref) => {
495
495
  return /* @__PURE__ */ jsxs("div", { className: "relative", children: [
496
496
  /* @__PURE__ */ jsxs(
@@ -526,7 +526,7 @@ var Select = React86__default.forwardRef(
526
526
  }
527
527
  );
528
528
  Select.displayName = "Select";
529
- var Checkbox = React86__default.forwardRef(
529
+ var Checkbox = React88__default.forwardRef(
530
530
  ({ className, label, id, ...props }, ref) => {
531
531
  const inputId = id || `checkbox-${Math.random().toString(36).substr(2, 9)}`;
532
532
  return /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
@@ -600,7 +600,7 @@ var shadowStyles = {
600
600
  md: "shadow-[var(--shadow-main)]",
601
601
  lg: "shadow-[var(--shadow-lg)]"
602
602
  };
603
- var Card = React86__default.forwardRef(
603
+ var Card = React88__default.forwardRef(
604
604
  ({
605
605
  className,
606
606
  variant = "bordered",
@@ -636,9 +636,9 @@ var Card = React86__default.forwardRef(
636
636
  }
637
637
  );
638
638
  Card.displayName = "Card";
639
- var CardHeader = React86__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
639
+ var CardHeader = React88__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
640
640
  CardHeader.displayName = "CardHeader";
641
- var CardTitle = React86__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
641
+ var CardTitle = React88__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
642
642
  "h3",
643
643
  {
644
644
  ref,
@@ -651,11 +651,11 @@ var CardTitle = React86__default.forwardRef(({ className, ...props }, ref) => /*
651
651
  }
652
652
  ));
653
653
  CardTitle.displayName = "CardTitle";
654
- var CardContent = React86__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
654
+ var CardContent = React88__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
655
655
  CardContent.displayName = "CardContent";
656
656
  var CardBody = CardContent;
657
657
  CardBody.displayName = "CardBody";
658
- var CardFooter = React86__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
658
+ var CardFooter = React88__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
659
659
  "div",
660
660
  {
661
661
  ref,
@@ -701,7 +701,7 @@ var sizeStyles2 = {
701
701
  md: "px-2.5 py-1 text-sm",
702
702
  lg: "px-3 py-1.5 text-base"
703
703
  };
704
- var Badge = React86__default.forwardRef(
704
+ var Badge = React88__default.forwardRef(
705
705
  ({ className, variant = "default", size = "sm", amount, label, icon, children, ...props }, ref) => {
706
706
  const iconSizes2 = { sm: "w-3 h-3", md: "w-3.5 h-3.5", lg: "w-4 h-4" };
707
707
  const resolvedIcon = typeof icon === "string" ? (() => {
@@ -734,7 +734,7 @@ var sizeStyles3 = {
734
734
  md: "h-6 w-6",
735
735
  lg: "h-8 w-8"
736
736
  };
737
- var Spinner = React86__default.forwardRef(
737
+ var Spinner = React88__default.forwardRef(
738
738
  ({ className, size = "md", ...props }, ref) => {
739
739
  return /* @__PURE__ */ jsx(
740
740
  "div",
@@ -999,7 +999,7 @@ var positionStyles = {
999
999
  fixed: "fixed",
1000
1000
  sticky: "sticky"
1001
1001
  };
1002
- var Box = React86__default.forwardRef(
1002
+ var Box = React88__default.forwardRef(
1003
1003
  ({
1004
1004
  padding,
1005
1005
  paddingX,
@@ -1346,7 +1346,7 @@ var ProgressBar = ({
1346
1346
  return null;
1347
1347
  };
1348
1348
  ProgressBar.displayName = "ProgressBar";
1349
- var Radio = React86__default.forwardRef(
1349
+ var Radio = React88__default.forwardRef(
1350
1350
  ({
1351
1351
  label,
1352
1352
  helperText,
@@ -1450,7 +1450,7 @@ var Radio = React86__default.forwardRef(
1450
1450
  }
1451
1451
  );
1452
1452
  Radio.displayName = "Radio";
1453
- var Switch = React86.forwardRef(
1453
+ var Switch = React88.forwardRef(
1454
1454
  ({
1455
1455
  checked,
1456
1456
  defaultChecked = false,
@@ -1461,10 +1461,10 @@ var Switch = React86.forwardRef(
1461
1461
  name,
1462
1462
  className
1463
1463
  }, ref) => {
1464
- const [isChecked, setIsChecked] = React86.useState(
1464
+ const [isChecked, setIsChecked] = React88.useState(
1465
1465
  checked !== void 0 ? checked : defaultChecked
1466
1466
  );
1467
- React86.useEffect(() => {
1467
+ React88.useEffect(() => {
1468
1468
  if (checked !== void 0) {
1469
1469
  setIsChecked(checked);
1470
1470
  }
@@ -2258,8 +2258,8 @@ var LawReferenceTooltip = ({
2258
2258
  position = "top",
2259
2259
  className
2260
2260
  }) => {
2261
- const [isVisible, setIsVisible] = React86__default.useState(false);
2262
- const timeoutRef = React86__default.useRef(null);
2261
+ const [isVisible, setIsVisible] = React88__default.useState(false);
2262
+ const timeoutRef = React88__default.useRef(null);
2263
2263
  const handleMouseEnter = () => {
2264
2264
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
2265
2265
  timeoutRef.current = setTimeout(() => setIsVisible(true), 200);
@@ -2268,7 +2268,7 @@ var LawReferenceTooltip = ({
2268
2268
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
2269
2269
  setIsVisible(false);
2270
2270
  };
2271
- React86__default.useEffect(() => {
2271
+ React88__default.useEffect(() => {
2272
2272
  return () => {
2273
2273
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
2274
2274
  };
@@ -2456,7 +2456,7 @@ var sizeStyles5 = {
2456
2456
  md: "w-2.5 h-2.5",
2457
2457
  lg: "w-3 h-3"
2458
2458
  };
2459
- var StatusDot = React86__default.forwardRef(
2459
+ var StatusDot = React88__default.forwardRef(
2460
2460
  ({ className, status = "offline", pulse = false, size = "md", label, ...props }, ref) => {
2461
2461
  return /* @__PURE__ */ jsx(
2462
2462
  "span",
@@ -2503,7 +2503,7 @@ var iconMap = {
2503
2503
  down: TrendingDown,
2504
2504
  flat: ArrowRight
2505
2505
  };
2506
- var TrendIndicator = React86__default.forwardRef(
2506
+ var TrendIndicator = React88__default.forwardRef(
2507
2507
  ({
2508
2508
  className,
2509
2509
  value,
@@ -2562,7 +2562,7 @@ var thumbSizes = {
2562
2562
  md: "w-4 h-4",
2563
2563
  lg: "w-5 h-5"
2564
2564
  };
2565
- var RangeSlider = React86__default.forwardRef(
2565
+ var RangeSlider = React88__default.forwardRef(
2566
2566
  ({
2567
2567
  className,
2568
2568
  min = 0,
@@ -3093,7 +3093,7 @@ var paddingClasses = {
3093
3093
  md: "py-16",
3094
3094
  lg: "py-24"
3095
3095
  };
3096
- var ContentSection = React86__default.forwardRef(
3096
+ var ContentSection = React88__default.forwardRef(
3097
3097
  ({ children, background = "default", padding = "lg", id, className }, ref) => {
3098
3098
  return /* @__PURE__ */ jsx(
3099
3099
  Box,
@@ -3106,12 +3106,494 @@ var ContentSection = React86__default.forwardRef(
3106
3106
  paddingClasses[padding],
3107
3107
  className
3108
3108
  ),
3109
- children: /* @__PURE__ */ jsx(Box, { className: "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8", children })
3109
+ children
3110
3110
  }
3111
3111
  );
3112
3112
  }
3113
3113
  );
3114
3114
  ContentSection.displayName = "ContentSection";
3115
+ var PI = Math.PI;
3116
+ function lineIntersection(x1, y1, x2, y2, x3, y3, x4, y4) {
3117
+ const denom = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);
3118
+ if (Math.abs(denom) < 1e-10) return [(x1 + x3) / 2, (y1 + y3) / 2];
3119
+ const t = ((x1 - x3) * (y3 - y4) - (y1 - y3) * (x3 - x4)) / denom;
3120
+ return [x1 + t * (x2 - x1), y1 + t * (y2 - y1)];
3121
+ }
3122
+ function f(n) {
3123
+ return n.toFixed(3);
3124
+ }
3125
+ function picStar(cx, cy, R, n, theta, extent) {
3126
+ const verts = [];
3127
+ for (let k = 0; k < n; k++) {
3128
+ const angle = PI / n + k * (2 * PI) / n;
3129
+ verts.push([cx + R * Math.cos(angle), cy + R * Math.sin(angle)]);
3130
+ }
3131
+ const mids = [];
3132
+ for (let k = 0; k < n; k++) {
3133
+ const next = (k + 1) % n;
3134
+ mids.push([(verts[k][0] + verts[next][0]) / 2, (verts[k][1] + verts[next][1]) / 2]);
3135
+ }
3136
+ const innerPts = [];
3137
+ for (let k = 0; k < n; k++) {
3138
+ const next = (k + 1) % n;
3139
+ const M1 = mids[k];
3140
+ const M2 = mids[next];
3141
+ const edx1 = verts[(k + 1) % n][0] - verts[k][0];
3142
+ const edy1 = verts[(k + 1) % n][1] - verts[k][1];
3143
+ const elen1 = Math.sqrt(edx1 * edx1 + edy1 * edy1);
3144
+ const tx1 = edx1 / elen1;
3145
+ const ty1 = edy1 / elen1;
3146
+ const r1x = tx1 * Math.cos(theta) + ty1 * Math.sin(theta);
3147
+ const r1y = -tx1 * Math.sin(theta) + ty1 * Math.cos(theta);
3148
+ const edx2 = verts[(next + 1) % n][0] - verts[next][0];
3149
+ const edy2 = verts[(next + 1) % n][1] - verts[next][1];
3150
+ const elen2 = Math.sqrt(edx2 * edx2 + edy2 * edy2);
3151
+ const tx2 = edx2 / elen2;
3152
+ const ty2 = edy2 / elen2;
3153
+ const bTheta = PI - theta;
3154
+ const r2x = tx2 * Math.cos(bTheta) + ty2 * Math.sin(bTheta);
3155
+ const r2y = -tx2 * Math.sin(bTheta) + ty2 * Math.cos(bTheta);
3156
+ const P = lineIntersection(
3157
+ M1[0],
3158
+ M1[1],
3159
+ M1[0] + r1x * extent,
3160
+ M1[1] + r1y * extent,
3161
+ M2[0],
3162
+ M2[1],
3163
+ M2[0] + r2x * extent,
3164
+ M2[1] + r2y * extent
3165
+ );
3166
+ innerPts.push(P);
3167
+ }
3168
+ const starPath = mids.map((m, k) => {
3169
+ const inner = innerPts[k];
3170
+ const nextMid = mids[(k + 1) % n];
3171
+ return `M ${f(m[0])},${f(m[1])} L ${f(inner[0])},${f(inner[1])} L ${f(nextMid[0])},${f(nextMid[1])}`;
3172
+ }).join(" ");
3173
+ return { starPath, mids, verts };
3174
+ }
3175
+ function Star8({ size, color, strokeWidth }) {
3176
+ const s = size;
3177
+ const cx = s / 2;
3178
+ const cy = s / 2;
3179
+ const a = s / (1 + Math.SQRT2);
3180
+ const R = a / (2 * Math.sin(PI / 8));
3181
+ const theta = 67.5 * PI / 180;
3182
+ const { starPath, mids } = picStar(cx, cy, R, 8, theta, s);
3183
+ const corners = [[0, 0], [s, 0], [s, s], [0, s]];
3184
+ const crossPaths = [];
3185
+ for (const [cornX, cornY] of corners) {
3186
+ const dists = mids.map((m, i) => ({ i, d: Math.hypot(m[0] - cornX, m[1] - cornY) }));
3187
+ dists.sort((a2, b) => a2.d - b.d);
3188
+ const m1 = mids[dists[0].i];
3189
+ const m2 = mids[dists[1].i];
3190
+ crossPaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(cornX)},${f(cornY)} L ${f(m2[0])},${f(m2[1])}`);
3191
+ }
3192
+ return /* @__PURE__ */ jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
3193
+ /* @__PURE__ */ jsx("path", { d: starPath }),
3194
+ crossPaths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i))
3195
+ ] });
3196
+ }
3197
+ function Star6({ size, color, strokeWidth }) {
3198
+ const w = size;
3199
+ const h = size * (2 / Math.sqrt(3));
3200
+ const cx = w / 2;
3201
+ const cy = h / 2;
3202
+ const a = w / Math.sqrt(3);
3203
+ const R = a;
3204
+ const theta = 60 * PI / 180;
3205
+ const { starPath, mids, verts } = picStar(cx, cy, R, 6, theta, w);
3206
+ const triPaths = [];
3207
+ for (let k = 0; k < 6; k++) {
3208
+ const v = verts[k];
3209
+ const m1 = mids[(k + 5) % 6];
3210
+ const m2 = mids[k];
3211
+ triPaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(v[0])},${f(v[1])} L ${f(m2[0])},${f(m2[1])}`);
3212
+ }
3213
+ return /* @__PURE__ */ jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
3214
+ /* @__PURE__ */ jsx("path", { d: starPath }),
3215
+ triPaths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i))
3216
+ ] });
3217
+ }
3218
+ function Khatam({ size, color, strokeWidth }) {
3219
+ const s = size;
3220
+ const cx = s / 2;
3221
+ const cy = s / 2;
3222
+ const a = s / (1 + Math.SQRT2);
3223
+ const R = a / (2 * Math.sin(PI / 8));
3224
+ const theta = 72 * PI / 180;
3225
+ const { starPath, mids } = picStar(cx, cy, R, 8, theta, s);
3226
+ const corners = [[0, 0], [s, 0], [s, s], [0, s]];
3227
+ const crossPaths = [];
3228
+ for (const [cornX, cornY] of corners) {
3229
+ const dists = mids.map((m, i) => ({ i, d: Math.hypot(m[0] - cornX, m[1] - cornY) }));
3230
+ dists.sort((a2, b) => a2.d - b.d);
3231
+ const m1 = mids[dists[0].i];
3232
+ const m2 = mids[dists[1].i];
3233
+ crossPaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(cornX)},${f(cornY)} L ${f(m2[0])},${f(m2[1])}`);
3234
+ }
3235
+ const orbitR = R * 0.35;
3236
+ return /* @__PURE__ */ jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
3237
+ /* @__PURE__ */ jsx("path", { d: starPath }),
3238
+ crossPaths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)),
3239
+ /* @__PURE__ */ jsx("circle", { cx, cy, r: orbitR, opacity: "0.4" })
3240
+ ] });
3241
+ }
3242
+ function RosetteDouble({ size, color, strokeWidth }) {
3243
+ const s = size;
3244
+ const cx = s / 2;
3245
+ const cy = s / 2;
3246
+ const a = s / (1 + Math.SQRT2);
3247
+ const Router = a / (2 * Math.sin(PI / 8));
3248
+ const Rinner = Router * 0.45;
3249
+ const outer = picStar(cx, cy, Router, 8, 72 * PI / 180, s);
3250
+ const inner = picStar(cx, cy, Rinner, 8, 68 * PI / 180, s);
3251
+ const corners = [[0, 0], [s, 0], [s, s], [0, s]];
3252
+ const crossPaths = [];
3253
+ for (const [cornX, cornY] of corners) {
3254
+ const dists = outer.mids.map((m, i) => ({ i, d: Math.hypot(m[0] - cornX, m[1] - cornY) }));
3255
+ dists.sort((a2, b) => a2.d - b.d);
3256
+ const m1 = outer.mids[dists[0].i];
3257
+ const m2 = outer.mids[dists[1].i];
3258
+ crossPaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(cornX)},${f(cornY)} L ${f(m2[0])},${f(m2[1])}`);
3259
+ }
3260
+ const connectors = [];
3261
+ for (let k = 0; k < 8; k++) {
3262
+ const om = outer.mids[k];
3263
+ const im = inner.mids[k];
3264
+ connectors.push(`M ${f(im[0])},${f(im[1])} L ${f(om[0])},${f(om[1])}`);
3265
+ }
3266
+ return /* @__PURE__ */ jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
3267
+ /* @__PURE__ */ jsx("path", { d: outer.starPath }),
3268
+ /* @__PURE__ */ jsx("path", { d: inner.starPath, opacity: "0.7" }),
3269
+ crossPaths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, `c${i}`)),
3270
+ connectors.map((d, i) => /* @__PURE__ */ jsx("path", { d, opacity: "0.4" }, `n${i}`))
3271
+ ] });
3272
+ }
3273
+ function RosetteFilled({ size, color, strokeWidth }) {
3274
+ const s = size;
3275
+ const cx = s / 2;
3276
+ const cy = s / 2;
3277
+ const a = s / (1 + Math.SQRT2);
3278
+ const Router = a / (2 * Math.sin(PI / 8));
3279
+ const theta = 72 * PI / 180;
3280
+ const outer = picStar(cx, cy, Router, 8, theta, s);
3281
+ const Rinner = Router * 0.35;
3282
+ const inner6 = picStar(cx, cy, Rinner, 6, 60 * PI / 180, s);
3283
+ const corners = [[0, 0], [s, 0], [s, s], [0, s]];
3284
+ const crossPaths = [];
3285
+ for (const [cornX, cornY] of corners) {
3286
+ const dists = outer.mids.map((m, i) => ({ i, d: Math.hypot(m[0] - cornX, m[1] - cornY) }));
3287
+ dists.sort((a2, b) => a2.d - b.d);
3288
+ const m1 = outer.mids[dists[0].i];
3289
+ const m2 = outer.mids[dists[1].i];
3290
+ crossPaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(cornX)},${f(cornY)} L ${f(m2[0])},${f(m2[1])}`);
3291
+ }
3292
+ const triPaths = [];
3293
+ for (let k = 0; k < 6; k++) {
3294
+ const v = inner6.verts[k];
3295
+ const m1 = inner6.mids[(k + 5) % 6];
3296
+ const m2 = inner6.mids[k];
3297
+ triPaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(v[0])},${f(v[1])} L ${f(m2[0])},${f(m2[1])}`);
3298
+ }
3299
+ const orbitR = Router * 0.35;
3300
+ return /* @__PURE__ */ jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
3301
+ /* @__PURE__ */ jsx("path", { d: outer.starPath }),
3302
+ crossPaths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, `c${i}`)),
3303
+ /* @__PURE__ */ jsx("circle", { cx, cy, r: orbitR, opacity: "0.3" }),
3304
+ /* @__PURE__ */ jsx("path", { d: inner6.starPath, opacity: "0.6" }),
3305
+ triPaths.map((d, i) => /* @__PURE__ */ jsx("path", { d, opacity: "0.5" }, `t${i}`))
3306
+ ] });
3307
+ }
3308
+ function Star10({ size, color, strokeWidth }) {
3309
+ const s = size;
3310
+ const cx = s / 2;
3311
+ const cy = s / 2;
3312
+ const R = s * 0.42;
3313
+ const theta = 72 * PI / 180;
3314
+ const { starPath, mids, verts } = picStar(cx, cy, R, 10, theta, s);
3315
+ const edgePaths = [];
3316
+ for (let k = 0; k < 10; k++) {
3317
+ const v = verts[k];
3318
+ const m1 = mids[(k + 9) % 10];
3319
+ const m2 = mids[k];
3320
+ edgePaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(v[0])},${f(v[1])} L ${f(m2[0])},${f(m2[1])}`);
3321
+ }
3322
+ return /* @__PURE__ */ jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
3323
+ /* @__PURE__ */ jsx("path", { d: starPath }),
3324
+ edgePaths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i))
3325
+ ] });
3326
+ }
3327
+ function Star12({ size, color, strokeWidth }) {
3328
+ const s = size;
3329
+ const cx = s / 2;
3330
+ const cy = s / 2;
3331
+ const R = s * 0.44;
3332
+ const theta = 75 * PI / 180;
3333
+ const { starPath, mids, verts } = picStar(cx, cy, R, 12, theta, s);
3334
+ const triPaths = [];
3335
+ for (let k = 0; k < 12; k++) {
3336
+ const v = verts[k];
3337
+ const m1 = mids[(k + 11) % 12];
3338
+ const m2 = mids[k];
3339
+ triPaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(v[0])},${f(v[1])} L ${f(m2[0])},${f(m2[1])}`);
3340
+ }
3341
+ return /* @__PURE__ */ jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
3342
+ /* @__PURE__ */ jsx("path", { d: starPath }),
3343
+ triPaths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i))
3344
+ ] });
3345
+ }
3346
+ function Seigaiha({ size, color, strokeWidth }) {
3347
+ const s = size;
3348
+ const r = s / 2;
3349
+ const paths = [];
3350
+ const centers = [
3351
+ [s / 2, s * 0.6],
3352
+ [0, s * 0.1],
3353
+ [s, s * 0.1]
3354
+ ];
3355
+ for (const [cx, cy] of centers) {
3356
+ for (let ring = 1; ring <= 3; ring++) {
3357
+ const cr = r * (ring / 3);
3358
+ paths.push(
3359
+ `M ${f(cx - cr)},${f(cy)} A ${f(cr)} ${f(cr)} 0 0 1 ${f(cx + cr)},${f(cy)}`
3360
+ );
3361
+ }
3362
+ }
3363
+ return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
3364
+ }
3365
+ function GreekKey({ size, color, strokeWidth }) {
3366
+ const s = size;
3367
+ const u = s / 4;
3368
+ const paths = [
3369
+ // Outer frame
3370
+ `M 0,0 L ${f(s)},0`,
3371
+ `M 0,${f(s)} L ${f(s)},${f(s)}`,
3372
+ // Spiral from left
3373
+ `M 0,${f(u)} L ${f(3 * u)},${f(u)} L ${f(3 * u)},${f(3 * u)} L ${f(u)},${f(3 * u)} L ${f(u)},${f(2 * u)} L ${f(2 * u)},${f(2 * u)}`,
3374
+ // Spiral from right (mirrored, offset)
3375
+ `M ${f(s)},${f(3 * u)} L ${f(s - 3 * u)},${f(3 * u)} L ${f(s - 3 * u)},${f(u)} L ${f(s - u)},${f(u)} L ${f(s - u)},${f(2 * u)} L ${f(s - 2 * u)},${f(2 * u)}`,
3376
+ // Vertical connectors at edges
3377
+ `M 0,0 L 0,${f(u)}`,
3378
+ `M ${f(s)},0 L ${f(s)},${f(u)}`,
3379
+ `M 0,${f(3 * u)} L 0,${f(s)}`,
3380
+ `M ${f(s)},${f(3 * u)} L ${f(s)},${f(s)}`
3381
+ ];
3382
+ return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
3383
+ }
3384
+ function CelticKnot({ size, color, strokeWidth }) {
3385
+ const s = size;
3386
+ const q = s / 4;
3387
+ const r = q * 0.9;
3388
+ const paths = [
3389
+ // Band 1: diagonal with curves at crossings
3390
+ `M 0,0 Q ${f(q)},${f(q)} ${f(2 * q)},${f(2 * q)}`,
3391
+ `M ${f(2 * q)},${f(2 * q)} Q ${f(3 * q)},${f(3 * q)} ${f(s)},${f(s)}`,
3392
+ // Band 2: other diagonal
3393
+ `M ${f(s)},0 Q ${f(3 * q)},${f(q)} ${f(2 * q)},${f(2 * q)}`,
3394
+ `M ${f(2 * q)},${f(2 * q)} Q ${f(q)},${f(3 * q)} 0,${f(s)}`,
3395
+ // Outer loops that connect bands at tile edges for continuous weave
3396
+ `M 0,0 Q ${f(-q * 0.3)},${f(2 * q)} 0,${f(s)}`,
3397
+ `M ${f(s)},0 Q ${f(s + q * 0.3)},${f(2 * q)} ${f(s)},${f(s)}`,
3398
+ `M 0,0 Q ${f(2 * q)},${f(-q * 0.3)} ${f(s)},0`,
3399
+ `M 0,${f(s)} Q ${f(2 * q)},${f(s + q * 0.3)} ${f(s)},${f(s)}`,
3400
+ // Inner circle at crossing
3401
+ `M ${f(2 * q + r * 0.3)},${f(2 * q)} A ${f(r * 0.3)} ${f(r * 0.3)} 0 1 1 ${f(2 * q + r * 0.3)},${f(2 * q + 1e-3)}`
3402
+ ];
3403
+ return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
3404
+ }
3405
+ function Kolam({ size, color, strokeWidth }) {
3406
+ const s = size;
3407
+ const u = s / 4;
3408
+ const dotR = s * 0.015;
3409
+ const dots = [];
3410
+ for (let row = 1; row <= 3; row++) {
3411
+ for (let col = 1; col <= 3; col++) {
3412
+ dots.push([col * u, row * u]);
3413
+ }
3414
+ }
3415
+ const curves = [];
3416
+ for (let row = 1; row <= 3; row++) {
3417
+ const y = row * u;
3418
+ for (let col = 1; col < 3; col++) {
3419
+ const x1 = col * u;
3420
+ const x2 = (col + 1) * u;
3421
+ const mx = (x1 + x2) / 2;
3422
+ const bulge = u * 0.4;
3423
+ curves.push(`M ${f(x1)},${f(y)} C ${f(mx)},${f(y - bulge)} ${f(mx)},${f(y - bulge)} ${f(x2)},${f(y)}`);
3424
+ curves.push(`M ${f(x1)},${f(y)} C ${f(mx)},${f(y + bulge)} ${f(mx)},${f(y + bulge)} ${f(x2)},${f(y)}`);
3425
+ }
3426
+ }
3427
+ for (let col = 1; col <= 3; col++) {
3428
+ const x = col * u;
3429
+ for (let row = 1; row < 3; row++) {
3430
+ const y1 = row * u;
3431
+ const y2 = (row + 1) * u;
3432
+ const my = (y1 + y2) / 2;
3433
+ const bulge = u * 0.4;
3434
+ curves.push(`M ${f(x)},${f(y1)} C ${f(x - bulge)},${f(my)} ${f(x - bulge)},${f(my)} ${f(x)},${f(y2)}`);
3435
+ curves.push(`M ${f(x)},${f(y1)} C ${f(x + bulge)},${f(my)} ${f(x + bulge)},${f(my)} ${f(x)},${f(y2)}`);
3436
+ }
3437
+ }
3438
+ for (let k = 1; k <= 3; k++) {
3439
+ curves.push(`M ${f(k * u)},${f(u)} C ${f(k * u)},${f(u * 0.5)} ${f(k * u)},${f(u * 0.5)} ${f(k * u)},0`);
3440
+ curves.push(`M ${f(k * u)},${f(3 * u)} C ${f(k * u)},${f(3.5 * u)} ${f(k * u)},${f(3.5 * u)} ${f(k * u)},${f(s)}`);
3441
+ curves.push(`M ${f(u)},${f(k * u)} C ${f(u * 0.5)},${f(k * u)} ${f(u * 0.5)},${f(k * u)} 0,${f(k * u)}`);
3442
+ curves.push(`M ${f(3 * u)},${f(k * u)} C ${f(3.5 * u)},${f(k * u)} ${f(3.5 * u)},${f(k * u)} ${f(s)},${f(k * u)}`);
3443
+ }
3444
+ return /* @__PURE__ */ jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
3445
+ curves.map((d, i) => /* @__PURE__ */ jsx("path", { d }, `c${i}`)),
3446
+ dots.map(([x, y], i) => /* @__PURE__ */ jsx("circle", { cx: x, cy: y, r: dotR, fill: color, opacity: "0.5" }, `d${i}`))
3447
+ ] });
3448
+ }
3449
+ function Arch({ size, color, strokeWidth }) {
3450
+ const w = size;
3451
+ const h = size * 1.5;
3452
+ const cx = w / 2;
3453
+ const paths = [];
3454
+ for (let ring = 0; ring < 4; ring++) {
3455
+ const scale = 1 - ring * 0.2;
3456
+ const archW = w * 0.48 * scale;
3457
+ const archH = h * 0.7 * scale;
3458
+ const baseY = h * 0.85;
3459
+ const tipY = baseY - archH;
3460
+ const lx = cx - archW;
3461
+ const rx = cx + archW;
3462
+ const offset = archW * 0.3;
3463
+ const lcx = lx + offset;
3464
+ const rdx = cx - lcx;
3465
+ const rdy = baseY - tipY;
3466
+ const radius = Math.sqrt(rdx * rdx + rdy * rdy);
3467
+ paths.push(
3468
+ `M ${f(lx)},${f(baseY)} A ${f(radius)} ${f(radius)} 0 0 1 ${f(cx)},${f(tipY)} A ${f(radius)} ${f(radius)} 0 0 1 ${f(rx)},${f(baseY)}`
3469
+ );
3470
+ if (ring === 0) {
3471
+ paths.push(`M ${f(lx)},${f(baseY)} L ${f(rx)},${f(baseY)}`);
3472
+ }
3473
+ }
3474
+ const innerScale = 1 - 3 * 0.2;
3475
+ const keyR = w * 0.48 * innerScale * 0.35;
3476
+ const keyY = h * 0.85 - h * 0.7 * innerScale * 0.4;
3477
+ paths.push(
3478
+ `M ${f(cx + keyR)},${f(keyY)} A ${f(keyR)} ${f(keyR)} 0 1 1 ${f(cx + keyR)},${f(keyY + 1e-3)}`
3479
+ );
3480
+ const spR = w * 0.15;
3481
+ paths.push(`M 0,0 A ${f(spR)} ${f(spR)} 0 0 0 ${f(spR)},${f(spR)}`);
3482
+ paths.push(`M ${f(w)},0 A ${f(spR)} ${f(spR)} 0 0 1 ${f(w - spR)},${f(spR)}`);
3483
+ return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
3484
+ }
3485
+ function ArabesqueVine({ size, color, strokeWidth }) {
3486
+ const w = size;
3487
+ const h = size * 1.2;
3488
+ const cx = w / 2;
3489
+ const paths = [];
3490
+ const amp = w * 0.3;
3491
+ const segments = 3;
3492
+ const segH = h / segments;
3493
+ for (let i = 0; i < segments; i++) {
3494
+ const y0 = i * segH;
3495
+ const y1 = y0 + segH;
3496
+ const dir = i % 2 === 0 ? 1 : -1;
3497
+ paths.push(
3498
+ `M ${f(cx)},${f(y0)} C ${f(cx + amp * dir)},${f(y0 + segH * 0.33)} ${f(cx - amp * dir)},${f(y0 + segH * 0.66)} ${f(cx)},${f(y1)}`
3499
+ );
3500
+ const branchY = y0 + segH * 0.5;
3501
+ const branchX = cx + amp * dir * 0.15;
3502
+ const tendrilLen = w * 0.25;
3503
+ const tlx = branchX - tendrilLen;
3504
+ const tly = branchY - tendrilLen * 0.4;
3505
+ paths.push(
3506
+ `M ${f(branchX)},${f(branchY)} C ${f(branchX - tendrilLen * 0.5)},${f(branchY - tendrilLen * 0.8)} ${f(tlx - tendrilLen * 0.2)},${f(tly + tendrilLen * 0.3)} ${f(tlx)},${f(tly)}`
3507
+ );
3508
+ paths.push(
3509
+ `M ${f(tlx)},${f(tly)} C ${f(tlx + tendrilLen * 0.3)},${f(tly + tendrilLen * 0.5)} ${f(branchX - tendrilLen * 0.2)},${f(branchY + tendrilLen * 0.3)} ${f(branchX)},${f(branchY)}`
3510
+ );
3511
+ const trx = branchX + tendrilLen;
3512
+ const try_ = branchY + tendrilLen * 0.4;
3513
+ paths.push(
3514
+ `M ${f(branchX)},${f(branchY)} C ${f(branchX + tendrilLen * 0.5)},${f(branchY + tendrilLen * 0.8)} ${f(trx + tendrilLen * 0.2)},${f(try_ - tendrilLen * 0.3)} ${f(trx)},${f(try_)}`
3515
+ );
3516
+ paths.push(
3517
+ `M ${f(trx)},${f(try_)} C ${f(trx - tendrilLen * 0.3)},${f(try_ - tendrilLen * 0.5)} ${f(branchX + tendrilLen * 0.2)},${f(branchY - tendrilLen * 0.3)} ${f(branchX)},${f(branchY)}`
3518
+ );
3519
+ const spiralR = tendrilLen * 0.15;
3520
+ paths.push(
3521
+ `M ${f(tlx)},${f(tly)} A ${f(spiralR)} ${f(spiralR)} 0 1 0 ${f(tlx + spiralR * 2)},${f(tly)}`
3522
+ );
3523
+ paths.push(
3524
+ `M ${f(trx)},${f(try_)} A ${f(spiralR)} ${f(spiralR)} 0 1 1 ${f(trx - spiralR * 2)},${f(try_)}`
3525
+ );
3526
+ }
3527
+ return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
3528
+ }
3529
+ function ArabesqueNet({ size, color, strokeWidth }) {
3530
+ const s = size;
3531
+ const cells = 4;
3532
+ const cellW = s / cells;
3533
+ const cellH = s / cells;
3534
+ const paths = [];
3535
+ for (let row = 0; row < cells; row++) {
3536
+ for (let col = 0; col < cells; col++) {
3537
+ const cx = col * cellW + cellW / 2;
3538
+ const cy = row * cellH + cellH / 2;
3539
+ const hw = cellW * 0.5;
3540
+ const hh = cellH * 0.5;
3541
+ const bulge = cellW * 0.25;
3542
+ paths.push(
3543
+ `M ${f(cx)},${f(cy - hh)} Q ${f(cx + bulge)},${f(cy - bulge)} ${f(cx + hw)},${f(cy)}`
3544
+ );
3545
+ paths.push(
3546
+ `M ${f(cx + hw)},${f(cy)} Q ${f(cx + bulge)},${f(cy + bulge)} ${f(cx)},${f(cy + hh)}`
3547
+ );
3548
+ paths.push(
3549
+ `M ${f(cx)},${f(cy + hh)} Q ${f(cx - bulge)},${f(cy + bulge)} ${f(cx - hw)},${f(cy)}`
3550
+ );
3551
+ paths.push(
3552
+ `M ${f(cx - hw)},${f(cy)} Q ${f(cx - bulge)},${f(cy - bulge)} ${f(cx)},${f(cy - hh)}`
3553
+ );
3554
+ }
3555
+ }
3556
+ return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
3557
+ }
3558
+ var VARIANT_MAP = {
3559
+ "star8": Star8,
3560
+ "star6": Star6,
3561
+ "khatam": Khatam,
3562
+ "star10": Star10,
3563
+ "star12": Star12,
3564
+ "rosette-double": RosetteDouble,
3565
+ "rosette-filled": RosetteFilled,
3566
+ "seigaiha": Seigaiha,
3567
+ "greek-key": GreekKey,
3568
+ "celtic-knot": CelticKnot,
3569
+ "kolam": Kolam,
3570
+ "arch": Arch,
3571
+ "arabesque-vine": ArabesqueVine,
3572
+ "arabesque-net": ArabesqueNet
3573
+ };
3574
+ var PatternTile = ({
3575
+ variant = "star8",
3576
+ size = 60,
3577
+ color = "var(--color-primary)",
3578
+ strokeWidth = 0.5,
3579
+ className
3580
+ }) => {
3581
+ const Variant = VARIANT_MAP[variant];
3582
+ return /* @__PURE__ */ jsx("g", { className, children: /* @__PURE__ */ jsx(Variant, { size, color, strokeWidth }) });
3583
+ };
3584
+ PatternTile.displayName = "PatternTile";
3585
+ function getTileDimensions(variant, size) {
3586
+ if (variant === "star6") {
3587
+ return { width: size, height: size * (2 / Math.sqrt(3)) };
3588
+ }
3589
+ if (variant === "arch") {
3590
+ return { width: size, height: size * 1.5 };
3591
+ }
3592
+ if (variant === "arabesque-vine") {
3593
+ return { width: size, height: size * 1.2 };
3594
+ }
3595
+ return { width: size, height: size };
3596
+ }
3115
3597
  var heartIcon = (filled, size) => /* @__PURE__ */ jsx(
3116
3598
  "svg",
3117
3599
  {
@@ -3196,9 +3678,9 @@ function ScoreDisplay({
3196
3678
  ...rest
3197
3679
  }) {
3198
3680
  const resolvedValue = typeof value === "number" && !Number.isNaN(value) ? value : typeof rest.score === "number" && !Number.isNaN(rest.score) ? rest.score : 0;
3199
- const [displayValue, setDisplayValue] = React86.useState(resolvedValue);
3200
- const [isAnimating, setIsAnimating] = React86.useState(false);
3201
- React86.useEffect(() => {
3681
+ const [displayValue, setDisplayValue] = React88.useState(resolvedValue);
3682
+ const [isAnimating, setIsAnimating] = React88.useState(false);
3683
+ React88.useEffect(() => {
3202
3684
  if (!animated || displayValue === resolvedValue) {
3203
3685
  setDisplayValue(resolvedValue);
3204
3686
  return;
@@ -3271,9 +3753,9 @@ function ControlButton({
3271
3753
  className
3272
3754
  }) {
3273
3755
  const eventBus = useEventBus();
3274
- const [isPressed, setIsPressed] = React86.useState(false);
3756
+ const [isPressed, setIsPressed] = React88.useState(false);
3275
3757
  const actualPressed = pressed ?? isPressed;
3276
- const handlePointerDown = React86.useCallback(
3758
+ const handlePointerDown = React88.useCallback(
3277
3759
  (e) => {
3278
3760
  e.preventDefault();
3279
3761
  if (disabled) return;
@@ -3283,7 +3765,7 @@ function ControlButton({
3283
3765
  },
3284
3766
  [disabled, pressEvent, eventBus, onPress]
3285
3767
  );
3286
- const handlePointerUp = React86.useCallback(
3768
+ const handlePointerUp = React88.useCallback(
3287
3769
  (e) => {
3288
3770
  e.preventDefault();
3289
3771
  if (disabled) return;
@@ -3293,7 +3775,7 @@ function ControlButton({
3293
3775
  },
3294
3776
  [disabled, releaseEvent, eventBus, onRelease]
3295
3777
  );
3296
- const handlePointerLeave = React86.useCallback(
3778
+ const handlePointerLeave = React88.useCallback(
3297
3779
  (e) => {
3298
3780
  if (isPressed) {
3299
3781
  setIsPressed(false);
@@ -4119,9 +4601,9 @@ function MiniMap({
4119
4601
  viewportRect,
4120
4602
  className
4121
4603
  }) {
4122
- const canvasRef = React86.useRef(null);
4123
- const frameRef = React86.useRef(0);
4124
- React86.useEffect(() => {
4604
+ const canvasRef = React88.useRef(null);
4605
+ const frameRef = React88.useRef(0);
4606
+ React88.useEffect(() => {
4125
4607
  const canvas = canvasRef.current;
4126
4608
  if (!canvas) return;
4127
4609
  const ctx = canvas.getContext("2d");
@@ -4362,7 +4844,7 @@ var ErrorState = ({
4362
4844
  );
4363
4845
  };
4364
4846
  ErrorState.displayName = "ErrorState";
4365
- var ErrorBoundary = class extends React86__default.Component {
4847
+ var ErrorBoundary = class extends React88__default.Component {
4366
4848
  constructor(props) {
4367
4849
  super(props);
4368
4850
  __publicField(this, "reset", () => {
@@ -5337,7 +5819,7 @@ var FilterGroup = ({
5337
5819
  ) }, filter.field)),
5338
5820
  activeFilterCount > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
5339
5821
  Object.entries(selectedValues).map(([field, value]) => {
5340
- const filterDef = filters.find((f) => f.field === field);
5822
+ const filterDef = filters.find((f3) => f3.field === field);
5341
5823
  return /* @__PURE__ */ jsxs(
5342
5824
  Badge,
5343
5825
  {
@@ -6098,8 +6580,8 @@ var Menu = ({
6098
6580
  "bottom-start": "top-full left-0 mt-2",
6099
6581
  "bottom-end": "top-full right-0 mt-2"
6100
6582
  };
6101
- const triggerChild = React86__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx("span", { children: trigger });
6102
- const triggerElement = React86__default.cloneElement(
6583
+ const triggerChild = React88__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx("span", { children: trigger });
6584
+ const triggerElement = React88__default.cloneElement(
6103
6585
  triggerChild,
6104
6586
  {
6105
6587
  ref: triggerRef,
@@ -6604,8 +7086,8 @@ var Popover = ({
6604
7086
  onMouseEnter: handleOpen,
6605
7087
  onMouseLeave: handleClose
6606
7088
  };
6607
- const childElement = React86__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
6608
- const triggerElement = React86__default.cloneElement(
7089
+ const childElement = React88__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
7090
+ const triggerElement = React88__default.cloneElement(
6609
7091
  childElement,
6610
7092
  {
6611
7093
  ref: triggerRef,
@@ -7360,8 +7842,8 @@ var Tooltip = ({
7360
7842
  if (hideTimeoutRef.current) clearTimeout(hideTimeoutRef.current);
7361
7843
  };
7362
7844
  }, []);
7363
- const triggerElement = React86__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
7364
- const trigger = React86__default.cloneElement(triggerElement, {
7845
+ const triggerElement = React88__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
7846
+ const trigger = React88__default.cloneElement(triggerElement, {
7365
7847
  ref: triggerRef,
7366
7848
  onMouseEnter: handleMouseEnter,
7367
7849
  onMouseLeave: handleMouseLeave,
@@ -7610,7 +8092,7 @@ var WizardProgress = ({
7610
8092
  children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: steps.map((step, index) => {
7611
8093
  const isActive = index === currentStep;
7612
8094
  const isCompleted = index < currentStep;
7613
- return /* @__PURE__ */ jsxs(React86__default.Fragment, { children: [
8095
+ return /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
7614
8096
  /* @__PURE__ */ jsx(
7615
8097
  "button",
7616
8098
  {
@@ -7740,7 +8222,7 @@ var WizardNavigation = ({
7740
8222
  );
7741
8223
  };
7742
8224
  WizardNavigation.displayName = "WizardNavigation";
7743
- var MarkdownContent = React86__default.memo(
8225
+ var MarkdownContent = React88__default.memo(
7744
8226
  ({ content, direction, className }) => {
7745
8227
  const { t: _t } = useTranslate();
7746
8228
  return /* @__PURE__ */ jsx(
@@ -7841,7 +8323,7 @@ var MarkdownContent = React86__default.memo(
7841
8323
  (prev, next) => prev.content === next.content && prev.className === next.className && prev.direction === next.direction
7842
8324
  );
7843
8325
  MarkdownContent.displayName = "MarkdownContent";
7844
- var CodeBlock = React86__default.memo(
8326
+ var CodeBlock = React88__default.memo(
7845
8327
  ({
7846
8328
  code,
7847
8329
  language = "text",
@@ -8961,8 +9443,8 @@ function DPad({
8961
9443
  }) {
8962
9444
  const eventBus = useEventBus();
8963
9445
  const sizes = sizeMap15[size];
8964
- const [activeDirections, setActiveDirections] = React86.useState(/* @__PURE__ */ new Set());
8965
- const handlePress = React86.useCallback(
9446
+ const [activeDirections, setActiveDirections] = React88.useState(/* @__PURE__ */ new Set());
9447
+ const handlePress = React88.useCallback(
8966
9448
  (direction) => {
8967
9449
  setActiveDirections((prev) => new Set(prev).add(direction));
8968
9450
  if (directionEvent) eventBus.emit(`UI:${directionEvent}`, { direction, pressed: true });
@@ -8970,7 +9452,7 @@ function DPad({
8970
9452
  },
8971
9453
  [directionEvent, eventBus, onDirection]
8972
9454
  );
8973
- const handleRelease = React86.useCallback(
9455
+ const handleRelease = React88.useCallback(
8974
9456
  (direction) => {
8975
9457
  setActiveDirections((prev) => {
8976
9458
  const next = new Set(prev);
@@ -9028,8 +9510,8 @@ function ActionButtons({
9028
9510
  disabled
9029
9511
  }) {
9030
9512
  const eventBus = useEventBus();
9031
- const [activeButtons, setActiveButtons] = React86.useState(/* @__PURE__ */ new Set());
9032
- const handlePress = React86.useCallback(
9513
+ const [activeButtons, setActiveButtons] = React88.useState(/* @__PURE__ */ new Set());
9514
+ const handlePress = React88.useCallback(
9033
9515
  (id) => {
9034
9516
  setActiveButtons((prev) => new Set(prev).add(id));
9035
9517
  if (actionEvent) eventBus.emit(`UI:${actionEvent}`, { id, pressed: true });
@@ -9037,7 +9519,7 @@ function ActionButtons({
9037
9519
  },
9038
9520
  [actionEvent, eventBus, onAction]
9039
9521
  );
9040
- const handleRelease = React86.useCallback(
9522
+ const handleRelease = React88.useCallback(
9041
9523
  (id) => {
9042
9524
  setActiveButtons((prev) => {
9043
9525
  const next = new Set(prev);
@@ -9222,7 +9704,7 @@ function InventoryGrid({
9222
9704
  const eventBus = useEventBus();
9223
9705
  const slotCount = totalSlots ?? items.length;
9224
9706
  const emptySlotCount = Math.max(0, slotCount - items.length);
9225
- const handleSelect = React86.useCallback(
9707
+ const handleSelect = React88.useCallback(
9226
9708
  (id) => {
9227
9709
  onSelect?.(id);
9228
9710
  if (selectEvent) {
@@ -9346,7 +9828,7 @@ function CraftingRecipe({
9346
9828
  className
9347
9829
  }) {
9348
9830
  const eventBus = useEventBus();
9349
- const handleCraft = React86.useCallback(() => {
9831
+ const handleCraft = React88.useCallback(() => {
9350
9832
  onCraft?.();
9351
9833
  if (craftEvent) {
9352
9834
  eventBus.emit(craftEvent, { output: output.label });
@@ -9363,7 +9845,7 @@ function CraftingRecipe({
9363
9845
  children: [
9364
9846
  /* @__PURE__ */ jsx(HStack, { gap: "xs", className: "flex-wrap items-center", children: inputs.map((ingredient, index) => {
9365
9847
  const hasSufficient = ingredient.available >= ingredient.required;
9366
- return /* @__PURE__ */ jsxs(React86.Fragment, { children: [
9848
+ return /* @__PURE__ */ jsxs(React88.Fragment, { children: [
9367
9849
  /* @__PURE__ */ jsx(Box, { className: "relative", children: /* @__PURE__ */ jsx(
9368
9850
  ItemSlot,
9369
9851
  {
@@ -9465,15 +9947,15 @@ function GameCanvas2D({
9465
9947
  fps = 60,
9466
9948
  className
9467
9949
  }) {
9468
- const canvasRef = React86.useRef(null);
9469
- const rafRef = React86.useRef(0);
9470
- const frameRef = React86.useRef(0);
9471
- const lastTimeRef = React86.useRef(0);
9472
- const onDrawRef = React86.useRef(onDraw);
9950
+ const canvasRef = React88.useRef(null);
9951
+ const rafRef = React88.useRef(0);
9952
+ const frameRef = React88.useRef(0);
9953
+ const lastTimeRef = React88.useRef(0);
9954
+ const onDrawRef = React88.useRef(onDraw);
9473
9955
  onDrawRef.current = onDraw;
9474
- const onTickRef = React86.useRef(onTick);
9956
+ const onTickRef = React88.useRef(onTick);
9475
9957
  onTickRef.current = onTick;
9476
- React86.useEffect(() => {
9958
+ React88.useEffect(() => {
9477
9959
  const canvas = canvasRef.current;
9478
9960
  if (!canvas) return;
9479
9961
  const ctx = canvas.getContext("2d");
@@ -9726,7 +10208,7 @@ function TurnPanel({
9726
10208
  className
9727
10209
  }) {
9728
10210
  const eventBus = useEventBus();
9729
- const handleAction = React86.useCallback(
10211
+ const handleAction = React88.useCallback(
9730
10212
  (event) => {
9731
10213
  if (event) {
9732
10214
  eventBus.emit(event, { turn: currentTurn, phase, activeTeam });
@@ -9851,7 +10333,7 @@ function UnitCommandBar({
9851
10333
  className
9852
10334
  }) {
9853
10335
  const eventBus = useEventBus();
9854
- const handleCommand = React86.useCallback(
10336
+ const handleCommand = React88.useCallback(
9855
10337
  (event) => {
9856
10338
  if (event) {
9857
10339
  eventBus.emit(event, { unitId: selectedUnitId });
@@ -10389,7 +10871,7 @@ function GameMenu({
10389
10871
  } catch {
10390
10872
  }
10391
10873
  const eventBus = eventBusProp || eventBusFromHook;
10392
- const handleOptionClick = React86.useCallback(
10874
+ const handleOptionClick = React88.useCallback(
10393
10875
  (option) => {
10394
10876
  if (option.event && eventBus) {
10395
10877
  eventBus.emit(`UI:${option.event}`, { option });
@@ -10512,7 +10994,7 @@ function GameOverScreen({
10512
10994
  } catch {
10513
10995
  }
10514
10996
  const eventBus = eventBusProp || eventBusFromHook;
10515
- const handleActionClick = React86.useCallback(
10997
+ const handleActionClick = React88.useCallback(
10516
10998
  (action) => {
10517
10999
  if (action.event && eventBus) {
10518
11000
  eventBus.emit(`UI:${action.event}`, { action });
@@ -11149,10 +11631,10 @@ function IsometricCanvas({
11149
11631
  [unitsProp]
11150
11632
  );
11151
11633
  const features = useMemo(
11152
- () => featuresProp.map((f) => {
11153
- if (f.type) return f;
11154
- const raw = f;
11155
- return raw.featureType ? { ...f, type: raw.featureType } : f;
11634
+ () => featuresProp.map((f3) => {
11635
+ if (f3.type) return f3;
11636
+ const raw = f3;
11637
+ return raw.featureType ? { ...f3, type: raw.featureType } : f3;
11156
11638
  }),
11157
11639
  [featuresProp]
11158
11640
  );
@@ -12629,7 +13111,7 @@ var UploadDropZone = ({
12629
13111
  if (action) {
12630
13112
  eventBus.emit(`UI:${action}`, {
12631
13113
  ...actionPayload,
12632
- files: valid.map((f) => ({ name: f.name, size: f.size, type: f.type }))
13114
+ files: valid.map((f3) => ({ name: f3.name, size: f3.size, type: f3.type }))
12633
13115
  });
12634
13116
  }
12635
13117
  }
@@ -13012,9 +13494,9 @@ var DataGrid = ({
13012
13494
  return next;
13013
13495
  });
13014
13496
  }, [data, selectionEvent, eventBus]);
13015
- const titleField = fields.find((f) => f.variant === "h3" || f.variant === "h4") ?? fields[0];
13016
- const badgeFields = fields.filter((f) => f.variant === "badge" && f !== titleField);
13017
- const bodyFields = fields.filter((f) => f !== titleField && !badgeFields.includes(f));
13497
+ const titleField = fields.find((f3) => f3.variant === "h3" || f3.variant === "h4") ?? fields[0];
13498
+ const badgeFields = fields.filter((f3) => f3.variant === "badge" && f3 !== titleField);
13499
+ const bodyFields = fields.filter((f3) => f3 !== titleField && !badgeFields.includes(f3));
13018
13500
  const primaryActions = itemActions?.filter((a) => a.variant !== "danger") ?? [];
13019
13501
  const dangerActions = itemActions?.filter((a) => a.variant === "danger") ?? [];
13020
13502
  const handleActionClick = (action, itemData) => (e) => {
@@ -13315,16 +13797,16 @@ var DataList = ({
13315
13797
  }) => {
13316
13798
  const eventBus = useEventBus();
13317
13799
  const { t } = useTranslate();
13318
- const [visibleCount, setVisibleCount] = React86__default.useState(pageSize || Infinity);
13800
+ const [visibleCount, setVisibleCount] = React88__default.useState(pageSize || Infinity);
13319
13801
  const fields = fieldsProp ?? columnsProp ?? [];
13320
13802
  const allData = Array.isArray(entity) ? entity : entity ? [entity] : [];
13321
13803
  const data = pageSize > 0 ? allData.slice(0, visibleCount) : allData;
13322
13804
  const hasMoreLocal = pageSize > 0 && visibleCount < allData.length;
13323
- const titleField = fields.find((f) => f.variant === "h3" || f.variant === "h4") ?? fields[0];
13324
- const badgeFields = fields.filter((f) => f.variant === "badge" && f !== titleField);
13325
- const progressFields = fields.filter((f) => f.variant === "progress");
13805
+ const titleField = fields.find((f3) => f3.variant === "h3" || f3.variant === "h4") ?? fields[0];
13806
+ const badgeFields = fields.filter((f3) => f3.variant === "badge" && f3 !== titleField);
13807
+ const progressFields = fields.filter((f3) => f3.variant === "progress");
13326
13808
  const bodyFields = fields.filter(
13327
- (f) => f !== titleField && !badgeFields.includes(f) && !progressFields.includes(f)
13809
+ (f3) => f3 !== titleField && !badgeFields.includes(f3) && !progressFields.includes(f3)
13328
13810
  );
13329
13811
  const handleActionClick = (action, itemData) => (e) => {
13330
13812
  e.stopPropagation();
@@ -13352,14 +13834,14 @@ var DataList = ({
13352
13834
  const items2 = data.map((item) => item);
13353
13835
  const groups2 = groupBy ? groupData(items2, groupBy) : [{ label: "", items: items2 }];
13354
13836
  const contentField = titleField?.name ?? fields[0]?.name ?? "";
13355
- return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React86__default.Fragment, { children: [
13837
+ return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
13356
13838
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: "my-2" }),
13357
13839
  group.items.map((itemData, index) => {
13358
13840
  const id = itemData.id || `${gi}-${index}`;
13359
13841
  const sender = senderField ? String(getNestedValue(itemData, senderField) ?? "") : "";
13360
13842
  const isSent = Boolean(currentUser && sender === currentUser);
13361
13843
  const content = getNestedValue(itemData, contentField);
13362
- const timestampField = fields.find((f) => f.format === "date");
13844
+ const timestampField = fields.find((f3) => f3.format === "date");
13363
13845
  const timestamp = timestampField ? getNestedValue(itemData, timestampField.name) : null;
13364
13846
  return /* @__PURE__ */ jsx(
13365
13847
  Box,
@@ -13555,7 +14037,7 @@ var DataList = ({
13555
14037
  className
13556
14038
  ),
13557
14039
  children: [
13558
- groups.map((group, gi) => /* @__PURE__ */ jsxs(React86__default.Fragment, { children: [
14040
+ groups.map((group, gi) => /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
13559
14041
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: gi > 0 ? "mt-4" : "mt-0" }),
13560
14042
  group.items.map(
13561
14043
  (itemData, index) => renderItem(itemData, index, gi === groups.length - 1 && index === group.items.length - 1)
@@ -14671,7 +15153,7 @@ var FeatureCard = ({
14671
15153
  {
14672
15154
  name: icon,
14673
15155
  size: iconSizeMap[size],
14674
- className: "text-[var(--color-primary)]"
15156
+ className: "text-[var(--color-accent,#06b6d4)]"
14675
15157
  }
14676
15158
  );
14677
15159
  }
@@ -14756,7 +15238,7 @@ var CTABanner = ({
14756
15238
  {
14757
15239
  gap: "lg",
14758
15240
  align: align === "center" ? "center" : "start",
14759
- className: "max-w-3xl mx-auto",
15241
+ className: "mx-auto",
14760
15242
  children: [
14761
15243
  /* @__PURE__ */ jsx(Typography, { variant: "h2", align, children: title }),
14762
15244
  subtitle && /* @__PURE__ */ jsx(Typography, { variant: "body", color: "muted", align, children: subtitle }),
@@ -14914,14 +15396,14 @@ var HeroSection = ({
14914
15396
  src: image.src,
14915
15397
  alt: image.alt,
14916
15398
  className: cn(
14917
- imagePosition === "right" ? "flex-1 min-h-[300px]" : "w-full max-w-3xl min-h-[400px]"
15399
+ imagePosition === "right" ? "flex-1 min-h-[300px]" : "w-full min-h-[400px]"
14918
15400
  )
14919
15401
  }
14920
15402
  );
14921
- const innerContent = image && imagePosition === "right" ? /* @__PURE__ */ jsxs(HStack, { gap: "xl", align: "center", className: "w-full max-w-6xl", responsive: true, children: [
15403
+ const innerContent = image && imagePosition === "right" ? /* @__PURE__ */ jsxs(HStack, { gap: "xl", align: "center", className: "w-full", responsive: true, children: [
14922
15404
  textContent,
14923
15405
  imageNode
14924
- ] }) : /* @__PURE__ */ jsxs(VStack, { gap: "xl", align: isCenter ? "center" : "start", className: "w-full max-w-6xl", children: [
15406
+ ] }) : /* @__PURE__ */ jsxs(VStack, { gap: "xl", align: isCenter ? "center" : "start", className: "w-full", children: [
14925
15407
  textContent,
14926
15408
  image && imagePosition === "below" && imageNode
14927
15409
  ] });
@@ -15106,11 +15588,6 @@ var CaseStudyCard = ({
15106
15588
  ] }) });
15107
15589
  };
15108
15590
  CaseStudyCard.displayName = "CaseStudyCard";
15109
- var maxWidthMap = {
15110
- sm: "max-w-2xl",
15111
- md: "max-w-3xl",
15112
- lg: "max-w-4xl"
15113
- };
15114
15591
  var ArticleSection = ({
15115
15592
  title,
15116
15593
  children,
@@ -15121,8 +15598,7 @@ var ArticleSection = ({
15121
15598
  Box,
15122
15599
  {
15123
15600
  className: cn(
15124
- maxWidthMap[maxWidth],
15125
- "mx-auto",
15601
+ "w-full",
15126
15602
  className
15127
15603
  ),
15128
15604
  padding: "md",
@@ -15295,7 +15771,7 @@ var StepFlow = ({
15295
15771
  className
15296
15772
  }) => {
15297
15773
  if (orientation === "vertical") {
15298
- return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React86__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
15774
+ return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React88__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
15299
15775
  /* @__PURE__ */ jsxs(VStack, { gap: "none", align: "center", children: [
15300
15776
  /* @__PURE__ */ jsx(StepCircle, { step, index }),
15301
15777
  showConnectors && index < steps.length - 1 && /* @__PURE__ */ jsx(Box, { className: "w-px h-8 bg-[var(--color-border)]" })
@@ -15306,7 +15782,7 @@ var StepFlow = ({
15306
15782
  ] })
15307
15783
  ] }) }, index)) });
15308
15784
  }
15309
- 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(React86__default.Fragment, { children: [
15785
+ return /* @__PURE__ */ jsx(Box, { className: cn("w-full flex flex-col md:flex-row items-start gap-0", className), children: steps.map((step, index) => /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
15310
15786
  /* @__PURE__ */ jsxs(VStack, { gap: "sm", align: "center", className: "flex-1 w-full md:w-auto", children: [
15311
15787
  /* @__PURE__ */ jsx(StepCircle, { step, index }),
15312
15788
  /* @__PURE__ */ jsx(Typography, { variant: "h4", className: "text-center", children: step.title }),
@@ -15363,7 +15839,7 @@ var SplitSection = ({
15363
15839
  className
15364
15840
  ),
15365
15841
  padding: "lg",
15366
- children: /* @__PURE__ */ jsxs(Box, { className: cn("max-w-7xl mx-auto flex flex-col lg:flex-row gap-10 lg:gap-16 items-center", isImageLeft && "lg:flex-row-reverse"), children: [
15842
+ children: /* @__PURE__ */ jsxs(Box, { className: cn("w-full flex flex-col lg:flex-row gap-10 lg:gap-16 items-center", isImageLeft && "lg:flex-row-reverse"), children: [
15367
15843
  /* @__PURE__ */ jsx(Box, { className: "flex-1 min-w-0 lg:min-w-[45%]", children: textContent }),
15368
15844
  /* @__PURE__ */ jsx(Box, { className: "flex-1 min-w-0 lg:max-w-[50%]", children: mediaContent })
15369
15845
  ] })
@@ -15505,6 +15981,538 @@ var ShowcaseCard = ({
15505
15981
  );
15506
15982
  };
15507
15983
  ShowcaseCard.displayName = "ShowcaseCard";
15984
+ function PatternDefs({
15985
+ patternId,
15986
+ variant,
15987
+ size,
15988
+ color,
15989
+ strokeWidth
15990
+ }) {
15991
+ const dims = getTileDimensions(variant, size);
15992
+ return /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx(
15993
+ "pattern",
15994
+ {
15995
+ id: patternId,
15996
+ x: "0",
15997
+ y: "0",
15998
+ width: dims.width,
15999
+ height: dims.height,
16000
+ patternUnits: "userSpaceOnUse",
16001
+ children: /* @__PURE__ */ jsx(
16002
+ PatternTile,
16003
+ {
16004
+ variant,
16005
+ size,
16006
+ color,
16007
+ strokeWidth
16008
+ }
16009
+ )
16010
+ }
16011
+ ) });
16012
+ }
16013
+ function BackgroundMode({
16014
+ patternId,
16015
+ variant,
16016
+ size,
16017
+ color,
16018
+ strokeWidth,
16019
+ opacity,
16020
+ className
16021
+ }) {
16022
+ return /* @__PURE__ */ jsxs(
16023
+ "svg",
16024
+ {
16025
+ className: cn("absolute inset-0 w-full h-full pointer-events-none", className),
16026
+ preserveAspectRatio: "none",
16027
+ "aria-hidden": "true",
16028
+ children: [
16029
+ /* @__PURE__ */ jsx(
16030
+ PatternDefs,
16031
+ {
16032
+ patternId,
16033
+ variant,
16034
+ size,
16035
+ color,
16036
+ strokeWidth
16037
+ }
16038
+ ),
16039
+ /* @__PURE__ */ jsx(
16040
+ "rect",
16041
+ {
16042
+ width: "100%",
16043
+ height: "100%",
16044
+ fill: `url(#${patternId})`,
16045
+ opacity
16046
+ }
16047
+ )
16048
+ ]
16049
+ }
16050
+ );
16051
+ }
16052
+ function SideMode({
16053
+ patternId,
16054
+ variant,
16055
+ size,
16056
+ color,
16057
+ strokeWidth,
16058
+ opacity,
16059
+ side,
16060
+ className
16061
+ }) {
16062
+ const maskId = `${patternId}-mask`;
16063
+ const gradientId = `${patternId}-grad`;
16064
+ const x1 = side === "left" ? "0%" : "100%";
16065
+ const x2 = side === "left" ? "60%" : "40%";
16066
+ return /* @__PURE__ */ jsxs(
16067
+ "svg",
16068
+ {
16069
+ className: cn("absolute inset-0 w-full h-full pointer-events-none", className),
16070
+ preserveAspectRatio: "none",
16071
+ "aria-hidden": "true",
16072
+ children: [
16073
+ /* @__PURE__ */ jsx(
16074
+ PatternDefs,
16075
+ {
16076
+ patternId,
16077
+ variant,
16078
+ size,
16079
+ color,
16080
+ strokeWidth
16081
+ }
16082
+ ),
16083
+ /* @__PURE__ */ jsxs("defs", { children: [
16084
+ /* @__PURE__ */ jsxs("linearGradient", { id: gradientId, x1, y1: "0%", x2, y2: "0%", children: [
16085
+ /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "white", stopOpacity: "1" }),
16086
+ /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "white", stopOpacity: "0" })
16087
+ ] }),
16088
+ /* @__PURE__ */ jsx("mask", { id: maskId, children: /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: `url(#${gradientId})` }) })
16089
+ ] }),
16090
+ /* @__PURE__ */ jsx(
16091
+ "rect",
16092
+ {
16093
+ width: "100%",
16094
+ height: "100%",
16095
+ fill: `url(#${patternId})`,
16096
+ mask: `url(#${maskId})`,
16097
+ opacity
16098
+ }
16099
+ )
16100
+ ]
16101
+ }
16102
+ );
16103
+ }
16104
+ function DualMode({
16105
+ patternId,
16106
+ variant,
16107
+ size,
16108
+ color,
16109
+ strokeWidth,
16110
+ opacity,
16111
+ className
16112
+ }) {
16113
+ const maskId = `${patternId}-dmask`;
16114
+ const gradientId = `${patternId}-dgrad`;
16115
+ return /* @__PURE__ */ jsxs(
16116
+ "svg",
16117
+ {
16118
+ className: cn("absolute inset-0 w-full h-full pointer-events-none", className),
16119
+ preserveAspectRatio: "none",
16120
+ "aria-hidden": "true",
16121
+ children: [
16122
+ /* @__PURE__ */ jsx(
16123
+ PatternDefs,
16124
+ {
16125
+ patternId,
16126
+ variant,
16127
+ size,
16128
+ color,
16129
+ strokeWidth
16130
+ }
16131
+ ),
16132
+ /* @__PURE__ */ jsxs("defs", { children: [
16133
+ /* @__PURE__ */ jsxs("linearGradient", { id: gradientId, x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
16134
+ /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "white", stopOpacity: "1" }),
16135
+ /* @__PURE__ */ jsx("stop", { offset: "35%", stopColor: "white", stopOpacity: "0" }),
16136
+ /* @__PURE__ */ jsx("stop", { offset: "65%", stopColor: "white", stopOpacity: "0" }),
16137
+ /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "white", stopOpacity: "1" })
16138
+ ] }),
16139
+ /* @__PURE__ */ jsx("mask", { id: maskId, children: /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: `url(#${gradientId})` }) })
16140
+ ] }),
16141
+ /* @__PURE__ */ jsx(
16142
+ "rect",
16143
+ {
16144
+ width: "100%",
16145
+ height: "100%",
16146
+ fill: `url(#${patternId})`,
16147
+ mask: `url(#${maskId})`,
16148
+ opacity
16149
+ }
16150
+ )
16151
+ ]
16152
+ }
16153
+ );
16154
+ }
16155
+ function AroundMode({
16156
+ patternId,
16157
+ variant,
16158
+ size,
16159
+ color,
16160
+ strokeWidth,
16161
+ opacity,
16162
+ className
16163
+ }) {
16164
+ const maskId = `${patternId}-amask`;
16165
+ const gradientId = `${patternId}-agrad`;
16166
+ return /* @__PURE__ */ jsxs(
16167
+ "svg",
16168
+ {
16169
+ className: cn("absolute inset-0 w-full h-full pointer-events-none", className),
16170
+ preserveAspectRatio: "none",
16171
+ "aria-hidden": "true",
16172
+ children: [
16173
+ /* @__PURE__ */ jsx(
16174
+ PatternDefs,
16175
+ {
16176
+ patternId,
16177
+ variant,
16178
+ size,
16179
+ color,
16180
+ strokeWidth
16181
+ }
16182
+ ),
16183
+ /* @__PURE__ */ jsxs("defs", { children: [
16184
+ /* @__PURE__ */ jsxs("radialGradient", { id: gradientId, cx: "50%", cy: "50%", r: "50%", children: [
16185
+ /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "white", stopOpacity: "0" }),
16186
+ /* @__PURE__ */ jsx("stop", { offset: "55%", stopColor: "white", stopOpacity: "0" }),
16187
+ /* @__PURE__ */ jsx("stop", { offset: "85%", stopColor: "white", stopOpacity: "1" }),
16188
+ /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "white", stopOpacity: "1" })
16189
+ ] }),
16190
+ /* @__PURE__ */ jsx("mask", { id: maskId, children: /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: `url(#${gradientId})` }) })
16191
+ ] }),
16192
+ /* @__PURE__ */ jsx(
16193
+ "rect",
16194
+ {
16195
+ width: "100%",
16196
+ height: "100%",
16197
+ fill: `url(#${patternId})`,
16198
+ mask: `url(#${maskId})`,
16199
+ opacity
16200
+ }
16201
+ )
16202
+ ]
16203
+ }
16204
+ );
16205
+ }
16206
+ function FrameStrip({
16207
+ patternId,
16208
+ variant,
16209
+ size,
16210
+ color,
16211
+ strokeWidth,
16212
+ opacity,
16213
+ height
16214
+ }) {
16215
+ return /* @__PURE__ */ jsxs(
16216
+ "svg",
16217
+ {
16218
+ className: "w-full pointer-events-none",
16219
+ style: { height },
16220
+ preserveAspectRatio: "none",
16221
+ "aria-hidden": "true",
16222
+ children: [
16223
+ /* @__PURE__ */ jsx(
16224
+ PatternDefs,
16225
+ {
16226
+ patternId,
16227
+ variant,
16228
+ size,
16229
+ color,
16230
+ strokeWidth
16231
+ }
16232
+ ),
16233
+ /* @__PURE__ */ jsx(
16234
+ "rect",
16235
+ {
16236
+ width: "100%",
16237
+ height: "100%",
16238
+ fill: `url(#${patternId})`,
16239
+ opacity
16240
+ }
16241
+ )
16242
+ ]
16243
+ }
16244
+ );
16245
+ }
16246
+ var GeometricPattern = ({
16247
+ variant = "star8",
16248
+ mode = "background",
16249
+ opacity = 0.06,
16250
+ color = "var(--color-primary)",
16251
+ scale = 1,
16252
+ strokeWidth = 0.5,
16253
+ children,
16254
+ className
16255
+ }) => {
16256
+ const reactId = useId();
16257
+ const patternId = `gp${reactId.replace(/:/g, "")}`;
16258
+ const size = 60 * scale;
16259
+ const stripHeight = 40 * scale;
16260
+ if (mode === "frame") {
16261
+ const topId = `${patternId}-top`;
16262
+ const botId = `${patternId}-bot`;
16263
+ return /* @__PURE__ */ jsxs(Box, { className: cn("relative", className), children: [
16264
+ /* @__PURE__ */ jsx(
16265
+ FrameStrip,
16266
+ {
16267
+ patternId: topId,
16268
+ variant,
16269
+ size,
16270
+ color,
16271
+ strokeWidth,
16272
+ opacity,
16273
+ height: stripHeight
16274
+ }
16275
+ ),
16276
+ children,
16277
+ /* @__PURE__ */ jsx(
16278
+ FrameStrip,
16279
+ {
16280
+ patternId: botId,
16281
+ variant,
16282
+ size,
16283
+ color,
16284
+ strokeWidth,
16285
+ opacity,
16286
+ height: stripHeight
16287
+ }
16288
+ )
16289
+ ] });
16290
+ }
16291
+ if (mode === "around") {
16292
+ return /* @__PURE__ */ jsx(
16293
+ AroundMode,
16294
+ {
16295
+ patternId,
16296
+ variant,
16297
+ size,
16298
+ color,
16299
+ strokeWidth,
16300
+ opacity,
16301
+ className
16302
+ }
16303
+ );
16304
+ }
16305
+ if (mode === "dual") {
16306
+ return /* @__PURE__ */ jsx(
16307
+ DualMode,
16308
+ {
16309
+ patternId,
16310
+ variant,
16311
+ size,
16312
+ color,
16313
+ strokeWidth,
16314
+ opacity,
16315
+ className
16316
+ }
16317
+ );
16318
+ }
16319
+ if (mode === "left" || mode === "right") {
16320
+ return /* @__PURE__ */ jsx(
16321
+ SideMode,
16322
+ {
16323
+ patternId,
16324
+ variant,
16325
+ size,
16326
+ color,
16327
+ strokeWidth,
16328
+ opacity,
16329
+ side: mode,
16330
+ className
16331
+ }
16332
+ );
16333
+ }
16334
+ return /* @__PURE__ */ jsx(
16335
+ BackgroundMode,
16336
+ {
16337
+ patternId,
16338
+ variant,
16339
+ size,
16340
+ color,
16341
+ strokeWidth,
16342
+ opacity,
16343
+ className
16344
+ }
16345
+ );
16346
+ };
16347
+ GeometricPattern.displayName = "GeometricPattern";
16348
+ function ArchSVG({
16349
+ facing,
16350
+ w,
16351
+ h,
16352
+ color,
16353
+ strokeWidth
16354
+ }) {
16355
+ const paths = [];
16356
+ const archCount = 3;
16357
+ const archH = h / archCount;
16358
+ const rings = 5;
16359
+ for (let a = 0; a < archCount; a++) {
16360
+ const baseY = a * archH + archH;
16361
+ const topY = a * archH + archH * 0.05;
16362
+ for (let r = 0; r < rings; r++) {
16363
+ const scale = 1 - r * 0.17;
16364
+ const archW = w * 0.95 * scale;
16365
+ const aTopY = topY + (1 - scale) * (baseY - topY) * 0.5;
16366
+ const aBaseY = baseY - (1 - scale) * archH * 0.05;
16367
+ const edgeX2 = facing === "right" ? w : 0;
16368
+ const innerX2 = facing === "right" ? w - archW : archW;
16369
+ const midY = (aTopY + aBaseY) / 2;
16370
+ const radius = Math.sqrt(archW * archW + (aBaseY - midY) * (aBaseY - midY));
16371
+ if (facing === "right") {
16372
+ paths.push(
16373
+ `M ${f2(edgeX2)},${f2(aBaseY)} A ${f2(radius)} ${f2(radius)} 0 0 0 ${f2(innerX2)},${f2(aTopY + (aBaseY - aTopY) * 0.5)} A ${f2(radius)} ${f2(radius)} 0 0 0 ${f2(edgeX2)},${f2(aTopY)}`
16374
+ );
16375
+ } else {
16376
+ paths.push(
16377
+ `M ${f2(edgeX2)},${f2(aBaseY)} A ${f2(radius)} ${f2(radius)} 0 0 1 ${f2(innerX2)},${f2(aTopY + (aBaseY - aTopY) * 0.5)} A ${f2(radius)} ${f2(radius)} 0 0 1 ${f2(edgeX2)},${f2(aTopY)}`
16378
+ );
16379
+ }
16380
+ }
16381
+ const edgeX = facing === "right" ? w : 0;
16382
+ const innerX = facing === "right" ? w * 0.05 : w * 0.95;
16383
+ paths.push(`M ${f2(edgeX)},${f2(baseY)} L ${f2(innerX)},${f2(baseY)}`);
16384
+ }
16385
+ return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
16386
+ }
16387
+ function VineSVG({
16388
+ facing,
16389
+ w,
16390
+ h,
16391
+ color,
16392
+ strokeWidth
16393
+ }) {
16394
+ const paths = [];
16395
+ const dir = facing === "right" ? -1 : 1;
16396
+ const edgeX = facing === "right" ? w * 0.85 : w * 0.15;
16397
+ const segments = 5;
16398
+ const segH = h / segments;
16399
+ for (let i = 0; i < segments; i++) {
16400
+ const y0 = i * segH;
16401
+ const y1 = y0 + segH;
16402
+ const sway = w * 0.12 * (i % 2 === 0 ? 1 : -1);
16403
+ paths.push(
16404
+ `M ${f2(edgeX + sway)},${f2(y0)} C ${f2(edgeX - sway)},${f2(y0 + segH * 0.33)} ${f2(edgeX + sway)},${f2(y0 + segH * 0.66)} ${f2(edgeX - sway)},${f2(y1)}`
16405
+ );
16406
+ const branchY = y0 + segH * 0.35;
16407
+ const branchX = edgeX;
16408
+ const leafW = w * 0.55;
16409
+ const leafH = segH * 0.35;
16410
+ const leafTipX = branchX + dir * leafW;
16411
+ const leafTipY = branchY - leafH * 0.2;
16412
+ paths.push(
16413
+ `M ${f2(branchX)},${f2(branchY)} C ${f2(branchX + dir * leafW * 0.3)},${f2(branchY - leafH)} ${f2(leafTipX - dir * leafW * 0.1)},${f2(leafTipY - leafH * 0.3)} ${f2(leafTipX)},${f2(leafTipY)}`
16414
+ );
16415
+ paths.push(
16416
+ `M ${f2(leafTipX)},${f2(leafTipY)} C ${f2(leafTipX - dir * leafW * 0.2)},${f2(leafTipY + leafH * 0.6)} ${f2(branchX + dir * leafW * 0.15)},${f2(branchY + leafH * 0.4)} ${f2(branchX)},${f2(branchY + leafH * 0.1)}`
16417
+ );
16418
+ const tendrilY = y0 + segH * 0.7;
16419
+ const tendrilW = w * 0.35;
16420
+ const tendrilTipX = edgeX + dir * tendrilW;
16421
+ paths.push(
16422
+ `M ${f2(edgeX)},${f2(tendrilY)} Q ${f2(edgeX + dir * tendrilW * 0.6)},${f2(tendrilY - segH * 0.12)} ${f2(tendrilTipX)},${f2(tendrilY + segH * 0.05)}`
16423
+ );
16424
+ const spR = leafW * 0.08;
16425
+ paths.push(
16426
+ `M ${f2(leafTipX)},${f2(leafTipY)} A ${f2(spR)} ${f2(spR)} 0 1 ${facing === "right" ? 0 : 1} ${f2(leafTipX + dir * spR * 0.5)},${f2(leafTipY + spR)}`
16427
+ );
16428
+ }
16429
+ return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
16430
+ }
16431
+ function LatticeSVG({
16432
+ facing,
16433
+ w,
16434
+ h,
16435
+ color,
16436
+ strokeWidth
16437
+ }) {
16438
+ const paths = [];
16439
+ const cols = 5;
16440
+ const rows = Math.ceil(h / (w / cols));
16441
+ const cellW = w / cols;
16442
+ const cellH = cellW;
16443
+ const bulge = cellW * 0.3;
16444
+ for (let row = 0; row < rows; row++) {
16445
+ for (let col = 0; col < cols; col++) {
16446
+ const cx = col * cellW + cellW / 2;
16447
+ const cy = row * cellH + cellH / 2;
16448
+ const hw = cellW * 0.5;
16449
+ const hh = cellH * 0.5;
16450
+ paths.push(
16451
+ `M ${f2(cx)},${f2(cy - hh)} Q ${f2(cx + bulge)},${f2(cy)} ${f2(cx)},${f2(cy + hh)}`
16452
+ );
16453
+ paths.push(
16454
+ `M ${f2(cx)},${f2(cy - hh)} Q ${f2(cx - bulge)},${f2(cy)} ${f2(cx)},${f2(cy + hh)}`
16455
+ );
16456
+ paths.push(
16457
+ `M ${f2(cx - hw)},${f2(cy)} Q ${f2(cx)},${f2(cy - bulge * 0.5)} ${f2(cx + hw)},${f2(cy)}`
16458
+ );
16459
+ paths.push(
16460
+ `M ${f2(cx - hw)},${f2(cy)} Q ${f2(cx)},${f2(cy + bulge * 0.5)} ${f2(cx + hw)},${f2(cy)}`
16461
+ );
16462
+ }
16463
+ }
16464
+ return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
16465
+ }
16466
+ function f2(n) {
16467
+ return n.toFixed(2);
16468
+ }
16469
+ var VARIANT_MAP2 = {
16470
+ arch: ArchSVG,
16471
+ vine: VineSVG,
16472
+ lattice: LatticeSVG
16473
+ };
16474
+ var EdgeDecoration = ({
16475
+ variant = "arch",
16476
+ side = "both",
16477
+ opacity = 0.15,
16478
+ color = "var(--color-primary)",
16479
+ strokeWidth = 0.5,
16480
+ width = 15,
16481
+ className
16482
+ }) => {
16483
+ const id = useId();
16484
+ const Variant = VARIANT_MAP2[variant];
16485
+ const sides = side === "both" ? ["left", "right"] : [side];
16486
+ return /* @__PURE__ */ jsx(Fragment, { children: sides.map((s) => /* @__PURE__ */ jsx(
16487
+ "svg",
16488
+ {
16489
+ className: cn(
16490
+ "absolute top-0 h-full pointer-events-none",
16491
+ s === "left" ? "left-0" : "right-0",
16492
+ className
16493
+ ),
16494
+ style: {
16495
+ width: `${width}%`,
16496
+ opacity
16497
+ },
16498
+ viewBox: `0 0 200 ${200 * 3}`,
16499
+ preserveAspectRatio: "none",
16500
+ "aria-hidden": "true",
16501
+ children: /* @__PURE__ */ jsx(
16502
+ Variant,
16503
+ {
16504
+ facing: s,
16505
+ w: 200,
16506
+ h: 600,
16507
+ color,
16508
+ strokeWidth
16509
+ }
16510
+ )
16511
+ },
16512
+ `${id}-${s}`
16513
+ )) });
16514
+ };
16515
+ EdgeDecoration.displayName = "EdgeDecoration";
15508
16516
 
15509
16517
  // components/organisms/types.ts
15510
16518
  var EntityDisplayEvents = {
@@ -15941,7 +16949,7 @@ var StatCard = ({
15941
16949
  const labelToUse = propLabel ?? propTitle;
15942
16950
  const eventBus = useEventBus();
15943
16951
  const { t } = useTranslate();
15944
- const handleActionClick = React86__default.useCallback(() => {
16952
+ const handleActionClick = React88__default.useCallback(() => {
15945
16953
  if (action?.event) {
15946
16954
  eventBus.emit(`UI:${action.event}`, {});
15947
16955
  }
@@ -15952,7 +16960,7 @@ var StatCard = ({
15952
16960
  const data = Array.isArray(entity) ? entity : entity ? [entity] : [];
15953
16961
  const isLoading = externalLoading ?? false;
15954
16962
  const error = externalError;
15955
- const computeMetricValue = React86__default.useCallback(
16963
+ const computeMetricValue = React88__default.useCallback(
15956
16964
  (metric, items) => {
15957
16965
  if (metric.value !== void 0) {
15958
16966
  return metric.value;
@@ -15991,7 +16999,7 @@ var StatCard = ({
15991
16999
  },
15992
17000
  []
15993
17001
  );
15994
- const schemaStats = React86__default.useMemo(() => {
17002
+ const schemaStats = React88__default.useMemo(() => {
15995
17003
  if (!metrics || metrics.length === 0) return null;
15996
17004
  return metrics.map((metric) => ({
15997
17005
  label: metric.label,
@@ -15999,7 +17007,7 @@ var StatCard = ({
15999
17007
  format: metric.format
16000
17008
  }));
16001
17009
  }, [metrics, data, computeMetricValue]);
16002
- const calculatedTrend = React86__default.useMemo(() => {
17010
+ const calculatedTrend = React88__default.useMemo(() => {
16003
17011
  if (manualTrend !== void 0) return manualTrend;
16004
17012
  if (previousValue === void 0 || currentValue === void 0)
16005
17013
  return void 0;
@@ -16163,7 +17171,7 @@ var PageHeader = ({
16163
17171
  info: "bg-[var(--color-info)]/10 text-[var(--color-info)]"
16164
17172
  };
16165
17173
  return /* @__PURE__ */ jsxs(Box, { className: cn("mb-6", className), children: [
16166
- 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(React86__default.Fragment, { children: [
17174
+ breadcrumbs && breadcrumbs.length > 0 && /* @__PURE__ */ jsx(Box, { as: "nav", className: "mb-4", children: /* @__PURE__ */ jsx(Box, { as: "ol", className: "flex items-center gap-2 text-sm", children: breadcrumbs.map((crumb, idx) => /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
16167
17175
  idx > 0 && /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: "/" }),
16168
17176
  crumb.href ? /* @__PURE__ */ jsx(
16169
17177
  "a",
@@ -16345,19 +17353,19 @@ function renderRichFieldValue(value, fieldName, fieldType) {
16345
17353
  }
16346
17354
  function normalizeFieldDefs(fields) {
16347
17355
  if (!fields) return [];
16348
- return fields.map((f) => {
16349
- if (typeof f === "string") return f;
16350
- if ("key" in f) return f.key;
16351
- if ("name" in f) return f.name;
16352
- return String(f);
17356
+ return fields.map((f3) => {
17357
+ if (typeof f3 === "string") return f3;
17358
+ if ("key" in f3) return f3.key;
17359
+ if ("name" in f3) return f3.name;
17360
+ return String(f3);
16353
17361
  });
16354
17362
  }
16355
17363
  function buildFieldTypeMap(fields) {
16356
17364
  const map = {};
16357
17365
  if (!fields) return map;
16358
- for (const f of fields) {
16359
- if (typeof f === "object" && "name" in f && "type" in f) {
16360
- map[f.name] = f.type;
17366
+ for (const f3 of fields) {
17367
+ if (typeof f3 === "object" && "name" in f3 && "type" in f3) {
17368
+ map[f3.name] = f3.type;
16361
17369
  }
16362
17370
  }
16363
17371
  return map;
@@ -16437,22 +17445,22 @@ var DetailPanel = ({
16437
17445
  title = String(normalizedData[primaryField]);
16438
17446
  }
16439
17447
  const statusFields = effectiveFieldNames.filter(
16440
- (f) => f.toLowerCase().includes("status") || f.toLowerCase().includes("priority")
17448
+ (f3) => f3.toLowerCase().includes("status") || f3.toLowerCase().includes("priority")
16441
17449
  );
16442
17450
  const progressFields = effectiveFieldNames.filter(
16443
- (f) => f.toLowerCase().includes("progress") || f.toLowerCase().includes("percent")
17451
+ (f3) => f3.toLowerCase().includes("progress") || f3.toLowerCase().includes("percent")
16444
17452
  );
16445
17453
  const metricFields = effectiveFieldNames.filter(
16446
- (f) => (f.toLowerCase().includes("budget") || f.toLowerCase().includes("cost") || f.toLowerCase().includes("count")) && !progressFields.includes(f)
17454
+ (f3) => (f3.toLowerCase().includes("budget") || f3.toLowerCase().includes("cost") || f3.toLowerCase().includes("count")) && !progressFields.includes(f3)
16447
17455
  );
16448
17456
  const dateFields = effectiveFieldNames.filter(
16449
- (f) => f.toLowerCase().includes("date") || f.toLowerCase().includes("time")
17457
+ (f3) => f3.toLowerCase().includes("date") || f3.toLowerCase().includes("time")
16450
17458
  );
16451
17459
  const descriptionFields = effectiveFieldNames.filter(
16452
- (f) => f.toLowerCase().includes("description") || f.toLowerCase().includes("note")
17460
+ (f3) => f3.toLowerCase().includes("description") || f3.toLowerCase().includes("note")
16453
17461
  );
16454
17462
  const otherFields = effectiveFieldNames.filter(
16455
- (f) => f !== primaryField && !statusFields.includes(f) && !progressFields.includes(f) && !metricFields.includes(f) && !dateFields.includes(f) && !descriptionFields.includes(f)
17463
+ (f3) => f3 !== primaryField && !statusFields.includes(f3) && !progressFields.includes(f3) && !metricFields.includes(f3) && !dateFields.includes(f3) && !descriptionFields.includes(f3)
16456
17464
  );
16457
17465
  sections = [];
16458
17466
  if (statusFields.length > 0 || otherFields.length > 0) {
@@ -16605,7 +17613,7 @@ var DetailPanel = ({
16605
17613
  subtitle && /* @__PURE__ */ jsx(Typography, { variant: "body", color: "secondary", children: subtitle }),
16606
17614
  /* @__PURE__ */ jsxs(HStack, { gap: "xs", wrap: true, children: [
16607
17615
  normalizedData && effectiveFieldNames && effectiveFieldNames.filter(
16608
- (f) => f.toLowerCase().includes("status") || f.toLowerCase().includes("priority")
17616
+ (f3) => f3.toLowerCase().includes("status") || f3.toLowerCase().includes("priority")
16609
17617
  ).map((field) => {
16610
17618
  const value = getNestedValue(normalizedData, field);
16611
17619
  if (!value) return null;
@@ -16621,7 +17629,7 @@ var DetailPanel = ({
16621
17629
  status && /* @__PURE__ */ jsx(Badge, { variant: status.variant ?? "default", children: status.label })
16622
17630
  ] }),
16623
17631
  normalizedData && effectiveFieldNames && effectiveFieldNames.filter(
16624
- (f) => f.toLowerCase().includes("progress") || f.toLowerCase().includes("percent")
17632
+ (f3) => f3.toLowerCase().includes("progress") || f3.toLowerCase().includes("percent")
16625
17633
  ).map((field) => {
16626
17634
  const value = getNestedValue(normalizedData, field);
16627
17635
  if (value === void 0 || value === null || typeof value !== "number")
@@ -16689,7 +17697,7 @@ var FormSection = ({
16689
17697
  columns = 1,
16690
17698
  className
16691
17699
  }) => {
16692
- const [collapsed, setCollapsed] = React86__default.useState(defaultCollapsed);
17700
+ const [collapsed, setCollapsed] = React88__default.useState(defaultCollapsed);
16693
17701
  const { t } = useTranslate();
16694
17702
  const eventBus = useEventBus();
16695
17703
  const gridClass = {
@@ -16697,7 +17705,7 @@ var FormSection = ({
16697
17705
  2: "grid-cols-1 md:grid-cols-2",
16698
17706
  3: "grid-cols-1 md:grid-cols-2 lg:grid-cols-3"
16699
17707
  }[columns];
16700
- React86__default.useCallback(() => {
17708
+ React88__default.useCallback(() => {
16701
17709
  if (collapsible) {
16702
17710
  setCollapsed((prev) => !prev);
16703
17711
  eventBus.emit("UI:TOGGLE_COLLAPSE", { collapsed: !collapsed });
@@ -16909,33 +17917,33 @@ var Form = ({
16909
17917
  const normalizedInitialData = initialData ?? {};
16910
17918
  const resolvedEntity = entity && typeof entity === "object" && !Array.isArray(entity) ? entity : void 0;
16911
17919
  const entityName = typeof entity === "string" ? entity : resolvedEntity?.name;
16912
- const entityDerivedFields = React86__default.useMemo(() => {
17920
+ const entityDerivedFields = React88__default.useMemo(() => {
16913
17921
  if (fields && fields.length > 0) return void 0;
16914
17922
  if (!resolvedEntity) return void 0;
16915
17923
  return resolvedEntity.fields.map(
16916
- (f) => ({
16917
- name: f.name,
16918
- type: f.type,
16919
- required: f.required,
16920
- defaultValue: f.default,
16921
- values: f.values,
16922
- min: f.min,
16923
- max: f.max,
16924
- relation: f.relation ? { entity: f.relation.entity } : void 0
17924
+ (f3) => ({
17925
+ name: f3.name,
17926
+ type: f3.type,
17927
+ required: f3.required,
17928
+ defaultValue: f3.default,
17929
+ values: f3.values,
17930
+ min: f3.min,
17931
+ max: f3.max,
17932
+ relation: f3.relation ? { entity: f3.relation.entity } : void 0
16925
17933
  })
16926
17934
  );
16927
17935
  }, [entity, fields]);
16928
17936
  const conditionalFields = typeof conditionalFieldsRaw === "boolean" ? {} : conditionalFieldsRaw;
16929
17937
  const hiddenCalculations = typeof hiddenCalculationsRaw === "boolean" ? [] : hiddenCalculationsRaw;
16930
17938
  const violationTriggers = typeof violationTriggersRaw === "boolean" ? [] : violationTriggersRaw;
16931
- const [formData, setFormData] = React86__default.useState(
17939
+ const [formData, setFormData] = React88__default.useState(
16932
17940
  normalizedInitialData
16933
17941
  );
16934
- const [collapsedSections, setCollapsedSections] = React86__default.useState(
17942
+ const [collapsedSections, setCollapsedSections] = React88__default.useState(
16935
17943
  /* @__PURE__ */ new Set()
16936
17944
  );
16937
17945
  const shouldShowCancel = showCancel ?? (fields && fields.length > 0);
16938
- const evalContext = React86__default.useMemo(
17946
+ const evalContext = React88__default.useMemo(
16939
17947
  () => ({
16940
17948
  formValues: formData,
16941
17949
  globalVariables: externalContext?.globalVariables ?? {},
@@ -16944,13 +17952,13 @@ var Form = ({
16944
17952
  }),
16945
17953
  [formData, externalContext]
16946
17954
  );
16947
- React86__default.useEffect(() => {
17955
+ React88__default.useEffect(() => {
16948
17956
  const data = initialData;
16949
17957
  if (data && Object.keys(data).length > 0) {
16950
17958
  setFormData(data);
16951
17959
  }
16952
17960
  }, [initialData]);
16953
- const processCalculations = React86__default.useCallback(
17961
+ const processCalculations = React88__default.useCallback(
16954
17962
  (changedFieldId, newFormData) => {
16955
17963
  if (!hiddenCalculations.length) return;
16956
17964
  const context = {
@@ -16975,7 +17983,7 @@ var Form = ({
16975
17983
  },
16976
17984
  [hiddenCalculations, externalContext, eventBus]
16977
17985
  );
16978
- const checkViolations = React86__default.useCallback(
17986
+ const checkViolations = React88__default.useCallback(
16979
17987
  (changedFieldId, newFormData) => {
16980
17988
  if (!violationTriggers.length) return;
16981
17989
  const context = {
@@ -17012,7 +18020,7 @@ var Form = ({
17012
18020
  processCalculations(name, newFormData);
17013
18021
  checkViolations(name, newFormData);
17014
18022
  };
17015
- const isFieldVisible = React86__default.useCallback(
18023
+ const isFieldVisible = React88__default.useCallback(
17016
18024
  (fieldName) => {
17017
18025
  const condition = conditionalFields[fieldName];
17018
18026
  if (!condition) return true;
@@ -17020,7 +18028,7 @@ var Form = ({
17020
18028
  },
17021
18029
  [conditionalFields, evalContext]
17022
18030
  );
17023
- const isSectionVisible = React86__default.useCallback(
18031
+ const isSectionVisible = React88__default.useCallback(
17024
18032
  (section) => {
17025
18033
  if (!section.condition) return true;
17026
18034
  return Boolean(evaluateFormExpression(section.condition, evalContext));
@@ -17052,7 +18060,7 @@ var Form = ({
17052
18060
  eventBus.emit(`UI:${onCancel}`);
17053
18061
  }
17054
18062
  };
17055
- const renderField = React86__default.useCallback(
18063
+ const renderField = React88__default.useCallback(
17056
18064
  (field) => {
17057
18065
  const fieldName = field.name || field.field;
17058
18066
  if (!fieldName) return null;
@@ -17073,11 +18081,11 @@ var Form = ({
17073
18081
  [formData, isFieldVisible, relationsData, relationsLoading, isLoading]
17074
18082
  );
17075
18083
  const effectiveFields = entityDerivedFields ?? fields;
17076
- const normalizedFields = React86__default.useMemo(() => {
18084
+ const normalizedFields = React88__default.useMemo(() => {
17077
18085
  if (!effectiveFields || effectiveFields.length === 0) return [];
17078
18086
  return effectiveFields.map((field) => {
17079
18087
  if (typeof field === "string") {
17080
- const entityField = resolvedEntity?.fields?.find((f) => f.name === field);
18088
+ const entityField = resolvedEntity?.fields?.find((f3) => f3.name === field);
17081
18089
  if (entityField) {
17082
18090
  return {
17083
18091
  name: field,
@@ -17095,7 +18103,7 @@ var Form = ({
17095
18103
  return field;
17096
18104
  });
17097
18105
  }, [effectiveFields, resolvedEntity]);
17098
- const schemaFields = React86__default.useMemo(() => {
18106
+ const schemaFields = React88__default.useMemo(() => {
17099
18107
  if (normalizedFields.length === 0) return null;
17100
18108
  if (isDebugEnabled()) {
17101
18109
  debugGroup(`Form: ${entityName || "unknown"}`);
@@ -17105,7 +18113,7 @@ var Form = ({
17105
18113
  }
17106
18114
  return normalizedFields.map(renderField).filter(Boolean);
17107
18115
  }, [normalizedFields, renderField, entityName, conditionalFields]);
17108
- const sectionElements = React86__default.useMemo(() => {
18116
+ const sectionElements = React88__default.useMemo(() => {
17109
18117
  if (!sections || sections.length === 0) return null;
17110
18118
  return sections.map((section) => {
17111
18119
  if (!isSectionVisible(section)) {
@@ -18050,7 +19058,7 @@ var Table = ({
18050
19058
  Table.displayName = "Table";
18051
19059
  function normalizeFields(fields) {
18052
19060
  if (!fields) return [];
18053
- return fields.map((f) => typeof f === "string" ? f : f.key ?? f.name ?? "");
19061
+ return fields.map((f3) => typeof f3 === "string" ? f3 : f3.key ?? f3.name ?? "");
18054
19062
  }
18055
19063
  var STATUS_STYLES = {
18056
19064
  complete: {
@@ -18230,7 +19238,7 @@ var List = ({
18230
19238
  if (entity && typeof entity === "object" && "id" in entity) return [entity];
18231
19239
  return [];
18232
19240
  }, [entity]);
18233
- const getItemActions = React86__default.useCallback(
19241
+ const getItemActions = React88__default.useCallback(
18234
19242
  (item) => {
18235
19243
  if (!itemActions) return [];
18236
19244
  if (typeof itemActions === "function") {
@@ -18335,19 +19343,19 @@ var List = ({
18335
19343
  const rowActionPayload = { row: item };
18336
19344
  const primaryField = effectiveFieldNames?.[0];
18337
19345
  const statusField = effectiveFieldNames?.find(
18338
- (f) => f.toLowerCase().includes("status")
19346
+ (f3) => f3.toLowerCase().includes("status")
18339
19347
  );
18340
19348
  const priorityField = effectiveFieldNames?.find(
18341
- (f) => f.toLowerCase().includes("priority")
19349
+ (f3) => f3.toLowerCase().includes("priority")
18342
19350
  );
18343
19351
  const progressField = effectiveFieldNames?.find(
18344
- (f) => f.toLowerCase().includes("progress") || f.toLowerCase().includes("percent")
19352
+ (f3) => f3.toLowerCase().includes("progress") || f3.toLowerCase().includes("percent")
18345
19353
  );
18346
19354
  const dateFields = effectiveFieldNames?.filter(
18347
- (f) => f.toLowerCase().includes("date") || f.toLowerCase().includes("due")
19355
+ (f3) => f3.toLowerCase().includes("date") || f3.toLowerCase().includes("due")
18348
19356
  ) || [];
18349
19357
  const metadataFields = effectiveFieldNames?.filter(
18350
- (f) => f !== primaryField && f !== statusField && f !== priorityField && f !== progressField && !dateFields.includes(f)
19358
+ (f3) => f3 !== primaryField && f3 !== statusField && f3 !== priorityField && f3 !== progressField && !dateFields.includes(f3)
18351
19359
  ).slice(0, 2) || [];
18352
19360
  const statusValue = statusField ? item._fields?.[statusField] : null;
18353
19361
  statusValue ? getStatusStyle(statusField, String(statusValue)) : null;
@@ -18568,7 +19576,7 @@ var List = ({
18568
19576
  List.displayName = "List";
18569
19577
  function normalizeFields2(fields) {
18570
19578
  if (!fields) return [];
18571
- return fields.map((f) => typeof f === "string" ? f : f.key ?? f.name ?? "");
19579
+ return fields.map((f3) => typeof f3 === "string" ? f3 : f3.key ?? f3.name ?? "");
18572
19580
  }
18573
19581
  function fieldLabel3(key) {
18574
19582
  return key.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/[_-]/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
@@ -18644,8 +19652,8 @@ var CardGrid = ({
18644
19652
  eventBus.emit("UI:PAGINATE", { page: newPage, pageSize });
18645
19653
  };
18646
19654
  const titleField = effectiveFieldNames?.[0];
18647
- const statusField = effectiveFieldNames?.find((f) => STATUS_FIELDS.has(f.toLowerCase()));
18648
- const bodyFields = effectiveFieldNames?.filter((f) => f !== titleField && f !== statusField) ?? [];
19655
+ const statusField = effectiveFieldNames?.find((f3) => STATUS_FIELDS.has(f3.toLowerCase()));
19656
+ const bodyFields = effectiveFieldNames?.filter((f3) => f3 !== titleField && f3 !== statusField) ?? [];
18649
19657
  const primaryActions = itemActions?.filter((a) => a.variant !== "danger") ?? [];
18650
19658
  const dangerActions = itemActions?.filter((a) => a.variant === "danger") ?? [];
18651
19659
  const handleActionClick = (action, itemData) => (e) => {
@@ -18996,7 +20004,7 @@ var WizardContainer = ({
18996
20004
  const isCompleted = index < currentStep;
18997
20005
  const stepKey = step.id ?? step.tabId ?? `step-${index}`;
18998
20006
  const stepTitle = step.title ?? step.name ?? `Step ${index + 1}`;
18999
- return /* @__PURE__ */ jsxs(React86__default.Fragment, { children: [
20007
+ return /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
19000
20008
  /* @__PURE__ */ jsx(
19001
20009
  Button,
19002
20010
  {
@@ -20220,7 +21228,7 @@ var StateMachineView = ({
20220
21228
  style: { top: title ? 30 : 0 },
20221
21229
  children: [
20222
21230
  entity && /* @__PURE__ */ jsx(EntityBox, { entity, config }),
20223
- states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React86__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
21231
+ states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React88__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
20224
21232
  StateNode,
20225
21233
  {
20226
21234
  state,
@@ -20654,7 +21662,7 @@ function renderStateMachineToDomData(stateMachine, options = {}, config = DEFAUL
20654
21662
  const boxHeight = Math.max(80, fieldCount * 22 + 50);
20655
21663
  domEntity = {
20656
21664
  name: entity.name || "Entity",
20657
- fields: entity.fields?.map((f) => typeof f === "string" ? f : f.name) || [],
21665
+ fields: entity.fields?.map((f3) => typeof f3 === "string" ? f3 : f3.name) || [],
20658
21666
  x: 20,
20659
21667
  y: height / 2 - boxHeight / 2,
20660
21668
  width: boxWidth,
@@ -20752,7 +21760,7 @@ function extractEntityFields(schema) {
20752
21760
  if (!schema?.orbitals?.length) return [];
20753
21761
  const entity = schema.orbitals[0].entity;
20754
21762
  if (!entity?.fields) return [];
20755
- return entity.fields.map((f) => f.name);
21763
+ return entity.fields.map((f3) => f3.name);
20756
21764
  }
20757
21765
  function toStateMachineDefinition(sm) {
20758
21766
  return {
@@ -21959,7 +22967,7 @@ function getAllEffectSpriteUrls(manifest) {
21959
22967
  if (manifest.animations) {
21960
22968
  for (const frames of Object.values(manifest.animations)) {
21961
22969
  if (Array.isArray(frames)) {
21962
- frames.forEach((f) => urls.push(`${base}/${f}`));
22970
+ frames.forEach((f3) => urls.push(`${base}/${f3}`));
21963
22971
  }
21964
22972
  }
21965
22973
  }
@@ -21967,7 +22975,7 @@ function getAllEffectSpriteUrls(manifest) {
21967
22975
  }
21968
22976
 
21969
22977
  // components/organisms/game/utils/combatPresets.ts
21970
- var PI = Math.PI;
22978
+ var PI2 = Math.PI;
21971
22979
  function p(manifest, key) {
21972
22980
  const particles = manifest.particles;
21973
22981
  if (!particles) return [];
@@ -21998,8 +23006,8 @@ function createCombatPresets(manifest) {
21998
23006
  spread: 8,
21999
23007
  velocityMin: 40,
22000
23008
  velocityMax: 120,
22001
- angleMin: -PI * 0.8,
22002
- angleMax: -PI * 0.2,
23009
+ angleMin: -PI2 * 0.8,
23010
+ angleMax: -PI2 * 0.2,
22003
23011
  gravity: 0,
22004
23012
  tint: { r: 255, g: 60, b: 40 },
22005
23013
  scaleMin: 0.3,
@@ -22016,8 +23024,8 @@ function createCombatPresets(manifest) {
22016
23024
  spread: 12,
22017
23025
  velocityMin: 20,
22018
23026
  velocityMax: 60,
22019
- angleMin: -PI * 0.9,
22020
- angleMax: -PI * 0.1,
23027
+ angleMin: -PI2 * 0.9,
23028
+ angleMax: -PI2 * 0.1,
22021
23029
  gravity: 120,
22022
23030
  tint: { r: 180, g: 140, b: 90 },
22023
23031
  scaleMin: 0.15,
@@ -22034,8 +23042,8 @@ function createCombatPresets(manifest) {
22034
23042
  spread: 5,
22035
23043
  velocityMin: 10,
22036
23044
  velocityMax: 30,
22037
- angleMin: -PI * 0.7,
22038
- angleMax: -PI * 0.3,
23045
+ angleMin: -PI2 * 0.7,
23046
+ angleMax: -PI2 * 0.3,
22039
23047
  gravity: 0,
22040
23048
  tint: { r: 255, g: 200, b: 150 },
22041
23049
  scaleMin: 0.25,
@@ -22077,8 +23085,8 @@ function createCombatPresets(manifest) {
22077
23085
  spread: 4,
22078
23086
  velocityMin: 60,
22079
23087
  velocityMax: 150,
22080
- angleMin: -PI * 0.6,
22081
- angleMax: -PI * 0.4,
23088
+ angleMin: -PI2 * 0.6,
23089
+ angleMax: -PI2 * 0.4,
22082
23090
  gravity: 0,
22083
23091
  tint: { r: 255, g: 220, b: 100 },
22084
23092
  scaleMin: 0.2,
@@ -22095,8 +23103,8 @@ function createCombatPresets(manifest) {
22095
23103
  spread: 3,
22096
23104
  velocityMin: 100,
22097
23105
  velocityMax: 200,
22098
- angleMin: -PI * 0.55,
22099
- angleMax: -PI * 0.45,
23106
+ angleMin: -PI2 * 0.55,
23107
+ angleMax: -PI2 * 0.45,
22100
23108
  gravity: 0,
22101
23109
  tint: { r: 255, g: 200, b: 80 },
22102
23110
  scaleMin: 0.15,
@@ -22113,8 +23121,8 @@ function createCombatPresets(manifest) {
22113
23121
  spread: 6,
22114
23122
  velocityMin: 10,
22115
23123
  velocityMax: 30,
22116
- angleMin: -PI * 0.8,
22117
- angleMax: -PI * 0.2,
23124
+ angleMin: -PI2 * 0.8,
23125
+ angleMax: -PI2 * 0.2,
22118
23126
  gravity: -20,
22119
23127
  tint: { r: 200, g: 200, b: 200 },
22120
23128
  scaleMin: 0.2,
@@ -22157,7 +23165,7 @@ function createCombatPresets(manifest) {
22157
23165
  velocityMin: 20,
22158
23166
  velocityMax: 80,
22159
23167
  angleMin: 0,
22160
- angleMax: PI * 2,
23168
+ angleMax: PI2 * 2,
22161
23169
  gravity: -30,
22162
23170
  tint: { r: 180, g: 80, b: 255 },
22163
23171
  scaleMin: 0.2,
@@ -22178,7 +23186,7 @@ function createCombatPresets(manifest) {
22178
23186
  velocityMin: 30,
22179
23187
  velocityMax: 100,
22180
23188
  angleMin: 0,
22181
- angleMax: PI * 2,
23189
+ angleMax: PI2 * 2,
22182
23190
  gravity: -15,
22183
23191
  tint: { r: 200, g: 120, b: 255 },
22184
23192
  scaleMin: 0.1,
@@ -22196,7 +23204,7 @@ function createCombatPresets(manifest) {
22196
23204
  spread: 10,
22197
23205
  velocityMin: 15,
22198
23206
  velocityMax: 50,
22199
- angleMin: -PI,
23207
+ angleMin: -PI2,
22200
23208
  angleMax: 0,
22201
23209
  gravity: -40,
22202
23210
  tint: { r: 220, g: 180, b: 255 },
@@ -22245,8 +23253,8 @@ function createCombatPresets(manifest) {
22245
23253
  spread: 15,
22246
23254
  velocityMin: 10,
22247
23255
  velocityMax: 40,
22248
- angleMin: -PI,
22249
- angleMax: -PI * 0.3,
23256
+ angleMin: -PI2,
23257
+ angleMax: -PI2 * 0.3,
22250
23258
  gravity: -50,
22251
23259
  tint: { r: 80, g: 255, b: 120 },
22252
23260
  scaleMin: 0.15,
@@ -22264,8 +23272,8 @@ function createCombatPresets(manifest) {
22264
23272
  spread: 12,
22265
23273
  velocityMin: 15,
22266
23274
  velocityMax: 50,
22267
- angleMin: -PI * 0.9,
22268
- angleMax: -PI * 0.1,
23275
+ angleMin: -PI2 * 0.9,
23276
+ angleMax: -PI2 * 0.1,
22269
23277
  gravity: -60,
22270
23278
  tint: { r: 100, g: 255, b: 140 },
22271
23279
  scaleMin: 0.1,
@@ -22314,7 +23322,7 @@ function createCombatPresets(manifest) {
22314
23322
  velocityMin: 10,
22315
23323
  velocityMax: 35,
22316
23324
  angleMin: 0,
22317
- angleMax: PI * 2,
23325
+ angleMax: PI2 * 2,
22318
23326
  gravity: 0,
22319
23327
  tint: { r: 80, g: 160, b: 255 },
22320
23328
  scaleMin: 0.12,
@@ -22363,7 +23371,7 @@ function createCombatPresets(manifest) {
22363
23371
  velocityMin: 8,
22364
23372
  velocityMax: 30,
22365
23373
  angleMin: 0,
22366
- angleMax: PI * 2,
23374
+ angleMax: PI2 * 2,
22367
23375
  gravity: 0,
22368
23376
  tint: { r: 60, g: 180, b: 255 },
22369
23377
  scaleMin: 0.1,
@@ -22414,7 +23422,7 @@ function createCombatPresets(manifest) {
22414
23422
  velocityMin: 50,
22415
23423
  velocityMax: 150,
22416
23424
  angleMin: 0,
22417
- angleMax: PI * 2,
23425
+ angleMax: PI2 * 2,
22418
23426
  gravity: 80,
22419
23427
  tint: { r: 255, g: 180, b: 50 },
22420
23428
  scaleMin: 0.08,
@@ -22455,7 +23463,7 @@ function createCombatPresets(manifest) {
22455
23463
  velocityMin: 60,
22456
23464
  velocityMax: 180,
22457
23465
  angleMin: 0,
22458
- angleMax: PI * 2,
23466
+ angleMax: PI2 * 2,
22459
23467
  gravity: 60,
22460
23468
  tint: { r: 255, g: 120, b: 30 },
22461
23469
  scaleMin: 0.15,
@@ -22473,7 +23481,7 @@ function createCombatPresets(manifest) {
22473
23481
  velocityMin: 80,
22474
23482
  velocityMax: 200,
22475
23483
  angleMin: 0,
22476
- angleMax: PI * 2,
23484
+ angleMax: PI2 * 2,
22477
23485
  gravity: 100,
22478
23486
  tint: { r: 255, g: 200, b: 60 },
22479
23487
  scaleMin: 0.06,
@@ -22516,7 +23524,7 @@ function createCombatPresets(manifest) {
22516
23524
  velocityMin: 30,
22517
23525
  velocityMax: 100,
22518
23526
  angleMin: 0,
22519
- angleMax: PI * 2,
23527
+ angleMax: PI2 * 2,
22520
23528
  gravity: 100,
22521
23529
  tint: { r: 140, g: 140, b: 140 },
22522
23530
  scaleMin: 0.15,
@@ -22582,7 +23590,7 @@ function createCombatPresets(manifest) {
22582
23590
  spread: 15,
22583
23591
  velocityMin: 15,
22584
23592
  velocityMax: 50,
22585
- angleMin: -PI,
23593
+ angleMin: -PI2,
22586
23594
  angleMax: 0,
22587
23595
  gravity: -30,
22588
23596
  tint: { r: 255, g: 215, b: 50 },
@@ -22601,8 +23609,8 @@ function createCombatPresets(manifest) {
22601
23609
  spread: 8,
22602
23610
  velocityMin: 5,
22603
23611
  velocityMax: 20,
22604
- angleMin: -PI * 0.7,
22605
- angleMax: -PI * 0.3,
23612
+ angleMin: -PI2 * 0.7,
23613
+ angleMax: -PI2 * 0.3,
22606
23614
  gravity: -20,
22607
23615
  tint: { r: 255, g: 230, b: 100 },
22608
23616
  scaleMin: 0.2,
@@ -22650,7 +23658,7 @@ function createCombatPresets(manifest) {
22650
23658
  spread: 12,
22651
23659
  velocityMin: 15,
22652
23660
  velocityMax: 40,
22653
- angleMin: -PI,
23661
+ angleMin: -PI2,
22654
23662
  angleMax: 0,
22655
23663
  gravity: -20,
22656
23664
  tint: { r: 120, g: 40, b: 160 },
@@ -22668,8 +23676,8 @@ function createCombatPresets(manifest) {
22668
23676
  spread: 10,
22669
23677
  velocityMin: 8,
22670
23678
  velocityMax: 25,
22671
- angleMin: -PI * 0.8,
22672
- angleMax: -PI * 0.2,
23679
+ angleMin: -PI2 * 0.8,
23680
+ angleMax: -PI2 * 0.2,
22673
23681
  gravity: -15,
22674
23682
  tint: { r: 100, g: 50, b: 140 },
22675
23683
  scaleMin: 0.2,
@@ -22716,7 +23724,7 @@ function createCombatPresets(manifest) {
22716
23724
  velocityMin: 40,
22717
23725
  velocityMax: 140,
22718
23726
  angleMin: 0,
22719
- angleMax: PI * 2,
23727
+ angleMax: PI2 * 2,
22720
23728
  gravity: 40,
22721
23729
  tint: { r: 255, g: 140, b: 30 },
22722
23730
  scaleMin: 0.2,
@@ -22734,7 +23742,7 @@ function createCombatPresets(manifest) {
22734
23742
  velocityMin: 60,
22735
23743
  velocityMax: 200,
22736
23744
  angleMin: 0,
22737
- angleMax: PI * 2,
23745
+ angleMax: PI2 * 2,
22738
23746
  gravity: 60,
22739
23747
  tint: { r: 255, g: 180, b: 60 },
22740
23748
  scaleMin: 0.06,
@@ -24566,7 +25574,7 @@ function CastleBoard({
24566
25574
  const [selectedFeature, setSelectedFeature] = useState(null);
24567
25575
  const hoveredFeature = useMemo(() => {
24568
25576
  if (!hoveredTile) return null;
24569
- return features.find((f) => f.x === hoveredTile.x && f.y === hoveredTile.y) ?? null;
25577
+ return features.find((f3) => f3.x === hoveredTile.x && f3.y === hoveredTile.y) ?? null;
24570
25578
  }, [hoveredTile, features]);
24571
25579
  const hoveredUnit = useMemo(() => {
24572
25580
  if (!hoveredTile) return null;
@@ -24581,7 +25589,7 @@ function CastleBoard({
24581
25589
  [scale, baseOffsetX]
24582
25590
  );
24583
25591
  const handleTileClick = useCallback((x, y) => {
24584
- const feature = features.find((f) => f.x === x && f.y === y);
25592
+ const feature = features.find((f3) => f3.x === x && f3.y === y);
24585
25593
  if (feature) {
24586
25594
  setSelectedFeature(feature);
24587
25595
  onFeatureClick?.(feature);
@@ -24666,7 +25674,7 @@ function LinearView({
24666
25674
  /* @__PURE__ */ jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
24667
25675
  const isDone = i < currentIdx;
24668
25676
  const isCurrent = i === currentIdx;
24669
- return /* @__PURE__ */ jsxs(React86__default.Fragment, { children: [
25677
+ return /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
24670
25678
  i > 0 && /* @__PURE__ */ jsx(
24671
25679
  Typography,
24672
25680
  {
@@ -25320,7 +26328,7 @@ function SequenceBar({
25320
26328
  onSlotRemove(index);
25321
26329
  }, [onSlotRemove, playing]);
25322
26330
  const paddedSlots = Array.from({ length: maxSlots }, (_, i) => slots[i]);
25323
- return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React86__default.Fragment, { children: [
26331
+ return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React88__default.Fragment, { children: [
25324
26332
  i > 0 && /* @__PURE__ */ jsx(
25325
26333
  Typography,
25326
26334
  {
@@ -25463,7 +26471,7 @@ function SequencerBoard({
25463
26471
  setPlayState("idle");
25464
26472
  setCurrentStep(-1);
25465
26473
  emit("UI:PLAY_SOUND", { key: "fail" });
25466
- const correctCount2 = feedback.filter((f) => f === "correct").length;
26474
+ const correctCount2 = feedback.filter((f3) => f3 === "correct").length;
25467
26475
  for (let ci = 0; ci < correctCount2; ci++) {
25468
26476
  setTimeout(() => {
25469
26477
  emit("UI:PLAY_SOUND", { key: "correctSlot" });
@@ -25490,8 +26498,8 @@ function SequencerBoard({
25490
26498
  };
25491
26499
  const usedIds = entity.allowDuplicates === false ? slots.filter(Boolean).map((s) => s?.id || "") : [];
25492
26500
  const showHint = attempts >= 3 && !!entity.hint;
25493
- const hasFeedback = slotFeedback.some((f) => f !== null);
25494
- const correctCount = slotFeedback.filter((f) => f === "correct").length;
26501
+ const hasFeedback = slotFeedback.some((f3) => f3 !== null);
26502
+ const correctCount = slotFeedback.filter((f3) => f3 === "correct").length;
25495
26503
  const encourageKey = ENCOURAGEMENT_KEYS[Math.min(attempts - 1, ENCOURAGEMENT_KEYS.length - 1)] ?? ENCOURAGEMENT_KEYS[0];
25496
26504
  return /* @__PURE__ */ jsxs(
25497
26505
  VStack,
@@ -27808,7 +28816,7 @@ function InputPattern({
27808
28816
  className
27809
28817
  }) {
27810
28818
  const { emit } = useEventBus();
27811
- const [localValue, setLocalValue] = React86__default.useState(value);
28819
+ const [localValue, setLocalValue] = React88__default.useState(value);
27812
28820
  const handleChange = (e) => {
27813
28821
  setLocalValue(e.target.value);
27814
28822
  if (onChange) {
@@ -27845,7 +28853,7 @@ function TextareaPattern({
27845
28853
  className
27846
28854
  }) {
27847
28855
  const { emit } = useEventBus();
27848
- const [localValue, setLocalValue] = React86__default.useState(value);
28856
+ const [localValue, setLocalValue] = React88__default.useState(value);
27849
28857
  const handleChange = (e) => {
27850
28858
  setLocalValue(e.target.value);
27851
28859
  if (onChange) {
@@ -27876,7 +28884,7 @@ function SelectPattern({
27876
28884
  className
27877
28885
  }) {
27878
28886
  const { emit } = useEventBus();
27879
- const [localValue, setLocalValue] = React86__default.useState(value);
28887
+ const [localValue, setLocalValue] = React88__default.useState(value);
27880
28888
  const handleChange = (e) => {
27881
28889
  setLocalValue(e.target.value);
27882
28890
  if (onChange) {
@@ -27905,7 +28913,7 @@ function CheckboxPattern({
27905
28913
  className
27906
28914
  }) {
27907
28915
  const { emit } = useEventBus();
27908
- const [localChecked, setLocalChecked] = React86__default.useState(checked);
28916
+ const [localChecked, setLocalChecked] = React88__default.useState(checked);
27909
28917
  const handleChange = (e) => {
27910
28918
  setLocalChecked(e.target.checked);
27911
28919
  if (onChange) {
@@ -29787,7 +30795,7 @@ var DocumentViewer = ({
29787
30795
  };
29788
30796
  DocumentViewer.displayName = "DocumentViewer";
29789
30797
  function extractTitle(children) {
29790
- if (!React86__default.isValidElement(children)) return void 0;
30798
+ if (!React88__default.isValidElement(children)) return void 0;
29791
30799
  const props = children.props;
29792
30800
  if (typeof props.title === "string") {
29793
30801
  return props.title;
@@ -30385,7 +31393,7 @@ var MediaGallery = ({
30385
31393
  [selectable, selectedItems, selectionEvent, eventBus]
30386
31394
  );
30387
31395
  const entityData = Array.isArray(entity) ? entity : [];
30388
- const items = React86__default.useMemo(() => {
31396
+ const items = React88__default.useMemo(() => {
30389
31397
  if (propItems) return propItems;
30390
31398
  if (entityData.length === 0) return [];
30391
31399
  return entityData.map((record, idx) => ({
@@ -30547,7 +31555,7 @@ var MediaGallery = ({
30547
31555
  };
30548
31556
  MediaGallery.displayName = "MediaGallery";
30549
31557
  function extractTitle2(children) {
30550
- if (!React86__default.isValidElement(children)) return void 0;
31558
+ if (!React88__default.isValidElement(children)) return void 0;
30551
31559
  const props = children.props;
30552
31560
  if (typeof props.title === "string") {
30553
31561
  return props.title;
@@ -30633,7 +31641,7 @@ function subscribeToDebugEvents(listener) {
30633
31641
 
30634
31642
  // components/organisms/debug/hooks/useDebugData.ts
30635
31643
  function useDebugData() {
30636
- const [data, setData] = React86.useState(() => ({
31644
+ const [data, setData] = React88.useState(() => ({
30637
31645
  traits: [],
30638
31646
  ticks: [],
30639
31647
  guards: [],
@@ -30647,7 +31655,7 @@ function useDebugData() {
30647
31655
  },
30648
31656
  lastUpdate: Date.now()
30649
31657
  }));
30650
- React86.useEffect(() => {
31658
+ React88.useEffect(() => {
30651
31659
  const updateData = () => {
30652
31660
  setData({
30653
31661
  traits: getAllTraits(),
@@ -30916,15 +31924,15 @@ var TYPE_BADGES = {
30916
31924
  state: { variant: "danger", icon: "\u{1F4CA}" }
30917
31925
  };
30918
31926
  function EventFlowTab({ events: events2 }) {
30919
- const [filter, setFilter] = React86.useState("all");
30920
- const containerRef = React86.useRef(null);
30921
- const [autoScroll, setAutoScroll] = React86.useState(true);
30922
- React86.useEffect(() => {
31927
+ const [filter, setFilter] = React88.useState("all");
31928
+ const containerRef = React88.useRef(null);
31929
+ const [autoScroll, setAutoScroll] = React88.useState(true);
31930
+ React88.useEffect(() => {
30923
31931
  if (autoScroll && containerRef.current) {
30924
31932
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
30925
31933
  }
30926
31934
  }, [events2.length, autoScroll]);
30927
- const filteredEvents = React86.useMemo(() => {
31935
+ const filteredEvents = React88.useMemo(() => {
30928
31936
  if (filter === "all") return events2;
30929
31937
  return events2.filter((e) => e.type === filter);
30930
31938
  }, [events2, filter]);
@@ -31023,7 +32031,7 @@ function EventFlowTab({ events: events2 }) {
31023
32031
  }
31024
32032
  EventFlowTab.displayName = "EventFlowTab";
31025
32033
  function GuardsPanel({ guards }) {
31026
- const [filter, setFilter] = React86.useState("all");
32034
+ const [filter, setFilter] = React88.useState("all");
31027
32035
  if (guards.length === 0) {
31028
32036
  return /* @__PURE__ */ jsx(
31029
32037
  EmptyState,
@@ -31036,7 +32044,7 @@ function GuardsPanel({ guards }) {
31036
32044
  }
31037
32045
  const passedCount = guards.filter((g) => g.result).length;
31038
32046
  const failedCount = guards.length - passedCount;
31039
- const filteredGuards = React86.useMemo(() => {
32047
+ const filteredGuards = React88.useMemo(() => {
31040
32048
  if (filter === "all") return guards;
31041
32049
  if (filter === "passed") return guards.filter((g) => g.result);
31042
32050
  return guards.filter((g) => !g.result);
@@ -31180,10 +32188,10 @@ function EffectBadge({ effect }) {
31180
32188
  ] });
31181
32189
  }
31182
32190
  function TransitionTimeline({ transitions: transitions2 }) {
31183
- const containerRef = React86.useRef(null);
31184
- const [autoScroll, setAutoScroll] = React86.useState(true);
31185
- const [expandedId, setExpandedId] = React86.useState(null);
31186
- React86.useEffect(() => {
32191
+ const containerRef = React88.useRef(null);
32192
+ const [autoScroll, setAutoScroll] = React88.useState(true);
32193
+ const [expandedId, setExpandedId] = React88.useState(null);
32194
+ React88.useEffect(() => {
31187
32195
  if (autoScroll && containerRef.current) {
31188
32196
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
31189
32197
  }
@@ -31382,9 +32390,9 @@ function extractPayloadFields(schema, eventName) {
31382
32390
  for (const evt of events2) {
31383
32391
  if (evt.name !== eventName) continue;
31384
32392
  const payload = evt.payload ?? [];
31385
- return payload.map((f) => ({
31386
- name: f.name,
31387
- type: f.type ?? "string"
32393
+ return payload.map((f3) => ({
32394
+ name: f3.name,
32395
+ type: f3.type ?? "string"
31388
32396
  }));
31389
32397
  }
31390
32398
  }
@@ -31444,9 +32452,9 @@ function getAllEvents(traits2) {
31444
32452
  }
31445
32453
  function EventDispatcherTab({ traits: traits2, schema }) {
31446
32454
  const eventBus = useEventBus();
31447
- const [log, setLog] = React86.useState([]);
31448
- const prevStatesRef = React86.useRef(/* @__PURE__ */ new Map());
31449
- React86.useEffect(() => {
32455
+ const [log, setLog] = React88.useState([]);
32456
+ const prevStatesRef = React88.useRef(/* @__PURE__ */ new Map());
32457
+ React88.useEffect(() => {
31450
32458
  for (const trait of traits2) {
31451
32459
  const prev = prevStatesRef.current.get(trait.id);
31452
32460
  if (prev && prev !== trait.currentState) {
@@ -31529,10 +32537,10 @@ function RuntimeDebugger({
31529
32537
  defaultTab,
31530
32538
  schema
31531
32539
  }) {
31532
- const [isCollapsed, setIsCollapsed] = React86.useState(defaultCollapsed);
31533
- const [isVisible, setIsVisible] = React86.useState(mode === "inline" || isDebugEnabled2());
32540
+ const [isCollapsed, setIsCollapsed] = React88.useState(defaultCollapsed);
32541
+ const [isVisible, setIsVisible] = React88.useState(mode === "inline" || isDebugEnabled2());
31534
32542
  const debugData = useDebugData();
31535
- React86.useEffect(() => {
32543
+ React88.useEffect(() => {
31536
32544
  if (mode === "inline") return;
31537
32545
  return onDebugToggle((enabled) => {
31538
32546
  setIsVisible(enabled);
@@ -31541,7 +32549,7 @@ function RuntimeDebugger({
31541
32549
  }
31542
32550
  });
31543
32551
  }, [mode]);
31544
- React86.useEffect(() => {
32552
+ React88.useEffect(() => {
31545
32553
  if (mode === "inline") return;
31546
32554
  const handleKeyDown = (e) => {
31547
32555
  if (e.key === "`" && isVisible) {
@@ -31938,23 +32946,23 @@ var Timeline = ({
31938
32946
  }) => {
31939
32947
  const { t } = useTranslate();
31940
32948
  const entityData = Array.isArray(entity) ? entity : [];
31941
- const items = React86__default.useMemo(() => {
32949
+ const items = React88__default.useMemo(() => {
31942
32950
  if (propItems) return propItems;
31943
32951
  if (entityData.length === 0) return [];
31944
32952
  return entityData.map((record, idx) => {
31945
- const resolveField = (f) => {
31946
- if (typeof f === "string") return f;
31947
- if (f && typeof f === "object" && "name" in f) return String(f.name);
32953
+ const resolveField = (f3) => {
32954
+ if (typeof f3 === "string") return f3;
32955
+ if (f3 && typeof f3 === "object" && "name" in f3) return String(f3.name);
31948
32956
  return "";
31949
32957
  };
31950
32958
  const resolvedFields = fields?.map(resolveField) ?? [];
31951
32959
  const titleField = resolvedFields[0] || "title";
31952
32960
  const descField = resolvedFields[1] || "description";
31953
32961
  const dateField = resolvedFields.find(
31954
- (f) => f.toLowerCase().includes("date")
32962
+ (f3) => f3.toLowerCase().includes("date")
31955
32963
  ) || "date";
31956
32964
  const statusField = resolvedFields.find(
31957
- (f) => f.toLowerCase().includes("status")
32965
+ (f3) => f3.toLowerCase().includes("status")
31958
32966
  ) || "status";
31959
32967
  return {
31960
32968
  id: String(record.id ?? idx),
@@ -32040,7 +33048,7 @@ var Timeline = ({
32040
33048
  };
32041
33049
  Timeline.displayName = "Timeline";
32042
33050
  function extractToastProps(children) {
32043
- if (!React86__default.isValidElement(children)) {
33051
+ if (!React88__default.isValidElement(children)) {
32044
33052
  if (typeof children === "string") {
32045
33053
  return { message: children };
32046
33054
  }
@@ -32071,7 +33079,7 @@ var ToastSlot = ({
32071
33079
  eventBus.emit("UI:CLOSE");
32072
33080
  };
32073
33081
  if (!isVisible) return null;
32074
- const isCustomContent = React86__default.isValidElement(children) && !message;
33082
+ const isCustomContent = React88__default.isValidElement(children) && !message;
32075
33083
  return /* @__PURE__ */ jsx(Box, { className: "fixed bottom-4 right-4 z-50", children: isCustomContent ? children : /* @__PURE__ */ jsx(
32076
33084
  Toast,
32077
33085
  {
@@ -32113,12 +33121,12 @@ WorldMapTemplate.displayName = "WorldMapTemplate";
32113
33121
 
32114
33122
  // components/organisms/component-registry.generated.ts
32115
33123
  function lazyThree(name, loader) {
32116
- const Lazy = React86__default.lazy(() => loader().then((m) => ({ default: m[name] })));
33124
+ const Lazy = React88__default.lazy(() => loader().then((m) => ({ default: m[name] })));
32117
33125
  function ThreeWrapper(props) {
32118
- return React86__default.createElement(
32119
- React86__default.Suspense,
33126
+ return React88__default.createElement(
33127
+ React88__default.Suspense,
32120
33128
  { fallback: null },
32121
- React86__default.createElement(Lazy, props)
33129
+ React88__default.createElement(Lazy, props)
32122
33130
  );
32123
33131
  }
32124
33132
  ThreeWrapper.displayName = `Lazy(${name})`;
@@ -32406,7 +33414,7 @@ function SuspenseConfigProvider({
32406
33414
  config,
32407
33415
  children
32408
33416
  }) {
32409
- return React86__default.createElement(
33417
+ return React88__default.createElement(
32410
33418
  SuspenseConfigContext.Provider,
32411
33419
  { value: config },
32412
33420
  children
@@ -33407,11 +34415,11 @@ var LandingPageTemplate = ({
33407
34415
  /* @__PURE__ */ jsx(
33408
34416
  FeatureGrid,
33409
34417
  {
33410
- items: resolved.features.map((f) => ({
33411
- icon: f.icon,
33412
- title: f.title,
33413
- description: f.description,
33414
- href: f.href
34418
+ items: resolved.features.map((f3) => ({
34419
+ icon: f3.icon,
34420
+ title: f3.title,
34421
+ description: f3.description,
34422
+ href: f3.href
33415
34423
  })),
33416
34424
  columns: featureColumns
33417
34425
  }
@@ -34031,9 +35039,9 @@ function useFileEditor(options) {
34031
35039
  const [openFiles, setOpenFiles] = useState([]);
34032
35040
  const [activeFilePath, setActiveFilePath] = useState(null);
34033
35041
  const [isSaving, setIsSaving] = useState(false);
34034
- const activeFile = openFiles.find((f) => f.path === activeFilePath) || null;
35042
+ const activeFile = openFiles.find((f3) => f3.path === activeFilePath) || null;
34035
35043
  const openFile = useCallback(async (path) => {
34036
- const existing = openFiles.find((f) => f.path === path);
35044
+ const existing = openFiles.find((f3) => f3.path === path);
34037
35045
  if (existing) {
34038
35046
  setActiveFilePath(path);
34039
35047
  return;
@@ -34054,9 +35062,9 @@ function useFileEditor(options) {
34054
35062
  }
34055
35063
  }, [openFiles, fileSystem, extensions]);
34056
35064
  const closeFile = useCallback((path) => {
34057
- setOpenFiles((prev) => prev.filter((f) => f.path !== path));
35065
+ setOpenFiles((prev) => prev.filter((f3) => f3.path !== path));
34058
35066
  if (activeFilePath === path) {
34059
- const remaining = openFiles.filter((f) => f.path !== path);
35067
+ const remaining = openFiles.filter((f3) => f3.path !== path);
34060
35068
  setActiveFilePath(remaining.length > 0 ? remaining[0].path : null);
34061
35069
  }
34062
35070
  }, [activeFilePath, openFiles]);
@@ -34066,7 +35074,7 @@ function useFileEditor(options) {
34066
35074
  const updateFileContent = useCallback((path, content) => {
34067
35075
  setOpenFiles(
34068
35076
  (prev) => prev.map(
34069
- (f) => f.path === path ? { ...f, content, isDirty: true } : f
35077
+ (f3) => f3.path === path ? { ...f3, content, isDirty: true } : f3
34070
35078
  )
34071
35079
  );
34072
35080
  }, []);
@@ -34093,14 +35101,14 @@ function useFileEditor(options) {
34093
35101
  }
34094
35102
  }, [fileSystem, onSchemaUpdate]);
34095
35103
  const saveFile = useCallback(async (path) => {
34096
- const file = openFiles.find((f) => f.path === path);
35104
+ const file = openFiles.find((f3) => f3.path === path);
34097
35105
  if (!file) return;
34098
35106
  setIsSaving(true);
34099
35107
  try {
34100
35108
  await fileSystem.writeFile(path, file.content);
34101
35109
  setOpenFiles(
34102
35110
  (prev) => prev.map(
34103
- (f) => f.path === path ? { ...f, isDirty: false } : f
35111
+ (f3) => f3.path === path ? { ...f3, isDirty: false } : f3
34104
35112
  )
34105
35113
  );
34106
35114
  if (path.endsWith(".orb") || path.endsWith("schema.json")) {
@@ -34119,7 +35127,7 @@ function useFileEditor(options) {
34119
35127
  const saveAllFiles = useCallback(async () => {
34120
35128
  setIsSaving(true);
34121
35129
  try {
34122
- const dirtyFiles = openFiles.filter((f) => f.isDirty);
35130
+ const dirtyFiles = openFiles.filter((f3) => f3.isDirty);
34123
35131
  for (const file of dirtyFiles) {
34124
35132
  await saveFile(file.path);
34125
35133
  }
@@ -34789,7 +35797,7 @@ function EntityDataProvider({
34789
35797
  adapter,
34790
35798
  children
34791
35799
  }) {
34792
- return React86__default.createElement(
35800
+ return React88__default.createElement(
34793
35801
  EntityDataContext.Provider,
34794
35802
  { value: adapter },
34795
35803
  children
@@ -35615,4 +36623,4 @@ function useGitHubBranches(owner, repo, enabled = true) {
35615
36623
  });
35616
36624
  }
35617
36625
 
35618
- export { ALL_PRESETS, AR_BOOK_FIELDS, AboutPageTemplate, Accordion, ActionButton, ActionButtons, Card2 as ActionCard, ActionPalette, ActionTile, Alert, AnimatedCounter, ArticleSection, AuthLayout, Avatar, Badge, BattleBoard, BattleTemplate, BookChapterView, BookCoverPage, BookNavBar, BookTableOfContents, BookViewer, Box, Breadcrumb, BuilderBoard, Button, ButtonGroup, CTABanner, CalendarGrid, CanvasEffect, Card, CardBody, CardContent, CardFooter, CardGrid, CardHeader, CardTitle, Carousel, CaseStudyCard, CaseStudyOrganism, CastleBoard, CastleTemplate, Center, Chart, ChartLegend, Checkbox, ChoiceButton, ClassifierBoard, CodeBlock, CodeExample, CodeView, CodeViewer, CollapsibleSection, CombatLog, ComboCounter, CommunityLinks, ConditionalWrapper, ConfettiEffect, ConfirmDialog, Container, ContentRenderer, ContentSection, ControlButton, CounterTemplate, CraftingRecipe, DEFAULT_SLOTS, DIAMOND_TOP_Y, DPad, DamageNumber, DashboardGrid, DashboardLayout, DataGrid, DataList, DataTable, DateRangeSelector, DayCell, DebuggerBoard, DetailPanel, DialogueBox, DialogueBubble, Divider, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, ENTITY_EVENTS, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EmptyState, EnemyPlate, EntityDataProvider, EntityDisplayEvents, ErrorBoundary, ErrorState, EventHandlerBoard, EventLog, FEATURE_COLORS, FEATURE_TYPES, FLOOR_HEIGHT, FeatureCard, FeatureDetailPageTemplate, FeatureGrid, FeatureGridOrganism, FilterGroup, Flex, FlipCard, FlipContainer, FloatingActionButton, Form, FormActions, FormField, FormLayout, FormSection, FormSectionHeader, GameAudioContext, GameAudioProvider, GameAudioToggle, GameCanvas2D, GameHud, GameMenu, GameOverScreen, GameShell, GameTemplate, GenericAppTemplate, GraphCanvas, GraphView, Grid, HStack, Header, Heading, HealthBar, HealthPanel, HeroOrganism, HeroSection, I18nProvider, IDENTITY_BOOK_FIELDS, Icon, InfiniteScrollSentinel, Input, InputGroup, InstallBox, InventoryGrid, InventoryPanel, IsometricCanvas, ItemSlot, JazariStateMachine, Label, LandingPageTemplate, LawReferenceTooltip, Lightbox, LineChart, List, LoadingState, MapView, MarkdownContent, MarketingStatCard, MasterDetail, MediaGallery, Menu, Meter, MiniMap, Modal, ModalSlot, Navigation, NegotiatorBoard, NotifyListener, NumberStepper, ObjectRulePanel, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, Pagination, PhysicsManager, PlatformerCanvas, Popover, PowerupSlots, PricingCard, PricingGrid, PricingOrganism, PricingPageTemplate, ProgressBar, ProgressDots, PullToRefresh, QuestTracker, QuizBlock, Radio, RangeSlider, RelationSelect, RepeatableFormSection, ResourceBar, ResourceCounter, RuleEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, ScoreBoard, ScoreDisplay, SearchInput, Section, SectionHeader, Select, SequenceBar, SequencerBoard, ServiceCatalog, ShowcaseCard, ShowcaseOrganism, SidePanel, Sidebar, SignaturePad, SimpleGrid, SimulationCanvas, SimulationControls, SimulationGraph, SimulatorBoard, Skeleton, SlotContentRenderer, SocialProof, SortableList, Spacer, Spinner, Split, SplitPane, SplitSection, Sprite, Stack, StarRating, StatBadge, StatCard, StatDisplay, StateArchitectBoard, StateIndicator, StateMachineView, StateNode2 as StateNode, StatsGrid, StatsOrganism, StatusBar, StatusDot, StatusEffect, StepFlow, StepFlowOrganism, SwipeableRow, Switch, TERRAIN_COLORS, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, Table, Tabs, TagCloud, TeamCard, TeamOrganism, TerrainPalette, Text, TextHighlight, Textarea, ThemeSelector, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TraitSlot, TraitStateViewer, TransitionArrow, TrendIndicator, TurnIndicator, TurnPanel, TypewriterText, Typography, UISlotComponent, UISlotRenderer, UncontrolledBattleBoard, UnitCommandBar, UploadDropZone, VStack, VariablePanel, ViolationAlert, WaypointMarker, WizardContainer, WizardNavigation, WizardProgress, WorldMapBoard, WorldMapTemplate, XPBar, applyTemporaryEffect, calculateAttackTargets, calculateDamage, calculateValidMoves, clearEntities, cn, combatAnimations, combatClasses, combatEffects, createInitialGameState, createTranslate, createUnitAnimationState, drawSprite, entityDataKeys, generateCombatMessage, getAllEntities, getByType, getCurrentFrame, getEntity, getSingleton, inferDirection, isoToScreen, mapBookData, parseQueryBinding, pendulum, projectileMotion, removeEntity, resolveFieldMap, resolveFrame, resolveSheetDirection, screenToIso, spawnEntity, springOscillator, tickAnimationState, transitionAnimation, updateEntity, updateSingleton, useAgentChat, useAuthContext, useBattleState, useCamera, useCompile, useConnectGitHub, useCreateEntity, useDeepAgentGeneration, useDeleteEntity, useDisconnectGitHub, useDragReorder, useEmitEvent, useEntities, useEntitiesByType, useEntity, useEntity2 as useEntityById, useEntityDataAdapter, useEntityDetail, useEntityList, useEntityListSuspense, useEntityMutations, useEntitySuspense, useEventBus, useEventListener, useExtensions, useFileEditor, useFileSystem, useGameAudio, useGameAudioContext, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useImageCache, useInfiniteScroll, useInput, useLongPress, useOrbitalHistory, useOrbitalMutations, usePhysics, usePhysics2D, usePinchZoom, usePlayer, usePreview, usePullToRefresh, useQuerySingleton, useResolvedEntity, useSelectedEntity, useSendOrbitalEvent, useSingletonEntity, useSpriteAnimations, useSwipeGesture, useTranslate, useUIEvents, useUISlotManager, useUpdateEntity, useValidation };
36626
+ export { ALL_PRESETS, AR_BOOK_FIELDS, AboutPageTemplate, Accordion, ActionButton, ActionButtons, Card2 as ActionCard, ActionPalette, ActionTile, Alert, AnimatedCounter, ArticleSection, AuthLayout, Avatar, Badge, BattleBoard, BattleTemplate, BookChapterView, BookCoverPage, BookNavBar, BookTableOfContents, BookViewer, Box, Breadcrumb, BuilderBoard, Button, ButtonGroup, CTABanner, CalendarGrid, CanvasEffect, Card, CardBody, CardContent, CardFooter, CardGrid, CardHeader, CardTitle, Carousel, CaseStudyCard, CaseStudyOrganism, CastleBoard, CastleTemplate, Center, Chart, ChartLegend, Checkbox, ChoiceButton, ClassifierBoard, CodeBlock, CodeExample, CodeView, CodeViewer, CollapsibleSection, CombatLog, ComboCounter, CommunityLinks, ConditionalWrapper, ConfettiEffect, ConfirmDialog, Container, ContentRenderer, ContentSection, ControlButton, CounterTemplate, CraftingRecipe, DEFAULT_SLOTS, DIAMOND_TOP_Y, DPad, DamageNumber, DashboardGrid, DashboardLayout, DataGrid, DataList, DataTable, DateRangeSelector, DayCell, DebuggerBoard, DetailPanel, DialogueBox, DialogueBubble, Divider, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, ENTITY_EVENTS, EdgeDecoration, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EmptyState, EnemyPlate, EntityDataProvider, EntityDisplayEvents, ErrorBoundary, ErrorState, EventHandlerBoard, EventLog, FEATURE_COLORS, FEATURE_TYPES, FLOOR_HEIGHT, FeatureCard, FeatureDetailPageTemplate, FeatureGrid, FeatureGridOrganism, FilterGroup, Flex, FlipCard, FlipContainer, FloatingActionButton, Form, FormActions, FormField, FormLayout, FormSection, FormSectionHeader, GameAudioContext, GameAudioProvider, GameAudioToggle, GameCanvas2D, GameHud, GameMenu, GameOverScreen, GameShell, GameTemplate, GenericAppTemplate, GeometricPattern, GraphCanvas, GraphView, Grid, HStack, Header, Heading, HealthBar, HealthPanel, HeroOrganism, HeroSection, I18nProvider, IDENTITY_BOOK_FIELDS, Icon, InfiniteScrollSentinel, Input, InputGroup, InstallBox, InventoryGrid, InventoryPanel, IsometricCanvas, ItemSlot, JazariStateMachine, Label, LandingPageTemplate, LawReferenceTooltip, Lightbox, LineChart, List, LoadingState, MapView, MarkdownContent, MarketingStatCard, MasterDetail, MediaGallery, Menu, Meter, MiniMap, Modal, ModalSlot, Navigation, NegotiatorBoard, NotifyListener, NumberStepper, ObjectRulePanel, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, Pagination, PatternTile, PhysicsManager, PlatformerCanvas, Popover, PowerupSlots, PricingCard, PricingGrid, PricingOrganism, PricingPageTemplate, ProgressBar, ProgressDots, PullToRefresh, QuestTracker, QuizBlock, Radio, RangeSlider, RelationSelect, RepeatableFormSection, ResourceBar, ResourceCounter, RuleEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, ScoreBoard, ScoreDisplay, SearchInput, Section, SectionHeader, Select, SequenceBar, SequencerBoard, ServiceCatalog, ShowcaseCard, ShowcaseOrganism, SidePanel, Sidebar, SignaturePad, SimpleGrid, SimulationCanvas, SimulationControls, SimulationGraph, SimulatorBoard, Skeleton, SlotContentRenderer, SocialProof, SortableList, Spacer, Spinner, Split, SplitPane, SplitSection, Sprite, Stack, StarRating, StatBadge, StatCard, StatDisplay, StateArchitectBoard, StateIndicator, StateMachineView, StateNode2 as StateNode, StatsGrid, StatsOrganism, StatusBar, StatusDot, StatusEffect, StepFlow, StepFlowOrganism, SwipeableRow, Switch, TERRAIN_COLORS, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, Table, Tabs, TagCloud, TeamCard, TeamOrganism, TerrainPalette, Text, TextHighlight, Textarea, ThemeSelector, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TraitSlot, TraitStateViewer, TransitionArrow, TrendIndicator, TurnIndicator, TurnPanel, TypewriterText, Typography, UISlotComponent, UISlotRenderer, UncontrolledBattleBoard, UnitCommandBar, UploadDropZone, VStack, VariablePanel, ViolationAlert, WaypointMarker, WizardContainer, WizardNavigation, WizardProgress, WorldMapBoard, WorldMapTemplate, XPBar, applyTemporaryEffect, calculateAttackTargets, calculateDamage, calculateValidMoves, clearEntities, cn, combatAnimations, combatClasses, combatEffects, createInitialGameState, createTranslate, createUnitAnimationState, drawSprite, entityDataKeys, generateCombatMessage, getAllEntities, getByType, getCurrentFrame, getEntity, getSingleton, getTileDimensions, inferDirection, isoToScreen, mapBookData, parseQueryBinding, pendulum, projectileMotion, removeEntity, resolveFieldMap, resolveFrame, resolveSheetDirection, screenToIso, spawnEntity, springOscillator, tickAnimationState, transitionAnimation, updateEntity, updateSingleton, useAgentChat, useAuthContext, useBattleState, useCamera, useCompile, useConnectGitHub, useCreateEntity, useDeepAgentGeneration, useDeleteEntity, useDisconnectGitHub, useDragReorder, useEmitEvent, useEntities, useEntitiesByType, useEntity, useEntity2 as useEntityById, useEntityDataAdapter, useEntityDetail, useEntityList, useEntityListSuspense, useEntityMutations, useEntitySuspense, useEventBus, useEventListener, useExtensions, useFileEditor, useFileSystem, useGameAudio, useGameAudioContext, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useImageCache, useInfiniteScroll, useInput, useLongPress, useOrbitalHistory, useOrbitalMutations, usePhysics, usePhysics2D, usePinchZoom, usePlayer, usePreview, usePullToRefresh, useQuerySingleton, useResolvedEntity, useSelectedEntity, useSendOrbitalEvent, useSingletonEntity, useSpriteAnimations, useSwipeGesture, useTranslate, useUIEvents, useUISlotManager, useUpdateEntity, useValidation };