@almadar/ui 4.25.0 → 4.26.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({
@@ -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);
@@ -18722,9 +17737,9 @@ function DataGrid({
18722
17737
  return next;
18723
17738
  });
18724
17739
  }, [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));
17740
+ const titleField = fieldDefs.find((f) => f.variant === "h3" || f.variant === "h4") ?? fieldDefs[0];
17741
+ const badgeFields = fieldDefs.filter((f) => f.variant === "badge" && f !== titleField);
17742
+ const bodyFields = fieldDefs.filter((f) => f !== titleField && !badgeFields.includes(f));
18728
17743
  const primaryActions = itemActions?.filter((a) => a.variant !== "danger") ?? [];
18729
17744
  const dangerActions = itemActions?.filter((a) => a.variant === "danger") ?? [];
18730
17745
  const handleActionClick = (action, itemData) => (e) => {
@@ -19079,13 +18094,13 @@ function DataList({
19079
18094
  }) {
19080
18095
  const eventBus = useEventBus();
19081
18096
  const { t } = useTranslate();
19082
- const [visibleCount, setVisibleCount] = React115__default.useState(pageSize || Infinity);
18097
+ const [visibleCount, setVisibleCount] = React105__default.useState(pageSize || Infinity);
19083
18098
  const fieldDefs = fields ?? columns ?? [];
19084
18099
  const allData = Array.isArray(entity) ? entity : entity ? [entity] : [];
19085
18100
  const data = pageSize > 0 ? allData.slice(0, visibleCount) : allData;
19086
18101
  const hasMoreLocal = pageSize > 0 && visibleCount < allData.length;
19087
18102
  const hasRenderProp = typeof children === "function";
19088
- React115__default.useEffect(() => {
18103
+ React105__default.useEffect(() => {
19089
18104
  const renderItemTypeOf = typeof schemaRenderItem;
19090
18105
  const childrenTypeOf = typeof children;
19091
18106
  if (data.length > 0 && !hasRenderProp) {
@@ -19105,11 +18120,11 @@ function DataList({
19105
18120
  });
19106
18121
  }
19107
18122
  }, [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");
18123
+ const titleField = fieldDefs.find((f) => f.variant === "h3" || f.variant === "h4") ?? fieldDefs[0];
18124
+ const badgeFields = fieldDefs.filter((f) => f.variant === "badge" && f !== titleField);
18125
+ const progressFields = fieldDefs.filter((f) => f.variant === "progress");
19111
18126
  const bodyFields = fieldDefs.filter(
19112
- (f3) => f3 !== titleField && !badgeFields.includes(f3) && !progressFields.includes(f3)
18127
+ (f) => f !== titleField && !badgeFields.includes(f) && !progressFields.includes(f)
19113
18128
  );
19114
18129
  const handleActionClick = (action, itemData) => (e) => {
19115
18130
  e.stopPropagation();
@@ -19141,14 +18156,14 @@ function DataList({
19141
18156
  const items2 = data.map((item) => item);
19142
18157
  const groups2 = groupBy ? groupData(items2, groupBy) : [{ label: "", items: items2 }];
19143
18158
  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: [
18159
+ return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
19145
18160
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: "my-2" }),
19146
18161
  group.items.map((itemData, index) => {
19147
18162
  const id = itemData.id || `${gi}-${index}`;
19148
18163
  const sender = senderField ? String(getNestedValue(itemData, senderField) ?? "") : "";
19149
18164
  const isSent = Boolean(currentUser && sender === currentUser);
19150
18165
  const content = getNestedValue(itemData, contentField);
19151
- const timestampField = fieldDefs.find((f3) => f3.format === "date");
18166
+ const timestampField = fieldDefs.find((f) => f.format === "date");
19152
18167
  const timestamp = timestampField ? getNestedValue(itemData, timestampField.name) : null;
19153
18168
  return /* @__PURE__ */ jsx(
19154
18169
  Box,
@@ -19332,7 +18347,7 @@ function DataList({
19332
18347
  className
19333
18348
  ),
19334
18349
  children: [
19335
- groups.map((group, gi) => /* @__PURE__ */ jsxs(React115__default.Fragment, { children: [
18350
+ groups.map((group, gi) => /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
19336
18351
  group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: gi > 0 ? "mt-4" : "mt-0" }),
19337
18352
  group.items.map(
19338
18353
  (itemData, index) => renderItem(itemData, index, gi === groups.length - 1 && index === group.items.length - 1)
@@ -19387,135 +18402,6 @@ var init_DataList = __esm({
19387
18402
  DataList.displayName = "DataList";
19388
18403
  }
19389
18404
  });
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
18405
  var FormField;
19520
18406
  var init_FormField = __esm({
19521
18407
  "components/molecules/FormField.tsx"() {
@@ -19866,7 +18752,7 @@ var init_FilterGroup = __esm({
19866
18752
  ) }, filter.field)),
19867
18753
  activeFilterCount > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
19868
18754
  Object.entries(selectedValues).map(([field, value]) => {
19869
- const filterDef = filters.find((f3) => f3.field === field);
18755
+ const filterDef = filters.find((f) => f.field === field);
19870
18756
  return /* @__PURE__ */ jsxs(
19871
18757
  Badge,
19872
18758
  {
@@ -20608,7 +19494,7 @@ var init_WizardProgress = __esm({
20608
19494
  children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: normalizedSteps.map((step, index) => {
20609
19495
  const isActive = index === currentStep;
20610
19496
  const isCompleted = index < currentStep;
20611
- return /* @__PURE__ */ jsxs(React115__default.Fragment, { children: [
19497
+ return /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
20612
19498
  /* @__PURE__ */ jsx(
20613
19499
  "button",
20614
19500
  {
@@ -21519,7 +20405,7 @@ function InventoryGrid({
21519
20405
  const eventBus = useEventBus();
21520
20406
  const slotCount = totalSlots ?? items.length;
21521
20407
  const emptySlotCount = Math.max(0, slotCount - items.length);
21522
- const handleSelect = React115.useCallback(
20408
+ const handleSelect = React105.useCallback(
21523
20409
  (id) => {
21524
20410
  onSelect?.(id);
21525
20411
  if (selectEvent) {
@@ -21732,15 +20618,15 @@ function GameCanvas2D({
21732
20618
  fps = 60,
21733
20619
  className
21734
20620
  }) {
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);
20621
+ const canvasRef = React105.useRef(null);
20622
+ const rafRef = React105.useRef(0);
20623
+ const frameRef = React105.useRef(0);
20624
+ const lastTimeRef = React105.useRef(0);
20625
+ const onDrawRef = React105.useRef(onDraw);
21740
20626
  onDrawRef.current = onDraw;
21741
- const onTickRef = React115.useRef(onTick);
20627
+ const onTickRef = React105.useRef(onTick);
21742
20628
  onTickRef.current = onTick;
21743
- React115.useEffect(() => {
20629
+ React105.useEffect(() => {
21744
20630
  const canvas = canvasRef.current;
21745
20631
  if (!canvas) return;
21746
20632
  const ctx = canvas.getContext("2d");
@@ -22029,7 +20915,7 @@ function TurnPanel({
22029
20915
  className
22030
20916
  }) {
22031
20917
  const eventBus = useEventBus();
22032
- const handleAction = React115.useCallback(
20918
+ const handleAction = React105.useCallback(
22033
20919
  (event) => {
22034
20920
  if (event) {
22035
20921
  eventBus.emit(event, { turn: currentTurn, phase, activeTeam });
@@ -22175,7 +21061,7 @@ function UnitCommandBar({
22175
21061
  className
22176
21062
  }) {
22177
21063
  const eventBus = useEventBus();
22178
- const handleCommand = React115.useCallback(
21064
+ const handleCommand = React105.useCallback(
22179
21065
  (event) => {
22180
21066
  if (event) {
22181
21067
  eventBus.emit(event, { unitId: selectedUnitId });
@@ -22660,7 +21546,7 @@ function GameMenu({
22660
21546
  } catch {
22661
21547
  }
22662
21548
  const eventBus = eventBusProp || eventBusFromHook;
22663
- const handleOptionClick = React115.useCallback(
21549
+ const handleOptionClick = React105.useCallback(
22664
21550
  (option) => {
22665
21551
  if (option.event && eventBus) {
22666
21552
  eventBus.emit(`UI:${option.event}`, { option });
@@ -22774,7 +21660,7 @@ function GameOverScreen({
22774
21660
  } catch {
22775
21661
  }
22776
21662
  const eventBus = eventBusProp || eventBusFromHook;
22777
- const handleActionClick = React115.useCallback(
21663
+ const handleActionClick = React105.useCallback(
22778
21664
  (action) => {
22779
21665
  if (action.event && eventBus) {
22780
21666
  eventBus.emit(`UI:${action.event}`, { action });
@@ -23144,28 +22030,6 @@ var init_PlatformerCanvas = __esm({
23144
22030
  // components/molecules/game/index.ts
23145
22031
  var init_game2 = __esm({
23146
22032
  "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
22033
  }
23170
22034
  });
23171
22035
  function resolveNodeColor(node, groups) {
@@ -23903,7 +22767,7 @@ var init_UploadDropZone = __esm({
23903
22767
  if (action) {
23904
22768
  eventBus.emit(`UI:${action}`, {
23905
22769
  ...actionPayload,
23906
- files: valid.map((f3) => ({ name: f3.name, size: f3.size, type: f3.type }))
22770
+ files: valid.map((f) => ({ name: f.name, size: f.size, type: f.type }))
23907
22771
  });
23908
22772
  }
23909
22773
  }
@@ -25052,1758 +23916,13 @@ var init_PullToRefresh = __esm({
25052
23916
  PullToRefresh.displayName = "PullToRefresh";
25053
23917
  }
25054
23918
  });
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
23919
 
26723
23920
  // components/molecules/index.ts
26724
23921
  var init_molecules = __esm({
26725
23922
  "components/molecules/index.ts"() {
26726
- init_ErrorBoundary();
26727
- init_FileTree();
26728
- init_FormField();
26729
23923
  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
23924
  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
23925
  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
23926
  }
26808
23927
  });
26809
23928
 
@@ -27469,19 +24588,19 @@ function renderRichFieldValue(value, fieldName, fieldType) {
27469
24588
  }
27470
24589
  function normalizeFieldDefs(fields) {
27471
24590
  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);
24591
+ return fields.map((f) => {
24592
+ if (typeof f === "string") return f;
24593
+ if ("key" in f) return f.key;
24594
+ if ("name" in f) return f.name;
24595
+ return String(f);
27477
24596
  });
27478
24597
  }
27479
24598
  function buildFieldTypeMap(fields) {
27480
24599
  const map = {};
27481
24600
  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;
24601
+ for (const f of fields) {
24602
+ if (typeof f === "object" && "name" in f && "type" in f) {
24603
+ map[f.name] = f.type;
27485
24604
  }
27486
24605
  }
27487
24606
  return map;
@@ -27578,22 +24697,22 @@ var init_DetailPanel = __esm({
27578
24697
  title = String(normalizedData[primaryField]);
27579
24698
  }
27580
24699
  const statusFields = effectiveFieldNames.filter(
27581
- (f3) => f3.toLowerCase().includes("status") || f3.toLowerCase().includes("priority")
24700
+ (f) => f.toLowerCase().includes("status") || f.toLowerCase().includes("priority")
27582
24701
  );
27583
24702
  const progressFields = effectiveFieldNames.filter(
27584
- (f3) => f3.toLowerCase().includes("progress") || f3.toLowerCase().includes("percent")
24703
+ (f) => f.toLowerCase().includes("progress") || f.toLowerCase().includes("percent")
27585
24704
  );
27586
24705
  const metricFields = effectiveFieldNames.filter(
27587
- (f3) => (f3.toLowerCase().includes("budget") || f3.toLowerCase().includes("cost") || f3.toLowerCase().includes("count")) && !progressFields.includes(f3)
24706
+ (f) => (f.toLowerCase().includes("budget") || f.toLowerCase().includes("cost") || f.toLowerCase().includes("count")) && !progressFields.includes(f)
27588
24707
  );
27589
24708
  const dateFields = effectiveFieldNames.filter(
27590
- (f3) => f3.toLowerCase().includes("date") || f3.toLowerCase().includes("time")
24709
+ (f) => f.toLowerCase().includes("date") || f.toLowerCase().includes("time")
27591
24710
  );
27592
24711
  const descriptionFields = effectiveFieldNames.filter(
27593
- (f3) => f3.toLowerCase().includes("description") || f3.toLowerCase().includes("note")
24712
+ (f) => f.toLowerCase().includes("description") || f.toLowerCase().includes("note")
27594
24713
  );
27595
24714
  const otherFields = effectiveFieldNames.filter(
27596
- (f3) => f3 !== primaryField && !statusFields.includes(f3) && !progressFields.includes(f3) && !metricFields.includes(f3) && !dateFields.includes(f3) && !descriptionFields.includes(f3)
24715
+ (f) => f !== primaryField && !statusFields.includes(f) && !progressFields.includes(f) && !metricFields.includes(f) && !dateFields.includes(f) && !descriptionFields.includes(f)
27597
24716
  );
27598
24717
  sections = [];
27599
24718
  if (statusFields.length > 0 || otherFields.length > 0) {
@@ -27747,7 +24866,7 @@ var init_DetailPanel = __esm({
27747
24866
  subtitle && /* @__PURE__ */ jsx(Typography, { variant: "body", color: "secondary", children: subtitle }),
27748
24867
  /* @__PURE__ */ jsxs(HStack, { gap: "xs", wrap: true, children: [
27749
24868
  normalizedData && effectiveFieldNames && effectiveFieldNames.filter(
27750
- (f3) => f3.toLowerCase().includes("status") || f3.toLowerCase().includes("priority")
24869
+ (f) => f.toLowerCase().includes("status") || f.toLowerCase().includes("priority")
27751
24870
  ).map((field) => {
27752
24871
  const value = getNestedValue(normalizedData, field);
27753
24872
  if (!value) return null;
@@ -27763,7 +24882,7 @@ var init_DetailPanel = __esm({
27763
24882
  status && /* @__PURE__ */ jsx(Badge, { variant: status.variant ?? "default", children: status.label })
27764
24883
  ] }),
27765
24884
  normalizedData && effectiveFieldNames && effectiveFieldNames.filter(
27766
- (f3) => f3.toLowerCase().includes("progress") || f3.toLowerCase().includes("percent")
24885
+ (f) => f.toLowerCase().includes("progress") || f.toLowerCase().includes("percent")
27767
24886
  ).map((field) => {
27768
24887
  const value = getNestedValue(normalizedData, field);
27769
24888
  if (value === void 0 || value === null || typeof value !== "number")
@@ -28030,7 +25149,7 @@ var init_DocumentViewer = __esm({
28030
25149
  }
28031
25150
  });
28032
25151
  function extractTitle(children) {
28033
- if (!React115__default.isValidElement(children)) return void 0;
25152
+ if (!React105__default.isValidElement(children)) return void 0;
28034
25153
  const props = children.props;
28035
25154
  if (typeof props.title === "string") {
28036
25155
  return props.title;
@@ -28085,7 +25204,7 @@ function LinearView({
28085
25204
  /* @__PURE__ */ jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
28086
25205
  const isDone = i < currentIdx;
28087
25206
  const isCurrent = i === currentIdx;
28088
- return /* @__PURE__ */ jsxs(React115__default.Fragment, { children: [
25207
+ return /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
28089
25208
  i > 0 && /* @__PURE__ */ jsx(
28090
25209
  Typography,
28091
25210
  {
@@ -28869,51 +25988,51 @@ var init_Form = __esm({
28869
25988
  const isSchemaEntity = isOrbitalEntitySchema(entity);
28870
25989
  const resolvedEntity = isSchemaEntity ? entity : void 0;
28871
25990
  const entityName = typeof entity === "string" ? entity : resolvedEntity?.name;
28872
- const normalizedInitialData = React115__default.useMemo(() => {
25991
+ const normalizedInitialData = React105__default.useMemo(() => {
28873
25992
  const entityRowAsInitial = isPlainEntityRow(entity) ? entity : void 0;
28874
25993
  const callerInitial = initialData !== null && typeof initialData === "object" && !Array.isArray(initialData) ? initialData : {};
28875
25994
  return entityRowAsInitial !== void 0 ? { ...entityRowAsInitial, ...callerInitial } : callerInitial;
28876
25995
  }, [entity, initialData]);
28877
- const entityDerivedFields = React115__default.useMemo(() => {
25996
+ const entityDerivedFields = React105__default.useMemo(() => {
28878
25997
  if (fields && fields.length > 0) return void 0;
28879
25998
  if (!resolvedEntity) return void 0;
28880
25999
  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
26000
+ (f) => ({
26001
+ name: f.name,
26002
+ type: f.type,
26003
+ required: f.required,
26004
+ defaultValue: f.default,
26005
+ values: f.values,
26006
+ min: f.min,
26007
+ max: f.max,
26008
+ relation: f.relation ? { entity: f.relation.entity } : void 0
28890
26009
  })
28891
26010
  );
28892
26011
  }, [entity, fields]);
28893
26012
  const conditionalFields = typeof conditionalFieldsRaw === "boolean" ? {} : conditionalFieldsRaw;
28894
26013
  const hiddenCalculations = typeof hiddenCalculationsRaw === "boolean" ? [] : hiddenCalculationsRaw;
28895
26014
  const violationTriggers = typeof violationTriggersRaw === "boolean" ? [] : violationTriggersRaw;
28896
- const [formData, setFormData] = React115__default.useState(
26015
+ const [formData, setFormData] = React105__default.useState(
28897
26016
  normalizedInitialData
28898
26017
  );
28899
- const [collapsedSections, setCollapsedSections] = React115__default.useState(
26018
+ const [collapsedSections, setCollapsedSections] = React105__default.useState(
28900
26019
  /* @__PURE__ */ new Set()
28901
26020
  );
28902
26021
  const formMode = props.mode;
28903
- const mountedRef = React115__default.useRef(false);
26022
+ const mountedRef = React105__default.useRef(false);
28904
26023
  if (!mountedRef.current) {
28905
26024
  mountedRef.current = true;
28906
26025
  debug("forms", "mount", {
28907
26026
  mode: formMode,
28908
26027
  submitEvent,
28909
26028
  cancelEvent,
28910
- fieldNames: (fields ?? []).map((f3) => f3.name ?? f3.field).filter(Boolean),
26029
+ fieldNames: (fields ?? []).map((f) => f.name ?? f.field).filter(Boolean),
28911
26030
  initialDataKeys: Object.keys(normalizedInitialData),
28912
26031
  initialData: normalizedInitialData
28913
26032
  });
28914
26033
  }
28915
26034
  const shouldShowCancel = showCancel ?? (fields && fields.length > 0);
28916
- const evalContext = React115__default.useMemo(
26035
+ const evalContext = React105__default.useMemo(
28917
26036
  () => ({
28918
26037
  formValues: formData,
28919
26038
  globalVariables: externalContext?.globalVariables ?? {},
@@ -28922,7 +26041,7 @@ var init_Form = __esm({
28922
26041
  }),
28923
26042
  [formData, externalContext]
28924
26043
  );
28925
- React115__default.useEffect(() => {
26044
+ React105__default.useEffect(() => {
28926
26045
  debug("forms", "initialData-sync", {
28927
26046
  mode: formMode,
28928
26047
  normalizedInitialData,
@@ -28933,7 +26052,7 @@ var init_Form = __esm({
28933
26052
  setFormData(normalizedInitialData);
28934
26053
  }
28935
26054
  }, [normalizedInitialData]);
28936
- const processCalculations = React115__default.useCallback(
26055
+ const processCalculations = React105__default.useCallback(
28937
26056
  (changedFieldId, newFormData) => {
28938
26057
  if (!hiddenCalculations.length) return;
28939
26058
  const context = {
@@ -28958,7 +26077,7 @@ var init_Form = __esm({
28958
26077
  },
28959
26078
  [hiddenCalculations, externalContext, eventBus]
28960
26079
  );
28961
- const checkViolations = React115__default.useCallback(
26080
+ const checkViolations = React105__default.useCallback(
28962
26081
  (changedFieldId, newFormData) => {
28963
26082
  if (!violationTriggers.length) return;
28964
26083
  const context = {
@@ -28996,7 +26115,7 @@ var init_Form = __esm({
28996
26115
  processCalculations(name, newFormData);
28997
26116
  checkViolations(name, newFormData);
28998
26117
  };
28999
- const isFieldVisible = React115__default.useCallback(
26118
+ const isFieldVisible = React105__default.useCallback(
29000
26119
  (fieldName) => {
29001
26120
  const condition = conditionalFields[fieldName];
29002
26121
  if (!condition) return true;
@@ -29004,7 +26123,7 @@ var init_Form = __esm({
29004
26123
  },
29005
26124
  [conditionalFields, evalContext]
29006
26125
  );
29007
- const isSectionVisible = React115__default.useCallback(
26126
+ const isSectionVisible = React105__default.useCallback(
29008
26127
  (section) => {
29009
26128
  if (!section.condition) return true;
29010
26129
  return Boolean(evaluateFormExpression(section.condition, evalContext));
@@ -29048,7 +26167,7 @@ var init_Form = __esm({
29048
26167
  eventBus.emit(`UI:${onCancel}`);
29049
26168
  }
29050
26169
  };
29051
- const renderField = React115__default.useCallback(
26170
+ const renderField = React105__default.useCallback(
29052
26171
  (field) => {
29053
26172
  const fieldName = field.name || field.field;
29054
26173
  if (!fieldName) return null;
@@ -29069,11 +26188,11 @@ var init_Form = __esm({
29069
26188
  [formData, isFieldVisible, relationsData, relationsLoading, isLoading]
29070
26189
  );
29071
26190
  const effectiveFields = entityDerivedFields ?? fields;
29072
- const normalizedFields = React115__default.useMemo(() => {
26191
+ const normalizedFields = React105__default.useMemo(() => {
29073
26192
  if (!effectiveFields || effectiveFields.length === 0) return [];
29074
26193
  return effectiveFields.map((field) => {
29075
26194
  if (typeof field === "string") {
29076
- const entityField = resolvedEntity?.fields?.find((f3) => f3.name === field);
26195
+ const entityField = resolvedEntity?.fields?.find((f) => f.name === field);
29077
26196
  if (entityField) {
29078
26197
  return {
29079
26198
  name: field,
@@ -29091,7 +26210,7 @@ var init_Form = __esm({
29091
26210
  return field;
29092
26211
  });
29093
26212
  }, [effectiveFields, resolvedEntity]);
29094
- const schemaFields = React115__default.useMemo(() => {
26213
+ const schemaFields = React105__default.useMemo(() => {
29095
26214
  if (normalizedFields.length === 0) return null;
29096
26215
  if (isDebugEnabled()) {
29097
26216
  debugGroup(`Form: ${entityName || "unknown"}`);
@@ -29101,7 +26220,7 @@ var init_Form = __esm({
29101
26220
  }
29102
26221
  return normalizedFields.map(renderField).filter(Boolean);
29103
26222
  }, [normalizedFields, renderField, entityName, conditionalFields]);
29104
- const sectionElements = React115__default.useMemo(() => {
26223
+ const sectionElements = React105__default.useMemo(() => {
29105
26224
  if (!sections || sections.length === 0) return null;
29106
26225
  return sections.map((section) => {
29107
26226
  if (!isSectionVisible(section)) {
@@ -30406,7 +27525,7 @@ var init_InventoryPanel2 = __esm({
30406
27525
  });
30407
27526
  function normalizeFields2(fields) {
30408
27527
  if (!fields) return [];
30409
- return fields.map((f3) => typeof f3 === "string" ? f3 : f3.key ?? f3.name ?? "");
27528
+ return fields.map((f) => typeof f === "string" ? f : f.key ?? f.name ?? "");
30410
27529
  }
30411
27530
  function entityFieldsFromListItem(item) {
30412
27531
  const {
@@ -30625,7 +27744,7 @@ var init_List = __esm({
30625
27744
  if (entity && typeof entity === "object" && "id" in entity) return [entity];
30626
27745
  return [];
30627
27746
  }, [entity]);
30628
- const getItemActions = React115__default.useCallback(
27747
+ const getItemActions = React105__default.useCallback(
30629
27748
  (item) => {
30630
27749
  if (!itemActions) return [];
30631
27750
  if (typeof itemActions === "function") {
@@ -30729,19 +27848,19 @@ var init_List = __esm({
30729
27848
  const rowActionPayload = { row: entityFieldsFromListItem(item) };
30730
27849
  const primaryField = effectiveFieldNames?.[0];
30731
27850
  const statusField = effectiveFieldNames?.find(
30732
- (f3) => f3.toLowerCase().includes("status")
27851
+ (f) => f.toLowerCase().includes("status")
30733
27852
  );
30734
27853
  const priorityField = effectiveFieldNames?.find(
30735
- (f3) => f3.toLowerCase().includes("priority")
27854
+ (f) => f.toLowerCase().includes("priority")
30736
27855
  );
30737
27856
  const progressField = effectiveFieldNames?.find(
30738
- (f3) => f3.toLowerCase().includes("progress") || f3.toLowerCase().includes("percent")
27857
+ (f) => f.toLowerCase().includes("progress") || f.toLowerCase().includes("percent")
30739
27858
  );
30740
27859
  const dateFields = effectiveFieldNames?.filter(
30741
- (f3) => f3.toLowerCase().includes("date") || f3.toLowerCase().includes("due")
27860
+ (f) => f.toLowerCase().includes("date") || f.toLowerCase().includes("due")
30742
27861
  ) || [];
30743
27862
  const metadataFields = effectiveFieldNames?.filter(
30744
- (f3) => f3 !== primaryField && f3 !== statusField && f3 !== priorityField && f3 !== progressField && !dateFields.includes(f3)
27863
+ (f) => f !== primaryField && f !== statusField && f !== priorityField && f !== progressField && !dateFields.includes(f)
30745
27864
  ).slice(0, 2) || [];
30746
27865
  const statusValue = statusField ? item._fields?.[statusField] : null;
30747
27866
  statusValue ? getStatusStyle(statusField, String(statusValue)) : null;
@@ -31062,7 +28181,7 @@ var init_MediaGallery = __esm({
31062
28181
  [selectable, selectedItems, selectionEvent, eventBus]
31063
28182
  );
31064
28183
  const entityData = Array.isArray(entity) ? entity : [];
31065
- const items = React115__default.useMemo(() => {
28184
+ const items = React105__default.useMemo(() => {
31066
28185
  if (propItems) return propItems;
31067
28186
  if (entityData.length === 0) return [];
31068
28187
  return entityData.map((record, idx) => ({
@@ -31226,7 +28345,7 @@ var init_MediaGallery = __esm({
31226
28345
  }
31227
28346
  });
31228
28347
  function extractTitle2(children) {
31229
- if (!React115__default.isValidElement(children)) return void 0;
28348
+ if (!React105__default.isValidElement(children)) return void 0;
31230
28349
  const props = children.props;
31231
28350
  if (typeof props.title === "string") {
31232
28351
  return props.title;
@@ -31939,7 +29058,7 @@ var init_PageHeader = __esm({
31939
29058
  info: "bg-info/10 text-info"
31940
29059
  };
31941
29060
  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: [
29061
+ 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
29062
  idx > 0 && /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: "/" }),
31944
29063
  crumb.href ? /* @__PURE__ */ jsx(
31945
29064
  "a",
@@ -32113,7 +29232,7 @@ var init_debugRegistry = __esm({
32113
29232
  }
32114
29233
  });
32115
29234
  function useDebugData() {
32116
- const [data, setData] = React115.useState(() => ({
29235
+ const [data, setData] = React105.useState(() => ({
32117
29236
  traits: [],
32118
29237
  ticks: [],
32119
29238
  guards: [],
@@ -32127,7 +29246,7 @@ function useDebugData() {
32127
29246
  },
32128
29247
  lastUpdate: Date.now()
32129
29248
  }));
32130
- React115.useEffect(() => {
29249
+ React105.useEffect(() => {
32131
29250
  const updateData = () => {
32132
29251
  setData({
32133
29252
  traits: getAllTraits(),
@@ -32236,12 +29355,12 @@ function layoutGraph(states, transitions, initialState, width, height) {
32236
29355
  return positions;
32237
29356
  }
32238
29357
  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(() => {
29358
+ const [walkStep, setWalkStep] = React105.useState(null);
29359
+ const [traits2, setTraits] = React105.useState([]);
29360
+ const [coveredEdges, setCoveredEdges] = React105.useState([]);
29361
+ const [completedTraits, setCompletedTraits] = React105.useState(/* @__PURE__ */ new Set());
29362
+ const prevTraitRef = React105.useRef(null);
29363
+ React105.useEffect(() => {
32245
29364
  const interval = setInterval(() => {
32246
29365
  const w = window;
32247
29366
  const step = w.__orbitalWalkStep;
@@ -32688,15 +29807,15 @@ var init_EntitiesTab = __esm({
32688
29807
  }
32689
29808
  });
32690
29809
  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(() => {
29810
+ const [filter, setFilter] = React105.useState("all");
29811
+ const containerRef = React105.useRef(null);
29812
+ const [autoScroll, setAutoScroll] = React105.useState(true);
29813
+ React105.useEffect(() => {
32695
29814
  if (autoScroll && containerRef.current) {
32696
29815
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
32697
29816
  }
32698
29817
  }, [events2.length, autoScroll]);
32699
- const filteredEvents = React115.useMemo(() => {
29818
+ const filteredEvents = React105.useMemo(() => {
32700
29819
  if (filter === "all") return events2;
32701
29820
  return events2.filter((e) => e.type === filter);
32702
29821
  }, [events2, filter]);
@@ -32815,7 +29934,7 @@ var init_EventFlowTab = __esm({
32815
29934
  }
32816
29935
  });
32817
29936
  function GuardsPanel({ guards }) {
32818
- const [filter, setFilter] = React115.useState("all");
29937
+ const [filter, setFilter] = React105.useState("all");
32819
29938
  if (guards.length === 0) {
32820
29939
  return /* @__PURE__ */ jsx(
32821
29940
  EmptyState,
@@ -32828,7 +29947,7 @@ function GuardsPanel({ guards }) {
32828
29947
  }
32829
29948
  const passedCount = guards.filter((g) => g.result).length;
32830
29949
  const failedCount = guards.length - passedCount;
32831
- const filteredGuards = React115.useMemo(() => {
29950
+ const filteredGuards = React105.useMemo(() => {
32832
29951
  if (filter === "all") return guards;
32833
29952
  if (filter === "passed") return guards.filter((g) => g.result);
32834
29953
  return guards.filter((g) => !g.result);
@@ -32989,10 +30108,10 @@ function EffectBadge({ effect }) {
32989
30108
  ] });
32990
30109
  }
32991
30110
  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(() => {
30111
+ const containerRef = React105.useRef(null);
30112
+ const [autoScroll, setAutoScroll] = React105.useState(true);
30113
+ const [expandedId, setExpandedId] = React105.useState(null);
30114
+ React105.useEffect(() => {
32996
30115
  if (autoScroll && containerRef.current) {
32997
30116
  containerRef.current.scrollTop = containerRef.current.scrollHeight;
32998
30117
  }
@@ -33216,9 +30335,9 @@ function extractPayloadFields(schema, eventName) {
33216
30335
  for (const evt of events2) {
33217
30336
  if (evt.name !== eventName) continue;
33218
30337
  const payload = evt.payload ?? [];
33219
- return payload.map((f3) => ({
33220
- name: f3.name,
33221
- type: f3.type ?? "string"
30338
+ return payload.map((f) => ({
30339
+ name: f.name,
30340
+ type: f.type ?? "string"
33222
30341
  }));
33223
30342
  }
33224
30343
  }
@@ -33278,9 +30397,9 @@ function getAllEvents(traits2) {
33278
30397
  }
33279
30398
  function EventDispatcherTab({ traits: traits2, schema }) {
33280
30399
  const eventBus = useEventBus();
33281
- const [log4, setLog] = React115.useState([]);
33282
- const prevStatesRef = React115.useRef(/* @__PURE__ */ new Map());
33283
- React115.useEffect(() => {
30400
+ const [log4, setLog] = React105.useState([]);
30401
+ const prevStatesRef = React105.useRef(/* @__PURE__ */ new Map());
30402
+ React105.useEffect(() => {
33284
30403
  for (const trait of traits2) {
33285
30404
  const prev = prevStatesRef.current.get(trait.id);
33286
30405
  if (prev && prev !== trait.currentState) {
@@ -33450,10 +30569,10 @@ function VerifyModePanel({
33450
30569
  serverCount,
33451
30570
  localCount
33452
30571
  }) {
33453
- const [expanded, setExpanded] = React115.useState(true);
33454
- const scrollRef = React115.useRef(null);
33455
- const prevCountRef = React115.useRef(0);
33456
- React115.useEffect(() => {
30572
+ const [expanded, setExpanded] = React105.useState(true);
30573
+ const scrollRef = React105.useRef(null);
30574
+ const prevCountRef = React105.useRef(0);
30575
+ React105.useEffect(() => {
33457
30576
  if (expanded && transitions.length > prevCountRef.current && scrollRef.current) {
33458
30577
  scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
33459
30578
  }
@@ -33519,10 +30638,10 @@ function RuntimeDebugger({
33519
30638
  defaultTab,
33520
30639
  schema
33521
30640
  }) {
33522
- const [isCollapsed, setIsCollapsed] = React115.useState(mode === "verify" ? true : defaultCollapsed);
33523
- const [isVisible, setIsVisible] = React115.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
30641
+ const [isCollapsed, setIsCollapsed] = React105.useState(mode === "verify" ? true : defaultCollapsed);
30642
+ const [isVisible, setIsVisible] = React105.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
33524
30643
  const debugData = useDebugData();
33525
- React115.useEffect(() => {
30644
+ React105.useEffect(() => {
33526
30645
  if (mode === "inline") return;
33527
30646
  return onDebugToggle((enabled) => {
33528
30647
  setIsVisible(enabled);
@@ -33531,7 +30650,7 @@ function RuntimeDebugger({
33531
30650
  }
33532
30651
  });
33533
30652
  }, [mode]);
33534
- React115.useEffect(() => {
30653
+ React105.useEffect(() => {
33535
30654
  if (mode === "inline") return;
33536
30655
  const handleKeyDown = (e) => {
33537
30656
  if (e.key === "`" && isVisible) {
@@ -34080,7 +31199,7 @@ function SequenceBar({
34080
31199
  onSlotRemove(index);
34081
31200
  }, [onSlotRemove, playing]);
34082
31201
  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: [
31202
+ return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
34084
31203
  i > 0 && /* @__PURE__ */ jsx(
34085
31204
  Typography,
34086
31205
  {
@@ -34224,7 +31343,7 @@ function SequencerBoard({
34224
31343
  setPlayState("idle");
34225
31344
  setCurrentStep(-1);
34226
31345
  emit("UI:PLAY_SOUND", { key: "fail" });
34227
- const correctCount2 = feedback.filter((f3) => f3 === "correct").length;
31346
+ const correctCount2 = feedback.filter((f) => f === "correct").length;
34228
31347
  for (let ci = 0; ci < correctCount2; ci++) {
34229
31348
  setTimeout(() => {
34230
31349
  emit("UI:PLAY_SOUND", { key: "correctSlot" });
@@ -34251,8 +31370,8 @@ function SequencerBoard({
34251
31370
  };
34252
31371
  const usedIds = entity.allowDuplicates === false ? slots.filter(Boolean).map((s) => s?.id || "") : [];
34253
31372
  const showHint = attempts >= 3 && !!entity.hint;
34254
- const hasFeedback = slotFeedback.some((f3) => f3 !== null);
34255
- const correctCount = slotFeedback.filter((f3) => f3 === "correct").length;
31373
+ const hasFeedback = slotFeedback.some((f) => f !== null);
31374
+ const correctCount = slotFeedback.filter((f) => f === "correct").length;
34256
31375
  const encourageKey = ENCOURAGEMENT_KEYS2[Math.min(attempts - 1, ENCOURAGEMENT_KEYS2.length - 1)] ?? ENCOURAGEMENT_KEYS2[0];
34257
31376
  return /* @__PURE__ */ jsxs(
34258
31377
  VStack,
@@ -35388,7 +32507,7 @@ var init_SplitPane = __esm({
35388
32507
  }
35389
32508
  });
35390
32509
  var StatCard;
35391
- var init_StatCard2 = __esm({
32510
+ var init_StatCard = __esm({
35392
32511
  "components/organisms/StatCard.tsx"() {
35393
32512
  "use client";
35394
32513
  init_cn();
@@ -35425,7 +32544,7 @@ var init_StatCard2 = __esm({
35425
32544
  const labelToUse = propLabel ?? propTitle;
35426
32545
  const eventBus = useEventBus();
35427
32546
  const { t } = useTranslate();
35428
- const handleActionClick = React115__default.useCallback(() => {
32547
+ const handleActionClick = React105__default.useCallback(() => {
35429
32548
  if (action?.event) {
35430
32549
  eventBus.emit(`UI:${action.event}`, {});
35431
32550
  }
@@ -35436,7 +32555,7 @@ var init_StatCard2 = __esm({
35436
32555
  const data = Array.isArray(entity) ? entity : entity ? [entity] : [];
35437
32556
  const isLoading = externalLoading ?? false;
35438
32557
  const error = externalError;
35439
- const computeMetricValue = React115__default.useCallback(
32558
+ const computeMetricValue = React105__default.useCallback(
35440
32559
  (metric, items) => {
35441
32560
  if (metric.value !== void 0) {
35442
32561
  return metric.value;
@@ -35475,7 +32594,7 @@ var init_StatCard2 = __esm({
35475
32594
  },
35476
32595
  []
35477
32596
  );
35478
- const schemaStats = React115__default.useMemo(() => {
32597
+ const schemaStats = React105__default.useMemo(() => {
35479
32598
  if (!metrics || metrics.length === 0) return null;
35480
32599
  return metrics.map((metric) => ({
35481
32600
  label: metric.label,
@@ -35483,7 +32602,7 @@ var init_StatCard2 = __esm({
35483
32602
  format: metric.format
35484
32603
  }));
35485
32604
  }, [metrics, data, computeMetricValue]);
35486
- const calculatedTrend = React115__default.useMemo(() => {
32605
+ const calculatedTrend = React105__default.useMemo(() => {
35487
32606
  if (manualTrend !== void 0) return manualTrend;
35488
32607
  if (previousValue === void 0 || currentValue === void 0)
35489
32608
  return void 0;
@@ -36467,23 +33586,23 @@ var init_Timeline = __esm({
36467
33586
  }) => {
36468
33587
  const { t } = useTranslate();
36469
33588
  const entityData = Array.isArray(entity) ? entity : [];
36470
- const items = React115__default.useMemo(() => {
33589
+ const items = React105__default.useMemo(() => {
36471
33590
  if (propItems) return propItems;
36472
33591
  if (entityData.length === 0) return [];
36473
33592
  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);
33593
+ const resolveField = (f) => {
33594
+ if (typeof f === "string") return f;
33595
+ if (f && typeof f === "object" && "name" in f) return String(f.name);
36477
33596
  return "";
36478
33597
  };
36479
33598
  const resolvedFields = fields?.map(resolveField) ?? [];
36480
33599
  const titleField = resolvedFields[0] || "title";
36481
33600
  const descField = resolvedFields[1] || "description";
36482
33601
  const dateField = resolvedFields.find(
36483
- (f3) => f3.toLowerCase().includes("date")
33602
+ (f) => f.toLowerCase().includes("date")
36484
33603
  ) || "date";
36485
33604
  const statusField = resolvedFields.find(
36486
- (f3) => f3.toLowerCase().includes("status")
33605
+ (f) => f.toLowerCase().includes("status")
36487
33606
  ) || "status";
36488
33607
  return {
36489
33608
  id: String(record.id ?? idx),
@@ -36574,7 +33693,7 @@ var init_Timeline = __esm({
36574
33693
  }
36575
33694
  });
36576
33695
  function extractToastProps(children) {
36577
- if (!React115__default.isValidElement(children)) {
33696
+ if (!React105__default.isValidElement(children)) {
36578
33697
  if (typeof children === "string") {
36579
33698
  return { message: children };
36580
33699
  }
@@ -36612,7 +33731,7 @@ var init_ToastSlot = __esm({
36612
33731
  eventBus.emit("UI:CLOSE");
36613
33732
  };
36614
33733
  if (!isVisible) return null;
36615
- const isCustomContent = React115__default.isValidElement(children) && !message;
33734
+ const isCustomContent = React105__default.isValidElement(children) && !message;
36616
33735
  return /* @__PURE__ */ jsx(Box, { className: "fixed bottom-4 right-4 z-50", children: isCustomContent ? children : /* @__PURE__ */ jsx(
36617
33736
  Toast,
36618
33737
  {
@@ -36881,7 +34000,7 @@ var init_WizardContainer = __esm({
36881
34000
  const isCompleted = index < currentStep;
36882
34001
  const stepKey = step.id ?? step.tabId ?? `step-${index}`;
36883
34002
  const stepTitle = step.title ?? step.name ?? `Step ${index + 1}`;
36884
- return /* @__PURE__ */ jsxs(React115__default.Fragment, { children: [
34003
+ return /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
36885
34004
  /* @__PURE__ */ jsx(
36886
34005
  Button,
36887
34006
  {
@@ -37263,12 +34382,12 @@ var init_WorldMapTemplate = __esm({
37263
34382
  }
37264
34383
  });
37265
34384
  function lazyThree(name, loader) {
37266
- const Lazy = React115__default.lazy(() => loader().then((m) => ({ default: m[name] })));
34385
+ const Lazy = React105__default.lazy(() => loader().then((m) => ({ default: m[name] })));
37267
34386
  function ThreeWrapper(props) {
37268
- return React115__default.createElement(
37269
- React115__default.Suspense,
34387
+ return React105__default.createElement(
34388
+ React105__default.Suspense,
37270
34389
  { fallback: null },
37271
- React115__default.createElement(Lazy, props)
34390
+ React105__default.createElement(Lazy, props)
37272
34391
  );
37273
34392
  }
37274
34393
  ThreeWrapper.displayName = `Lazy(${name})`;
@@ -37424,7 +34543,7 @@ var init_component_registry_generated = __esm({
37424
34543
  init_Stack();
37425
34544
  init_StarRating();
37426
34545
  init_StatBadge();
37427
- init_StatCard2();
34546
+ init_StatCard();
37428
34547
  init_StatDisplay();
37429
34548
  init_StateArchitectBoard();
37430
34549
  init_StateIndicator();
@@ -37756,7 +34875,7 @@ function SuspenseConfigProvider({
37756
34875
  config,
37757
34876
  children
37758
34877
  }) {
37759
- return React115__default.createElement(
34878
+ return React105__default.createElement(
37760
34879
  SuspenseConfigContext.Provider,
37761
34880
  { value: config },
37762
34881
  children
@@ -37777,7 +34896,7 @@ function getComponentForPattern(patternType) {
37777
34896
  return COMPONENT_REGISTRY[name] ?? null;
37778
34897
  }
37779
34898
  function enrichFormFields(fields, entityDef) {
37780
- const fieldMap = new Map(entityDef.fields.map((f3) => [f3.name, f3]));
34899
+ const fieldMap = new Map(entityDef.fields.map((f) => [f.name, f]));
37781
34900
  return fields.map((field) => {
37782
34901
  if (typeof field === "string") {
37783
34902
  const entityField = fieldMap.get(field);
@@ -38239,7 +35358,7 @@ function renderPatternChildren(children, onDismiss, parentId = "root", parentPat
38239
35358
  const key = `${parentId}-${index}-trait:${traitName}`;
38240
35359
  return /* @__PURE__ */ jsx(TraitFrame, { traitName }, key);
38241
35360
  }
38242
- return /* @__PURE__ */ jsx(React115__default.Fragment, { children: child }, `${parentId}-${index}`);
35361
+ return /* @__PURE__ */ jsx(React105__default.Fragment, { children: child }, `${parentId}-${index}`);
38243
35362
  }
38244
35363
  if (!child || typeof child !== "object") return null;
38245
35364
  const childId = `${parentId}-${index}`;
@@ -38276,14 +35395,14 @@ function isPatternConfig(value) {
38276
35395
  if (value === null || value === void 0) return false;
38277
35396
  if (typeof value !== "object") return false;
38278
35397
  if (Array.isArray(value)) return false;
38279
- if (React115__default.isValidElement(value)) return false;
35398
+ if (React105__default.isValidElement(value)) return false;
38280
35399
  if (value instanceof Date) return false;
38281
35400
  if (typeof value === "function") return false;
38282
35401
  const record = value;
38283
35402
  return "type" in record && typeof record.type === "string";
38284
35403
  }
38285
35404
  function isPlainConfigObject(value) {
38286
- if (React115__default.isValidElement(value)) return false;
35405
+ if (React105__default.isValidElement(value)) return false;
38287
35406
  if (value instanceof Date) return false;
38288
35407
  const proto = Object.getPrototypeOf(value);
38289
35408
  return proto === Object.prototype || proto === null;
@@ -39015,9 +36134,6 @@ function VerificationProvider({
39015
36134
  return /* @__PURE__ */ jsx(Fragment, { children });
39016
36135
  }
39017
36136
  VerificationProvider.displayName = "VerificationProvider";
39018
-
39019
- // providers/OrbitalProvider.tsx
39020
- init_ThemeContext();
39021
36137
  function OrbitalProvider({
39022
36138
  children,
39023
36139
  themes,