@almadar/ui 4.25.0 → 4.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
- import * as React115 from 'react';
2
- import React115__default, { createContext, useContext, useMemo, useRef, useEffect, useCallback, Suspense, useState, useLayoutEffect, lazy, useId } from 'react';
1
+ import * as React105 from 'react';
2
+ import React105__default, { createContext, useContext, useMemo, useRef, useEffect, useCallback, Suspense, useState, useLayoutEffect, lazy, useId } from 'react';
3
3
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
4
  import { EventBusContext, useTraitScope, TraitScopeProvider } from '@almadar/ui/providers';
5
5
  import { clsx } from 'clsx';
@@ -8,7 +8,6 @@ import * as LucideIcons from 'lucide-react';
8
8
  import { X, AlertTriangle, Info, AlertCircle, CheckCircle, Loader2, List, Printer, ChevronRight, ChevronLeft, Check, Copy, Code, FileText, WrapText, Trash2, Menu as Menu$1, Search, Bell, ChevronDown, LogOut, ZoomOut, ZoomIn, Download, FileQuestion, Inbox, XCircle, Filter, Plus, Pause, Play, RotateCcw, Package, Calendar, Pencil, Eye, MoreHorizontal, Image as Image$1, Upload, Minus, ArrowLeft, HelpCircle, ChevronUp, Eraser, Star, TrendingUp, TrendingDown, ArrowUp, ArrowDown, MoreVertical, Sun, Moon, Circle, Clock, CheckCircle2, ArrowRight, FileWarning, SkipForward, Bug, Send, Wrench, User, Tag, DollarSign, Zap, Sword, Move, Heart, Shield } from 'lucide-react';
9
9
  import { evaluate, createMinimalContext } from '@almadar/evaluator';
10
10
  import { useUISlots } from '@almadar/ui/context';
11
- import { getPatternDefinition, getComponentForPattern as getComponentForPattern$1 } from '@almadar/patterns';
12
11
  import { createPortal } from 'react-dom';
13
12
  import { Link, Outlet, useLocation } from 'react-router-dom';
14
13
  import ReactMarkdown from 'react-markdown';
@@ -35,6 +34,7 @@ import langToml from 'react-syntax-highlighter/dist/esm/languages/prism/toml.js'
35
34
  import langGo from 'react-syntax-highlighter/dist/esm/languages/prism/go.js';
36
35
  import langGraphql from 'react-syntax-highlighter/dist/esm/languages/prism/graphql.js';
37
36
  import { isInlineTrait } from '@almadar/core';
37
+ import { getPatternDefinition, getComponentForPattern as getComponentForPattern$1 } from '@almadar/patterns';
38
38
 
39
39
  var __defProp = Object.defineProperty;
40
40
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -729,7 +729,7 @@ var init_Box = __esm({
729
729
  fixed: "fixed",
730
730
  sticky: "sticky"
731
731
  };
732
- Box = React115__default.forwardRef(
732
+ Box = React105__default.forwardRef(
733
733
  ({
734
734
  padding,
735
735
  paddingX,
@@ -1428,7 +1428,7 @@ function resolveIconProp(value, sizeClass) {
1428
1428
  const IconComp = value;
1429
1429
  return /* @__PURE__ */ jsx(IconComp, { className: sizeClass });
1430
1430
  }
1431
- if (React115__default.isValidElement(value)) {
1431
+ if (React105__default.isValidElement(value)) {
1432
1432
  return value;
1433
1433
  }
1434
1434
  if (typeof value === "object" && value !== null && "render" in value) {
@@ -1504,7 +1504,7 @@ var init_Button = __esm({
1504
1504
  md: "h-4 w-4",
1505
1505
  lg: "h-5 w-5"
1506
1506
  };
1507
- Button = React115__default.forwardRef(
1507
+ Button = React105__default.forwardRef(
1508
1508
  ({
1509
1509
  className,
1510
1510
  variant = "primary",
@@ -1607,7 +1607,7 @@ var init_Badge = __esm({
1607
1607
  md: "px-2.5 py-1 text-sm",
1608
1608
  lg: "px-3 py-1.5 text-base"
1609
1609
  };
1610
- Badge = React115__default.forwardRef(
1610
+ Badge = React105__default.forwardRef(
1611
1611
  ({ className, variant = "default", size = "sm", amount, label, icon, children, ...props }, ref) => {
1612
1612
  const iconSizes2 = { sm: "w-3 h-3", md: "w-3.5 h-3.5", lg: "w-4 h-4" };
1613
1613
  const resolvedIcon = typeof icon === "string" ? (() => {
@@ -1767,7 +1767,7 @@ var Input;
1767
1767
  var init_Input = __esm({
1768
1768
  "components/atoms/Input.tsx"() {
1769
1769
  init_cn();
1770
- Input = React115__default.forwardRef(
1770
+ Input = React105__default.forwardRef(
1771
1771
  ({
1772
1772
  className,
1773
1773
  inputType,
@@ -1885,7 +1885,7 @@ var Label;
1885
1885
  var init_Label = __esm({
1886
1886
  "components/atoms/Label.tsx"() {
1887
1887
  init_cn();
1888
- Label = React115__default.forwardRef(
1888
+ Label = React105__default.forwardRef(
1889
1889
  ({ className, required, children, ...props }, ref) => {
1890
1890
  return /* @__PURE__ */ jsxs(
1891
1891
  "label",
@@ -1911,7 +1911,7 @@ var Textarea;
1911
1911
  var init_Textarea = __esm({
1912
1912
  "components/atoms/Textarea.tsx"() {
1913
1913
  init_cn();
1914
- Textarea = React115__default.forwardRef(
1914
+ Textarea = React105__default.forwardRef(
1915
1915
  ({ className, error, ...props }, ref) => {
1916
1916
  return /* @__PURE__ */ jsx(
1917
1917
  "textarea",
@@ -1940,7 +1940,7 @@ var Select;
1940
1940
  var init_Select = __esm({
1941
1941
  "components/atoms/Select.tsx"() {
1942
1942
  init_cn();
1943
- Select = React115__default.forwardRef(
1943
+ Select = React105__default.forwardRef(
1944
1944
  ({ className, options, placeholder, error, ...props }, ref) => {
1945
1945
  return /* @__PURE__ */ jsxs("div", { className: "relative", children: [
1946
1946
  /* @__PURE__ */ jsxs(
@@ -1982,7 +1982,7 @@ var Checkbox;
1982
1982
  var init_Checkbox = __esm({
1983
1983
  "components/atoms/Checkbox.tsx"() {
1984
1984
  init_cn();
1985
- Checkbox = React115__default.forwardRef(
1985
+ Checkbox = React105__default.forwardRef(
1986
1986
  ({ className, label, id, ...props }, ref) => {
1987
1987
  const inputId = id || `checkbox-${Math.random().toString(36).substr(2, 9)}`;
1988
1988
  return /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
@@ -2064,7 +2064,7 @@ var init_Card = __esm({
2064
2064
  md: "shadow",
2065
2065
  lg: "shadow-lg"
2066
2066
  };
2067
- Card = React115__default.forwardRef(
2067
+ Card = React105__default.forwardRef(
2068
2068
  ({
2069
2069
  className,
2070
2070
  variant = "bordered",
@@ -2100,9 +2100,9 @@ var init_Card = __esm({
2100
2100
  }
2101
2101
  );
2102
2102
  Card.displayName = "Card";
2103
- CardHeader = React115__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
2103
+ CardHeader = React105__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
2104
2104
  CardHeader.displayName = "CardHeader";
2105
- CardTitle = React115__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2105
+ CardTitle = React105__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2106
2106
  "h3",
2107
2107
  {
2108
2108
  ref,
@@ -2115,11 +2115,11 @@ var init_Card = __esm({
2115
2115
  }
2116
2116
  ));
2117
2117
  CardTitle.displayName = "CardTitle";
2118
- CardContent = React115__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
2118
+ CardContent = React105__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
2119
2119
  CardContent.displayName = "CardContent";
2120
2120
  CardBody = CardContent;
2121
2121
  CardBody.displayName = "CardBody";
2122
- CardFooter = React115__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2122
+ CardFooter = React105__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
2123
2123
  "div",
2124
2124
  {
2125
2125
  ref,
@@ -2140,7 +2140,7 @@ var init_Spinner = __esm({
2140
2140
  md: "h-6 w-6",
2141
2141
  lg: "h-8 w-8"
2142
2142
  };
2143
- Spinner = React115__default.forwardRef(
2143
+ Spinner = React105__default.forwardRef(
2144
2144
  ({ className, size = "md", ...props }, ref) => {
2145
2145
  return /* @__PURE__ */ jsx(
2146
2146
  "div",
@@ -2588,7 +2588,7 @@ var Radio;
2588
2588
  var init_Radio = __esm({
2589
2589
  "components/atoms/Radio.tsx"() {
2590
2590
  init_cn();
2591
- Radio = React115__default.forwardRef(
2591
+ Radio = React105__default.forwardRef(
2592
2592
  ({
2593
2593
  label,
2594
2594
  helperText,
@@ -2602,7 +2602,7 @@ var init_Radio = __esm({
2602
2602
  }, ref) => {
2603
2603
  const radioId = id || `radio-${Math.random().toString(36).substr(2, 9)}`;
2604
2604
  const hasError = !!error;
2605
- const sizeClasses6 = {
2605
+ const sizeClasses5 = {
2606
2606
  sm: "w-4 h-4",
2607
2607
  md: "w-5 h-5",
2608
2608
  lg: "w-6 h-6"
@@ -2636,7 +2636,7 @@ var init_Radio = __esm({
2636
2636
  className: cn(
2637
2637
  "flex items-center justify-center",
2638
2638
  "border-[length:var(--border-width)] transition-all cursor-pointer",
2639
- sizeClasses6[size],
2639
+ sizeClasses5[size],
2640
2640
  hasError ? "border-error peer-focus:ring-error/20" : "border-border peer-focus:ring-ring/20",
2641
2641
  checked ? hasError ? "border-error" : "border-primary bg-primary" : "",
2642
2642
  "peer-focus:outline-none peer-focus:ring-2 peer-focus:ring-offset-2",
@@ -2699,7 +2699,7 @@ var init_Switch = __esm({
2699
2699
  "components/atoms/Switch.tsx"() {
2700
2700
  "use client";
2701
2701
  init_cn();
2702
- Switch = React115.forwardRef(
2702
+ Switch = React105.forwardRef(
2703
2703
  ({
2704
2704
  checked,
2705
2705
  defaultChecked = false,
@@ -2710,10 +2710,10 @@ var init_Switch = __esm({
2710
2710
  name,
2711
2711
  className
2712
2712
  }, ref) => {
2713
- const [isChecked, setIsChecked] = React115.useState(
2713
+ const [isChecked, setIsChecked] = React105.useState(
2714
2714
  checked !== void 0 ? checked : defaultChecked
2715
2715
  );
2716
- React115.useEffect(() => {
2716
+ React105.useEffect(() => {
2717
2717
  if (checked !== void 0) {
2718
2718
  setIsChecked(checked);
2719
2719
  }
@@ -3027,12 +3027,6 @@ var init_ThemeToggle = __esm({
3027
3027
  ThemeToggle.displayName = "ThemeToggle";
3028
3028
  }
3029
3029
  });
3030
- var init_ThemeSelector = __esm({
3031
- "components/atoms/ThemeSelector.tsx"() {
3032
- "use client";
3033
- init_ThemeContext();
3034
- }
3035
- });
3036
3030
  var FlipContainer;
3037
3031
  var init_FlipContainer = __esm({
3038
3032
  "components/atoms/FlipContainer.tsx"() {
@@ -3139,8 +3133,8 @@ var init_LawReferenceTooltip = __esm({
3139
3133
  position = "top",
3140
3134
  className
3141
3135
  }) => {
3142
- const [isVisible, setIsVisible] = React115__default.useState(false);
3143
- const timeoutRef = React115__default.useRef(null);
3136
+ const [isVisible, setIsVisible] = React105__default.useState(false);
3137
+ const timeoutRef = React105__default.useRef(null);
3144
3138
  const handleMouseEnter = () => {
3145
3139
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
3146
3140
  timeoutRef.current = setTimeout(() => setIsVisible(true), 200);
@@ -3149,7 +3143,7 @@ var init_LawReferenceTooltip = __esm({
3149
3143
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
3150
3144
  setIsVisible(false);
3151
3145
  };
3152
- React115__default.useEffect(() => {
3146
+ React105__default.useEffect(() => {
3153
3147
  return () => {
3154
3148
  if (timeoutRef.current) clearTimeout(timeoutRef.current);
3155
3149
  };
@@ -3359,7 +3353,7 @@ var init_StatusDot = __esm({
3359
3353
  md: "w-2.5 h-2.5",
3360
3354
  lg: "w-3 h-3"
3361
3355
  };
3362
- StatusDot = React115__default.forwardRef(
3356
+ StatusDot = React105__default.forwardRef(
3363
3357
  ({ className, status = "offline", pulse = false, size = "md", label, ...props }, ref) => {
3364
3358
  return /* @__PURE__ */ jsx(
3365
3359
  "span",
@@ -3412,7 +3406,7 @@ var init_TrendIndicator = __esm({
3412
3406
  down: TrendingDown,
3413
3407
  flat: ArrowRight
3414
3408
  };
3415
- TrendIndicator = React115__default.forwardRef(
3409
+ TrendIndicator = React105__default.forwardRef(
3416
3410
  ({
3417
3411
  className,
3418
3412
  value,
@@ -3479,7 +3473,7 @@ var init_RangeSlider = __esm({
3479
3473
  md: "w-4 h-4",
3480
3474
  lg: "w-5 h-5"
3481
3475
  };
3482
- RangeSlider = React115__default.forwardRef(
3476
+ RangeSlider = React105__default.forwardRef(
3483
3477
  ({
3484
3478
  className,
3485
3479
  min = 0,
@@ -3988,899 +3982,6 @@ var init_TypewriterText = __esm({
3988
3982
  TypewriterText.displayName = "TypewriterText";
3989
3983
  }
3990
3984
  });
3991
- var levelToVariant, alignClasses, alignToStack, SectionHeader;
3992
- var init_SectionHeader = __esm({
3993
- "components/atoms/SectionHeader.tsx"() {
3994
- init_cn();
3995
- init_Stack();
3996
- init_Typography();
3997
- levelToVariant = {
3998
- 1: "h1",
3999
- 2: "h2",
4000
- 3: "h3"
4001
- };
4002
- alignClasses = {
4003
- center: "text-center",
4004
- left: "text-left",
4005
- right: "text-right"
4006
- };
4007
- alignToStack = {
4008
- center: "center",
4009
- left: "start",
4010
- right: "end"
4011
- };
4012
- SectionHeader = ({ title, subtitle, align = "center", level = 2, className }) => {
4013
- const variant = levelToVariant[level];
4014
- return /* @__PURE__ */ jsxs(
4015
- VStack,
4016
- {
4017
- gap: "sm",
4018
- align: alignToStack[align],
4019
- className: cn(alignClasses[align], className),
4020
- children: [
4021
- /* @__PURE__ */ jsx(Typography, { variant, weight: "bold", children: title }),
4022
- subtitle ? /* @__PURE__ */ jsx(Typography, { variant: "body", color: "muted", children: subtitle }) : null
4023
- ]
4024
- }
4025
- );
4026
- };
4027
- SectionHeader.displayName = "SectionHeader";
4028
- }
4029
- });
4030
- var sizeClasses5, MarketingStatCard;
4031
- var init_StatCard = __esm({
4032
- "components/atoms/StatCard.tsx"() {
4033
- init_cn();
4034
- init_Stack();
4035
- init_Typography();
4036
- sizeClasses5 = {
4037
- sm: "text-2xl",
4038
- md: "text-4xl",
4039
- lg: "text-5xl"
4040
- };
4041
- MarketingStatCard = ({ value, label, size = "md", className }) => {
4042
- return /* @__PURE__ */ jsxs(VStack, { gap: "xs", align: "center", className: cn(className), children: [
4043
- /* @__PURE__ */ jsx(
4044
- Typography,
4045
- {
4046
- weight: "bold",
4047
- color: "primary",
4048
- className: cn(sizeClasses5[size]),
4049
- children: value
4050
- }
4051
- ),
4052
- /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: label })
4053
- ] });
4054
- };
4055
- MarketingStatCard.displayName = "MarketingStatCard";
4056
- }
4057
- });
4058
- var backgroundClasses, paddingClasses, ContentSection;
4059
- var init_ContentSection = __esm({
4060
- "components/atoms/ContentSection.tsx"() {
4061
- init_cn();
4062
- init_Box();
4063
- backgroundClasses = {
4064
- default: "",
4065
- alt: "bg-surface",
4066
- dark: "bg-foreground text-background",
4067
- gradient: [
4068
- "bg-gradient-to-b",
4069
- "from-[var(--color-primary)]/5",
4070
- "to-[var(--color-secondary)]/5"
4071
- ].join(" ")
4072
- };
4073
- paddingClasses = {
4074
- sm: "py-12",
4075
- md: "py-16",
4076
- lg: "py-24"
4077
- };
4078
- ContentSection = React115__default.forwardRef(
4079
- ({ children, background = "default", padding = "lg", id, className }, ref) => {
4080
- return /* @__PURE__ */ jsx(
4081
- Box,
4082
- {
4083
- ref,
4084
- as: "section",
4085
- id,
4086
- className: cn(
4087
- backgroundClasses[background],
4088
- paddingClasses[padding],
4089
- className
4090
- ),
4091
- children: /* @__PURE__ */ jsx(Box, { className: "mx-auto max-w-7xl px-4 sm:px-6 lg:px-8", children })
4092
- }
4093
- );
4094
- }
4095
- );
4096
- ContentSection.displayName = "ContentSection";
4097
- }
4098
- });
4099
- function lineIntersection(x1, y1, x2, y2, x3, y3, x4, y4) {
4100
- const denom = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);
4101
- if (Math.abs(denom) < 1e-10) return [(x1 + x3) / 2, (y1 + y3) / 2];
4102
- const t = ((x1 - x3) * (y3 - y4) - (y1 - y3) * (x3 - x4)) / denom;
4103
- return [x1 + t * (x2 - x1), y1 + t * (y2 - y1)];
4104
- }
4105
- function f(n) {
4106
- return n.toFixed(3);
4107
- }
4108
- function picStar(cx, cy, R, n, theta, extent) {
4109
- const verts = [];
4110
- for (let k = 0; k < n; k++) {
4111
- const angle = PI / n + k * (2 * PI) / n;
4112
- verts.push([cx + R * Math.cos(angle), cy + R * Math.sin(angle)]);
4113
- }
4114
- const mids = [];
4115
- for (let k = 0; k < n; k++) {
4116
- const next = (k + 1) % n;
4117
- mids.push([(verts[k][0] + verts[next][0]) / 2, (verts[k][1] + verts[next][1]) / 2]);
4118
- }
4119
- const innerPts = [];
4120
- for (let k = 0; k < n; k++) {
4121
- const next = (k + 1) % n;
4122
- const M1 = mids[k];
4123
- const M2 = mids[next];
4124
- const edx1 = verts[(k + 1) % n][0] - verts[k][0];
4125
- const edy1 = verts[(k + 1) % n][1] - verts[k][1];
4126
- const elen1 = Math.sqrt(edx1 * edx1 + edy1 * edy1);
4127
- const tx1 = edx1 / elen1;
4128
- const ty1 = edy1 / elen1;
4129
- const r1x = tx1 * Math.cos(theta) + ty1 * Math.sin(theta);
4130
- const r1y = -tx1 * Math.sin(theta) + ty1 * Math.cos(theta);
4131
- const edx2 = verts[(next + 1) % n][0] - verts[next][0];
4132
- const edy2 = verts[(next + 1) % n][1] - verts[next][1];
4133
- const elen2 = Math.sqrt(edx2 * edx2 + edy2 * edy2);
4134
- const tx2 = edx2 / elen2;
4135
- const ty2 = edy2 / elen2;
4136
- const bTheta = PI - theta;
4137
- const r2x = tx2 * Math.cos(bTheta) + ty2 * Math.sin(bTheta);
4138
- const r2y = -tx2 * Math.sin(bTheta) + ty2 * Math.cos(bTheta);
4139
- const P = lineIntersection(
4140
- M1[0],
4141
- M1[1],
4142
- M1[0] + r1x * extent,
4143
- M1[1] + r1y * extent,
4144
- M2[0],
4145
- M2[1],
4146
- M2[0] + r2x * extent,
4147
- M2[1] + r2y * extent
4148
- );
4149
- innerPts.push(P);
4150
- }
4151
- const starPath = mids.map((m, k) => {
4152
- const inner = innerPts[k];
4153
- const nextMid = mids[(k + 1) % n];
4154
- return `M ${f(m[0])},${f(m[1])} L ${f(inner[0])},${f(inner[1])} L ${f(nextMid[0])},${f(nextMid[1])}`;
4155
- }).join(" ");
4156
- return { starPath, mids, verts };
4157
- }
4158
- function Star8({ size, color, strokeWidth }) {
4159
- const s = size;
4160
- const cx = s / 2;
4161
- const cy = s / 2;
4162
- const a = s / (1 + Math.SQRT2);
4163
- const R = a / (2 * Math.sin(PI / 8));
4164
- const theta = 67.5 * PI / 180;
4165
- const { starPath, mids } = picStar(cx, cy, R, 8, theta, s);
4166
- const corners = [[0, 0], [s, 0], [s, s], [0, s]];
4167
- const crossPaths = [];
4168
- for (const [cornX, cornY] of corners) {
4169
- const dists = mids.map((m, i) => ({ i, d: Math.hypot(m[0] - cornX, m[1] - cornY) }));
4170
- dists.sort((a2, b) => a2.d - b.d);
4171
- const m1 = mids[dists[0].i];
4172
- const m2 = mids[dists[1].i];
4173
- crossPaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(cornX)},${f(cornY)} L ${f(m2[0])},${f(m2[1])}`);
4174
- }
4175
- return /* @__PURE__ */ jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
4176
- /* @__PURE__ */ jsx("path", { d: starPath }),
4177
- crossPaths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i))
4178
- ] });
4179
- }
4180
- function Star6({ size, color, strokeWidth }) {
4181
- const w = size;
4182
- const h = size * (2 / Math.sqrt(3));
4183
- const cx = w / 2;
4184
- const cy = h / 2;
4185
- const a = w / Math.sqrt(3);
4186
- const R = a;
4187
- const theta = 60 * PI / 180;
4188
- const { starPath, mids, verts } = picStar(cx, cy, R, 6, theta, w);
4189
- const triPaths = [];
4190
- for (let k = 0; k < 6; k++) {
4191
- const v = verts[k];
4192
- const m1 = mids[(k + 5) % 6];
4193
- const m2 = mids[k];
4194
- triPaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(v[0])},${f(v[1])} L ${f(m2[0])},${f(m2[1])}`);
4195
- }
4196
- return /* @__PURE__ */ jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
4197
- /* @__PURE__ */ jsx("path", { d: starPath }),
4198
- triPaths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i))
4199
- ] });
4200
- }
4201
- function Khatam({ size, color, strokeWidth }) {
4202
- const s = size;
4203
- const cx = s / 2;
4204
- const cy = s / 2;
4205
- const a = s / (1 + Math.SQRT2);
4206
- const R = a / (2 * Math.sin(PI / 8));
4207
- const theta = 72 * PI / 180;
4208
- const { starPath, mids } = picStar(cx, cy, R, 8, theta, s);
4209
- const corners = [[0, 0], [s, 0], [s, s], [0, s]];
4210
- const crossPaths = [];
4211
- for (const [cornX, cornY] of corners) {
4212
- const dists = mids.map((m, i) => ({ i, d: Math.hypot(m[0] - cornX, m[1] - cornY) }));
4213
- dists.sort((a2, b) => a2.d - b.d);
4214
- const m1 = mids[dists[0].i];
4215
- const m2 = mids[dists[1].i];
4216
- crossPaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(cornX)},${f(cornY)} L ${f(m2[0])},${f(m2[1])}`);
4217
- }
4218
- const orbitR = R * 0.35;
4219
- return /* @__PURE__ */ jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
4220
- /* @__PURE__ */ jsx("path", { d: starPath }),
4221
- crossPaths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)),
4222
- /* @__PURE__ */ jsx("circle", { cx, cy, r: orbitR, opacity: "0.4" })
4223
- ] });
4224
- }
4225
- function RosetteDouble({ size, color, strokeWidth }) {
4226
- const s = size;
4227
- const cx = s / 2;
4228
- const cy = s / 2;
4229
- const a = s / (1 + Math.SQRT2);
4230
- const Router = a / (2 * Math.sin(PI / 8));
4231
- const Rinner = Router * 0.45;
4232
- const outer = picStar(cx, cy, Router, 8, 72 * PI / 180, s);
4233
- const inner = picStar(cx, cy, Rinner, 8, 68 * PI / 180, s);
4234
- const corners = [[0, 0], [s, 0], [s, s], [0, s]];
4235
- const crossPaths = [];
4236
- for (const [cornX, cornY] of corners) {
4237
- const dists = outer.mids.map((m, i) => ({ i, d: Math.hypot(m[0] - cornX, m[1] - cornY) }));
4238
- dists.sort((a2, b) => a2.d - b.d);
4239
- const m1 = outer.mids[dists[0].i];
4240
- const m2 = outer.mids[dists[1].i];
4241
- crossPaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(cornX)},${f(cornY)} L ${f(m2[0])},${f(m2[1])}`);
4242
- }
4243
- const connectors = [];
4244
- for (let k = 0; k < 8; k++) {
4245
- const om = outer.mids[k];
4246
- const im = inner.mids[k];
4247
- connectors.push(`M ${f(im[0])},${f(im[1])} L ${f(om[0])},${f(om[1])}`);
4248
- }
4249
- return /* @__PURE__ */ jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
4250
- /* @__PURE__ */ jsx("path", { d: outer.starPath }),
4251
- /* @__PURE__ */ jsx("path", { d: inner.starPath, opacity: "0.7" }),
4252
- crossPaths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, `c${i}`)),
4253
- connectors.map((d, i) => /* @__PURE__ */ jsx("path", { d, opacity: "0.4" }, `n${i}`))
4254
- ] });
4255
- }
4256
- function RosetteFilled({ size, color, strokeWidth }) {
4257
- const s = size;
4258
- const cx = s / 2;
4259
- const cy = s / 2;
4260
- const a = s / (1 + Math.SQRT2);
4261
- const Router = a / (2 * Math.sin(PI / 8));
4262
- const theta = 72 * PI / 180;
4263
- const outer = picStar(cx, cy, Router, 8, theta, s);
4264
- const Rinner = Router * 0.35;
4265
- const inner6 = picStar(cx, cy, Rinner, 6, 60 * PI / 180, s);
4266
- const corners = [[0, 0], [s, 0], [s, s], [0, s]];
4267
- const crossPaths = [];
4268
- for (const [cornX, cornY] of corners) {
4269
- const dists = outer.mids.map((m, i) => ({ i, d: Math.hypot(m[0] - cornX, m[1] - cornY) }));
4270
- dists.sort((a2, b) => a2.d - b.d);
4271
- const m1 = outer.mids[dists[0].i];
4272
- const m2 = outer.mids[dists[1].i];
4273
- crossPaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(cornX)},${f(cornY)} L ${f(m2[0])},${f(m2[1])}`);
4274
- }
4275
- const triPaths = [];
4276
- for (let k = 0; k < 6; k++) {
4277
- const v = inner6.verts[k];
4278
- const m1 = inner6.mids[(k + 5) % 6];
4279
- const m2 = inner6.mids[k];
4280
- triPaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(v[0])},${f(v[1])} L ${f(m2[0])},${f(m2[1])}`);
4281
- }
4282
- const orbitR = Router * 0.35;
4283
- return /* @__PURE__ */ jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
4284
- /* @__PURE__ */ jsx("path", { d: outer.starPath }),
4285
- crossPaths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, `c${i}`)),
4286
- /* @__PURE__ */ jsx("circle", { cx, cy, r: orbitR, opacity: "0.3" }),
4287
- /* @__PURE__ */ jsx("path", { d: inner6.starPath, opacity: "0.6" }),
4288
- triPaths.map((d, i) => /* @__PURE__ */ jsx("path", { d, opacity: "0.5" }, `t${i}`))
4289
- ] });
4290
- }
4291
- function Star10({ size, color, strokeWidth }) {
4292
- const s = size;
4293
- const cx = s / 2;
4294
- const cy = s / 2;
4295
- const R = s * 0.42;
4296
- const theta = 72 * PI / 180;
4297
- const { starPath, mids, verts } = picStar(cx, cy, R, 10, theta, s);
4298
- const edgePaths = [];
4299
- for (let k = 0; k < 10; k++) {
4300
- const v = verts[k];
4301
- const m1 = mids[(k + 9) % 10];
4302
- const m2 = mids[k];
4303
- edgePaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(v[0])},${f(v[1])} L ${f(m2[0])},${f(m2[1])}`);
4304
- }
4305
- return /* @__PURE__ */ jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
4306
- /* @__PURE__ */ jsx("path", { d: starPath }),
4307
- edgePaths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i))
4308
- ] });
4309
- }
4310
- function Star12({ size, color, strokeWidth }) {
4311
- const s = size;
4312
- const cx = s / 2;
4313
- const cy = s / 2;
4314
- const R = s * 0.44;
4315
- const theta = 75 * PI / 180;
4316
- const { starPath, mids, verts } = picStar(cx, cy, R, 12, theta, s);
4317
- const triPaths = [];
4318
- for (let k = 0; k < 12; k++) {
4319
- const v = verts[k];
4320
- const m1 = mids[(k + 11) % 12];
4321
- const m2 = mids[k];
4322
- triPaths.push(`M ${f(m1[0])},${f(m1[1])} L ${f(v[0])},${f(v[1])} L ${f(m2[0])},${f(m2[1])}`);
4323
- }
4324
- return /* @__PURE__ */ jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
4325
- /* @__PURE__ */ jsx("path", { d: starPath }),
4326
- triPaths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i))
4327
- ] });
4328
- }
4329
- function Seigaiha({ size, color, strokeWidth }) {
4330
- const s = size;
4331
- const r = s / 2;
4332
- const paths = [];
4333
- const centers = [
4334
- [s / 2, s * 0.6],
4335
- [0, s * 0.1],
4336
- [s, s * 0.1]
4337
- ];
4338
- for (const [cx, cy] of centers) {
4339
- for (let ring = 1; ring <= 3; ring++) {
4340
- const cr = r * (ring / 3);
4341
- paths.push(
4342
- `M ${f(cx - cr)},${f(cy)} A ${f(cr)} ${f(cr)} 0 0 1 ${f(cx + cr)},${f(cy)}`
4343
- );
4344
- }
4345
- }
4346
- return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
4347
- }
4348
- function GreekKey({ size, color, strokeWidth }) {
4349
- const s = size;
4350
- const u = s / 4;
4351
- const paths = [
4352
- // Outer frame
4353
- `M 0,0 L ${f(s)},0`,
4354
- `M 0,${f(s)} L ${f(s)},${f(s)}`,
4355
- // Spiral from left
4356
- `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)}`,
4357
- // Spiral from right (mirrored, offset)
4358
- `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)}`,
4359
- // Vertical connectors at edges
4360
- `M 0,0 L 0,${f(u)}`,
4361
- `M ${f(s)},0 L ${f(s)},${f(u)}`,
4362
- `M 0,${f(3 * u)} L 0,${f(s)}`,
4363
- `M ${f(s)},${f(3 * u)} L ${f(s)},${f(s)}`
4364
- ];
4365
- return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
4366
- }
4367
- function CelticKnot({ size, color, strokeWidth }) {
4368
- const s = size;
4369
- const q = s / 4;
4370
- const r = q * 0.9;
4371
- const paths = [
4372
- // Band 1: diagonal with curves at crossings
4373
- `M 0,0 Q ${f(q)},${f(q)} ${f(2 * q)},${f(2 * q)}`,
4374
- `M ${f(2 * q)},${f(2 * q)} Q ${f(3 * q)},${f(3 * q)} ${f(s)},${f(s)}`,
4375
- // Band 2: other diagonal
4376
- `M ${f(s)},0 Q ${f(3 * q)},${f(q)} ${f(2 * q)},${f(2 * q)}`,
4377
- `M ${f(2 * q)},${f(2 * q)} Q ${f(q)},${f(3 * q)} 0,${f(s)}`,
4378
- // Outer loops that connect bands at tile edges for continuous weave
4379
- `M 0,0 Q ${f(-q * 0.3)},${f(2 * q)} 0,${f(s)}`,
4380
- `M ${f(s)},0 Q ${f(s + q * 0.3)},${f(2 * q)} ${f(s)},${f(s)}`,
4381
- `M 0,0 Q ${f(2 * q)},${f(-q * 0.3)} ${f(s)},0`,
4382
- `M 0,${f(s)} Q ${f(2 * q)},${f(s + q * 0.3)} ${f(s)},${f(s)}`,
4383
- // Inner circle at crossing
4384
- `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)}`
4385
- ];
4386
- return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
4387
- }
4388
- function Kolam({ size, color, strokeWidth }) {
4389
- const s = size;
4390
- const u = s / 4;
4391
- const dotR = s * 0.015;
4392
- const dots = [];
4393
- for (let row = 1; row <= 3; row++) {
4394
- for (let col = 1; col <= 3; col++) {
4395
- dots.push([col * u, row * u]);
4396
- }
4397
- }
4398
- const curves = [];
4399
- for (let row = 1; row <= 3; row++) {
4400
- const y = row * u;
4401
- for (let col = 1; col < 3; col++) {
4402
- const x1 = col * u;
4403
- const x2 = (col + 1) * u;
4404
- const mx = (x1 + x2) / 2;
4405
- const bulge = u * 0.4;
4406
- curves.push(`M ${f(x1)},${f(y)} C ${f(mx)},${f(y - bulge)} ${f(mx)},${f(y - bulge)} ${f(x2)},${f(y)}`);
4407
- curves.push(`M ${f(x1)},${f(y)} C ${f(mx)},${f(y + bulge)} ${f(mx)},${f(y + bulge)} ${f(x2)},${f(y)}`);
4408
- }
4409
- }
4410
- for (let col = 1; col <= 3; col++) {
4411
- const x = col * u;
4412
- for (let row = 1; row < 3; row++) {
4413
- const y1 = row * u;
4414
- const y2 = (row + 1) * u;
4415
- const my = (y1 + y2) / 2;
4416
- const bulge = u * 0.4;
4417
- curves.push(`M ${f(x)},${f(y1)} C ${f(x - bulge)},${f(my)} ${f(x - bulge)},${f(my)} ${f(x)},${f(y2)}`);
4418
- curves.push(`M ${f(x)},${f(y1)} C ${f(x + bulge)},${f(my)} ${f(x + bulge)},${f(my)} ${f(x)},${f(y2)}`);
4419
- }
4420
- }
4421
- for (let k = 1; k <= 3; k++) {
4422
- 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`);
4423
- 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)}`);
4424
- 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)}`);
4425
- 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)}`);
4426
- }
4427
- return /* @__PURE__ */ jsxs("g", { fill: "none", stroke: color, strokeWidth, children: [
4428
- curves.map((d, i) => /* @__PURE__ */ jsx("path", { d }, `c${i}`)),
4429
- dots.map(([x, y], i) => /* @__PURE__ */ jsx("circle", { cx: x, cy: y, r: dotR, fill: color, opacity: "0.5" }, `d${i}`))
4430
- ] });
4431
- }
4432
- function Arch({ size, color, strokeWidth }) {
4433
- const w = size;
4434
- const h = size * 1.5;
4435
- const cx = w / 2;
4436
- const paths = [];
4437
- for (let ring = 0; ring < 4; ring++) {
4438
- const scale = 1 - ring * 0.2;
4439
- const archW = w * 0.48 * scale;
4440
- const archH = h * 0.7 * scale;
4441
- const baseY = h * 0.85;
4442
- const tipY = baseY - archH;
4443
- const lx = cx - archW;
4444
- const rx = cx + archW;
4445
- const offset = archW * 0.3;
4446
- const lcx = lx + offset;
4447
- const rdx = cx - lcx;
4448
- const rdy = baseY - tipY;
4449
- const radius = Math.sqrt(rdx * rdx + rdy * rdy);
4450
- paths.push(
4451
- `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)}`
4452
- );
4453
- if (ring === 0) {
4454
- paths.push(`M ${f(lx)},${f(baseY)} L ${f(rx)},${f(baseY)}`);
4455
- }
4456
- }
4457
- const innerScale = 1 - 3 * 0.2;
4458
- const keyR = w * 0.48 * innerScale * 0.35;
4459
- const keyY = h * 0.85 - h * 0.7 * innerScale * 0.4;
4460
- paths.push(
4461
- `M ${f(cx + keyR)},${f(keyY)} A ${f(keyR)} ${f(keyR)} 0 1 1 ${f(cx + keyR)},${f(keyY + 1e-3)}`
4462
- );
4463
- const spR = w * 0.15;
4464
- paths.push(`M 0,0 A ${f(spR)} ${f(spR)} 0 0 0 ${f(spR)},${f(spR)}`);
4465
- paths.push(`M ${f(w)},0 A ${f(spR)} ${f(spR)} 0 0 1 ${f(w - spR)},${f(spR)}`);
4466
- return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
4467
- }
4468
- function ArabesqueVine({ size, color, strokeWidth }) {
4469
- const w = size;
4470
- const h = size * 1.2;
4471
- const cx = w / 2;
4472
- const paths = [];
4473
- const amp = w * 0.3;
4474
- const segments = 3;
4475
- const segH = h / segments;
4476
- for (let i = 0; i < segments; i++) {
4477
- const y0 = i * segH;
4478
- const y1 = y0 + segH;
4479
- const dir = i % 2 === 0 ? 1 : -1;
4480
- paths.push(
4481
- `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)}`
4482
- );
4483
- const branchY = y0 + segH * 0.5;
4484
- const branchX = cx + amp * dir * 0.15;
4485
- const tendrilLen = w * 0.25;
4486
- const tlx = branchX - tendrilLen;
4487
- const tly = branchY - tendrilLen * 0.4;
4488
- paths.push(
4489
- `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)}`
4490
- );
4491
- paths.push(
4492
- `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)}`
4493
- );
4494
- const trx = branchX + tendrilLen;
4495
- const try_ = branchY + tendrilLen * 0.4;
4496
- paths.push(
4497
- `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_)}`
4498
- );
4499
- paths.push(
4500
- `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)}`
4501
- );
4502
- const spiralR = tendrilLen * 0.15;
4503
- paths.push(
4504
- `M ${f(tlx)},${f(tly)} A ${f(spiralR)} ${f(spiralR)} 0 1 0 ${f(tlx + spiralR * 2)},${f(tly)}`
4505
- );
4506
- paths.push(
4507
- `M ${f(trx)},${f(try_)} A ${f(spiralR)} ${f(spiralR)} 0 1 1 ${f(trx - spiralR * 2)},${f(try_)}`
4508
- );
4509
- }
4510
- return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
4511
- }
4512
- function ArabesqueNet({ size, color, strokeWidth }) {
4513
- const s = size;
4514
- const cells = 4;
4515
- const cellW = s / cells;
4516
- const cellH = s / cells;
4517
- const paths = [];
4518
- for (let row = 0; row < cells; row++) {
4519
- for (let col = 0; col < cells; col++) {
4520
- const cx = col * cellW + cellW / 2;
4521
- const cy = row * cellH + cellH / 2;
4522
- const hw = cellW * 0.5;
4523
- const hh = cellH * 0.5;
4524
- const bulge = cellW * 0.25;
4525
- paths.push(
4526
- `M ${f(cx)},${f(cy - hh)} Q ${f(cx + bulge)},${f(cy - bulge)} ${f(cx + hw)},${f(cy)}`
4527
- );
4528
- paths.push(
4529
- `M ${f(cx + hw)},${f(cy)} Q ${f(cx + bulge)},${f(cy + bulge)} ${f(cx)},${f(cy + hh)}`
4530
- );
4531
- paths.push(
4532
- `M ${f(cx)},${f(cy + hh)} Q ${f(cx - bulge)},${f(cy + bulge)} ${f(cx - hw)},${f(cy)}`
4533
- );
4534
- paths.push(
4535
- `M ${f(cx - hw)},${f(cy)} Q ${f(cx - bulge)},${f(cy - bulge)} ${f(cx)},${f(cy - hh)}`
4536
- );
4537
- }
4538
- }
4539
- return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
4540
- }
4541
- function getTileDimensions(variant, size) {
4542
- if (variant === "star6") {
4543
- return { width: size, height: size * (2 / Math.sqrt(3)) };
4544
- }
4545
- if (variant === "arch") {
4546
- return { width: size, height: size * 1.5 };
4547
- }
4548
- if (variant === "arabesque-vine") {
4549
- return { width: size, height: size * 1.2 };
4550
- }
4551
- return { width: size, height: size };
4552
- }
4553
- var PI, VARIANT_MAP, PatternTile;
4554
- var init_PatternTile = __esm({
4555
- "components/atoms/PatternTile.tsx"() {
4556
- "use client";
4557
- PI = Math.PI;
4558
- VARIANT_MAP = {
4559
- "star8": Star8,
4560
- "star6": Star6,
4561
- "khatam": Khatam,
4562
- "star10": Star10,
4563
- "star12": Star12,
4564
- "rosette-double": RosetteDouble,
4565
- "rosette-filled": RosetteFilled,
4566
- "seigaiha": Seigaiha,
4567
- "greek-key": GreekKey,
4568
- "celtic-knot": CelticKnot,
4569
- "kolam": Kolam,
4570
- "arch": Arch,
4571
- "arabesque-vine": ArabesqueVine,
4572
- "arabesque-net": ArabesqueNet
4573
- };
4574
- PatternTile = ({
4575
- variant = "star8",
4576
- size = 60,
4577
- color = "var(--color-primary)",
4578
- strokeWidth = 0.5,
4579
- className
4580
- }) => {
4581
- const Variant = VARIANT_MAP[variant];
4582
- return /* @__PURE__ */ jsx("g", { className, children: /* @__PURE__ */ jsx(Variant, { size, color, strokeWidth }) });
4583
- };
4584
- PatternTile.displayName = "PatternTile";
4585
- }
4586
- });
4587
- var initialStyles, animatedStyles, AnimatedReveal;
4588
- var init_AnimatedReveal = __esm({
4589
- "components/atoms/AnimatedReveal.tsx"() {
4590
- "use client";
4591
- init_cn();
4592
- initialStyles = {
4593
- "fade-up": { opacity: 0, transform: "translateY(24px)" },
4594
- "fade-down": { opacity: 0, transform: "translateY(-24px)" },
4595
- "fade-in": { opacity: 0 },
4596
- "fade-left": { opacity: 0, transform: "translateX(24px)" },
4597
- "fade-right": { opacity: 0, transform: "translateX(-24px)" },
4598
- "scale": { opacity: 0, transform: "scale(0.92)" },
4599
- "scale-up": { opacity: 0, transform: "scale(0.92) translateY(16px)" },
4600
- "none": {}
4601
- };
4602
- animatedStyles = {
4603
- "fade-up": { opacity: 1, transform: "translateY(0)" },
4604
- "fade-down": { opacity: 1, transform: "translateY(0)" },
4605
- "fade-in": { opacity: 1 },
4606
- "fade-left": { opacity: 1, transform: "translateX(0)" },
4607
- "fade-right": { opacity: 1, transform: "translateX(0)" },
4608
- "scale": { opacity: 1, transform: "scale(1)" },
4609
- "scale-up": { opacity: 1, transform: "scale(1) translateY(0)" },
4610
- "none": {}
4611
- };
4612
- AnimatedReveal = React115__default.forwardRef(
4613
- ({
4614
- trigger = "scroll",
4615
- animation = "fade-up",
4616
- duration = 600,
4617
- delay = 0,
4618
- threshold = 0.15,
4619
- once = true,
4620
- animate: manualAnimate,
4621
- easing = "cubic-bezier(0.16, 1, 0.3, 1)",
4622
- children,
4623
- className,
4624
- style,
4625
- ...props
4626
- }, forwardedRef) => {
4627
- const [isAnimated, setIsAnimated] = useState(false);
4628
- const internalRef = useRef(null);
4629
- const hasAnimated = useRef(false);
4630
- const setRef = useCallback(
4631
- (node) => {
4632
- internalRef.current = node;
4633
- if (typeof forwardedRef === "function") forwardedRef(node);
4634
- else if (forwardedRef) forwardedRef.current = node;
4635
- },
4636
- [forwardedRef]
4637
- );
4638
- useEffect(() => {
4639
- if (trigger !== "scroll") return;
4640
- const el = internalRef.current;
4641
- if (!el) return;
4642
- const observer = new IntersectionObserver(
4643
- ([entry]) => {
4644
- if (entry.isIntersecting) {
4645
- if (once && hasAnimated.current) return;
4646
- hasAnimated.current = true;
4647
- setIsAnimated(true);
4648
- } else if (!once) {
4649
- setIsAnimated(false);
4650
- }
4651
- },
4652
- { threshold }
4653
- );
4654
- observer.observe(el);
4655
- return () => observer.disconnect();
4656
- }, [trigger, threshold, once]);
4657
- const handleMouseEnter = trigger === "hover" ? () => setIsAnimated(true) : void 0;
4658
- const handleMouseLeave = trigger === "hover" ? () => {
4659
- if (!once || !hasAnimated.current) {
4660
- hasAnimated.current = true;
4661
- setIsAnimated(false);
4662
- }
4663
- } : void 0;
4664
- useEffect(() => {
4665
- if (trigger === "manual" && manualAnimate !== void 0) {
4666
- setIsAnimated(manualAnimate);
4667
- }
4668
- }, [trigger, manualAnimate]);
4669
- const active = isAnimated;
4670
- const currentStyle = active ? animatedStyles[animation] : initialStyles[animation];
4671
- return /* @__PURE__ */ jsx(
4672
- "div",
4673
- {
4674
- ref: setRef,
4675
- className: cn("will-change-[opacity,transform]", className),
4676
- style: {
4677
- ...currentStyle,
4678
- transitionProperty: "opacity, transform",
4679
- transitionDuration: `${duration}ms`,
4680
- transitionDelay: `${delay}ms`,
4681
- transitionTimingFunction: easing,
4682
- ...style
4683
- },
4684
- onMouseEnter: handleMouseEnter,
4685
- onMouseLeave: handleMouseLeave,
4686
- ...props,
4687
- children: typeof children === "function" ? children(active) : children
4688
- }
4689
- );
4690
- }
4691
- );
4692
- AnimatedReveal.displayName = "AnimatedReveal";
4693
- }
4694
- });
4695
- function useFetchedSvg(src) {
4696
- const [svg, setSvg] = useState(null);
4697
- const cache = useRef({});
4698
- useEffect(() => {
4699
- if (!src) {
4700
- setSvg(null);
4701
- return;
4702
- }
4703
- if (cache.current[src]) {
4704
- setSvg(cache.current[src]);
4705
- return;
4706
- }
4707
- let cancelled = false;
4708
- fetch(src).then((res) => {
4709
- if (!res.ok) throw new Error(`Failed to fetch SVG: ${res.status}`);
4710
- return res.text();
4711
- }).then((text) => {
4712
- if (cancelled) return;
4713
- cache.current[src] = text;
4714
- setSvg(text);
4715
- }).catch(() => {
4716
- if (!cancelled) setSvg(null);
4717
- });
4718
- return () => {
4719
- cancelled = true;
4720
- };
4721
- }, [src]);
4722
- return svg;
4723
- }
4724
- function applyDrawAnimation(container, animate, duration, delay, easing) {
4725
- const paths = container.querySelectorAll("path, line, polyline, polygon, circle, ellipse, rect");
4726
- paths.forEach((el) => {
4727
- if ("getTotalLength" in el && typeof el.getTotalLength === "function") {
4728
- const len = el.getTotalLength();
4729
- el.style.strokeDasharray = `${len}`;
4730
- el.style.strokeDashoffset = animate ? "0" : `${len}`;
4731
- el.style.transition = `stroke-dashoffset ${duration}ms ${easing} ${delay}ms`;
4732
- }
4733
- });
4734
- }
4735
- function applyFillAnimation(container, animate, duration, delay, easing, fillColor) {
4736
- const paths = container.querySelectorAll("path, circle, ellipse, rect, polygon");
4737
- paths.forEach((el) => {
4738
- if ("getTotalLength" in el && typeof el.getTotalLength === "function") {
4739
- const geom = el;
4740
- const len = geom.getTotalLength();
4741
- geom.style.strokeDasharray = `${len}`;
4742
- geom.style.strokeDashoffset = animate ? "0" : `${len}`;
4743
- geom.style.transition = `stroke-dashoffset ${duration * 0.6}ms ${easing} ${delay}ms, fill-opacity ${duration * 0.4}ms ${easing} ${delay + duration * 0.6}ms`;
4744
- }
4745
- if (fillColor) el.style.fill = fillColor;
4746
- el.style.fillOpacity = animate ? "1" : "0";
4747
- });
4748
- }
4749
- function applyPulseAnimation(container, animate, duration) {
4750
- const svg = container.querySelector("svg");
4751
- if (!svg) return;
4752
- if (animate) {
4753
- svg.style.animation = `ag-pulse ${duration}ms ease-in-out infinite`;
4754
- } else {
4755
- svg.style.animation = "none";
4756
- }
4757
- }
4758
- function applyMorphAnimation(container, animate, duration, delay, easing) {
4759
- const paths = container.querySelectorAll("path, circle, ellipse, rect, polygon");
4760
- paths.forEach((el) => {
4761
- el.style.transition = `all ${duration}ms ${easing} ${delay}ms`;
4762
- el.style.transform = animate ? "scale(1)" : "scale(0)";
4763
- el.style.transformOrigin = "center";
4764
- el.style.opacity = animate ? "1" : "0";
4765
- });
4766
- }
4767
- var AnimatedGraphic;
4768
- var init_AnimatedGraphic = __esm({
4769
- "components/atoms/AnimatedGraphic.tsx"() {
4770
- "use client";
4771
- init_cn();
4772
- AnimatedGraphic = React115__default.forwardRef(
4773
- ({
4774
- src,
4775
- svgContent,
4776
- animation = "draw",
4777
- animate = false,
4778
- duration = 1200,
4779
- delay = 0,
4780
- easing = "cubic-bezier(0.16, 1, 0.3, 1)",
4781
- width,
4782
- height,
4783
- strokeColor,
4784
- fillColor,
4785
- alt,
4786
- className,
4787
- style,
4788
- children,
4789
- ...props
4790
- }, ref) => {
4791
- const containerRef = useRef(null);
4792
- const fetchedSvg = useFetchedSvg(svgContent ? void 0 : src);
4793
- const resolvedSvg = svgContent ?? fetchedSvg;
4794
- const prevAnimateRef = useRef(animate);
4795
- const setRef = React115__default.useCallback(
4796
- (node) => {
4797
- containerRef.current = node;
4798
- if (typeof ref === "function") ref(node);
4799
- else if (ref) ref.current = node;
4800
- },
4801
- [ref]
4802
- );
4803
- useEffect(() => {
4804
- const el = containerRef.current;
4805
- if (!el || !strokeColor) return;
4806
- const paths = el.querySelectorAll("path, line, polyline, polygon, circle, ellipse, rect");
4807
- paths.forEach((p2) => {
4808
- p2.style.stroke = strokeColor;
4809
- });
4810
- }, [resolvedSvg, strokeColor]);
4811
- useEffect(() => {
4812
- const el = containerRef.current;
4813
- if (!el || !resolvedSvg) return;
4814
- if (animation === "draw" || animation === "fill") {
4815
- const paths = el.querySelectorAll("path, line, polyline, polygon, circle, ellipse, rect");
4816
- paths.forEach((p2) => {
4817
- if ("getTotalLength" in p2 && typeof p2.getTotalLength === "function") {
4818
- const len = p2.getTotalLength();
4819
- p2.style.strokeDasharray = `${len}`;
4820
- p2.style.strokeDashoffset = `${len}`;
4821
- }
4822
- if (animation === "fill") {
4823
- p2.style.fillOpacity = "0";
4824
- }
4825
- });
4826
- }
4827
- if (animation === "morph") {
4828
- const paths = el.querySelectorAll("path, circle, ellipse, rect, polygon");
4829
- paths.forEach((p2) => {
4830
- p2.style.transform = "scale(0)";
4831
- p2.style.transformOrigin = "center";
4832
- p2.style.opacity = "0";
4833
- });
4834
- }
4835
- }, [resolvedSvg, animation]);
4836
- useEffect(() => {
4837
- const el = containerRef.current;
4838
- if (!el) return;
4839
- const id = requestAnimationFrame(() => {
4840
- switch (animation) {
4841
- case "draw":
4842
- applyDrawAnimation(el, animate, duration, delay, easing);
4843
- break;
4844
- case "fill":
4845
- applyFillAnimation(el, animate, duration, delay, easing, fillColor);
4846
- break;
4847
- case "pulse":
4848
- applyPulseAnimation(el, animate, duration);
4849
- break;
4850
- case "morph":
4851
- applyMorphAnimation(el, animate, duration, delay, easing);
4852
- break;
4853
- }
4854
- });
4855
- prevAnimateRef.current = animate;
4856
- return () => cancelAnimationFrame(id);
4857
- }, [animate, animation, duration, delay, easing, fillColor, resolvedSvg]);
4858
- return /* @__PURE__ */ jsxs(Fragment, { children: [
4859
- /* @__PURE__ */ jsx("style", { children: `@keyframes ag-pulse { 0%, 100% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.04); opacity: 0.85; } }` }),
4860
- /* @__PURE__ */ jsx(
4861
- "div",
4862
- {
4863
- ref: setRef,
4864
- className: cn("inline-flex items-center justify-center", className),
4865
- style: { width, height, ...style },
4866
- role: alt ? "img" : void 0,
4867
- "aria-label": alt,
4868
- ...props,
4869
- children: resolvedSvg ? /* @__PURE__ */ jsx(
4870
- "div",
4871
- {
4872
- className: "w-full h-full [&>svg]:w-full [&>svg]:h-full",
4873
- dangerouslySetInnerHTML: { __html: resolvedSvg }
4874
- }
4875
- ) : children
4876
- }
4877
- )
4878
- ] });
4879
- }
4880
- );
4881
- AnimatedGraphic.displayName = "AnimatedGraphic";
4882
- }
4883
- });
4884
3985
  function useTraitContent(traitName) {
4885
3986
  const slotManager = useUISlots();
4886
3987
  const [content, setContent] = useState(
@@ -5017,9 +4118,9 @@ function ScoreDisplay({
5017
4118
  ...rest
5018
4119
  }) {
5019
4120
  const resolvedValue = typeof value === "number" && !Number.isNaN(value) ? value : typeof rest.score === "number" && !Number.isNaN(rest.score) ? rest.score : 0;
5020
- const [displayValue, setDisplayValue] = React115.useState(resolvedValue);
5021
- const [isAnimating, setIsAnimating] = React115.useState(false);
5022
- React115.useEffect(() => {
4121
+ const [displayValue, setDisplayValue] = React105.useState(resolvedValue);
4122
+ const [isAnimating, setIsAnimating] = React105.useState(false);
4123
+ React105.useEffect(() => {
5023
4124
  if (!animated || displayValue === resolvedValue) {
5024
4125
  setDisplayValue(resolvedValue);
5025
4126
  return;
@@ -5089,9 +4190,9 @@ function ControlButton({
5089
4190
  className
5090
4191
  }) {
5091
4192
  const eventBus = useEventBus();
5092
- const [isPressed, setIsPressed] = React115.useState(false);
4193
+ const [isPressed, setIsPressed] = React105.useState(false);
5093
4194
  const actualPressed = pressed ?? isPressed;
5094
- const handlePointerDown = React115.useCallback(
4195
+ const handlePointerDown = React105.useCallback(
5095
4196
  (e) => {
5096
4197
  e.preventDefault();
5097
4198
  if (disabled) return;
@@ -5101,7 +4202,7 @@ function ControlButton({
5101
4202
  },
5102
4203
  [disabled, pressEvent, eventBus, onPress]
5103
4204
  );
5104
- const handlePointerUp = React115.useCallback(
4205
+ const handlePointerUp = React105.useCallback(
5105
4206
  (e) => {
5106
4207
  e.preventDefault();
5107
4208
  if (disabled) return;
@@ -5111,7 +4212,7 @@ function ControlButton({
5111
4212
  },
5112
4213
  [disabled, releaseEvent, eventBus, onRelease]
5113
4214
  );
5114
- const handlePointerLeave = React115.useCallback(
4215
+ const handlePointerLeave = React105.useCallback(
5115
4216
  (e) => {
5116
4217
  if (isPressed) {
5117
4218
  setIsPressed(false);
@@ -6009,9 +5110,9 @@ function MiniMap({
6009
5110
  viewportRect,
6010
5111
  className
6011
5112
  }) {
6012
- const canvasRef = React115.useRef(null);
6013
- const frameRef = React115.useRef(0);
6014
- React115.useEffect(() => {
5113
+ const canvasRef = React105.useRef(null);
5114
+ const frameRef = React105.useRef(0);
5115
+ React105.useEffect(() => {
6015
5116
  const canvas = canvasRef.current;
6016
5117
  if (!canvas) return;
6017
5118
  const ctx = canvas.getContext("2d");
@@ -6096,24 +5197,6 @@ var init_MiniMap = __esm({
6096
5197
  // components/atoms/game/index.ts
6097
5198
  var init_game = __esm({
6098
5199
  "components/atoms/game/index.ts"() {
6099
- init_HealthBar();
6100
- init_ScoreDisplay();
6101
- init_ControlButton();
6102
- init_Sprite();
6103
- init_StateIndicator();
6104
- init_TimerDisplay();
6105
- init_ResourceCounter();
6106
- init_ItemSlot();
6107
- init_TurnIndicator();
6108
- init_ComboCounter();
6109
- init_XPBar();
6110
- init_WaypointMarker();
6111
- init_StatusEffect();
6112
- init_DamageNumber();
6113
- init_DialogueBubble();
6114
- init_ChoiceButton();
6115
- init_ActionButton();
6116
- init_MiniMap();
6117
5200
  }
6118
5201
  });
6119
5202
 
@@ -6122,8 +5205,6 @@ var init_atoms = __esm({
6122
5205
  "components/atoms/index.ts"() {
6123
5206
  init_Button();
6124
5207
  init_Input();
6125
- init_Label();
6126
- init_Textarea();
6127
5208
  init_Select();
6128
5209
  init_Checkbox();
6129
5210
  init_Card();
@@ -6131,38 +5212,12 @@ var init_atoms = __esm({
6131
5212
  init_Spinner();
6132
5213
  init_Avatar();
6133
5214
  init_Box();
6134
- init_Center();
6135
5215
  init_Divider();
6136
5216
  init_Icon();
6137
5217
  init_ProgressBar();
6138
- init_Radio();
6139
- init_Switch();
6140
- init_Spacer();
6141
5218
  init_Stack();
6142
- init_TextHighlight();
6143
5219
  init_Typography();
6144
5220
  init_ThemeToggle();
6145
- init_ThemeSelector();
6146
- init_Overlay();
6147
- init_FlipContainer();
6148
- init_ConditionalWrapper();
6149
- init_LawReferenceTooltip();
6150
- init_DayCell();
6151
- init_TimeSlotCell();
6152
- init_StatusDot();
6153
- init_TrendIndicator();
6154
- init_RangeSlider();
6155
- init_AnimatedCounter();
6156
- init_InfiniteScrollSentinel();
6157
- init_ConfettiEffect();
6158
- init_TypewriterText();
6159
- init_SectionHeader();
6160
- init_StatCard();
6161
- init_ContentSection();
6162
- init_PatternTile();
6163
- init_AnimatedReveal();
6164
- init_AnimatedGraphic();
6165
- init_TraitFrame();
6166
5221
  init_game();
6167
5222
  }
6168
5223
  });
@@ -6350,7 +5405,7 @@ var init_ErrorBoundary = __esm({
6350
5405
  "use client";
6351
5406
  init_cn();
6352
5407
  init_ErrorState();
6353
- ErrorBoundary = class extends React115__default.Component {
5408
+ ErrorBoundary = class extends React105__default.Component {
6354
5409
  constructor(props) {
6355
5410
  super(props);
6356
5411
  __publicField(this, "reset", () => {
@@ -6513,12 +5568,6 @@ var init_Skeleton = __esm({
6513
5568
  }
6514
5569
  });
6515
5570
 
6516
- // renderer/pattern-resolver.ts
6517
- var init_pattern_resolver = __esm({
6518
- "renderer/pattern-resolver.ts"() {
6519
- }
6520
- });
6521
-
6522
5571
  // renderer/client-effect-executor.ts
6523
5572
  function executeClientEffects(effects, config) {
6524
5573
  if (!effects || effects.length === 0) {
@@ -6580,21 +5629,6 @@ var init_client_effect_executor = __esm({
6580
5629
  "renderer/client-effect-executor.ts"() {
6581
5630
  }
6582
5631
  });
6583
- var ClientEffectConfigContext;
6584
- var init_useClientEffects = __esm({
6585
- "renderer/useClientEffects.ts"() {
6586
- "use client";
6587
- init_client_effect_executor();
6588
- ClientEffectConfigContext = createContext(null);
6589
- ClientEffectConfigContext.Provider;
6590
- }
6591
- });
6592
-
6593
- // renderer/data-resolver.ts
6594
- var init_data_resolver = __esm({
6595
- "renderer/data-resolver.ts"() {
6596
- }
6597
- });
6598
5632
 
6599
5633
  // renderer/slot-definitions.ts
6600
5634
  function isPortalSlot(slot) {
@@ -6993,29 +6027,11 @@ var init_offline_executor = __esm({
6993
6027
  };
6994
6028
  }
6995
6029
  });
6996
- var init_navigation = __esm({
6997
- "renderer/navigation.tsx"() {
6998
- "use client";
6999
- createContext(null);
7000
- }
7001
- });
7002
- var init_init = __esm({
7003
- "renderer/init.ts"() {
7004
- init_pattern_resolver();
7005
- }
7006
- });
7007
6030
 
7008
6031
  // renderer/index.ts
7009
6032
  var init_renderer = __esm({
7010
6033
  "renderer/index.ts"() {
7011
- init_pattern_resolver();
7012
- init_client_effect_executor();
7013
- init_useClientEffects();
7014
- init_data_resolver();
7015
6034
  init_slot_definitions();
7016
- init_offline_executor();
7017
- init_navigation();
7018
- init_init();
7019
6035
  }
7020
6036
  });
7021
6037
 
@@ -7193,8 +6209,8 @@ var init_Tooltip = __esm({
7193
6209
  if (hideTimeoutRef.current) clearTimeout(hideTimeoutRef.current);
7194
6210
  };
7195
6211
  }, []);
7196
- const triggerElement = React115__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
7197
- const trigger = React115__default.cloneElement(triggerElement, {
6212
+ const triggerElement = React105__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
6213
+ const trigger = React105__default.cloneElement(triggerElement, {
7198
6214
  ref: triggerRef,
7199
6215
  onMouseEnter: handleMouseEnter,
7200
6216
  onMouseLeave: handleMouseLeave,
@@ -7315,8 +6331,8 @@ var init_Popover = __esm({
7315
6331
  onMouseEnter: handleOpen,
7316
6332
  onMouseLeave: handleClose
7317
6333
  };
7318
- const childElement = React115__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
7319
- const triggerElement = React115__default.cloneElement(
6334
+ const childElement = React105__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
6335
+ const triggerElement = React105__default.cloneElement(
7320
6336
  childElement,
7321
6337
  {
7322
6338
  ref: triggerRef,
@@ -7433,8 +6449,8 @@ var init_Menu = __esm({
7433
6449
  "bottom-start": "top-full left-0 mt-2",
7434
6450
  "bottom-end": "top-full right-0 mt-2"
7435
6451
  };
7436
- const triggerChild = React115__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx("span", { children: trigger });
7437
- const triggerElement = React115__default.cloneElement(
6452
+ const triggerChild = React105__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx("span", { children: trigger });
6453
+ const triggerElement = React105__default.cloneElement(
7438
6454
  triggerChild,
7439
6455
  {
7440
6456
  ref: triggerRef,
@@ -7953,13 +6969,13 @@ var init_MapView = __esm({
7953
6969
  shadowSize: [41, 41]
7954
6970
  });
7955
6971
  L.Marker.prototype.options.icon = defaultIcon;
7956
- const { useEffect: useEffect63, useRef: useRef62, useCallback: useCallback94, useState: useState86 } = React115__default;
6972
+ const { useEffect: useEffect60, useRef: useRef59, useCallback: useCallback88, useState: useState80 } = React105__default;
7957
6973
  const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
7958
6974
  const { useEventBus: useEventBus2 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
7959
6975
  function MapUpdater({ centerLat, centerLng, zoom }) {
7960
6976
  const map = useMap();
7961
- const prevRef = useRef62({ centerLat, centerLng, zoom });
7962
- useEffect63(() => {
6977
+ const prevRef = useRef59({ centerLat, centerLng, zoom });
6978
+ useEffect60(() => {
7963
6979
  const prev = prevRef.current;
7964
6980
  if (prev.centerLat !== centerLat || prev.centerLng !== centerLng || prev.zoom !== zoom) {
7965
6981
  map.setView([centerLat, centerLng], zoom);
@@ -7970,7 +6986,7 @@ var init_MapView = __esm({
7970
6986
  }
7971
6987
  function MapClickHandler({ onMapClick }) {
7972
6988
  const map = useMap();
7973
- useEffect63(() => {
6989
+ useEffect60(() => {
7974
6990
  if (!onMapClick) return;
7975
6991
  const handler = (e) => {
7976
6992
  onMapClick(e.latlng.lat, e.latlng.lng);
@@ -7997,8 +7013,8 @@ var init_MapView = __esm({
7997
7013
  showAttribution = true
7998
7014
  }) {
7999
7015
  const eventBus = useEventBus2();
8000
- const [clickedPosition, setClickedPosition] = useState86(null);
8001
- const handleMapClick = useCallback94((lat, lng) => {
7016
+ const [clickedPosition, setClickedPosition] = useState80(null);
7017
+ const handleMapClick = useCallback88((lat, lng) => {
8002
7018
  if (showClickedPin) {
8003
7019
  setClickedPosition({ lat, lng });
8004
7020
  }
@@ -8007,7 +7023,7 @@ var init_MapView = __esm({
8007
7023
  eventBus.emit(`UI:${mapClickEvent}`, { latitude: lat, longitude: lng });
8008
7024
  }
8009
7025
  }, [onMapClick, mapClickEvent, eventBus, showClickedPin]);
8010
- const handleMarkerClick = useCallback94((marker) => {
7026
+ const handleMarkerClick = useCallback88((marker) => {
8011
7027
  onMarkerClick?.(marker);
8012
7028
  if (markerClickEvent) {
8013
7029
  eventBus.emit(`UI:${markerClickEvent}`, { ...marker });
@@ -8184,7 +7200,7 @@ function InputPattern({
8184
7200
  fieldName
8185
7201
  }) {
8186
7202
  const { emit } = useEventBus();
8187
- const [localValue, setLocalValue] = React115__default.useState(value);
7203
+ const [localValue, setLocalValue] = React105__default.useState(value);
8188
7204
  const handleChange = (e) => {
8189
7205
  setLocalValue(e.target.value);
8190
7206
  if (onChange) {
@@ -8222,7 +7238,7 @@ function TextareaPattern({
8222
7238
  fieldName
8223
7239
  }) {
8224
7240
  const { emit } = useEventBus();
8225
- const [localValue, setLocalValue] = React115__default.useState(value);
7241
+ const [localValue, setLocalValue] = React105__default.useState(value);
8226
7242
  const handleChange = (e) => {
8227
7243
  setLocalValue(e.target.value);
8228
7244
  if (onChange) {
@@ -8254,7 +7270,7 @@ function SelectPattern({
8254
7270
  fieldName
8255
7271
  }) {
8256
7272
  const { emit } = useEventBus();
8257
- const [localValue, setLocalValue] = React115__default.useState(value);
7273
+ const [localValue, setLocalValue] = React105__default.useState(value);
8258
7274
  const handleChange = (e) => {
8259
7275
  setLocalValue(e.target.value);
8260
7276
  if (onChange) {
@@ -8283,7 +7299,7 @@ function CheckboxPattern({
8283
7299
  className
8284
7300
  }) {
8285
7301
  const { emit } = useEventBus();
8286
- const [localChecked, setLocalChecked] = React115__default.useState(checked);
7302
+ const [localChecked, setLocalChecked] = React105__default.useState(checked);
8287
7303
  const handleChange = (e) => {
8288
7304
  setLocalChecked(e.target.checked);
8289
7305
  if (onChange) {
@@ -8514,8 +7530,8 @@ function ActionButtons({
8514
7530
  disabled
8515
7531
  }) {
8516
7532
  const eventBus = useEventBus();
8517
- const [activeButtons, setActiveButtons] = React115.useState(/* @__PURE__ */ new Set());
8518
- const handlePress = React115.useCallback(
7533
+ const [activeButtons, setActiveButtons] = React105.useState(/* @__PURE__ */ new Set());
7534
+ const handlePress = React105.useCallback(
8519
7535
  (id) => {
8520
7536
  setActiveButtons((prev) => new Set(prev).add(id));
8521
7537
  if (actionEvent) eventBus.emit(`UI:${actionEvent}`, { id, pressed: true });
@@ -8523,7 +7539,7 @@ function ActionButtons({
8523
7539
  },
8524
7540
  [actionEvent, eventBus, onAction]
8525
7541
  );
8526
- const handleRelease = React115.useCallback(
7542
+ const handleRelease = React105.useCallback(
8527
7543
  (id) => {
8528
7544
  setActiveButtons((prev) => {
8529
7545
  const next = new Set(prev);
@@ -9365,10 +8381,10 @@ function IsometricCanvas({
9365
8381
  [unitsProp]
9366
8382
  );
9367
8383
  const features = useMemo(
9368
- () => featuresProp.map((f3) => {
9369
- if (f3.type) return f3;
9370
- const raw = f3;
9371
- return raw.featureType ? { ...f3, type: raw.featureType } : f3;
8384
+ () => featuresProp.map((f) => {
8385
+ if (f.type) return f;
8386
+ const raw = f;
8387
+ return raw.featureType ? { ...f, type: raw.featureType } : f;
9372
8388
  }),
9373
8389
  [featuresProp]
9374
8390
  );
@@ -10051,7 +9067,6 @@ var init_IsometricCanvas = __esm({
10051
9067
  var init_IsometricCanvas2 = __esm({
10052
9068
  "components/organisms/game/IsometricCanvas.tsx"() {
10053
9069
  init_IsometricCanvas();
10054
- init_IsometricCanvas();
10055
9070
  }
10056
9071
  });
10057
9072
  function BattleBoard({
@@ -10535,9 +9550,9 @@ var init_ScaledDiagram = __esm({
10535
9550
  }
10536
9551
  });
10537
9552
 
10538
- // node_modules/.pnpm/katex@0.16.45/node_modules/katex/dist/katex.min.css
9553
+ // node_modules/katex/dist/katex.min.css
10539
9554
  var init_katex_min = __esm({
10540
- "node_modules/.pnpm/katex@0.16.45/node_modules/katex/dist/katex.min.css"() {
9555
+ "node_modules/katex/dist/katex.min.css"() {
10541
9556
  }
10542
9557
  });
10543
9558
  var MarkdownContent;
@@ -10547,7 +9562,7 @@ var init_MarkdownContent = __esm({
10547
9562
  init_Box();
10548
9563
  init_useTranslate();
10549
9564
  init_cn();
10550
- MarkdownContent = React115__default.memo(
9565
+ MarkdownContent = React105__default.memo(
10551
9566
  ({ content, direction, className }) => {
10552
9567
  const { t: _t } = useTranslate();
10553
9568
  const safeContent = typeof content === "string" ? content : String(content ?? "");
@@ -10764,7 +9779,7 @@ var init_CodeBlock = __esm({
10764
9779
  loloStyle = { ...dark, ...loloStyleOverrides };
10765
9780
  LINE_PROPS_FN = (n) => ({ "data-line": String(n - 1) });
10766
9781
  HIDDEN_LINE_NUMBERS = { display: "none" };
10767
- CodeBlock = React115__default.memo(
9782
+ CodeBlock = React105__default.memo(
10768
9783
  ({
10769
9784
  code: rawCode,
10770
9785
  language = "text",
@@ -12073,7 +11088,7 @@ var init_StateMachineView = __esm({
12073
11088
  style: { top: title ? 30 : 0 },
12074
11089
  children: [
12075
11090
  entity && /* @__PURE__ */ jsx(EntityBox, { entity, config }),
12076
- states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React115__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
11091
+ states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React105__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
12077
11092
  StateNode,
12078
11093
  {
12079
11094
  state,
@@ -12484,7 +11499,7 @@ function renderStateMachineToDomData(stateMachine, options = {}, config = DEFAUL
12484
11499
  const boxHeight = Math.max(80, fieldCount * 22 + 50);
12485
11500
  domEntity = {
12486
11501
  name: entity.name || "Entity",
12487
- fields: entity.fields?.map((f3) => typeof f3 === "string" ? f3 : f3.name) || [],
11502
+ fields: entity.fields?.map((f) => typeof f === "string" ? f : f.name) || [],
12488
11503
  x: 20,
12489
11504
  y: height / 2 - boxHeight / 2,
12490
11505
  width: boxWidth,
@@ -12599,7 +11614,7 @@ function extractEntityFields(schema) {
12599
11614
  if (!entity || typeof entity !== "object" || !("fields" in entity)) return [];
12600
11615
  const inlineEntity = entity;
12601
11616
  if (!inlineEntity.fields) return [];
12602
- return inlineEntity.fields.map((f3) => f3.name).filter((n) => typeof n === "string" && n.length > 0);
11617
+ return inlineEntity.fields.map((f) => f.name).filter((n) => typeof n === "string" && n.length > 0);
12603
11618
  }
12604
11619
  function toStateMachineDefinition(sm) {
12605
11620
  return {
@@ -14639,7 +13654,7 @@ function getAllEffectSpriteUrls(manifest) {
14639
13654
  if (manifest.animations) {
14640
13655
  for (const frames of Object.values(manifest.animations)) {
14641
13656
  if (Array.isArray(frames)) {
14642
- frames.forEach((f3) => urls.push(`${base}/${f3}`));
13657
+ frames.forEach((f) => urls.push(`${base}/${f}`));
14643
13658
  }
14644
13659
  }
14645
13660
  }
@@ -14684,8 +13699,8 @@ function createCombatPresets(manifest) {
14684
13699
  spread: 8,
14685
13700
  velocityMin: 40,
14686
13701
  velocityMax: 120,
14687
- angleMin: -PI2 * 0.8,
14688
- angleMax: -PI2 * 0.2,
13702
+ angleMin: -PI * 0.8,
13703
+ angleMax: -PI * 0.2,
14689
13704
  gravity: 0,
14690
13705
  tint: { r: 255, g: 60, b: 40 },
14691
13706
  scaleMin: 0.3,
@@ -14702,8 +13717,8 @@ function createCombatPresets(manifest) {
14702
13717
  spread: 12,
14703
13718
  velocityMin: 20,
14704
13719
  velocityMax: 60,
14705
- angleMin: -PI2 * 0.9,
14706
- angleMax: -PI2 * 0.1,
13720
+ angleMin: -PI * 0.9,
13721
+ angleMax: -PI * 0.1,
14707
13722
  gravity: 120,
14708
13723
  tint: { r: 180, g: 140, b: 90 },
14709
13724
  scaleMin: 0.15,
@@ -14720,8 +13735,8 @@ function createCombatPresets(manifest) {
14720
13735
  spread: 5,
14721
13736
  velocityMin: 10,
14722
13737
  velocityMax: 30,
14723
- angleMin: -PI2 * 0.7,
14724
- angleMax: -PI2 * 0.3,
13738
+ angleMin: -PI * 0.7,
13739
+ angleMax: -PI * 0.3,
14725
13740
  gravity: 0,
14726
13741
  tint: { r: 255, g: 200, b: 150 },
14727
13742
  scaleMin: 0.25,
@@ -14763,8 +13778,8 @@ function createCombatPresets(manifest) {
14763
13778
  spread: 4,
14764
13779
  velocityMin: 60,
14765
13780
  velocityMax: 150,
14766
- angleMin: -PI2 * 0.6,
14767
- angleMax: -PI2 * 0.4,
13781
+ angleMin: -PI * 0.6,
13782
+ angleMax: -PI * 0.4,
14768
13783
  gravity: 0,
14769
13784
  tint: { r: 255, g: 220, b: 100 },
14770
13785
  scaleMin: 0.2,
@@ -14781,8 +13796,8 @@ function createCombatPresets(manifest) {
14781
13796
  spread: 3,
14782
13797
  velocityMin: 100,
14783
13798
  velocityMax: 200,
14784
- angleMin: -PI2 * 0.55,
14785
- angleMax: -PI2 * 0.45,
13799
+ angleMin: -PI * 0.55,
13800
+ angleMax: -PI * 0.45,
14786
13801
  gravity: 0,
14787
13802
  tint: { r: 255, g: 200, b: 80 },
14788
13803
  scaleMin: 0.15,
@@ -14799,8 +13814,8 @@ function createCombatPresets(manifest) {
14799
13814
  spread: 6,
14800
13815
  velocityMin: 10,
14801
13816
  velocityMax: 30,
14802
- angleMin: -PI2 * 0.8,
14803
- angleMax: -PI2 * 0.2,
13817
+ angleMin: -PI * 0.8,
13818
+ angleMax: -PI * 0.2,
14804
13819
  gravity: -20,
14805
13820
  tint: { r: 200, g: 200, b: 200 },
14806
13821
  scaleMin: 0.2,
@@ -14843,7 +13858,7 @@ function createCombatPresets(manifest) {
14843
13858
  velocityMin: 20,
14844
13859
  velocityMax: 80,
14845
13860
  angleMin: 0,
14846
- angleMax: PI2 * 2,
13861
+ angleMax: PI * 2,
14847
13862
  gravity: -30,
14848
13863
  tint: { r: 180, g: 80, b: 255 },
14849
13864
  scaleMin: 0.2,
@@ -14864,7 +13879,7 @@ function createCombatPresets(manifest) {
14864
13879
  velocityMin: 30,
14865
13880
  velocityMax: 100,
14866
13881
  angleMin: 0,
14867
- angleMax: PI2 * 2,
13882
+ angleMax: PI * 2,
14868
13883
  gravity: -15,
14869
13884
  tint: { r: 200, g: 120, b: 255 },
14870
13885
  scaleMin: 0.1,
@@ -14882,7 +13897,7 @@ function createCombatPresets(manifest) {
14882
13897
  spread: 10,
14883
13898
  velocityMin: 15,
14884
13899
  velocityMax: 50,
14885
- angleMin: -PI2,
13900
+ angleMin: -PI,
14886
13901
  angleMax: 0,
14887
13902
  gravity: -40,
14888
13903
  tint: { r: 220, g: 180, b: 255 },
@@ -14931,8 +13946,8 @@ function createCombatPresets(manifest) {
14931
13946
  spread: 15,
14932
13947
  velocityMin: 10,
14933
13948
  velocityMax: 40,
14934
- angleMin: -PI2,
14935
- angleMax: -PI2 * 0.3,
13949
+ angleMin: -PI,
13950
+ angleMax: -PI * 0.3,
14936
13951
  gravity: -50,
14937
13952
  tint: { r: 80, g: 255, b: 120 },
14938
13953
  scaleMin: 0.15,
@@ -14950,8 +13965,8 @@ function createCombatPresets(manifest) {
14950
13965
  spread: 12,
14951
13966
  velocityMin: 15,
14952
13967
  velocityMax: 50,
14953
- angleMin: -PI2 * 0.9,
14954
- angleMax: -PI2 * 0.1,
13968
+ angleMin: -PI * 0.9,
13969
+ angleMax: -PI * 0.1,
14955
13970
  gravity: -60,
14956
13971
  tint: { r: 100, g: 255, b: 140 },
14957
13972
  scaleMin: 0.1,
@@ -15000,7 +14015,7 @@ function createCombatPresets(manifest) {
15000
14015
  velocityMin: 10,
15001
14016
  velocityMax: 35,
15002
14017
  angleMin: 0,
15003
- angleMax: PI2 * 2,
14018
+ angleMax: PI * 2,
15004
14019
  gravity: 0,
15005
14020
  tint: { r: 80, g: 160, b: 255 },
15006
14021
  scaleMin: 0.12,
@@ -15049,7 +14064,7 @@ function createCombatPresets(manifest) {
15049
14064
  velocityMin: 8,
15050
14065
  velocityMax: 30,
15051
14066
  angleMin: 0,
15052
- angleMax: PI2 * 2,
14067
+ angleMax: PI * 2,
15053
14068
  gravity: 0,
15054
14069
  tint: { r: 60, g: 180, b: 255 },
15055
14070
  scaleMin: 0.1,
@@ -15100,7 +14115,7 @@ function createCombatPresets(manifest) {
15100
14115
  velocityMin: 50,
15101
14116
  velocityMax: 150,
15102
14117
  angleMin: 0,
15103
- angleMax: PI2 * 2,
14118
+ angleMax: PI * 2,
15104
14119
  gravity: 80,
15105
14120
  tint: { r: 255, g: 180, b: 50 },
15106
14121
  scaleMin: 0.08,
@@ -15141,7 +14156,7 @@ function createCombatPresets(manifest) {
15141
14156
  velocityMin: 60,
15142
14157
  velocityMax: 180,
15143
14158
  angleMin: 0,
15144
- angleMax: PI2 * 2,
14159
+ angleMax: PI * 2,
15145
14160
  gravity: 60,
15146
14161
  tint: { r: 255, g: 120, b: 30 },
15147
14162
  scaleMin: 0.15,
@@ -15159,7 +14174,7 @@ function createCombatPresets(manifest) {
15159
14174
  velocityMin: 80,
15160
14175
  velocityMax: 200,
15161
14176
  angleMin: 0,
15162
- angleMax: PI2 * 2,
14177
+ angleMax: PI * 2,
15163
14178
  gravity: 100,
15164
14179
  tint: { r: 255, g: 200, b: 60 },
15165
14180
  scaleMin: 0.06,
@@ -15202,7 +14217,7 @@ function createCombatPresets(manifest) {
15202
14217
  velocityMin: 30,
15203
14218
  velocityMax: 100,
15204
14219
  angleMin: 0,
15205
- angleMax: PI2 * 2,
14220
+ angleMax: PI * 2,
15206
14221
  gravity: 100,
15207
14222
  tint: { r: 140, g: 140, b: 140 },
15208
14223
  scaleMin: 0.15,
@@ -15268,7 +14283,7 @@ function createCombatPresets(manifest) {
15268
14283
  spread: 15,
15269
14284
  velocityMin: 15,
15270
14285
  velocityMax: 50,
15271
- angleMin: -PI2,
14286
+ angleMin: -PI,
15272
14287
  angleMax: 0,
15273
14288
  gravity: -30,
15274
14289
  tint: { r: 255, g: 215, b: 50 },
@@ -15287,8 +14302,8 @@ function createCombatPresets(manifest) {
15287
14302
  spread: 8,
15288
14303
  velocityMin: 5,
15289
14304
  velocityMax: 20,
15290
- angleMin: -PI2 * 0.7,
15291
- angleMax: -PI2 * 0.3,
14305
+ angleMin: -PI * 0.7,
14306
+ angleMax: -PI * 0.3,
15292
14307
  gravity: -20,
15293
14308
  tint: { r: 255, g: 230, b: 100 },
15294
14309
  scaleMin: 0.2,
@@ -15336,7 +14351,7 @@ function createCombatPresets(manifest) {
15336
14351
  spread: 12,
15337
14352
  velocityMin: 15,
15338
14353
  velocityMax: 40,
15339
- angleMin: -PI2,
14354
+ angleMin: -PI,
15340
14355
  angleMax: 0,
15341
14356
  gravity: -20,
15342
14357
  tint: { r: 120, g: 40, b: 160 },
@@ -15354,8 +14369,8 @@ function createCombatPresets(manifest) {
15354
14369
  spread: 10,
15355
14370
  velocityMin: 8,
15356
14371
  velocityMax: 25,
15357
- angleMin: -PI2 * 0.8,
15358
- angleMax: -PI2 * 0.2,
14372
+ angleMin: -PI * 0.8,
14373
+ angleMax: -PI * 0.2,
15359
14374
  gravity: -15,
15360
14375
  tint: { r: 100, g: 50, b: 140 },
15361
14376
  scaleMin: 0.2,
@@ -15402,7 +14417,7 @@ function createCombatPresets(manifest) {
15402
14417
  velocityMin: 40,
15403
14418
  velocityMax: 140,
15404
14419
  angleMin: 0,
15405
- angleMax: PI2 * 2,
14420
+ angleMax: PI * 2,
15406
14421
  gravity: 40,
15407
14422
  tint: { r: 255, g: 140, b: 30 },
15408
14423
  scaleMin: 0.2,
@@ -15420,7 +14435,7 @@ function createCombatPresets(manifest) {
15420
14435
  velocityMin: 60,
15421
14436
  velocityMax: 200,
15422
14437
  angleMin: 0,
15423
- angleMax: PI2 * 2,
14438
+ angleMax: PI * 2,
15424
14439
  gravity: 60,
15425
14440
  tint: { r: 255, g: 180, b: 60 },
15426
14441
  scaleMin: 0.06,
@@ -15451,10 +14466,10 @@ function createCombatPresets(manifest) {
15451
14466
  }
15452
14467
  };
15453
14468
  }
15454
- var PI2;
14469
+ var PI;
15455
14470
  var init_combatPresets = __esm({
15456
14471
  "components/organisms/game/utils/combatPresets.ts"() {
15457
- PI2 = Math.PI;
14472
+ PI = Math.PI;
15458
14473
  }
15459
14474
  });
15460
14475
  function CanvasEffectEngine({
@@ -15910,7 +14925,7 @@ var init_Pagination = __esm({
15910
14925
  });
15911
14926
  function normalizeFields(fields) {
15912
14927
  if (!fields) return [];
15913
- return fields.map((f3) => typeof f3 === "string" ? f3 : f3.key ?? f3.name ?? "");
14928
+ return fields.map((f) => typeof f === "string" ? f : f.key ?? f.name ?? "");
15914
14929
  }
15915
14930
  function fieldLabel(key) {
15916
14931
  return key.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/[_-]/g, " ").replace(/\b\w/g, (c) => c.toUpperCase());
@@ -16000,8 +15015,8 @@ var init_CardGrid = __esm({
16000
15015
  eventBus.emit("UI:PAGINATE", { page: newPage, pageSize });
16001
15016
  };
16002
15017
  const titleField = effectiveFieldNames?.[0];
16003
- const statusField = effectiveFieldNames?.find((f3) => STATUS_FIELDS.has(f3.toLowerCase()));
16004
- const bodyFields = effectiveFieldNames?.filter((f3) => f3 !== titleField && f3 !== statusField) ?? [];
15018
+ const statusField = effectiveFieldNames?.find((f) => STATUS_FIELDS.has(f.toLowerCase()));
15019
+ const bodyFields = effectiveFieldNames?.filter((f) => f !== titleField && f !== statusField) ?? [];
16005
15020
  const primaryActions = itemActions?.filter((a) => a.variant !== "danger") ?? [];
16006
15021
  const dangerActions = itemActions?.filter((a) => a.variant === "danger") ?? [];
16007
15022
  const handleActionClick = (action, itemData) => (e) => {
@@ -16432,7 +15447,7 @@ function CastleBoard({
16432
15447
  const [selectedFeature, setSelectedFeature] = useState(null);
16433
15448
  const hoveredFeature = useMemo(() => {
16434
15449
  if (!hoveredTile) return null;
16435
- return features.find((f3) => f3.x === hoveredTile.x && f3.y === hoveredTile.y) ?? null;
15450
+ return features.find((f) => f.x === hoveredTile.x && f.y === hoveredTile.y) ?? null;
16436
15451
  }, [hoveredTile, features]);
16437
15452
  const hoveredUnit = useMemo(() => {
16438
15453
  if (!hoveredTile) return null;
@@ -16447,7 +15462,7 @@ function CastleBoard({
16447
15462
  [scale, baseOffsetX]
16448
15463
  );
16449
15464
  const handleTileClick = useCallback((x, y) => {
16450
- const feature = features.find((f3) => f3.x === x && f3.y === y);
15465
+ const feature = features.find((f) => f.x === x && f.y === y);
16451
15466
  if (feature) {
16452
15467
  setSelectedFeature(feature);
16453
15468
  onFeatureClick?.(feature);
@@ -17860,7 +16875,7 @@ function CraftingRecipe({
17860
16875
  className
17861
16876
  }) {
17862
16877
  const eventBus = useEventBus();
17863
- const handleCraft = React115.useCallback(() => {
16878
+ const handleCraft = React105.useCallback(() => {
17864
16879
  onCraft?.();
17865
16880
  if (craftEvent) {
17866
16881
  eventBus.emit(craftEvent, { output: output.label });
@@ -17877,7 +16892,7 @@ function CraftingRecipe({
17877
16892
  children: [
17878
16893
  /* @__PURE__ */ jsx(HStack, { gap: "xs", className: "flex-wrap items-center", children: inputs.map((ingredient, index) => {
17879
16894
  const hasSufficient = ingredient.available >= ingredient.required;
17880
- return /* @__PURE__ */ jsxs(React115.Fragment, { children: [
16895
+ return /* @__PURE__ */ jsxs(React105.Fragment, { children: [
17881
16896
  /* @__PURE__ */ jsx(Box, { className: "relative", children: /* @__PURE__ */ jsx(
17882
16897
  ItemSlot,
17883
16898
  {
@@ -18171,8 +17186,8 @@ function DPad({
18171
17186
  }) {
18172
17187
  const eventBus = useEventBus();
18173
17188
  const sizes = sizeMap15[size];
18174
- const [activeDirections, setActiveDirections] = React115.useState(/* @__PURE__ */ new Set());
18175
- const handlePress = React115.useCallback(
17189
+ const [activeDirections, setActiveDirections] = React105.useState(/* @__PURE__ */ new Set());
17190
+ const handlePress = React105.useCallback(
18176
17191
  (direction) => {
18177
17192
  setActiveDirections((prev) => new Set(prev).add(direction));
18178
17193
  if (directionEvent) eventBus.emit(`UI:${directionEvent}`, { direction, pressed: true });
@@ -18180,7 +17195,7 @@ function DPad({
18180
17195
  },
18181
17196
  [directionEvent, eventBus, onDirection]
18182
17197
  );
18183
- const handleRelease = React115.useCallback(
17198
+ const handleRelease = React105.useCallback(
18184
17199
  (direction) => {
18185
17200
  setActiveDirections((prev) => {
18186
17201
  const next = new Set(prev);
@@ -18334,6 +17349,7 @@ var init_DashboardLayout = __esm({
18334
17349
  showSearch = false,
18335
17350
  searchEvent,
18336
17351
  onSearchSubmit,
17352
+ topBarActions = [],
18337
17353
  notifications,
18338
17354
  notificationClickEvent,
18339
17355
  onNotificationClick,
@@ -18354,6 +17370,9 @@ var init_DashboardLayout = __esm({
18354
17370
  if (notificationClickEvent) eventBus.emit(`UI:${notificationClickEvent}`, {});
18355
17371
  if (onNotificationClick) onNotificationClick();
18356
17372
  };
17373
+ const handleTopBarActionClick = (event) => {
17374
+ eventBus.emit(`UI:${event}`, {});
17375
+ };
18357
17376
  const [sidebarOpen, setSidebarOpen] = useState(false);
18358
17377
  const [userMenuOpen, setUserMenuOpen] = useState(false);
18359
17378
  const location = useLocation();
@@ -18480,6 +17499,30 @@ var init_DashboardLayout = __esm({
18480
17499
  /* @__PURE__ */ jsxs(HStack, { align: "center", gap: "xs", children: [
18481
17500
  headerActions,
18482
17501
  showThemeToggle && /* @__PURE__ */ jsx(ThemeToggle, {}),
17502
+ topBarActions.map((action, idx) => /* @__PURE__ */ jsxs(
17503
+ Button,
17504
+ {
17505
+ variant: "ghost",
17506
+ className: "relative p-2 rounded-full hover:bg-muted dark:hover:bg-muted",
17507
+ onClick: () => handleTopBarActionClick(action.event),
17508
+ "aria-label": action.label ?? action.icon,
17509
+ children: [
17510
+ /* @__PURE__ */ jsx(Icon, { name: action.icon, className: "h-5 w-5 text-muted-foreground dark:text-muted-foreground" }),
17511
+ action.badge !== void 0 && action.badge !== null && action.badge !== 0 && action.badge !== "" && /* @__PURE__ */ jsx(
17512
+ Box,
17513
+ {
17514
+ as: "span",
17515
+ className: cn(
17516
+ "absolute -top-0.5 -right-0.5 min-w-[18px] h-[18px] px-1 rounded-full text-[10px] font-semibold text-white flex items-center justify-center",
17517
+ action.variant === "danger" ? "bg-error" : action.variant === "primary" ? "bg-primary" : "bg-foreground"
17518
+ ),
17519
+ children: action.badge
17520
+ }
17521
+ )
17522
+ ]
17523
+ },
17524
+ `${action.event}-${idx}`
17525
+ )),
18483
17526
  notificationsEnabled && /* @__PURE__ */ jsxs(
18484
17527
  Button,
18485
17528
  {
@@ -18722,9 +17765,9 @@ function DataGrid({
18722
17765
  return next;
18723
17766
  });
18724
17767
  }, [data, selectionEvent, eventBus]);
18725
- const titleField = fieldDefs.find((f3) => f3.variant === "h3" || f3.variant === "h4") ?? fieldDefs[0];
18726
- const badgeFields = fieldDefs.filter((f3) => f3.variant === "badge" && f3 !== titleField);
18727
- const bodyFields = fieldDefs.filter((f3) => f3 !== titleField && !badgeFields.includes(f3));
17768
+ const titleField = fieldDefs.find((f) => f.variant === "h3" || f.variant === "h4") ?? fieldDefs[0];
17769
+ const badgeFields = fieldDefs.filter((f) => f.variant === "badge" && f !== titleField);
17770
+ const bodyFields = fieldDefs.filter((f) => f !== titleField && !badgeFields.includes(f));
18728
17771
  const primaryActions = itemActions?.filter((a) => a.variant !== "danger") ?? [];
18729
17772
  const dangerActions = itemActions?.filter((a) => a.variant === "danger") ?? [];
18730
17773
  const handleActionClick = (action, itemData) => (e) => {
@@ -19079,13 +18122,13 @@ function DataList({
19079
18122
  }) {
19080
18123
  const eventBus = useEventBus();
19081
18124
  const { t } = useTranslate();
19082
- const [visibleCount, setVisibleCount] = React115__default.useState(pageSize || Infinity);
18125
+ const [visibleCount, setVisibleCount] = React105__default.useState(pageSize || Infinity);
19083
18126
  const fieldDefs = fields ?? columns ?? [];
19084
18127
  const allData = Array.isArray(entity) ? entity : entity ? [entity] : [];
19085
18128
  const data = pageSize > 0 ? allData.slice(0, visibleCount) : allData;
19086
18129
  const hasMoreLocal = pageSize > 0 && visibleCount < allData.length;
19087
18130
  const hasRenderProp = typeof children === "function";
19088
- React115__default.useEffect(() => {
18131
+ React105__default.useEffect(() => {
19089
18132
  const renderItemTypeOf = typeof schemaRenderItem;
19090
18133
  const childrenTypeOf = typeof children;
19091
18134
  if (data.length > 0 && !hasRenderProp) {
@@ -19105,11 +18148,11 @@ function DataList({
19105
18148
  });
19106
18149
  }
19107
18150
  }, [data, hasRenderProp, schemaRenderItem, children, fieldDefs]);
19108
- const titleField = fieldDefs.find((f3) => f3.variant === "h3" || f3.variant === "h4") ?? fieldDefs[0];
19109
- const badgeFields = fieldDefs.filter((f3) => f3.variant === "badge" && f3 !== titleField);
19110
- const progressFields = fieldDefs.filter((f3) => f3.variant === "progress");
18151
+ const titleField = fieldDefs.find((f) => f.variant === "h3" || f.variant === "h4") ?? fieldDefs[0];
18152
+ const badgeFields = fieldDefs.filter((f) => f.variant === "badge" && f !== titleField);
18153
+ const progressFields = fieldDefs.filter((f) => f.variant === "progress");
19111
18154
  const bodyFields = fieldDefs.filter(
19112
- (f3) => f3 !== titleField && !badgeFields.includes(f3) && !progressFields.includes(f3)
18155
+ (f) => f !== titleField && !badgeFields.includes(f) && !progressFields.includes(f)
19113
18156
  );
19114
18157
  const handleActionClick = (action, itemData) => (e) => {
19115
18158
  e.stopPropagation();
@@ -19141,14 +18184,14 @@ function DataList({
19141
18184
  const items2 = data.map((item) => item);
19142
18185
  const groups2 = groupBy ? groupData(items2, groupBy) : [{ label: "", items: items2 }];
19143
18186
  const contentField = titleField?.name ?? fieldDefs[0]?.name ?? "";
19144
- return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React115__default.Fragment, { children: [
18187
+ return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
19145
18188
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: "my-2" }),
19146
18189
  group.items.map((itemData, index) => {
19147
18190
  const id = itemData.id || `${gi}-${index}`;
19148
18191
  const sender = senderField ? String(getNestedValue(itemData, senderField) ?? "") : "";
19149
18192
  const isSent = Boolean(currentUser && sender === currentUser);
19150
18193
  const content = getNestedValue(itemData, contentField);
19151
- const timestampField = fieldDefs.find((f3) => f3.format === "date");
18194
+ const timestampField = fieldDefs.find((f) => f.format === "date");
19152
18195
  const timestamp = timestampField ? getNestedValue(itemData, timestampField.name) : null;
19153
18196
  return /* @__PURE__ */ jsx(
19154
18197
  Box,
@@ -19332,7 +18375,7 @@ function DataList({
19332
18375
  className
19333
18376
  ),
19334
18377
  children: [
19335
- groups.map((group, gi) => /* @__PURE__ */ jsxs(React115__default.Fragment, { children: [
18378
+ groups.map((group, gi) => /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
19336
18379
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: gi > 0 ? "mt-4" : "mt-0" }),
19337
18380
  group.items.map(
19338
18381
  (itemData, index) => renderItem(itemData, index, gi === groups.length - 1 && index === group.items.length - 1)
@@ -19387,135 +18430,6 @@ var init_DataList = __esm({
19387
18430
  DataList.displayName = "DataList";
19388
18431
  }
19389
18432
  });
19390
- function fileIcon(name) {
19391
- const ext = name.split(".").pop()?.toLowerCase() ?? "";
19392
- switch (ext) {
19393
- case "ts":
19394
- case "tsx":
19395
- return "file-code";
19396
- case "js":
19397
- case "jsx":
19398
- return "file-code";
19399
- case "json":
19400
- case "orb":
19401
- return "file-json";
19402
- case "css":
19403
- case "scss":
19404
- return "file-text";
19405
- case "md":
19406
- return "file-text";
19407
- case "py":
19408
- return "file-code";
19409
- case "html":
19410
- return "file-code";
19411
- default:
19412
- return "file";
19413
- }
19414
- }
19415
- var TreeNodeItem, FileTree;
19416
- var init_FileTree = __esm({
19417
- "components/molecules/FileTree.tsx"() {
19418
- "use client";
19419
- init_Box();
19420
- init_Typography();
19421
- init_Icon();
19422
- TreeNodeItem = ({
19423
- node,
19424
- depth,
19425
- indent,
19426
- selectedPath,
19427
- onFileSelect,
19428
- defaultExpanded = false
19429
- }) => {
19430
- const [expanded, setExpanded] = useState(defaultExpanded || depth < 1);
19431
- const isDir = node.type === "dir";
19432
- const isSelected = node.path === selectedPath;
19433
- const handleClick = useCallback(() => {
19434
- if (isDir) {
19435
- setExpanded((prev) => !prev);
19436
- } else {
19437
- onFileSelect?.(node.path);
19438
- }
19439
- }, [isDir, node.path, onFileSelect]);
19440
- return /* @__PURE__ */ jsxs(Fragment, { children: [
19441
- /* @__PURE__ */ jsxs(
19442
- Box,
19443
- {
19444
- className: `flex items-center gap-1.5 py-0.5 px-2 cursor-pointer rounded-sm transition-colors ${isSelected ? "bg-[var(--color-primary)] bg-opacity-15 text-[var(--color-primary)]" : "hover:bg-[var(--color-muted)] hover:bg-opacity-30"}`,
19445
- style: { paddingLeft: depth * indent + 8 },
19446
- onClick: handleClick,
19447
- role: "treeitem",
19448
- "aria-selected": isSelected,
19449
- "aria-expanded": isDir ? expanded : void 0,
19450
- children: [
19451
- isDir ? /* @__PURE__ */ jsx(
19452
- Icon,
19453
- {
19454
- name: expanded ? "chevron-down" : "chevron-right",
19455
- size: "xs",
19456
- className: "text-[var(--color-muted-foreground)] flex-shrink-0"
19457
- }
19458
- ) : /* @__PURE__ */ jsx(Box, { style: { width: 12, flexShrink: 0 } }),
19459
- /* @__PURE__ */ jsx(
19460
- Icon,
19461
- {
19462
- name: isDir ? expanded ? "folder-open" : "folder" : fileIcon(node.name),
19463
- size: "xs",
19464
- className: isDir ? "text-[var(--color-warning)]" : "text-[var(--color-muted-foreground)]"
19465
- }
19466
- ),
19467
- /* @__PURE__ */ jsx(
19468
- Typography,
19469
- {
19470
- variant: "caption",
19471
- className: `truncate font-mono text-[11px] ${isSelected ? "font-semibold" : ""}`,
19472
- children: node.name
19473
- }
19474
- ),
19475
- !isDir && node.size !== void 0 && /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-[var(--color-muted-foreground)] text-[9px] ml-auto flex-shrink-0", children: node.size < 1024 ? `${node.size}B` : `${Math.round(node.size / 1024)}KB` })
19476
- ]
19477
- }
19478
- ),
19479
- isDir && expanded && node.children && /* @__PURE__ */ jsx(Box, { role: "group", children: node.children.map((child) => /* @__PURE__ */ jsx(
19480
- TreeNodeItem,
19481
- {
19482
- node: child,
19483
- depth: depth + 1,
19484
- indent,
19485
- selectedPath,
19486
- onFileSelect,
19487
- defaultExpanded: depth < 0
19488
- },
19489
- child.path
19490
- )) })
19491
- ] });
19492
- };
19493
- FileTree = ({
19494
- tree,
19495
- selectedPath,
19496
- onFileSelect,
19497
- className,
19498
- indent = 16
19499
- }) => {
19500
- if (tree.length === 0) {
19501
- return /* @__PURE__ */ jsx(Box, { className: `p-4 ${className ?? ""}`, children: /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: "No files" }) });
19502
- }
19503
- return /* @__PURE__ */ jsx(Box, { className: `py-1 overflow-y-auto ${className ?? ""}`, role: "tree", children: tree.map((node) => /* @__PURE__ */ jsx(
19504
- TreeNodeItem,
19505
- {
19506
- node,
19507
- depth: 0,
19508
- indent,
19509
- selectedPath,
19510
- onFileSelect,
19511
- defaultExpanded: true
19512
- },
19513
- node.path
19514
- )) });
19515
- };
19516
- FileTree.displayName = "FileTree";
19517
- }
19518
- });
19519
18433
  var FormField;
19520
18434
  var init_FormField = __esm({
19521
18435
  "components/molecules/FormField.tsx"() {
@@ -19866,7 +18780,7 @@ var init_FilterGroup = __esm({
19866
18780
  ) }, filter.field)),
19867
18781
  activeFilterCount > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
19868
18782
  Object.entries(selectedValues).map(([field, value]) => {
19869
- const filterDef = filters.find((f3) => f3.field === field);
18783
+ const filterDef = filters.find((f) => f.field === field);
19870
18784
  return /* @__PURE__ */ jsxs(
19871
18785
  Badge,
19872
18786
  {
@@ -20608,7 +19522,7 @@ var init_WizardProgress = __esm({
20608
19522
  children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: normalizedSteps.map((step, index) => {
20609
19523
  const isActive = index === currentStep;
20610
19524
  const isCompleted = index < currentStep;
20611
- return /* @__PURE__ */ jsxs(React115__default.Fragment, { children: [
19525
+ return /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
20612
19526
  /* @__PURE__ */ jsx(
20613
19527
  "button",
20614
19528
  {
@@ -21519,7 +20433,7 @@ function InventoryGrid({
21519
20433
  const eventBus = useEventBus();
21520
20434
  const slotCount = totalSlots ?? items.length;
21521
20435
  const emptySlotCount = Math.max(0, slotCount - items.length);
21522
- const handleSelect = React115.useCallback(
20436
+ const handleSelect = React105.useCallback(
21523
20437
  (id) => {
21524
20438
  onSelect?.(id);
21525
20439
  if (selectEvent) {
@@ -21732,15 +20646,15 @@ function GameCanvas2D({
21732
20646
  fps = 60,
21733
20647
  className
21734
20648
  }) {
21735
- const canvasRef = React115.useRef(null);
21736
- const rafRef = React115.useRef(0);
21737
- const frameRef = React115.useRef(0);
21738
- const lastTimeRef = React115.useRef(0);
21739
- const onDrawRef = React115.useRef(onDraw);
20649
+ const canvasRef = React105.useRef(null);
20650
+ const rafRef = React105.useRef(0);
20651
+ const frameRef = React105.useRef(0);
20652
+ const lastTimeRef = React105.useRef(0);
20653
+ const onDrawRef = React105.useRef(onDraw);
21740
20654
  onDrawRef.current = onDraw;
21741
- const onTickRef = React115.useRef(onTick);
20655
+ const onTickRef = React105.useRef(onTick);
21742
20656
  onTickRef.current = onTick;
21743
- React115.useEffect(() => {
20657
+ React105.useEffect(() => {
21744
20658
  const canvas = canvasRef.current;
21745
20659
  if (!canvas) return;
21746
20660
  const ctx = canvas.getContext("2d");
@@ -22029,7 +20943,7 @@ function TurnPanel({
22029
20943
  className
22030
20944
  }) {
22031
20945
  const eventBus = useEventBus();
22032
- const handleAction = React115.useCallback(
20946
+ const handleAction = React105.useCallback(
22033
20947
  (event) => {
22034
20948
  if (event) {
22035
20949
  eventBus.emit(event, { turn: currentTurn, phase, activeTeam });
@@ -22175,7 +21089,7 @@ function UnitCommandBar({
22175
21089
  className
22176
21090
  }) {
22177
21091
  const eventBus = useEventBus();
22178
- const handleCommand = React115.useCallback(
21092
+ const handleCommand = React105.useCallback(
22179
21093
  (event) => {
22180
21094
  if (event) {
22181
21095
  eventBus.emit(event, { unitId: selectedUnitId });
@@ -22660,7 +21574,7 @@ function GameMenu({
22660
21574
  } catch {
22661
21575
  }
22662
21576
  const eventBus = eventBusProp || eventBusFromHook;
22663
- const handleOptionClick = React115.useCallback(
21577
+ const handleOptionClick = React105.useCallback(
22664
21578
  (option) => {
22665
21579
  if (option.event && eventBus) {
22666
21580
  eventBus.emit(`UI:${option.event}`, { option });
@@ -22774,7 +21688,7 @@ function GameOverScreen({
22774
21688
  } catch {
22775
21689
  }
22776
21690
  const eventBus = eventBusProp || eventBusFromHook;
22777
- const handleActionClick = React115.useCallback(
21691
+ const handleActionClick = React105.useCallback(
22778
21692
  (action) => {
22779
21693
  if (action.event && eventBus) {
22780
21694
  eventBus.emit(`UI:${action.event}`, { action });
@@ -23144,28 +22058,6 @@ var init_PlatformerCanvas = __esm({
23144
22058
  // components/molecules/game/index.ts
23145
22059
  var init_game2 = __esm({
23146
22060
  "components/molecules/game/index.ts"() {
23147
- init_DPad();
23148
- init_ActionButtons();
23149
- init_StatBadge();
23150
- init_InventoryGrid();
23151
- init_QuestTracker();
23152
- init_CraftingRecipe();
23153
- init_PowerupSlots();
23154
- init_GameCanvas2D();
23155
- init_HealthPanel();
23156
- init_ScoreBoard();
23157
- init_ResourceBar();
23158
- init_TurnPanel();
23159
- init_EnemyPlate();
23160
- init_UnitCommandBar();
23161
- init_GameHud();
23162
- init_DialogueBox();
23163
- init_CombatLog();
23164
- init_InventoryPanel();
23165
- init_GameMenu();
23166
- init_GameOverScreen();
23167
- init_PlatformerCanvas();
23168
- init_IsometricCanvas();
23169
22061
  }
23170
22062
  });
23171
22063
  function resolveNodeColor(node, groups) {
@@ -23903,7 +22795,7 @@ var init_UploadDropZone = __esm({
23903
22795
  if (action) {
23904
22796
  eventBus.emit(`UI:${action}`, {
23905
22797
  ...actionPayload,
23906
- files: valid.map((f3) => ({ name: f3.name, size: f3.size, type: f3.type }))
22798
+ files: valid.map((f) => ({ name: f.name, size: f.size, type: f.type }))
23907
22799
  });
23908
22800
  }
23909
22801
  }
@@ -25052,1758 +23944,13 @@ var init_PullToRefresh = __esm({
25052
23944
  PullToRefresh.displayName = "PullToRefresh";
25053
23945
  }
25054
23946
  });
25055
- var InstallBox;
25056
- var init_InstallBox = __esm({
25057
- "components/molecules/InstallBox.tsx"() {
25058
- "use client";
25059
- init_cn();
25060
- init_Box();
25061
- init_Typography();
25062
- init_Button();
25063
- InstallBox = ({
25064
- command,
25065
- label,
25066
- className
25067
- }) => {
25068
- const [copied, setCopied] = useState(false);
25069
- const handleCopy = useCallback(() => {
25070
- void navigator.clipboard.writeText(command);
25071
- setCopied(true);
25072
- const timer = setTimeout(() => setCopied(false), 2e3);
25073
- return () => clearTimeout(timer);
25074
- }, [command]);
25075
- return /* @__PURE__ */ jsxs(Box, { className: cn("inline-block", className), children: [
25076
- label && /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "mb-1", children: label }),
25077
- /* @__PURE__ */ jsx(
25078
- Box,
25079
- {
25080
- className: "bg-surface rounded-md border-[length:var(--border-width)] border-border",
25081
- padding: "md",
25082
- children: /* @__PURE__ */ jsxs(Box, { className: "flex items-center gap-3", children: [
25083
- /* @__PURE__ */ jsx(
25084
- Typography,
25085
- {
25086
- variant: "body2",
25087
- className: "font-mono flex-1 min-w-0 select-all",
25088
- truncate: true,
25089
- children: command
25090
- }
25091
- ),
25092
- /* @__PURE__ */ jsx(
25093
- Button,
25094
- {
25095
- variant: "ghost",
25096
- size: "sm",
25097
- leftIcon: copied ? "check" : "copy",
25098
- onClick: handleCopy,
25099
- className: "flex-shrink-0",
25100
- "aria-label": copied ? "Copied" : "Copy to clipboard",
25101
- children: copied ? "Copied" : "Copy"
25102
- }
25103
- )
25104
- ] })
25105
- }
25106
- )
25107
- ] });
25108
- };
25109
- InstallBox.displayName = "InstallBox";
25110
- }
25111
- });
25112
- var iconSizeMap, gapMap, FeatureCard;
25113
- var init_FeatureCard = __esm({
25114
- "components/molecules/FeatureCard.tsx"() {
25115
- "use client";
25116
- init_cn();
25117
- init_Card();
25118
- init_Stack();
25119
- init_Icon();
25120
- init_Typography();
25121
- init_Button();
25122
- iconSizeMap = {
25123
- sm: "lg",
25124
- md: "xl",
25125
- lg: "xl"
25126
- };
25127
- gapMap = {
25128
- sm: "sm",
25129
- md: "md",
25130
- lg: "lg"
25131
- };
25132
- FeatureCard = ({
25133
- icon,
25134
- title,
25135
- description,
25136
- href,
25137
- linkLabel = "Learn more",
25138
- variant = "bordered",
25139
- size = "md",
25140
- className
25141
- }) => {
25142
- const renderIcon = () => {
25143
- if (!icon) return null;
25144
- if (typeof icon === "string") {
25145
- return /* @__PURE__ */ jsx(
25146
- Icon,
25147
- {
25148
- name: icon,
25149
- size: iconSizeMap[size],
25150
- className: "text-accent"
25151
- }
25152
- );
25153
- }
25154
- return icon;
25155
- };
25156
- const handleLinkClick = () => {
25157
- if (href) {
25158
- window.open(href, "_blank", "noopener,noreferrer");
25159
- }
25160
- };
25161
- return /* @__PURE__ */ jsx(
25162
- Card,
25163
- {
25164
- variant,
25165
- padding: size,
25166
- className: cn(
25167
- variant === "interactive" && "hover:border-primary",
25168
- className
25169
- ),
25170
- onClick: variant === "interactive" && href ? handleLinkClick : void 0,
25171
- children: /* @__PURE__ */ jsxs(VStack, { gap: gapMap[size], align: "start", children: [
25172
- renderIcon(),
25173
- /* @__PURE__ */ jsx(Typography, { variant: "h4", className: size === "sm" ? "text-base" : void 0, children: title }),
25174
- /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "muted", children: description }),
25175
- href && variant !== "interactive" && /* @__PURE__ */ jsx(
25176
- Button,
25177
- {
25178
- variant: "ghost",
25179
- size: "sm",
25180
- onClick: handleLinkClick,
25181
- className: "text-primary -ml-2",
25182
- children: linkLabel
25183
- }
25184
- )
25185
- ] })
25186
- }
25187
- );
25188
- };
25189
- FeatureCard.displayName = "FeatureCard";
25190
- }
25191
- });
25192
- var FeatureGrid;
25193
- var init_FeatureGrid = __esm({
25194
- "components/molecules/FeatureGrid.tsx"() {
25195
- "use client";
25196
- init_cn();
25197
- init_SimpleGrid();
25198
- init_FeatureCard();
25199
- FeatureGrid = ({
25200
- items,
25201
- columns = 3,
25202
- gap = "md",
25203
- className
25204
- }) => {
25205
- return /* @__PURE__ */ jsx(
25206
- SimpleGrid,
25207
- {
25208
- cols: columns,
25209
- gap,
25210
- className: cn(className),
25211
- children: items.map((item, index) => /* @__PURE__ */ jsx(FeatureCard, { ...item }, `${item.title}-${index}`))
25212
- }
25213
- );
25214
- };
25215
- FeatureGrid.displayName = "FeatureGrid";
25216
- }
25217
- });
25218
- var CTABanner;
25219
- var init_CTABanner = __esm({
25220
- "components/molecules/CTABanner.tsx"() {
25221
- "use client";
25222
- init_cn();
25223
- init_Box();
25224
- init_Stack();
25225
- init_Typography();
25226
- init_Button();
25227
- CTABanner = ({
25228
- title,
25229
- subtitle,
25230
- primaryAction,
25231
- secondaryAction,
25232
- background = "alt",
25233
- align = "center",
25234
- className
25235
- }) => {
25236
- const handleAction = (href) => {
25237
- window.open(href, "_blank", "noopener,noreferrer");
25238
- };
25239
- return /* @__PURE__ */ jsx(
25240
- Box,
25241
- {
25242
- className: cn(
25243
- "py-16",
25244
- background === "alt" && "bg-surface",
25245
- background === "dark" && "bg-surface",
25246
- background === "gradient" && "bg-surface",
25247
- background === "primary" && "bg-surface",
25248
- className
25249
- ),
25250
- children: /* @__PURE__ */ jsxs(
25251
- VStack,
25252
- {
25253
- gap: "lg",
25254
- align: align === "center" ? "center" : "start",
25255
- className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",
25256
- children: [
25257
- /* @__PURE__ */ jsx(Typography, { variant: "h2", align, children: title }),
25258
- subtitle && /* @__PURE__ */ jsx(Typography, { variant: "body", color: "muted", align, children: subtitle }),
25259
- (primaryAction || secondaryAction) && /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "center", children: [
25260
- primaryAction && /* @__PURE__ */ jsx(
25261
- Button,
25262
- {
25263
- variant: "primary",
25264
- size: "lg",
25265
- onClick: () => handleAction(primaryAction.href),
25266
- children: primaryAction.label
25267
- }
25268
- ),
25269
- secondaryAction && /* @__PURE__ */ jsx(
25270
- Button,
25271
- {
25272
- variant: "secondary",
25273
- size: "lg",
25274
- onClick: () => handleAction(secondaryAction.href),
25275
- children: secondaryAction.label
25276
- }
25277
- )
25278
- ] })
25279
- ]
25280
- }
25281
- )
25282
- }
25283
- );
25284
- };
25285
- CTABanner.displayName = "CTABanner";
25286
- }
25287
- });
25288
- var tagVariantMap, MarketingImage, HeroSection;
25289
- var init_HeroSection = __esm({
25290
- "components/molecules/HeroSection.tsx"() {
25291
- "use client";
25292
- init_cn();
25293
- init_Box();
25294
- init_Stack();
25295
- init_Badge();
25296
- init_Typography();
25297
- init_Button();
25298
- init_InstallBox();
25299
- tagVariantMap = {
25300
- primary: "primary",
25301
- secondary: "secondary",
25302
- accent: "info"
25303
- };
25304
- MarketingImage = ({ src, alt, className }) => /* @__PURE__ */ jsx(
25305
- Box,
25306
- {
25307
- className: cn(
25308
- "overflow-hidden rounded-lg bg-cover bg-center bg-no-repeat",
25309
- className
25310
- ),
25311
- style: { backgroundImage: `url(${src})` },
25312
- role: "img",
25313
- "aria-label": alt
25314
- }
25315
- );
25316
- MarketingImage.displayName = "MarketingImage";
25317
- HeroSection = ({
25318
- tag,
25319
- tagVariant = "primary",
25320
- title,
25321
- titleAccent,
25322
- subtitle,
25323
- primaryAction,
25324
- secondaryAction,
25325
- installCommand,
25326
- image,
25327
- imagePosition = "below",
25328
- background = "subtle",
25329
- align = "center",
25330
- backgroundElement,
25331
- children,
25332
- className
25333
- }) => {
25334
- const isCenter = align === "center";
25335
- const isDark = background === "dark";
25336
- const titleNode = titleAccent ? /* @__PURE__ */ jsxs(
25337
- Typography,
25338
- {
25339
- variant: "h1",
25340
- align: isCenter ? "center" : "left",
25341
- className: cn(
25342
- "max-w-3xl leading-tight",
25343
- isDark && "text-background"
25344
- ),
25345
- children: [
25346
- title,
25347
- " ",
25348
- /* @__PURE__ */ jsx(
25349
- Typography,
25350
- {
25351
- as: "span",
25352
- variant: "h1",
25353
- className: "text-primary",
25354
- children: titleAccent
25355
- }
25356
- )
25357
- ]
25358
- }
25359
- ) : /* @__PURE__ */ jsx(
25360
- Typography,
25361
- {
25362
- variant: "h1",
25363
- align: isCenter ? "center" : "left",
25364
- className: cn(
25365
- "max-w-3xl leading-tight",
25366
- isDark && "text-background"
25367
- ),
25368
- children: title
25369
- }
25370
- );
25371
- const textContent = /* @__PURE__ */ jsxs(
25372
- VStack,
25373
- {
25374
- gap: "lg",
25375
- align: isCenter ? "center" : "start",
25376
- className: cn(
25377
- isCenter && "items-center",
25378
- imagePosition === "right" ? "flex-1" : "w-full"
25379
- ),
25380
- children: [
25381
- tag && /* @__PURE__ */ jsx(Badge, { variant: tagVariantMap[tagVariant] ?? "primary", size: "md", children: tag }),
25382
- titleNode,
25383
- /* @__PURE__ */ jsx(
25384
- Typography,
25385
- {
25386
- variant: "body1",
25387
- color: "muted",
25388
- align: isCenter ? "center" : "left",
25389
- className: "max-w-xl",
25390
- children: subtitle
25391
- }
25392
- ),
25393
- installCommand && /* @__PURE__ */ jsx(InstallBox, { command: installCommand }),
25394
- (primaryAction || secondaryAction) && /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "center", children: [
25395
- primaryAction && /* @__PURE__ */ jsx(
25396
- "a",
25397
- {
25398
- href: primaryAction.href,
25399
- target: primaryAction.href.startsWith("http") ? "_blank" : void 0,
25400
- rel: primaryAction.href.startsWith("http") ? "noopener noreferrer" : void 0,
25401
- className: "no-underline",
25402
- children: /* @__PURE__ */ jsx(Button, { variant: "primary", size: "lg", children: primaryAction.label })
25403
- }
25404
- ),
25405
- secondaryAction && /* @__PURE__ */ jsx(
25406
- "a",
25407
- {
25408
- href: secondaryAction.href,
25409
- target: secondaryAction.href.startsWith("http") ? "_blank" : void 0,
25410
- rel: secondaryAction.href.startsWith("http") ? "noopener noreferrer" : void 0,
25411
- className: "no-underline",
25412
- children: /* @__PURE__ */ jsx(Button, { variant: "secondary", size: "lg", children: secondaryAction.label })
25413
- }
25414
- )
25415
- ] }),
25416
- children
25417
- ]
25418
- }
25419
- );
25420
- const imageNode = image && /* @__PURE__ */ jsx(
25421
- MarketingImage,
25422
- {
25423
- src: image.src,
25424
- alt: image.alt,
25425
- className: cn(
25426
- imagePosition === "right" ? "w-full max-w-[280px] max-h-[280px]" : "w-full min-h-[400px]"
25427
- )
25428
- }
25429
- );
25430
- const innerContent = image && imagePosition === "right" ? /* @__PURE__ */ jsxs(HStack, { gap: "xl", align: "center", className: "w-full max-w-7xl", responsive: true, children: [
25431
- textContent,
25432
- imageNode
25433
- ] }) : /* @__PURE__ */ jsxs(VStack, { gap: "xl", align: isCenter ? "center" : "start", className: "w-full max-w-7xl", children: [
25434
- textContent,
25435
- image && imagePosition === "below" && imageNode
25436
- ] });
25437
- return /* @__PURE__ */ jsxs(
25438
- Box,
25439
- {
25440
- as: "header",
25441
- className: cn(
25442
- "w-full min-h-[60vh] flex items-center justify-center",
25443
- "py-20",
25444
- "relative overflow-hidden",
25445
- className
25446
- ),
25447
- children: [
25448
- backgroundElement,
25449
- image && imagePosition === "background" && /* @__PURE__ */ jsx(
25450
- MarketingImage,
25451
- {
25452
- src: image.src,
25453
- alt: image.alt,
25454
- className: "absolute inset-0 w-full h-full opacity-20"
25455
- }
25456
- ),
25457
- /* @__PURE__ */ jsx(Box, { className: "relative z-10 w-full flex justify-center px-4 sm:px-6 lg:px-8", children: innerContent })
25458
- ]
25459
- }
25460
- );
25461
- };
25462
- HeroSection.displayName = "HeroSection";
25463
- }
25464
- });
25465
- var PricingCard;
25466
- var init_PricingCard = __esm({
25467
- "components/molecules/PricingCard.tsx"() {
25468
- "use client";
25469
- init_cn();
25470
- init_Card();
25471
- init_Stack();
25472
- init_Badge();
25473
- init_Typography();
25474
- init_Icon();
25475
- init_Divider();
25476
- init_Spacer();
25477
- init_Button();
25478
- PricingCard = ({
25479
- name,
25480
- price,
25481
- description,
25482
- features,
25483
- action,
25484
- highlighted = false,
25485
- badge,
25486
- className
25487
- }) => {
25488
- return /* @__PURE__ */ jsx(
25489
- Card,
25490
- {
25491
- variant: highlighted ? "elevated" : "bordered",
25492
- padding: "lg",
25493
- className: cn(
25494
- "flex flex-col h-full",
25495
- "hover:-translate-y-1 transition-all",
25496
- highlighted && [
25497
- "border-[length:2px] border-primary",
25498
- "shadow-lg",
25499
- "scale-[1.05]",
25500
- "ring-2 ring-primary"
25501
- ],
25502
- className
25503
- ),
25504
- children: /* @__PURE__ */ jsxs(VStack, { gap: "md", className: "flex-1", children: [
25505
- badge && /* @__PURE__ */ jsx(Badge, { variant: "primary", size: "sm", children: badge }),
25506
- /* @__PURE__ */ jsx(Typography, { variant: "h3", children: name }),
25507
- /* @__PURE__ */ jsx(
25508
- Typography,
25509
- {
25510
- variant: "h2",
25511
- className: "text-primary font-bold",
25512
- children: price
25513
- }
25514
- ),
25515
- description && /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "muted", children: description }),
25516
- /* @__PURE__ */ jsx(Divider, {}),
25517
- /* @__PURE__ */ jsx(VStack, { gap: "sm", children: features.map((feature) => /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", children: [
25518
- /* @__PURE__ */ jsx(
25519
- Icon,
25520
- {
25521
- icon: Check,
25522
- size: "sm",
25523
- className: "flex-shrink-0 text-success"
25524
- }
25525
- ),
25526
- /* @__PURE__ */ jsx(Typography, { variant: "body2", children: feature })
25527
- ] }, feature)) }),
25528
- /* @__PURE__ */ jsx(Spacer, {}),
25529
- /* @__PURE__ */ jsx(
25530
- Button,
25531
- {
25532
- variant: highlighted ? "primary" : "secondary",
25533
- size: "lg",
25534
- className: "w-full",
25535
- children: action.label
25536
- }
25537
- )
25538
- ] })
25539
- }
25540
- );
25541
- };
25542
- PricingCard.displayName = "PricingCard";
25543
- }
25544
- });
25545
- var PricingGrid;
25546
- var init_PricingGrid = __esm({
25547
- "components/molecules/PricingGrid.tsx"() {
25548
- "use client";
25549
- init_cn();
25550
- init_SimpleGrid();
25551
- init_PricingCard();
25552
- PricingGrid = ({
25553
- plans,
25554
- className
25555
- }) => {
25556
- const cols = Math.min(plans.length, 4);
25557
- return /* @__PURE__ */ jsx(
25558
- SimpleGrid,
25559
- {
25560
- cols: cols > 0 ? cols : 1,
25561
- gap: "lg",
25562
- className: cn("items-stretch", className),
25563
- children: plans.map((plan) => /* @__PURE__ */ jsx(PricingCard, { ...plan }, plan.name))
25564
- }
25565
- );
25566
- };
25567
- PricingGrid.displayName = "PricingGrid";
25568
- }
25569
- });
25570
- var StatsGrid;
25571
- var init_StatsGrid = __esm({
25572
- "components/molecules/StatsGrid.tsx"() {
25573
- "use client";
25574
- init_cn();
25575
- init_SimpleGrid();
25576
- init_Stack();
25577
- init_Typography();
25578
- StatsGrid = ({
25579
- stats,
25580
- columns = 3,
25581
- className
25582
- }) => {
25583
- return /* @__PURE__ */ jsx(SimpleGrid, { cols: columns, gap: "lg", className: cn("w-full", className), children: stats.map((stat) => /* @__PURE__ */ jsxs(VStack, { gap: "xs", align: "center", className: "py-4", children: [
25584
- /* @__PURE__ */ jsx(
25585
- Typography,
25586
- {
25587
- variant: "h2",
25588
- className: "font-bold text-primary",
25589
- children: stat.value
25590
- }
25591
- ),
25592
- /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: stat.label })
25593
- ] }, stat.label)) });
25594
- };
25595
- StatsGrid.displayName = "StatsGrid";
25596
- }
25597
- });
25598
- var ServiceCatalog;
25599
- var init_ServiceCatalog = __esm({
25600
- "components/molecules/ServiceCatalog.tsx"() {
25601
- "use client";
25602
- init_cn();
25603
- init_Card();
25604
- init_Stack();
25605
- init_Badge();
25606
- init_Typography();
25607
- init_SimpleGrid();
25608
- ServiceCatalog = ({
25609
- services,
25610
- className
25611
- }) => {
25612
- return /* @__PURE__ */ jsx(SimpleGrid, { cols: 4, gap: "sm", className: cn(className), children: services.map((service) => /* @__PURE__ */ jsx(Card, { variant: "bordered", padding: "sm", children: /* @__PURE__ */ jsxs(VStack, { gap: "xs", align: "start", children: [
25613
- /* @__PURE__ */ jsx(
25614
- Badge,
25615
- {
25616
- size: "sm",
25617
- className: service.layerColor,
25618
- children: service.layer
25619
- }
25620
- ),
25621
- /* @__PURE__ */ jsx(Typography, { variant: "body", children: service.name })
25622
- ] }) }, service.name)) });
25623
- };
25624
- ServiceCatalog.displayName = "ServiceCatalog";
25625
- }
25626
- });
25627
- var CaseStudyCard;
25628
- var init_CaseStudyCard = __esm({
25629
- "components/molecules/CaseStudyCard.tsx"() {
25630
- "use client";
25631
- init_cn();
25632
- init_Card();
25633
- init_Stack();
25634
- init_Badge();
25635
- init_Typography();
25636
- init_Button();
25637
- CaseStudyCard = ({
25638
- title,
25639
- description,
25640
- category,
25641
- categoryColor,
25642
- href,
25643
- linkLabel = "Read more",
25644
- className
25645
- }) => {
25646
- const handleClick = () => {
25647
- window.open(href, "_blank", "noopener,noreferrer");
25648
- };
25649
- return /* @__PURE__ */ jsx(Card, { variant: "interactive", className: cn(className), children: /* @__PURE__ */ jsxs(VStack, { gap: "md", align: "start", children: [
25650
- /* @__PURE__ */ jsx(
25651
- Badge,
25652
- {
25653
- size: "sm",
25654
- style: categoryColor ? { backgroundColor: categoryColor, color: "white" } : void 0,
25655
- children: category
25656
- }
25657
- ),
25658
- /* @__PURE__ */ jsx(Typography, { variant: "h3", children: title }),
25659
- /* @__PURE__ */ jsx(Typography, { variant: "body", color: "muted", children: description }),
25660
- /* @__PURE__ */ jsxs(
25661
- Button,
25662
- {
25663
- variant: "ghost",
25664
- size: "sm",
25665
- onClick: handleClick,
25666
- className: "text-primary -ml-2",
25667
- children: [
25668
- linkLabel,
25669
- " \u2192"
25670
- ]
25671
- }
25672
- )
25673
- ] }) });
25674
- };
25675
- CaseStudyCard.displayName = "CaseStudyCard";
25676
- }
25677
- });
25678
- var ArticleSection;
25679
- var init_ArticleSection = __esm({
25680
- "components/molecules/ArticleSection.tsx"() {
25681
- "use client";
25682
- init_cn();
25683
- init_Box();
25684
- init_Stack();
25685
- init_Typography();
25686
- ArticleSection = ({
25687
- title,
25688
- children,
25689
- maxWidth = "md",
25690
- className
25691
- }) => {
25692
- return /* @__PURE__ */ jsx(
25693
- Box,
25694
- {
25695
- className: cn(
25696
- "w-full",
25697
- className
25698
- ),
25699
- padding: "md",
25700
- children: /* @__PURE__ */ jsxs(VStack, { gap: "lg", align: "start", children: [
25701
- /* @__PURE__ */ jsx(Typography, { variant: "h2", children: title }),
25702
- /* @__PURE__ */ jsx(Box, { className: "w-full", children })
25703
- ] })
25704
- }
25705
- );
25706
- };
25707
- ArticleSection.displayName = "ArticleSection";
25708
- }
25709
- });
25710
- var CodeExample;
25711
- var init_CodeExample = __esm({
25712
- "components/molecules/CodeExample.tsx"() {
25713
- "use client";
25714
- init_cn();
25715
- init_Box();
25716
- init_Stack();
25717
- init_Typography();
25718
- init_Button();
25719
- init_Spacer();
25720
- CodeExample = ({
25721
- code,
25722
- language,
25723
- title,
25724
- copyable = false,
25725
- maxHeight,
25726
- className
25727
- }) => {
25728
- const [copied, setCopied] = useState(false);
25729
- const handleCopy = useCallback(() => {
25730
- void navigator.clipboard.writeText(code);
25731
- setCopied(true);
25732
- const timer = setTimeout(() => setCopied(false), 2e3);
25733
- return () => clearTimeout(timer);
25734
- }, [code]);
25735
- const showHeader = title || copyable;
25736
- return /* @__PURE__ */ jsxs(
25737
- Box,
25738
- {
25739
- className: cn(
25740
- "bg-foreground",
25741
- "rounded-md",
25742
- "border-[length:var(--border-width)] border-border",
25743
- "overflow-hidden",
25744
- className
25745
- ),
25746
- children: [
25747
- showHeader && /* @__PURE__ */ jsx(
25748
- Box,
25749
- {
25750
- className: "bg-foreground border-b-[length:var(--border-width)] border-border",
25751
- padding: "sm",
25752
- children: /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", children: [
25753
- title ? /* @__PURE__ */ jsx(
25754
- Typography,
25755
- {
25756
- variant: "caption",
25757
- className: "text-background opacity-70",
25758
- children: title
25759
- }
25760
- ) : /* @__PURE__ */ jsx(
25761
- Typography,
25762
- {
25763
- variant: "caption",
25764
- className: "text-background opacity-50",
25765
- children: language
25766
- }
25767
- ),
25768
- /* @__PURE__ */ jsx(Spacer, {}),
25769
- copyable && /* @__PURE__ */ jsx(
25770
- Button,
25771
- {
25772
- variant: "ghost",
25773
- size: "sm",
25774
- onClick: handleCopy,
25775
- className: "text-background hover:text-background opacity-70 hover:opacity-100",
25776
- children: copied ? "Copied!" : "Copy"
25777
- }
25778
- )
25779
- ] })
25780
- }
25781
- ),
25782
- /* @__PURE__ */ jsx(
25783
- Box,
25784
- {
25785
- className: "overflow-auto",
25786
- padding: "md",
25787
- style: maxHeight ? { maxHeight } : void 0,
25788
- children: /* @__PURE__ */ jsx(
25789
- Typography,
25790
- {
25791
- variant: "body2",
25792
- className: "font-mono text-sm whitespace-pre text-background select-all",
25793
- children: code
25794
- }
25795
- )
25796
- }
25797
- )
25798
- ]
25799
- }
25800
- );
25801
- };
25802
- CodeExample.displayName = "CodeExample";
25803
- }
25804
- });
25805
- var LogosVariant, QuotesVariant, BadgesVariant, SocialProof;
25806
- var init_SocialProof = __esm({
25807
- "components/molecules/SocialProof.tsx"() {
25808
- "use client";
25809
- init_cn();
25810
- init_Box();
25811
- init_Stack();
25812
- init_Stack();
25813
- init_Card();
25814
- init_Badge();
25815
- init_Typography();
25816
- init_SimpleGrid();
25817
- LogosVariant = ({ items }) => /* @__PURE__ */ jsx(HStack, { gap: "xl", justify: "center", className: "flex-wrap", children: items.map((item) => /* @__PURE__ */ jsx(
25818
- Box,
25819
- {
25820
- className: "opacity-60 hover:opacity-100 transition-opacity cursor-default",
25821
- children: /* @__PURE__ */ jsxs(VStack, { gap: "xs", align: "center", children: [
25822
- item.logo && /* @__PURE__ */ jsx(
25823
- Box,
25824
- {
25825
- className: "w-12 h-12 bg-contain bg-center bg-no-repeat",
25826
- style: { backgroundImage: `url(${item.logo})` }
25827
- }
25828
- ),
25829
- /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: item.name })
25830
- ] })
25831
- },
25832
- item.name
25833
- )) });
25834
- LogosVariant.displayName = "SocialProof.LogosVariant";
25835
- QuotesVariant = ({ items }) => {
25836
- const cols = items.length >= 3 ? 3 : items.length >= 2 ? 2 : 1;
25837
- return /* @__PURE__ */ jsx(SimpleGrid, { cols, gap: "md", children: items.map((item) => /* @__PURE__ */ jsx(Card, { variant: "bordered", padding: "md", children: /* @__PURE__ */ jsxs(VStack, { gap: "sm", align: "start", children: [
25838
- item.quote && /* @__PURE__ */ jsxs(Typography, { variant: "body", className: "italic", children: [
25839
- "\u201C",
25840
- item.quote,
25841
- "\u201D"
25842
- ] }),
25843
- /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: item.name })
25844
- ] }) }, item.name)) });
25845
- };
25846
- QuotesVariant.displayName = "SocialProof.QuotesVariant";
25847
- BadgesVariant = ({ items }) => /* @__PURE__ */ jsx(HStack, { gap: "sm", justify: "center", className: "flex-wrap", children: items.map((item) => /* @__PURE__ */ jsx(Badge, { size: "md", children: item.name }, item.name)) });
25848
- BadgesVariant.displayName = "SocialProof.BadgesVariant";
25849
- SocialProof = ({
25850
- items,
25851
- variant = "logos",
25852
- className
25853
- }) => {
25854
- return /* @__PURE__ */ jsxs(Box, { className: cn(className), children: [
25855
- variant === "logos" && /* @__PURE__ */ jsx(LogosVariant, { items }),
25856
- variant === "quotes" && /* @__PURE__ */ jsx(QuotesVariant, { items }),
25857
- variant === "badges" && /* @__PURE__ */ jsx(BadgesVariant, { items })
25858
- ] });
25859
- };
25860
- SocialProof.displayName = "SocialProof";
25861
- }
25862
- });
25863
- var StepCircle, StepFlow;
25864
- var init_StepFlow = __esm({
25865
- "components/molecules/StepFlow.tsx"() {
25866
- "use client";
25867
- init_cn();
25868
- init_Box();
25869
- init_Stack();
25870
- init_Center();
25871
- init_Typography();
25872
- init_Icon();
25873
- init_Divider();
25874
- StepCircle = ({ step, index }) => {
25875
- if (step.icon) {
25876
- return /* @__PURE__ */ jsx(
25877
- Center,
25878
- {
25879
- className: cn(
25880
- "w-10 h-10 rounded-full flex-shrink-0",
25881
- "flex items-center justify-center",
25882
- "bg-primary text-primary-foreground"
25883
- ),
25884
- children: /* @__PURE__ */ jsx(Icon, { name: step.icon, size: "sm", className: "text-primary-foreground" })
25885
- }
25886
- );
25887
- }
25888
- return /* @__PURE__ */ jsx(
25889
- Center,
25890
- {
25891
- className: cn(
25892
- "w-10 h-10 rounded-full flex-shrink-0",
25893
- "flex items-center justify-center",
25894
- "bg-primary text-primary-foreground"
25895
- ),
25896
- children: /* @__PURE__ */ jsx("span", { className: "font-semibold text-sm text-primary-foreground leading-none", children: step.number ?? index + 1 })
25897
- }
25898
- );
25899
- };
25900
- StepCircle.displayName = "StepCircle";
25901
- StepFlow = ({
25902
- steps,
25903
- orientation = "horizontal",
25904
- showConnectors = true,
25905
- className
25906
- }) => {
25907
- if (orientation === "vertical") {
25908
- return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React115__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
25909
- /* @__PURE__ */ jsxs(VStack, { gap: "none", align: "center", children: [
25910
- /* @__PURE__ */ jsx(StepCircle, { step, index }),
25911
- showConnectors && index < steps.length - 1 && /* @__PURE__ */ jsx(Box, { className: "w-px h-8 bg-border" })
25912
- ] }),
25913
- /* @__PURE__ */ jsxs(VStack, { gap: "xs", className: "flex-1 pt-1", children: [
25914
- /* @__PURE__ */ jsx(Typography, { variant: "h4", children: step.title }),
25915
- /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "muted", children: step.description })
25916
- ] })
25917
- ] }) }, index)) });
25918
- }
25919
- 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(React115__default.Fragment, { children: [
25920
- /* @__PURE__ */ jsxs(VStack, { gap: "sm", align: "center", className: "flex-1 w-full md:w-auto", children: [
25921
- /* @__PURE__ */ jsx(StepCircle, { step, index }),
25922
- /* @__PURE__ */ jsx(Typography, { variant: "h4", className: "text-center", children: step.title }),
25923
- /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "muted", className: "text-center", children: step.description })
25924
- ] }),
25925
- showConnectors && index < steps.length - 1 && /* @__PURE__ */ jsx(Box, { className: "flex-shrink-0 self-center py-2 md:pt-5 md:py-0 md:px-2", children: /* @__PURE__ */ jsx(Divider, { orientation: "horizontal", className: "w-12 md:w-12" }) })
25926
- ] }, index)) });
25927
- };
25928
- StepFlow.displayName = "StepFlow";
25929
- }
25930
- });
25931
- var SplitSection;
25932
- var init_SplitSection = __esm({
25933
- "components/molecules/SplitSection.tsx"() {
25934
- "use client";
25935
- init_cn();
25936
- init_Box();
25937
- init_Stack();
25938
- init_Typography();
25939
- init_Icon();
25940
- SplitSection = ({
25941
- title,
25942
- description,
25943
- bullets,
25944
- image,
25945
- imagePosition = "right",
25946
- background = "default",
25947
- children,
25948
- className
25949
- }) => {
25950
- const textContent = /* @__PURE__ */ jsxs(VStack, { gap: "md", className: "flex-1 min-w-0", children: [
25951
- /* @__PURE__ */ jsx(Typography, { variant: "h2", children: title }),
25952
- typeof description === "string" ? /* @__PURE__ */ jsx(Typography, { variant: "body", color: "muted", children: description }) : description,
25953
- bullets && bullets.length > 0 && /* @__PURE__ */ jsx(VStack, { gap: "sm", children: bullets.map((bullet, index) => /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "start", className: "mt-0.5", children: [
25954
- /* @__PURE__ */ jsx(
25955
- Icon,
25956
- {
25957
- name: "check",
25958
- size: "sm",
25959
- className: "text-primary flex-shrink-0 mt-0.5"
25960
- }
25961
- ),
25962
- /* @__PURE__ */ jsx(Typography, { variant: "body2", children: bullet })
25963
- ] }, index)) })
25964
- ] });
25965
- const mediaContent = children ?? (image ? /* @__PURE__ */ jsx(
25966
- Box,
25967
- {
25968
- className: cn(
25969
- "flex-1 min-w-0 min-h-[240px] rounded-md",
25970
- "bg-cover bg-center"
25971
- ),
25972
- style: { backgroundImage: `url(${image.src})` },
25973
- role: "img",
25974
- "aria-label": image.alt
25975
- }
25976
- ) : null);
25977
- const isImageLeft = imagePosition === "left";
25978
- return /* @__PURE__ */ jsx(
25979
- Box,
25980
- {
25981
- className: cn(
25982
- "w-full",
25983
- background === "alt" ? "bg-muted" : "bg-background",
25984
- className
25985
- ),
25986
- padding: "lg",
25987
- 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: [
25988
- /* @__PURE__ */ jsx(Box, { className: "flex-1 min-w-0 lg:min-w-[45%]", children: textContent }),
25989
- /* @__PURE__ */ jsx(Box, { className: "flex-1 min-w-0 lg:max-w-[50%]", children: mediaContent })
25990
- ] })
25991
- }
25992
- );
25993
- };
25994
- SplitSection.displayName = "SplitSection";
25995
- }
25996
- });
25997
- function normalizeTags(tags) {
25998
- if (tags.length === 0) return [];
25999
- if (typeof tags[0] === "string") {
26000
- return tags.map((label) => ({ label }));
26001
- }
26002
- return tags;
26003
- }
26004
- var variantMap4, TagCloud;
26005
- var init_TagCloud = __esm({
26006
- "components/molecules/TagCloud.tsx"() {
26007
- "use client";
26008
- init_cn();
26009
- init_Stack();
26010
- init_Badge();
26011
- variantMap4 = {
26012
- default: "default",
26013
- primary: "primary",
26014
- accent: "info"
26015
- };
26016
- TagCloud = ({
26017
- tags,
26018
- variant = "default",
26019
- className
26020
- }) => {
26021
- const normalizedTags = normalizeTags(tags);
26022
- return /* @__PURE__ */ jsx(HStack, { gap: "sm", className: cn("flex-wrap justify-center", className), children: normalizedTags.map((tag, index) => {
26023
- const badgeVariant = tag.variant ? variantMap4[tag.variant] ?? "default" : variantMap4[variant] ?? "default";
26024
- return /* @__PURE__ */ jsx(Badge, { variant: badgeVariant, label: tag.label }, index);
26025
- }) });
26026
- };
26027
- TagCloud.displayName = "TagCloud";
26028
- }
26029
- });
26030
- function formatCount(count) {
26031
- if (count >= 1e3) {
26032
- return `${(count / 1e3).toFixed(1)}k`;
26033
- }
26034
- return String(count);
26035
- }
26036
- var CommunityLinks;
26037
- var init_CommunityLinks = __esm({
26038
- "components/molecules/CommunityLinks.tsx"() {
26039
- "use client";
26040
- init_Stack();
26041
- init_Typography();
26042
- init_Button();
26043
- init_Icon();
26044
- CommunityLinks = ({
26045
- github,
26046
- discord,
26047
- twitter,
26048
- heading,
26049
- subtitle,
26050
- className
26051
- }) => {
26052
- const openLink = (url) => () => {
26053
- window.open(url, "_blank", "noopener,noreferrer");
26054
- };
26055
- return /* @__PURE__ */ jsxs(VStack, { gap: "lg", align: "center", className, children: [
26056
- heading && /* @__PURE__ */ jsx(Typography, { variant: "h2", className: "text-center", children: heading }),
26057
- subtitle && /* @__PURE__ */ jsx(Typography, { variant: "body", color: "muted", className: "text-center", children: subtitle }),
26058
- /* @__PURE__ */ jsxs(HStack, { gap: "md", className: "flex-wrap justify-center", children: [
26059
- github && /* @__PURE__ */ jsx(Button, { variant: "primary", onClick: openLink(github.url), children: /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", children: [
26060
- /* @__PURE__ */ jsx(Icon, { name: "github", size: "sm" }),
26061
- /* @__PURE__ */ jsx(Typography, { variant: "body2", className: "text-inherit", children: github.stars != null ? `GitHub (${formatCount(github.stars)} stars)` : "GitHub" })
26062
- ] }) }),
26063
- discord && /* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: openLink(discord.url), children: /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", children: [
26064
- /* @__PURE__ */ jsx(Icon, { name: "message-circle", size: "sm" }),
26065
- /* @__PURE__ */ jsx(Typography, { variant: "body2", className: "text-inherit", children: discord.members != null ? `Discord (${formatCount(discord.members)} members)` : "Discord" })
26066
- ] }) }),
26067
- twitter && /* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: openLink(twitter.url), children: /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", children: [
26068
- /* @__PURE__ */ jsx(Icon, { name: "twitter", size: "sm" }),
26069
- /* @__PURE__ */ jsx(Typography, { variant: "body2", className: "text-inherit", children: twitter.followers != null ? `Twitter (${formatCount(twitter.followers)} followers)` : "Twitter" })
26070
- ] }) })
26071
- ] })
26072
- ] });
26073
- };
26074
- CommunityLinks.displayName = "CommunityLinks";
26075
- }
26076
- });
26077
- var TeamCard;
26078
- var init_TeamCard = __esm({
26079
- "components/molecules/TeamCard.tsx"() {
26080
- "use client";
26081
- init_cn();
26082
- init_Box();
26083
- init_Card();
26084
- init_Stack();
26085
- init_Avatar();
26086
- init_Typography();
26087
- TeamCard = ({
26088
- name,
26089
- nameAr,
26090
- role,
26091
- bio,
26092
- avatar,
26093
- className
26094
- }) => {
26095
- const avatarSrc = typeof avatar === "string" ? avatar : void 0;
26096
- const avatarInitials = typeof avatar === "object" && avatar !== null ? avatar.initials : void 0;
26097
- return /* @__PURE__ */ jsx(Card, { variant: "bordered", padding: "lg", className: cn("w-full", className), children: /* @__PURE__ */ jsxs(VStack, { gap: "md", align: "center", children: [
26098
- /* @__PURE__ */ jsx(
26099
- Avatar,
26100
- {
26101
- src: avatarSrc,
26102
- initials: avatarInitials,
26103
- name: !avatarSrc && !avatarInitials ? name : void 0,
26104
- size: "lg"
26105
- }
26106
- ),
26107
- /* @__PURE__ */ jsx(Typography, { variant: "h3", className: "text-center", children: name }),
26108
- nameAr && /* @__PURE__ */ jsx(Box, { className: "text-center", style: { direction: "rtl" }, children: /* @__PURE__ */ jsx(Typography, { variant: "caption", children: nameAr }) }),
26109
- /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "text-center", children: role }),
26110
- /* @__PURE__ */ jsx(Typography, { variant: "body", className: "text-center", children: bio })
26111
- ] }) });
26112
- };
26113
- TeamCard.displayName = "TeamCard";
26114
- }
26115
- });
26116
- var ShowcaseCard;
26117
- var init_ShowcaseCard = __esm({
26118
- "components/molecules/ShowcaseCard.tsx"() {
26119
- "use client";
26120
- init_cn();
26121
- init_Card();
26122
- init_Box();
26123
- init_Stack();
26124
- init_Badge();
26125
- init_Typography();
26126
- ShowcaseCard = ({
26127
- title,
26128
- description,
26129
- image,
26130
- href,
26131
- badge,
26132
- accentColor,
26133
- className
26134
- }) => {
26135
- const cardVariant = href ? "interactive" : "bordered";
26136
- const handleClick = () => {
26137
- if (href) {
26138
- window.open(href, "_blank", "noopener,noreferrer");
26139
- }
26140
- };
26141
- return /* @__PURE__ */ jsxs(
26142
- Card,
26143
- {
26144
- variant: cardVariant,
26145
- padding: "none",
26146
- className: cn("overflow-hidden w-full", className),
26147
- style: accentColor ? { borderTopColor: accentColor, borderTopWidth: "3px" } : void 0,
26148
- onClick: href ? handleClick : void 0,
26149
- children: [
26150
- /* @__PURE__ */ jsx(
26151
- Box,
26152
- {
26153
- className: cn(
26154
- "w-full aspect-video bg-cover bg-center",
26155
- "rounded-t-md"
26156
- ),
26157
- style: { backgroundImage: `url(${image.src})` },
26158
- role: "img",
26159
- "aria-label": image.alt
26160
- }
26161
- ),
26162
- /* @__PURE__ */ jsxs(VStack, { gap: "sm", className: "p-4", children: [
26163
- badge && /* @__PURE__ */ jsx(Badge, { variant: "primary", label: badge }),
26164
- /* @__PURE__ */ jsx(Typography, { variant: "h3", children: title }),
26165
- description && /* @__PURE__ */ jsx(Typography, { variant: "body", color: "muted", children: description })
26166
- ] })
26167
- ]
26168
- }
26169
- );
26170
- };
26171
- ShowcaseCard.displayName = "ShowcaseCard";
26172
- }
26173
- });
26174
- function PatternDefs({
26175
- patternId,
26176
- variant,
26177
- size,
26178
- color,
26179
- strokeWidth
26180
- }) {
26181
- const dims = getTileDimensions(variant, size);
26182
- return /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx(
26183
- "pattern",
26184
- {
26185
- id: patternId,
26186
- x: "0",
26187
- y: "0",
26188
- width: dims.width,
26189
- height: dims.height,
26190
- patternUnits: "userSpaceOnUse",
26191
- children: /* @__PURE__ */ jsx(
26192
- PatternTile,
26193
- {
26194
- variant,
26195
- size,
26196
- color,
26197
- strokeWidth
26198
- }
26199
- )
26200
- }
26201
- ) });
26202
- }
26203
- function BackgroundMode({
26204
- patternId,
26205
- variant,
26206
- size,
26207
- color,
26208
- strokeWidth,
26209
- opacity,
26210
- className
26211
- }) {
26212
- return /* @__PURE__ */ jsxs(
26213
- "svg",
26214
- {
26215
- className: cn("absolute inset-0 w-full h-full pointer-events-none", className),
26216
- preserveAspectRatio: "none",
26217
- "aria-hidden": "true",
26218
- children: [
26219
- /* @__PURE__ */ jsx(
26220
- PatternDefs,
26221
- {
26222
- patternId,
26223
- variant,
26224
- size,
26225
- color,
26226
- strokeWidth
26227
- }
26228
- ),
26229
- /* @__PURE__ */ jsx(
26230
- "rect",
26231
- {
26232
- width: "100%",
26233
- height: "100%",
26234
- fill: `url(#${patternId})`,
26235
- opacity
26236
- }
26237
- )
26238
- ]
26239
- }
26240
- );
26241
- }
26242
- function SideMode({
26243
- patternId,
26244
- variant,
26245
- size,
26246
- color,
26247
- strokeWidth,
26248
- opacity,
26249
- side,
26250
- className
26251
- }) {
26252
- const maskId = `${patternId}-mask`;
26253
- const gradientId = `${patternId}-grad`;
26254
- const x1 = side === "left" ? "0%" : "100%";
26255
- const x2 = side === "left" ? "60%" : "40%";
26256
- return /* @__PURE__ */ jsxs(
26257
- "svg",
26258
- {
26259
- className: cn("absolute inset-0 w-full h-full pointer-events-none", className),
26260
- preserveAspectRatio: "none",
26261
- "aria-hidden": "true",
26262
- children: [
26263
- /* @__PURE__ */ jsx(
26264
- PatternDefs,
26265
- {
26266
- patternId,
26267
- variant,
26268
- size,
26269
- color,
26270
- strokeWidth
26271
- }
26272
- ),
26273
- /* @__PURE__ */ jsxs("defs", { children: [
26274
- /* @__PURE__ */ jsxs("linearGradient", { id: gradientId, x1, y1: "0%", x2, y2: "0%", children: [
26275
- /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "white", stopOpacity: "1" }),
26276
- /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "white", stopOpacity: "0" })
26277
- ] }),
26278
- /* @__PURE__ */ jsx("mask", { id: maskId, children: /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: `url(#${gradientId})` }) })
26279
- ] }),
26280
- /* @__PURE__ */ jsx(
26281
- "rect",
26282
- {
26283
- width: "100%",
26284
- height: "100%",
26285
- fill: `url(#${patternId})`,
26286
- mask: `url(#${maskId})`,
26287
- opacity
26288
- }
26289
- )
26290
- ]
26291
- }
26292
- );
26293
- }
26294
- function DualMode({
26295
- patternId,
26296
- variant,
26297
- size,
26298
- color,
26299
- strokeWidth,
26300
- opacity,
26301
- className
26302
- }) {
26303
- const maskId = `${patternId}-dmask`;
26304
- const gradientId = `${patternId}-dgrad`;
26305
- return /* @__PURE__ */ jsxs(
26306
- "svg",
26307
- {
26308
- className: cn("absolute inset-0 w-full h-full pointer-events-none", className),
26309
- preserveAspectRatio: "none",
26310
- "aria-hidden": "true",
26311
- children: [
26312
- /* @__PURE__ */ jsx(
26313
- PatternDefs,
26314
- {
26315
- patternId,
26316
- variant,
26317
- size,
26318
- color,
26319
- strokeWidth
26320
- }
26321
- ),
26322
- /* @__PURE__ */ jsxs("defs", { children: [
26323
- /* @__PURE__ */ jsxs("linearGradient", { id: gradientId, x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
26324
- /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "white", stopOpacity: "1" }),
26325
- /* @__PURE__ */ jsx("stop", { offset: "35%", stopColor: "white", stopOpacity: "0" }),
26326
- /* @__PURE__ */ jsx("stop", { offset: "65%", stopColor: "white", stopOpacity: "0" }),
26327
- /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "white", stopOpacity: "1" })
26328
- ] }),
26329
- /* @__PURE__ */ jsx("mask", { id: maskId, children: /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: `url(#${gradientId})` }) })
26330
- ] }),
26331
- /* @__PURE__ */ jsx(
26332
- "rect",
26333
- {
26334
- width: "100%",
26335
- height: "100%",
26336
- fill: `url(#${patternId})`,
26337
- mask: `url(#${maskId})`,
26338
- opacity
26339
- }
26340
- )
26341
- ]
26342
- }
26343
- );
26344
- }
26345
- function AroundMode({
26346
- patternId,
26347
- variant,
26348
- size,
26349
- color,
26350
- strokeWidth,
26351
- opacity,
26352
- className
26353
- }) {
26354
- const maskId = `${patternId}-amask`;
26355
- const gradientId = `${patternId}-agrad`;
26356
- return /* @__PURE__ */ jsxs(
26357
- "svg",
26358
- {
26359
- className: cn("absolute inset-0 w-full h-full pointer-events-none", className),
26360
- preserveAspectRatio: "none",
26361
- "aria-hidden": "true",
26362
- children: [
26363
- /* @__PURE__ */ jsx(
26364
- PatternDefs,
26365
- {
26366
- patternId,
26367
- variant,
26368
- size,
26369
- color,
26370
- strokeWidth
26371
- }
26372
- ),
26373
- /* @__PURE__ */ jsxs("defs", { children: [
26374
- /* @__PURE__ */ jsxs("radialGradient", { id: gradientId, cx: "50%", cy: "50%", r: "50%", children: [
26375
- /* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "white", stopOpacity: "0" }),
26376
- /* @__PURE__ */ jsx("stop", { offset: "55%", stopColor: "white", stopOpacity: "0" }),
26377
- /* @__PURE__ */ jsx("stop", { offset: "85%", stopColor: "white", stopOpacity: "1" }),
26378
- /* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "white", stopOpacity: "1" })
26379
- ] }),
26380
- /* @__PURE__ */ jsx("mask", { id: maskId, children: /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: `url(#${gradientId})` }) })
26381
- ] }),
26382
- /* @__PURE__ */ jsx(
26383
- "rect",
26384
- {
26385
- width: "100%",
26386
- height: "100%",
26387
- fill: `url(#${patternId})`,
26388
- mask: `url(#${maskId})`,
26389
- opacity
26390
- }
26391
- )
26392
- ]
26393
- }
26394
- );
26395
- }
26396
- function FrameStrip({
26397
- patternId,
26398
- variant,
26399
- size,
26400
- color,
26401
- strokeWidth,
26402
- opacity,
26403
- height
26404
- }) {
26405
- return /* @__PURE__ */ jsxs(
26406
- "svg",
26407
- {
26408
- className: "w-full pointer-events-none",
26409
- style: { height },
26410
- preserveAspectRatio: "none",
26411
- "aria-hidden": "true",
26412
- children: [
26413
- /* @__PURE__ */ jsx(
26414
- PatternDefs,
26415
- {
26416
- patternId,
26417
- variant,
26418
- size,
26419
- color,
26420
- strokeWidth
26421
- }
26422
- ),
26423
- /* @__PURE__ */ jsx(
26424
- "rect",
26425
- {
26426
- width: "100%",
26427
- height: "100%",
26428
- fill: `url(#${patternId})`,
26429
- opacity
26430
- }
26431
- )
26432
- ]
26433
- }
26434
- );
26435
- }
26436
- var GeometricPattern;
26437
- var init_GeometricPattern = __esm({
26438
- "components/molecules/GeometricPattern.tsx"() {
26439
- "use client";
26440
- init_cn();
26441
- init_PatternTile();
26442
- init_Box();
26443
- GeometricPattern = ({
26444
- variant = "star8",
26445
- mode = "background",
26446
- opacity = 0.06,
26447
- color = "var(--color-primary)",
26448
- scale = 1,
26449
- strokeWidth = 0.5,
26450
- children,
26451
- className
26452
- }) => {
26453
- const reactId = useId();
26454
- const patternId = `gp${reactId.replace(/:/g, "")}`;
26455
- const size = 60 * scale;
26456
- const stripHeight = 40 * scale;
26457
- if (mode === "frame") {
26458
- const topId = `${patternId}-top`;
26459
- const botId = `${patternId}-bot`;
26460
- return /* @__PURE__ */ jsxs(Box, { className: cn("relative", className), children: [
26461
- /* @__PURE__ */ jsx(
26462
- FrameStrip,
26463
- {
26464
- patternId: topId,
26465
- variant,
26466
- size,
26467
- color,
26468
- strokeWidth,
26469
- opacity,
26470
- height: stripHeight
26471
- }
26472
- ),
26473
- children,
26474
- /* @__PURE__ */ jsx(
26475
- FrameStrip,
26476
- {
26477
- patternId: botId,
26478
- variant,
26479
- size,
26480
- color,
26481
- strokeWidth,
26482
- opacity,
26483
- height: stripHeight
26484
- }
26485
- )
26486
- ] });
26487
- }
26488
- if (mode === "around") {
26489
- return /* @__PURE__ */ jsx(
26490
- AroundMode,
26491
- {
26492
- patternId,
26493
- variant,
26494
- size,
26495
- color,
26496
- strokeWidth,
26497
- opacity,
26498
- className
26499
- }
26500
- );
26501
- }
26502
- if (mode === "dual") {
26503
- return /* @__PURE__ */ jsx(
26504
- DualMode,
26505
- {
26506
- patternId,
26507
- variant,
26508
- size,
26509
- color,
26510
- strokeWidth,
26511
- opacity,
26512
- className
26513
- }
26514
- );
26515
- }
26516
- if (mode === "left" || mode === "right") {
26517
- return /* @__PURE__ */ jsx(
26518
- SideMode,
26519
- {
26520
- patternId,
26521
- variant,
26522
- size,
26523
- color,
26524
- strokeWidth,
26525
- opacity,
26526
- side: mode,
26527
- className
26528
- }
26529
- );
26530
- }
26531
- return /* @__PURE__ */ jsx(
26532
- BackgroundMode,
26533
- {
26534
- patternId,
26535
- variant,
26536
- size,
26537
- color,
26538
- strokeWidth,
26539
- opacity,
26540
- className
26541
- }
26542
- );
26543
- };
26544
- GeometricPattern.displayName = "GeometricPattern";
26545
- }
26546
- });
26547
- function ArchSVG({
26548
- facing,
26549
- w,
26550
- h,
26551
- color,
26552
- strokeWidth
26553
- }) {
26554
- const paths = [];
26555
- const archCount = 3;
26556
- const archH = h / archCount;
26557
- const rings = 5;
26558
- for (let a = 0; a < archCount; a++) {
26559
- const baseY = a * archH + archH;
26560
- const topY = a * archH + archH * 0.05;
26561
- for (let r = 0; r < rings; r++) {
26562
- const scale = 1 - r * 0.17;
26563
- const archW = w * 0.95 * scale;
26564
- const aTopY = topY + (1 - scale) * (baseY - topY) * 0.5;
26565
- const aBaseY = baseY - (1 - scale) * archH * 0.05;
26566
- const edgeX2 = facing === "right" ? w : 0;
26567
- const innerX2 = facing === "right" ? w - archW : archW;
26568
- const midY = (aTopY + aBaseY) / 2;
26569
- const radius = Math.sqrt(archW * archW + (aBaseY - midY) * (aBaseY - midY));
26570
- if (facing === "right") {
26571
- paths.push(
26572
- `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)}`
26573
- );
26574
- } else {
26575
- paths.push(
26576
- `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)}`
26577
- );
26578
- }
26579
- }
26580
- const edgeX = facing === "right" ? w : 0;
26581
- const innerX = facing === "right" ? w * 0.05 : w * 0.95;
26582
- paths.push(`M ${f2(edgeX)},${f2(baseY)} L ${f2(innerX)},${f2(baseY)}`);
26583
- }
26584
- return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
26585
- }
26586
- function VineSVG({
26587
- facing,
26588
- w,
26589
- h,
26590
- color,
26591
- strokeWidth
26592
- }) {
26593
- const paths = [];
26594
- const dir = facing === "right" ? -1 : 1;
26595
- const edgeX = facing === "right" ? w * 0.85 : w * 0.15;
26596
- const segments = 5;
26597
- const segH = h / segments;
26598
- for (let i = 0; i < segments; i++) {
26599
- const y0 = i * segH;
26600
- const y1 = y0 + segH;
26601
- const sway = w * 0.12 * (i % 2 === 0 ? 1 : -1);
26602
- paths.push(
26603
- `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)}`
26604
- );
26605
- const branchY = y0 + segH * 0.35;
26606
- const branchX = edgeX;
26607
- const leafW = w * 0.55;
26608
- const leafH = segH * 0.35;
26609
- const leafTipX = branchX + dir * leafW;
26610
- const leafTipY = branchY - leafH * 0.2;
26611
- paths.push(
26612
- `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)}`
26613
- );
26614
- paths.push(
26615
- `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)}`
26616
- );
26617
- const tendrilY = y0 + segH * 0.7;
26618
- const tendrilW = w * 0.35;
26619
- const tendrilTipX = edgeX + dir * tendrilW;
26620
- paths.push(
26621
- `M ${f2(edgeX)},${f2(tendrilY)} Q ${f2(edgeX + dir * tendrilW * 0.6)},${f2(tendrilY - segH * 0.12)} ${f2(tendrilTipX)},${f2(tendrilY + segH * 0.05)}`
26622
- );
26623
- const spR = leafW * 0.08;
26624
- paths.push(
26625
- `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)}`
26626
- );
26627
- }
26628
- return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
26629
- }
26630
- function LatticeSVG({
26631
- facing,
26632
- w,
26633
- h,
26634
- color,
26635
- strokeWidth
26636
- }) {
26637
- const paths = [];
26638
- const cols = 5;
26639
- const rows = Math.ceil(h / (w / cols));
26640
- const cellW = w / cols;
26641
- const cellH = cellW;
26642
- const bulge = cellW * 0.3;
26643
- for (let row = 0; row < rows; row++) {
26644
- for (let col = 0; col < cols; col++) {
26645
- const cx = col * cellW + cellW / 2;
26646
- const cy = row * cellH + cellH / 2;
26647
- const hw = cellW * 0.5;
26648
- const hh = cellH * 0.5;
26649
- paths.push(
26650
- `M ${f2(cx)},${f2(cy - hh)} Q ${f2(cx + bulge)},${f2(cy)} ${f2(cx)},${f2(cy + hh)}`
26651
- );
26652
- paths.push(
26653
- `M ${f2(cx)},${f2(cy - hh)} Q ${f2(cx - bulge)},${f2(cy)} ${f2(cx)},${f2(cy + hh)}`
26654
- );
26655
- paths.push(
26656
- `M ${f2(cx - hw)},${f2(cy)} Q ${f2(cx)},${f2(cy - bulge * 0.5)} ${f2(cx + hw)},${f2(cy)}`
26657
- );
26658
- paths.push(
26659
- `M ${f2(cx - hw)},${f2(cy)} Q ${f2(cx)},${f2(cy + bulge * 0.5)} ${f2(cx + hw)},${f2(cy)}`
26660
- );
26661
- }
26662
- }
26663
- return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
26664
- }
26665
- function f2(n) {
26666
- return n.toFixed(2);
26667
- }
26668
- var VARIANT_MAP2, EdgeDecoration;
26669
- var init_EdgeDecoration = __esm({
26670
- "components/molecules/EdgeDecoration.tsx"() {
26671
- "use client";
26672
- init_cn();
26673
- VARIANT_MAP2 = {
26674
- arch: ArchSVG,
26675
- vine: VineSVG,
26676
- lattice: LatticeSVG
26677
- };
26678
- EdgeDecoration = ({
26679
- variant = "arch",
26680
- side = "both",
26681
- opacity = 0.15,
26682
- color = "var(--color-primary)",
26683
- strokeWidth = 0.5,
26684
- width = 15,
26685
- className
26686
- }) => {
26687
- const id = useId();
26688
- const Variant = VARIANT_MAP2[variant];
26689
- const sides = side === "both" ? ["left", "right"] : [side];
26690
- return /* @__PURE__ */ jsx(Fragment, { children: sides.map((s) => /* @__PURE__ */ jsx(
26691
- "svg",
26692
- {
26693
- className: cn(
26694
- "absolute top-0 h-full pointer-events-none",
26695
- s === "left" ? "left-0" : "right-0",
26696
- className
26697
- ),
26698
- style: {
26699
- width: `${width}%`,
26700
- opacity
26701
- },
26702
- viewBox: `0 0 200 ${200 * 3}`,
26703
- preserveAspectRatio: "none",
26704
- "aria-hidden": "true",
26705
- children: /* @__PURE__ */ jsx(
26706
- Variant,
26707
- {
26708
- facing: s,
26709
- w: 200,
26710
- h: 600,
26711
- color,
26712
- strokeWidth
26713
- }
26714
- )
26715
- },
26716
- `${id}-${s}`
26717
- )) });
26718
- };
26719
- EdgeDecoration.displayName = "EdgeDecoration";
26720
- }
26721
- });
26722
23947
 
26723
23948
  // components/molecules/index.ts
26724
23949
  var init_molecules = __esm({
26725
23950
  "components/molecules/index.ts"() {
26726
- init_ErrorBoundary();
26727
- init_FileTree();
26728
- init_FormField();
26729
23951
  init_EmptyState();
26730
- init_LoadingState();
26731
- init_ErrorState();
26732
- init_Skeleton();
26733
- init_Accordion();
26734
- init_Alert();
26735
- init_Breadcrumb();
26736
- init_ButtonGroup();
26737
- init_FilterGroup();
26738
- init_Card2();
26739
- init_Container();
26740
- init_Flex();
26741
- init_FloatingActionButton();
26742
- init_Grid();
26743
- init_InputGroup();
26744
- init_Menu();
26745
- init_Modal();
26746
23952
  init_Pagination();
26747
- init_Popover();
26748
- init_RelationSelect();
26749
- init_SearchInput();
26750
- init_SidePanel();
26751
- init_SimpleGrid();
26752
- init_Tabs();
26753
- init_Toast();
26754
- init_Tooltip();
26755
- init_Drawer();
26756
- init_WizardProgress();
26757
- init_WizardNavigation();
26758
- init_MarkdownContent();
26759
- init_CodeBlock();
26760
- init_QuizBlock();
26761
- init_ScaledDiagram();
26762
- init_CalendarGrid();
26763
- init_RepeatableFormSection();
26764
- init_ViolationAlert();
26765
- init_FormSectionHeader();
26766
- init_FlipCard();
26767
- init_DateRangeSelector();
26768
- init_ChartLegend();
26769
- init_LineChart();
26770
- init_ProgressDots();
26771
23953
  init_game2();
26772
- init_GraphView();
26773
- init_MapView();
26774
- init_NumberStepper();
26775
- init_StarRating();
26776
- init_UploadDropZone();
26777
- init_Lightbox();
26778
- init_DataGrid();
26779
- init_DataList();
26780
- init_StatDisplay();
26781
- init_Meter();
26782
- init_SwipeableRow();
26783
- init_SortableList();
26784
- init_Carousel();
26785
- init_PullToRefresh();
26786
- init_InstallBox();
26787
- init_FeatureCard();
26788
- init_FeatureGrid();
26789
- init_CTABanner();
26790
- init_HeroSection();
26791
- init_PricingCard();
26792
- init_PricingGrid();
26793
- init_StatsGrid();
26794
- init_ServiceCatalog();
26795
- init_CaseStudyCard();
26796
- init_ArticleSection();
26797
- init_CodeExample();
26798
- init_SocialProof();
26799
- init_StepFlow();
26800
- init_SplitSection();
26801
- init_TagCloud();
26802
- init_CommunityLinks();
26803
- init_TeamCard();
26804
- init_ShowcaseCard();
26805
- init_GeometricPattern();
26806
- init_EdgeDecoration();
26807
23954
  }
26808
23955
  });
26809
23956
 
@@ -27469,19 +24616,19 @@ function renderRichFieldValue(value, fieldName, fieldType) {
27469
24616
  }
27470
24617
  function normalizeFieldDefs(fields) {
27471
24618
  if (!fields) return [];
27472
- return fields.map((f3) => {
27473
- if (typeof f3 === "string") return f3;
27474
- if ("key" in f3) return f3.key;
27475
- if ("name" in f3) return f3.name;
27476
- return String(f3);
24619
+ return fields.map((f) => {
24620
+ if (typeof f === "string") return f;
24621
+ if ("key" in f) return f.key;
24622
+ if ("name" in f) return f.name;
24623
+ return String(f);
27477
24624
  });
27478
24625
  }
27479
24626
  function buildFieldTypeMap(fields) {
27480
24627
  const map = {};
27481
24628
  if (!fields) return map;
27482
- for (const f3 of fields) {
27483
- if (typeof f3 === "object" && "name" in f3 && "type" in f3) {
27484
- map[f3.name] = f3.type;
24629
+ for (const f of fields) {
24630
+ if (typeof f === "object" && "name" in f && "type" in f) {
24631
+ map[f.name] = f.type;
27485
24632
  }
27486
24633
  }
27487
24634
  return map;
@@ -27578,22 +24725,22 @@ var init_DetailPanel = __esm({
27578
24725
  title = String(normalizedData[primaryField]);
27579
24726
  }
27580
24727
  const statusFields = effectiveFieldNames.filter(
27581
- (f3) => f3.toLowerCase().includes("status") || f3.toLowerCase().includes("priority")
24728
+ (f) => f.toLowerCase().includes("status") || f.toLowerCase().includes("priority")
27582
24729
  );
27583
24730
  const progressFields = effectiveFieldNames.filter(
27584
- (f3) => f3.toLowerCase().includes("progress") || f3.toLowerCase().includes("percent")
24731
+ (f) => f.toLowerCase().includes("progress") || f.toLowerCase().includes("percent")
27585
24732
  );
27586
24733
  const metricFields = effectiveFieldNames.filter(
27587
- (f3) => (f3.toLowerCase().includes("budget") || f3.toLowerCase().includes("cost") || f3.toLowerCase().includes("count")) && !progressFields.includes(f3)
24734
+ (f) => (f.toLowerCase().includes("budget") || f.toLowerCase().includes("cost") || f.toLowerCase().includes("count")) && !progressFields.includes(f)
27588
24735
  );
27589
24736
  const dateFields = effectiveFieldNames.filter(
27590
- (f3) => f3.toLowerCase().includes("date") || f3.toLowerCase().includes("time")
24737
+ (f) => f.toLowerCase().includes("date") || f.toLowerCase().includes("time")
27591
24738
  );
27592
24739
  const descriptionFields = effectiveFieldNames.filter(
27593
- (f3) => f3.toLowerCase().includes("description") || f3.toLowerCase().includes("note")
24740
+ (f) => f.toLowerCase().includes("description") || f.toLowerCase().includes("note")
27594
24741
  );
27595
24742
  const otherFields = effectiveFieldNames.filter(
27596
- (f3) => f3 !== primaryField && !statusFields.includes(f3) && !progressFields.includes(f3) && !metricFields.includes(f3) && !dateFields.includes(f3) && !descriptionFields.includes(f3)
24743
+ (f) => f !== primaryField && !statusFields.includes(f) && !progressFields.includes(f) && !metricFields.includes(f) && !dateFields.includes(f) && !descriptionFields.includes(f)
27597
24744
  );
27598
24745
  sections = [];
27599
24746
  if (statusFields.length > 0 || otherFields.length > 0) {
@@ -27747,7 +24894,7 @@ var init_DetailPanel = __esm({
27747
24894
  subtitle && /* @__PURE__ */ jsx(Typography, { variant: "body", color: "secondary", children: subtitle }),
27748
24895
  /* @__PURE__ */ jsxs(HStack, { gap: "xs", wrap: true, children: [
27749
24896
  normalizedData && effectiveFieldNames && effectiveFieldNames.filter(
27750
- (f3) => f3.toLowerCase().includes("status") || f3.toLowerCase().includes("priority")
24897
+ (f) => f.toLowerCase().includes("status") || f.toLowerCase().includes("priority")
27751
24898
  ).map((field) => {
27752
24899
  const value = getNestedValue(normalizedData, field);
27753
24900
  if (!value) return null;
@@ -27763,7 +24910,7 @@ var init_DetailPanel = __esm({
27763
24910
  status && /* @__PURE__ */ jsx(Badge, { variant: status.variant ?? "default", children: status.label })
27764
24911
  ] }),
27765
24912
  normalizedData && effectiveFieldNames && effectiveFieldNames.filter(
27766
- (f3) => f3.toLowerCase().includes("progress") || f3.toLowerCase().includes("percent")
24913
+ (f) => f.toLowerCase().includes("progress") || f.toLowerCase().includes("percent")
27767
24914
  ).map((field) => {
27768
24915
  const value = getNestedValue(normalizedData, field);
27769
24916
  if (value === void 0 || value === null || typeof value !== "number")
@@ -28030,7 +25177,7 @@ var init_DocumentViewer = __esm({
28030
25177
  }
28031
25178
  });
28032
25179
  function extractTitle(children) {
28033
- if (!React115__default.isValidElement(children)) return void 0;
25180
+ if (!React105__default.isValidElement(children)) return void 0;
28034
25181
  const props = children.props;
28035
25182
  if (typeof props.title === "string") {
28036
25183
  return props.title;
@@ -28085,7 +25232,7 @@ function LinearView({
28085
25232
  /* @__PURE__ */ jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
28086
25233
  const isDone = i < currentIdx;
28087
25234
  const isCurrent = i === currentIdx;
28088
- return /* @__PURE__ */ jsxs(React115__default.Fragment, { children: [
25235
+ return /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
28089
25236
  i > 0 && /* @__PURE__ */ jsx(
28090
25237
  Typography,
28091
25238
  {
@@ -28869,51 +26016,51 @@ var init_Form = __esm({
28869
26016
  const isSchemaEntity = isOrbitalEntitySchema(entity);
28870
26017
  const resolvedEntity = isSchemaEntity ? entity : void 0;
28871
26018
  const entityName = typeof entity === "string" ? entity : resolvedEntity?.name;
28872
- const normalizedInitialData = React115__default.useMemo(() => {
26019
+ const normalizedInitialData = React105__default.useMemo(() => {
28873
26020
  const entityRowAsInitial = isPlainEntityRow(entity) ? entity : void 0;
28874
26021
  const callerInitial = initialData !== null && typeof initialData === "object" && !Array.isArray(initialData) ? initialData : {};
28875
26022
  return entityRowAsInitial !== void 0 ? { ...entityRowAsInitial, ...callerInitial } : callerInitial;
28876
26023
  }, [entity, initialData]);
28877
- const entityDerivedFields = React115__default.useMemo(() => {
26024
+ const entityDerivedFields = React105__default.useMemo(() => {
28878
26025
  if (fields && fields.length > 0) return void 0;
28879
26026
  if (!resolvedEntity) return void 0;
28880
26027
  return resolvedEntity.fields.map(
28881
- (f3) => ({
28882
- name: f3.name,
28883
- type: f3.type,
28884
- required: f3.required,
28885
- defaultValue: f3.default,
28886
- values: f3.values,
28887
- min: f3.min,
28888
- max: f3.max,
28889
- relation: f3.relation ? { entity: f3.relation.entity } : void 0
26028
+ (f) => ({
26029
+ name: f.name,
26030
+ type: f.type,
26031
+ required: f.required,
26032
+ defaultValue: f.default,
26033
+ values: f.values,
26034
+ min: f.min,
26035
+ max: f.max,
26036
+ relation: f.relation ? { entity: f.relation.entity } : void 0
28890
26037
  })
28891
26038
  );
28892
26039
  }, [entity, fields]);
28893
26040
  const conditionalFields = typeof conditionalFieldsRaw === "boolean" ? {} : conditionalFieldsRaw;
28894
26041
  const hiddenCalculations = typeof hiddenCalculationsRaw === "boolean" ? [] : hiddenCalculationsRaw;
28895
26042
  const violationTriggers = typeof violationTriggersRaw === "boolean" ? [] : violationTriggersRaw;
28896
- const [formData, setFormData] = React115__default.useState(
26043
+ const [formData, setFormData] = React105__default.useState(
28897
26044
  normalizedInitialData
28898
26045
  );
28899
- const [collapsedSections, setCollapsedSections] = React115__default.useState(
26046
+ const [collapsedSections, setCollapsedSections] = React105__default.useState(
28900
26047
  /* @__PURE__ */ new Set()
28901
26048
  );
28902
26049
  const formMode = props.mode;
28903
- const mountedRef = React115__default.useRef(false);
26050
+ const mountedRef = React105__default.useRef(false);
28904
26051
  if (!mountedRef.current) {
28905
26052
  mountedRef.current = true;
28906
26053
  debug("forms", "mount", {
28907
26054
  mode: formMode,
28908
26055
  submitEvent,
28909
26056
  cancelEvent,
28910
- fieldNames: (fields ?? []).map((f3) => f3.name ?? f3.field).filter(Boolean),
26057
+ fieldNames: (fields ?? []).map((f) => f.name ?? f.field).filter(Boolean),
28911
26058
  initialDataKeys: Object.keys(normalizedInitialData),
28912
26059
  initialData: normalizedInitialData
28913
26060
  });
28914
26061
  }
28915
26062
  const shouldShowCancel = showCancel ?? (fields && fields.length > 0);
28916
- const evalContext = React115__default.useMemo(
26063
+ const evalContext = React105__default.useMemo(
28917
26064
  () => ({
28918
26065
  formValues: formData,
28919
26066
  globalVariables: externalContext?.globalVariables ?? {},
@@ -28922,7 +26069,7 @@ var init_Form = __esm({
28922
26069
  }),
28923
26070
  [formData, externalContext]
28924
26071
  );
28925
- React115__default.useEffect(() => {
26072
+ React105__default.useEffect(() => {
28926
26073
  debug("forms", "initialData-sync", {
28927
26074
  mode: formMode,
28928
26075
  normalizedInitialData,
@@ -28933,7 +26080,7 @@ var init_Form = __esm({
28933
26080
  setFormData(normalizedInitialData);
28934
26081
  }
28935
26082
  }, [normalizedInitialData]);
28936
- const processCalculations = React115__default.useCallback(
26083
+ const processCalculations = React105__default.useCallback(
28937
26084
  (changedFieldId, newFormData) => {
28938
26085
  if (!hiddenCalculations.length) return;
28939
26086
  const context = {
@@ -28958,7 +26105,7 @@ var init_Form = __esm({
28958
26105
  },
28959
26106
  [hiddenCalculations, externalContext, eventBus]
28960
26107
  );
28961
- const checkViolations = React115__default.useCallback(
26108
+ const checkViolations = React105__default.useCallback(
28962
26109
  (changedFieldId, newFormData) => {
28963
26110
  if (!violationTriggers.length) return;
28964
26111
  const context = {
@@ -28996,7 +26143,7 @@ var init_Form = __esm({
28996
26143
  processCalculations(name, newFormData);
28997
26144
  checkViolations(name, newFormData);
28998
26145
  };
28999
- const isFieldVisible = React115__default.useCallback(
26146
+ const isFieldVisible = React105__default.useCallback(
29000
26147
  (fieldName) => {
29001
26148
  const condition = conditionalFields[fieldName];
29002
26149
  if (!condition) return true;
@@ -29004,7 +26151,7 @@ var init_Form = __esm({
29004
26151
  },
29005
26152
  [conditionalFields, evalContext]
29006
26153
  );
29007
- const isSectionVisible = React115__default.useCallback(
26154
+ const isSectionVisible = React105__default.useCallback(
29008
26155
  (section) => {
29009
26156
  if (!section.condition) return true;
29010
26157
  return Boolean(evaluateFormExpression(section.condition, evalContext));
@@ -29048,7 +26195,7 @@ var init_Form = __esm({
29048
26195
  eventBus.emit(`UI:${onCancel}`);
29049
26196
  }
29050
26197
  };
29051
- const renderField = React115__default.useCallback(
26198
+ const renderField = React105__default.useCallback(
29052
26199
  (field) => {
29053
26200
  const fieldName = field.name || field.field;
29054
26201
  if (!fieldName) return null;
@@ -29069,11 +26216,11 @@ var init_Form = __esm({
29069
26216
  [formData, isFieldVisible, relationsData, relationsLoading, isLoading]
29070
26217
  );
29071
26218
  const effectiveFields = entityDerivedFields ?? fields;
29072
- const normalizedFields = React115__default.useMemo(() => {
26219
+ const normalizedFields = React105__default.useMemo(() => {
29073
26220
  if (!effectiveFields || effectiveFields.length === 0) return [];
29074
26221
  return effectiveFields.map((field) => {
29075
26222
  if (typeof field === "string") {
29076
- const entityField = resolvedEntity?.fields?.find((f3) => f3.name === field);
26223
+ const entityField = resolvedEntity?.fields?.find((f) => f.name === field);
29077
26224
  if (entityField) {
29078
26225
  return {
29079
26226
  name: field,
@@ -29091,7 +26238,7 @@ var init_Form = __esm({
29091
26238
  return field;
29092
26239
  });
29093
26240
  }, [effectiveFields, resolvedEntity]);
29094
- const schemaFields = React115__default.useMemo(() => {
26241
+ const schemaFields = React105__default.useMemo(() => {
29095
26242
  if (normalizedFields.length === 0) return null;
29096
26243
  if (isDebugEnabled()) {
29097
26244
  debugGroup(`Form: ${entityName || "unknown"}`);
@@ -29101,7 +26248,7 @@ var init_Form = __esm({
29101
26248
  }
29102
26249
  return normalizedFields.map(renderField).filter(Boolean);
29103
26250
  }, [normalizedFields, renderField, entityName, conditionalFields]);
29104
- const sectionElements = React115__default.useMemo(() => {
26251
+ const sectionElements = React105__default.useMemo(() => {
29105
26252
  if (!sections || sections.length === 0) return null;
29106
26253
  return sections.map((section) => {
29107
26254
  if (!isSectionVisible(section)) {
@@ -30406,7 +27553,7 @@ var init_InventoryPanel2 = __esm({
30406
27553
  });
30407
27554
  function normalizeFields2(fields) {
30408
27555
  if (!fields) return [];
30409
- return fields.map((f3) => typeof f3 === "string" ? f3 : f3.key ?? f3.name ?? "");
27556
+ return fields.map((f) => typeof f === "string" ? f : f.key ?? f.name ?? "");
30410
27557
  }
30411
27558
  function entityFieldsFromListItem(item) {
30412
27559
  const {
@@ -30625,7 +27772,7 @@ var init_List = __esm({
30625
27772
  if (entity && typeof entity === "object" && "id" in entity) return [entity];
30626
27773
  return [];
30627
27774
  }, [entity]);
30628
- const getItemActions = React115__default.useCallback(
27775
+ const getItemActions = React105__default.useCallback(
30629
27776
  (item) => {
30630
27777
  if (!itemActions) return [];
30631
27778
  if (typeof itemActions === "function") {
@@ -30729,19 +27876,19 @@ var init_List = __esm({
30729
27876
  const rowActionPayload = { row: entityFieldsFromListItem(item) };
30730
27877
  const primaryField = effectiveFieldNames?.[0];
30731
27878
  const statusField = effectiveFieldNames?.find(
30732
- (f3) => f3.toLowerCase().includes("status")
27879
+ (f) => f.toLowerCase().includes("status")
30733
27880
  );
30734
27881
  const priorityField = effectiveFieldNames?.find(
30735
- (f3) => f3.toLowerCase().includes("priority")
27882
+ (f) => f.toLowerCase().includes("priority")
30736
27883
  );
30737
27884
  const progressField = effectiveFieldNames?.find(
30738
- (f3) => f3.toLowerCase().includes("progress") || f3.toLowerCase().includes("percent")
27885
+ (f) => f.toLowerCase().includes("progress") || f.toLowerCase().includes("percent")
30739
27886
  );
30740
27887
  const dateFields = effectiveFieldNames?.filter(
30741
- (f3) => f3.toLowerCase().includes("date") || f3.toLowerCase().includes("due")
27888
+ (f) => f.toLowerCase().includes("date") || f.toLowerCase().includes("due")
30742
27889
  ) || [];
30743
27890
  const metadataFields = effectiveFieldNames?.filter(
30744
- (f3) => f3 !== primaryField && f3 !== statusField && f3 !== priorityField && f3 !== progressField && !dateFields.includes(f3)
27891
+ (f) => f !== primaryField && f !== statusField && f !== priorityField && f !== progressField && !dateFields.includes(f)
30745
27892
  ).slice(0, 2) || [];
30746
27893
  const statusValue = statusField ? item._fields?.[statusField] : null;
30747
27894
  statusValue ? getStatusStyle(statusField, String(statusValue)) : null;
@@ -31062,7 +28209,7 @@ var init_MediaGallery = __esm({
31062
28209
  [selectable, selectedItems, selectionEvent, eventBus]
31063
28210
  );
31064
28211
  const entityData = Array.isArray(entity) ? entity : [];
31065
- const items = React115__default.useMemo(() => {
28212
+ const items = React105__default.useMemo(() => {
31066
28213
  if (propItems) return propItems;
31067
28214
  if (entityData.length === 0) return [];
31068
28215
  return entityData.map((record, idx) => ({
@@ -31226,7 +28373,7 @@ var init_MediaGallery = __esm({
31226
28373
  }
31227
28374
  });
31228
28375
  function extractTitle2(children) {
31229
- if (!React115__default.isValidElement(children)) return void 0;
28376
+ if (!React105__default.isValidElement(children)) return void 0;
31230
28377
  const props = children.props;
31231
28378
  if (typeof props.title === "string") {
31232
28379
  return props.title;
@@ -31939,7 +29086,7 @@ var init_PageHeader = __esm({
31939
29086
  info: "bg-info/10 text-info"
31940
29087
  };
31941
29088
  return /* @__PURE__ */ jsxs(Box, { className: cn("mb-6", className), children: [
31942
- 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(React115__default.Fragment, { children: [
29089
+ 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(React105__default.Fragment, { children: [
31943
29090
  idx > 0 && /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: "/" }),
31944
29091
  crumb.href ? /* @__PURE__ */ jsx(
31945
29092
  "a",
@@ -32113,7 +29260,7 @@ var init_debugRegistry = __esm({
32113
29260
  }
32114
29261
  });
32115
29262
  function useDebugData() {
32116
- const [data, setData] = React115.useState(() => ({
29263
+ const [data, setData] = React105.useState(() => ({
32117
29264
  traits: [],
32118
29265
  ticks: [],
32119
29266
  guards: [],
@@ -32127,7 +29274,7 @@ function useDebugData() {
32127
29274
  },
32128
29275
  lastUpdate: Date.now()
32129
29276
  }));
32130
- React115.useEffect(() => {
29277
+ React105.useEffect(() => {
32131
29278
  const updateData = () => {
32132
29279
  setData({
32133
29280
  traits: getAllTraits(),
@@ -32236,12 +29383,12 @@ function layoutGraph(states, transitions, initialState, width, height) {
32236
29383
  return positions;
32237
29384
  }
32238
29385
  function WalkMinimap() {
32239
- const [walkStep, setWalkStep] = React115.useState(null);
32240
- const [traits2, setTraits] = React115.useState([]);
32241
- const [coveredEdges, setCoveredEdges] = React115.useState([]);
32242
- const [completedTraits, setCompletedTraits] = React115.useState(/* @__PURE__ */ new Set());
32243
- const prevTraitRef = React115.useRef(null);
32244
- React115.useEffect(() => {
29386
+ const [walkStep, setWalkStep] = React105.useState(null);
29387
+ const [traits2, setTraits] = React105.useState([]);
29388
+ const [coveredEdges, setCoveredEdges] = React105.useState([]);
29389
+ const [completedTraits, setCompletedTraits] = React105.useState(/* @__PURE__ */ new Set());
29390
+ const prevTraitRef = React105.useRef(null);
29391
+ React105.useEffect(() => {
32245
29392
  const interval = setInterval(() => {
32246
29393
  const w = window;
32247
29394
  const step = w.__orbitalWalkStep;
@@ -32688,15 +29835,15 @@ var init_EntitiesTab = __esm({
32688
29835
  }
32689
29836
  });
32690
29837
  function EventFlowTab({ events: events2 }) {
32691
- const [filter, setFilter] = React115.useState("all");
32692
- const containerRef = React115.useRef(null);
32693
- const [autoScroll, setAutoScroll] = React115.useState(true);
32694
- React115.useEffect(() => {
29838
+ const [filter, setFilter] = React105.useState("all");
29839
+ const containerRef = React105.useRef(null);
29840
+ const [autoScroll, setAutoScroll] = React105.useState(true);
29841
+ React105.useEffect(() => {
32695
29842
  if (autoScroll && containerRef.current) {
32696
29843
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
32697
29844
  }
32698
29845
  }, [events2.length, autoScroll]);
32699
- const filteredEvents = React115.useMemo(() => {
29846
+ const filteredEvents = React105.useMemo(() => {
32700
29847
  if (filter === "all") return events2;
32701
29848
  return events2.filter((e) => e.type === filter);
32702
29849
  }, [events2, filter]);
@@ -32815,7 +29962,7 @@ var init_EventFlowTab = __esm({
32815
29962
  }
32816
29963
  });
32817
29964
  function GuardsPanel({ guards }) {
32818
- const [filter, setFilter] = React115.useState("all");
29965
+ const [filter, setFilter] = React105.useState("all");
32819
29966
  if (guards.length === 0) {
32820
29967
  return /* @__PURE__ */ jsx(
32821
29968
  EmptyState,
@@ -32828,7 +29975,7 @@ function GuardsPanel({ guards }) {
32828
29975
  }
32829
29976
  const passedCount = guards.filter((g) => g.result).length;
32830
29977
  const failedCount = guards.length - passedCount;
32831
- const filteredGuards = React115.useMemo(() => {
29978
+ const filteredGuards = React105.useMemo(() => {
32832
29979
  if (filter === "all") return guards;
32833
29980
  if (filter === "passed") return guards.filter((g) => g.result);
32834
29981
  return guards.filter((g) => !g.result);
@@ -32989,10 +30136,10 @@ function EffectBadge({ effect }) {
32989
30136
  ] });
32990
30137
  }
32991
30138
  function TransitionTimeline({ transitions }) {
32992
- const containerRef = React115.useRef(null);
32993
- const [autoScroll, setAutoScroll] = React115.useState(true);
32994
- const [expandedId, setExpandedId] = React115.useState(null);
32995
- React115.useEffect(() => {
30139
+ const containerRef = React105.useRef(null);
30140
+ const [autoScroll, setAutoScroll] = React105.useState(true);
30141
+ const [expandedId, setExpandedId] = React105.useState(null);
30142
+ React105.useEffect(() => {
32996
30143
  if (autoScroll && containerRef.current) {
32997
30144
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
32998
30145
  }
@@ -33216,9 +30363,9 @@ function extractPayloadFields(schema, eventName) {
33216
30363
  for (const evt of events2) {
33217
30364
  if (evt.name !== eventName) continue;
33218
30365
  const payload = evt.payload ?? [];
33219
- return payload.map((f3) => ({
33220
- name: f3.name,
33221
- type: f3.type ?? "string"
30366
+ return payload.map((f) => ({
30367
+ name: f.name,
30368
+ type: f.type ?? "string"
33222
30369
  }));
33223
30370
  }
33224
30371
  }
@@ -33278,9 +30425,9 @@ function getAllEvents(traits2) {
33278
30425
  }
33279
30426
  function EventDispatcherTab({ traits: traits2, schema }) {
33280
30427
  const eventBus = useEventBus();
33281
- const [log4, setLog] = React115.useState([]);
33282
- const prevStatesRef = React115.useRef(/* @__PURE__ */ new Map());
33283
- React115.useEffect(() => {
30428
+ const [log4, setLog] = React105.useState([]);
30429
+ const prevStatesRef = React105.useRef(/* @__PURE__ */ new Map());
30430
+ React105.useEffect(() => {
33284
30431
  for (const trait of traits2) {
33285
30432
  const prev = prevStatesRef.current.get(trait.id);
33286
30433
  if (prev && prev !== trait.currentState) {
@@ -33450,10 +30597,10 @@ function VerifyModePanel({
33450
30597
  serverCount,
33451
30598
  localCount
33452
30599
  }) {
33453
- const [expanded, setExpanded] = React115.useState(true);
33454
- const scrollRef = React115.useRef(null);
33455
- const prevCountRef = React115.useRef(0);
33456
- React115.useEffect(() => {
30600
+ const [expanded, setExpanded] = React105.useState(true);
30601
+ const scrollRef = React105.useRef(null);
30602
+ const prevCountRef = React105.useRef(0);
30603
+ React105.useEffect(() => {
33457
30604
  if (expanded && transitions.length > prevCountRef.current && scrollRef.current) {
33458
30605
  scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
33459
30606
  }
@@ -33519,10 +30666,10 @@ function RuntimeDebugger({
33519
30666
  defaultTab,
33520
30667
  schema
33521
30668
  }) {
33522
- const [isCollapsed, setIsCollapsed] = React115.useState(mode === "verify" ? true : defaultCollapsed);
33523
- const [isVisible, setIsVisible] = React115.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
30669
+ const [isCollapsed, setIsCollapsed] = React105.useState(mode === "verify" ? true : defaultCollapsed);
30670
+ const [isVisible, setIsVisible] = React105.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
33524
30671
  const debugData = useDebugData();
33525
- React115.useEffect(() => {
30672
+ React105.useEffect(() => {
33526
30673
  if (mode === "inline") return;
33527
30674
  return onDebugToggle((enabled) => {
33528
30675
  setIsVisible(enabled);
@@ -33531,7 +30678,7 @@ function RuntimeDebugger({
33531
30678
  }
33532
30679
  });
33533
30680
  }, [mode]);
33534
- React115.useEffect(() => {
30681
+ React105.useEffect(() => {
33535
30682
  if (mode === "inline") return;
33536
30683
  const handleKeyDown = (e) => {
33537
30684
  if (e.key === "`" && isVisible) {
@@ -34080,7 +31227,7 @@ function SequenceBar({
34080
31227
  onSlotRemove(index);
34081
31228
  }, [onSlotRemove, playing]);
34082
31229
  const paddedSlots = Array.from({ length: maxSlots }, (_, i) => slots[i]);
34083
- return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React115__default.Fragment, { children: [
31230
+ return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
34084
31231
  i > 0 && /* @__PURE__ */ jsx(
34085
31232
  Typography,
34086
31233
  {
@@ -34224,7 +31371,7 @@ function SequencerBoard({
34224
31371
  setPlayState("idle");
34225
31372
  setCurrentStep(-1);
34226
31373
  emit("UI:PLAY_SOUND", { key: "fail" });
34227
- const correctCount2 = feedback.filter((f3) => f3 === "correct").length;
31374
+ const correctCount2 = feedback.filter((f) => f === "correct").length;
34228
31375
  for (let ci = 0; ci < correctCount2; ci++) {
34229
31376
  setTimeout(() => {
34230
31377
  emit("UI:PLAY_SOUND", { key: "correctSlot" });
@@ -34251,8 +31398,8 @@ function SequencerBoard({
34251
31398
  };
34252
31399
  const usedIds = entity.allowDuplicates === false ? slots.filter(Boolean).map((s) => s?.id || "") : [];
34253
31400
  const showHint = attempts >= 3 && !!entity.hint;
34254
- const hasFeedback = slotFeedback.some((f3) => f3 !== null);
34255
- const correctCount = slotFeedback.filter((f3) => f3 === "correct").length;
31401
+ const hasFeedback = slotFeedback.some((f) => f !== null);
31402
+ const correctCount = slotFeedback.filter((f) => f === "correct").length;
34256
31403
  const encourageKey = ENCOURAGEMENT_KEYS2[Math.min(attempts - 1, ENCOURAGEMENT_KEYS2.length - 1)] ?? ENCOURAGEMENT_KEYS2[0];
34257
31404
  return /* @__PURE__ */ jsxs(
34258
31405
  VStack,
@@ -35388,7 +32535,7 @@ var init_SplitPane = __esm({
35388
32535
  }
35389
32536
  });
35390
32537
  var StatCard;
35391
- var init_StatCard2 = __esm({
32538
+ var init_StatCard = __esm({
35392
32539
  "components/organisms/StatCard.tsx"() {
35393
32540
  "use client";
35394
32541
  init_cn();
@@ -35425,7 +32572,7 @@ var init_StatCard2 = __esm({
35425
32572
  const labelToUse = propLabel ?? propTitle;
35426
32573
  const eventBus = useEventBus();
35427
32574
  const { t } = useTranslate();
35428
- const handleActionClick = React115__default.useCallback(() => {
32575
+ const handleActionClick = React105__default.useCallback(() => {
35429
32576
  if (action?.event) {
35430
32577
  eventBus.emit(`UI:${action.event}`, {});
35431
32578
  }
@@ -35436,7 +32583,7 @@ var init_StatCard2 = __esm({
35436
32583
  const data = Array.isArray(entity) ? entity : entity ? [entity] : [];
35437
32584
  const isLoading = externalLoading ?? false;
35438
32585
  const error = externalError;
35439
- const computeMetricValue = React115__default.useCallback(
32586
+ const computeMetricValue = React105__default.useCallback(
35440
32587
  (metric, items) => {
35441
32588
  if (metric.value !== void 0) {
35442
32589
  return metric.value;
@@ -35475,7 +32622,7 @@ var init_StatCard2 = __esm({
35475
32622
  },
35476
32623
  []
35477
32624
  );
35478
- const schemaStats = React115__default.useMemo(() => {
32625
+ const schemaStats = React105__default.useMemo(() => {
35479
32626
  if (!metrics || metrics.length === 0) return null;
35480
32627
  return metrics.map((metric) => ({
35481
32628
  label: metric.label,
@@ -35483,7 +32630,7 @@ var init_StatCard2 = __esm({
35483
32630
  format: metric.format
35484
32631
  }));
35485
32632
  }, [metrics, data, computeMetricValue]);
35486
- const calculatedTrend = React115__default.useMemo(() => {
32633
+ const calculatedTrend = React105__default.useMemo(() => {
35487
32634
  if (manualTrend !== void 0) return manualTrend;
35488
32635
  if (previousValue === void 0 || currentValue === void 0)
35489
32636
  return void 0;
@@ -36467,23 +33614,23 @@ var init_Timeline = __esm({
36467
33614
  }) => {
36468
33615
  const { t } = useTranslate();
36469
33616
  const entityData = Array.isArray(entity) ? entity : [];
36470
- const items = React115__default.useMemo(() => {
33617
+ const items = React105__default.useMemo(() => {
36471
33618
  if (propItems) return propItems;
36472
33619
  if (entityData.length === 0) return [];
36473
33620
  return entityData.map((record, idx) => {
36474
- const resolveField = (f3) => {
36475
- if (typeof f3 === "string") return f3;
36476
- if (f3 && typeof f3 === "object" && "name" in f3) return String(f3.name);
33621
+ const resolveField = (f) => {
33622
+ if (typeof f === "string") return f;
33623
+ if (f && typeof f === "object" && "name" in f) return String(f.name);
36477
33624
  return "";
36478
33625
  };
36479
33626
  const resolvedFields = fields?.map(resolveField) ?? [];
36480
33627
  const titleField = resolvedFields[0] || "title";
36481
33628
  const descField = resolvedFields[1] || "description";
36482
33629
  const dateField = resolvedFields.find(
36483
- (f3) => f3.toLowerCase().includes("date")
33630
+ (f) => f.toLowerCase().includes("date")
36484
33631
  ) || "date";
36485
33632
  const statusField = resolvedFields.find(
36486
- (f3) => f3.toLowerCase().includes("status")
33633
+ (f) => f.toLowerCase().includes("status")
36487
33634
  ) || "status";
36488
33635
  return {
36489
33636
  id: String(record.id ?? idx),
@@ -36574,7 +33721,7 @@ var init_Timeline = __esm({
36574
33721
  }
36575
33722
  });
36576
33723
  function extractToastProps(children) {
36577
- if (!React115__default.isValidElement(children)) {
33724
+ if (!React105__default.isValidElement(children)) {
36578
33725
  if (typeof children === "string") {
36579
33726
  return { message: children };
36580
33727
  }
@@ -36612,7 +33759,7 @@ var init_ToastSlot = __esm({
36612
33759
  eventBus.emit("UI:CLOSE");
36613
33760
  };
36614
33761
  if (!isVisible) return null;
36615
- const isCustomContent = React115__default.isValidElement(children) && !message;
33762
+ const isCustomContent = React105__default.isValidElement(children) && !message;
36616
33763
  return /* @__PURE__ */ jsx(Box, { className: "fixed bottom-4 right-4 z-50", children: isCustomContent ? children : /* @__PURE__ */ jsx(
36617
33764
  Toast,
36618
33765
  {
@@ -36881,7 +34028,7 @@ var init_WizardContainer = __esm({
36881
34028
  const isCompleted = index < currentStep;
36882
34029
  const stepKey = step.id ?? step.tabId ?? `step-${index}`;
36883
34030
  const stepTitle = step.title ?? step.name ?? `Step ${index + 1}`;
36884
- return /* @__PURE__ */ jsxs(React115__default.Fragment, { children: [
34031
+ return /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
36885
34032
  /* @__PURE__ */ jsx(
36886
34033
  Button,
36887
34034
  {
@@ -37263,12 +34410,12 @@ var init_WorldMapTemplate = __esm({
37263
34410
  }
37264
34411
  });
37265
34412
  function lazyThree(name, loader) {
37266
- const Lazy = React115__default.lazy(() => loader().then((m) => ({ default: m[name] })));
34413
+ const Lazy = React105__default.lazy(() => loader().then((m) => ({ default: m[name] })));
37267
34414
  function ThreeWrapper(props) {
37268
- return React115__default.createElement(
37269
- React115__default.Suspense,
34415
+ return React105__default.createElement(
34416
+ React105__default.Suspense,
37270
34417
  { fallback: null },
37271
- React115__default.createElement(Lazy, props)
34418
+ React105__default.createElement(Lazy, props)
37272
34419
  );
37273
34420
  }
37274
34421
  ThreeWrapper.displayName = `Lazy(${name})`;
@@ -37424,7 +34571,7 @@ var init_component_registry_generated = __esm({
37424
34571
  init_Stack();
37425
34572
  init_StarRating();
37426
34573
  init_StatBadge();
37427
- init_StatCard2();
34574
+ init_StatCard();
37428
34575
  init_StatDisplay();
37429
34576
  init_StateArchitectBoard();
37430
34577
  init_StateIndicator();
@@ -37756,7 +34903,7 @@ function SuspenseConfigProvider({
37756
34903
  config,
37757
34904
  children
37758
34905
  }) {
37759
- return React115__default.createElement(
34906
+ return React105__default.createElement(
37760
34907
  SuspenseConfigContext.Provider,
37761
34908
  { value: config },
37762
34909
  children
@@ -37777,7 +34924,7 @@ function getComponentForPattern(patternType) {
37777
34924
  return COMPONENT_REGISTRY[name] ?? null;
37778
34925
  }
37779
34926
  function enrichFormFields(fields, entityDef) {
37780
- const fieldMap = new Map(entityDef.fields.map((f3) => [f3.name, f3]));
34927
+ const fieldMap = new Map(entityDef.fields.map((f) => [f.name, f]));
37781
34928
  return fields.map((field) => {
37782
34929
  if (typeof field === "string") {
37783
34930
  const entityField = fieldMap.get(field);
@@ -38239,7 +35386,7 @@ function renderPatternChildren(children, onDismiss, parentId = "root", parentPat
38239
35386
  const key = `${parentId}-${index}-trait:${traitName}`;
38240
35387
  return /* @__PURE__ */ jsx(TraitFrame, { traitName }, key);
38241
35388
  }
38242
- return /* @__PURE__ */ jsx(React115__default.Fragment, { children: child }, `${parentId}-${index}`);
35389
+ return /* @__PURE__ */ jsx(React105__default.Fragment, { children: child }, `${parentId}-${index}`);
38243
35390
  }
38244
35391
  if (!child || typeof child !== "object") return null;
38245
35392
  const childId = `${parentId}-${index}`;
@@ -38276,14 +35423,14 @@ function isPatternConfig(value) {
38276
35423
  if (value === null || value === void 0) return false;
38277
35424
  if (typeof value !== "object") return false;
38278
35425
  if (Array.isArray(value)) return false;
38279
- if (React115__default.isValidElement(value)) return false;
35426
+ if (React105__default.isValidElement(value)) return false;
38280
35427
  if (value instanceof Date) return false;
38281
35428
  if (typeof value === "function") return false;
38282
35429
  const record = value;
38283
35430
  return "type" in record && typeof record.type === "string";
38284
35431
  }
38285
35432
  function isPlainConfigObject(value) {
38286
- if (React115__default.isValidElement(value)) return false;
35433
+ if (React105__default.isValidElement(value)) return false;
38287
35434
  if (value instanceof Date) return false;
38288
35435
  const proto = Object.getPrototypeOf(value);
38289
35436
  return proto === Object.prototype || proto === null;
@@ -39015,9 +36162,6 @@ function VerificationProvider({
39015
36162
  return /* @__PURE__ */ jsx(Fragment, { children });
39016
36163
  }
39017
36164
  VerificationProvider.displayName = "VerificationProvider";
39018
-
39019
- // providers/OrbitalProvider.tsx
39020
- init_ThemeContext();
39021
36165
  function OrbitalProvider({
39022
36166
  children,
39023
36167
  themes,