@almadar/ui 4.25.0 → 4.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/avl/index.cjs +1482 -4340
- package/dist/avl/index.css +1 -1
- package/dist/avl/index.js +579 -3437
- package/dist/components/index.cjs +1089 -1133
- package/dist/components/index.css +1 -1
- package/dist/components/index.js +191 -235
- package/dist/components/templates/DashboardLayout.d.ts +26 -1
- package/dist/docs/index.cjs +2 -2
- package/dist/docs/index.js +2 -2
- package/dist/marketing/index.cjs +2 -2
- package/dist/marketing/index.js +2 -2
- package/dist/providers/index.cjs +1020 -3876
- package/dist/providers/index.css +1 -1
- package/dist/providers/index.js +288 -3144
- package/dist/runtime/index.cjs +1066 -3980
- package/dist/runtime/index.css +1 -1
- package/dist/runtime/index.js +302 -3216
- package/package.json +18 -8
package/dist/providers/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import
|
|
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 =
|
|
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 (
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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 =
|
|
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] =
|
|
2713
|
+
const [isChecked, setIsChecked] = React105.useState(
|
|
2714
2714
|
checked !== void 0 ? checked : defaultChecked
|
|
2715
2715
|
);
|
|
2716
|
-
|
|
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] =
|
|
3143
|
-
const timeoutRef =
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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] =
|
|
5021
|
-
const [isAnimating, setIsAnimating] =
|
|
5022
|
-
|
|
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] =
|
|
4193
|
+
const [isPressed, setIsPressed] = React105.useState(false);
|
|
5093
4194
|
const actualPressed = pressed ?? isPressed;
|
|
5094
|
-
const handlePointerDown =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
6013
|
-
const frameRef =
|
|
6014
|
-
|
|
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
|
|
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 =
|
|
7197
|
-
const trigger =
|
|
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 =
|
|
7319
|
-
const triggerElement =
|
|
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 =
|
|
7437
|
-
const triggerElement =
|
|
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:
|
|
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 =
|
|
7962
|
-
|
|
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
|
-
|
|
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] =
|
|
8001
|
-
const handleMapClick =
|
|
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 =
|
|
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] =
|
|
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] =
|
|
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] =
|
|
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] =
|
|
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] =
|
|
8518
|
-
const handlePress =
|
|
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 =
|
|
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((
|
|
9369
|
-
if (
|
|
9370
|
-
const raw =
|
|
9371
|
-
return raw.featureType ? { ...
|
|
8384
|
+
() => featuresProp.map((f) => {
|
|
8385
|
+
if (f.type) return f;
|
|
8386
|
+
const raw = f;
|
|
8387
|
+
return raw.featureType ? { ...f, type: raw.featureType } : f;
|
|
9372
8388
|
}),
|
|
9373
8389
|
[featuresProp]
|
|
9374
8390
|
);
|
|
@@ -10051,7 +9067,6 @@ var init_IsometricCanvas = __esm({
|
|
|
10051
9067
|
var init_IsometricCanvas2 = __esm({
|
|
10052
9068
|
"components/organisms/game/IsometricCanvas.tsx"() {
|
|
10053
9069
|
init_IsometricCanvas();
|
|
10054
|
-
init_IsometricCanvas();
|
|
10055
9070
|
}
|
|
10056
9071
|
});
|
|
10057
9072
|
function BattleBoard({
|
|
@@ -10535,9 +9550,9 @@ var init_ScaledDiagram = __esm({
|
|
|
10535
9550
|
}
|
|
10536
9551
|
});
|
|
10537
9552
|
|
|
10538
|
-
// node_modules
|
|
9553
|
+
// node_modules/katex/dist/katex.min.css
|
|
10539
9554
|
var init_katex_min = __esm({
|
|
10540
|
-
"node_modules
|
|
9555
|
+
"node_modules/katex/dist/katex.min.css"() {
|
|
10541
9556
|
}
|
|
10542
9557
|
});
|
|
10543
9558
|
var MarkdownContent;
|
|
@@ -10547,7 +9562,7 @@ var init_MarkdownContent = __esm({
|
|
|
10547
9562
|
init_Box();
|
|
10548
9563
|
init_useTranslate();
|
|
10549
9564
|
init_cn();
|
|
10550
|
-
MarkdownContent =
|
|
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 =
|
|
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(
|
|
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((
|
|
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((
|
|
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((
|
|
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: -
|
|
14688
|
-
angleMax: -
|
|
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: -
|
|
14706
|
-
angleMax: -
|
|
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: -
|
|
14724
|
-
angleMax: -
|
|
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: -
|
|
14767
|
-
angleMax: -
|
|
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: -
|
|
14785
|
-
angleMax: -
|
|
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: -
|
|
14803
|
-
angleMax: -
|
|
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:
|
|
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:
|
|
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: -
|
|
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: -
|
|
14935
|
-
angleMax: -
|
|
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: -
|
|
14954
|
-
angleMax: -
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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: -
|
|
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: -
|
|
15291
|
-
angleMax: -
|
|
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: -
|
|
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: -
|
|
15358
|
-
angleMax: -
|
|
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:
|
|
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:
|
|
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
|
|
14469
|
+
var PI;
|
|
15455
14470
|
var init_combatPresets = __esm({
|
|
15456
14471
|
"components/organisms/game/utils/combatPresets.ts"() {
|
|
15457
|
-
|
|
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((
|
|
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((
|
|
16004
|
-
const bodyFields = effectiveFieldNames?.filter((
|
|
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((
|
|
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((
|
|
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 =
|
|
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(
|
|
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] =
|
|
18175
|
-
const handlePress =
|
|
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 =
|
|
17198
|
+
const handleRelease = React105.useCallback(
|
|
18184
17199
|
(direction) => {
|
|
18185
17200
|
setActiveDirections((prev) => {
|
|
18186
17201
|
const next = new Set(prev);
|
|
@@ -18334,6 +17349,7 @@ var init_DashboardLayout = __esm({
|
|
|
18334
17349
|
showSearch = false,
|
|
18335
17350
|
searchEvent,
|
|
18336
17351
|
onSearchSubmit,
|
|
17352
|
+
topBarActions = [],
|
|
18337
17353
|
notifications,
|
|
18338
17354
|
notificationClickEvent,
|
|
18339
17355
|
onNotificationClick,
|
|
@@ -18354,6 +17370,9 @@ var init_DashboardLayout = __esm({
|
|
|
18354
17370
|
if (notificationClickEvent) eventBus.emit(`UI:${notificationClickEvent}`, {});
|
|
18355
17371
|
if (onNotificationClick) onNotificationClick();
|
|
18356
17372
|
};
|
|
17373
|
+
const handleTopBarActionClick = (event) => {
|
|
17374
|
+
eventBus.emit(`UI:${event}`, {});
|
|
17375
|
+
};
|
|
18357
17376
|
const [sidebarOpen, setSidebarOpen] = useState(false);
|
|
18358
17377
|
const [userMenuOpen, setUserMenuOpen] = useState(false);
|
|
18359
17378
|
const location = useLocation();
|
|
@@ -18480,6 +17499,30 @@ var init_DashboardLayout = __esm({
|
|
|
18480
17499
|
/* @__PURE__ */ jsxs(HStack, { align: "center", gap: "xs", children: [
|
|
18481
17500
|
headerActions,
|
|
18482
17501
|
showThemeToggle && /* @__PURE__ */ jsx(ThemeToggle, {}),
|
|
17502
|
+
topBarActions.map((action, idx) => /* @__PURE__ */ jsxs(
|
|
17503
|
+
Button,
|
|
17504
|
+
{
|
|
17505
|
+
variant: "ghost",
|
|
17506
|
+
className: "relative p-2 rounded-full hover:bg-muted dark:hover:bg-muted",
|
|
17507
|
+
onClick: () => handleTopBarActionClick(action.event),
|
|
17508
|
+
"aria-label": action.label ?? action.icon,
|
|
17509
|
+
children: [
|
|
17510
|
+
/* @__PURE__ */ jsx(Icon, { name: action.icon, className: "h-5 w-5 text-muted-foreground dark:text-muted-foreground" }),
|
|
17511
|
+
action.badge !== void 0 && action.badge !== null && action.badge !== 0 && action.badge !== "" && /* @__PURE__ */ jsx(
|
|
17512
|
+
Box,
|
|
17513
|
+
{
|
|
17514
|
+
as: "span",
|
|
17515
|
+
className: cn(
|
|
17516
|
+
"absolute -top-0.5 -right-0.5 min-w-[18px] h-[18px] px-1 rounded-full text-[10px] font-semibold text-white flex items-center justify-center",
|
|
17517
|
+
action.variant === "danger" ? "bg-error" : action.variant === "primary" ? "bg-primary" : "bg-foreground"
|
|
17518
|
+
),
|
|
17519
|
+
children: action.badge
|
|
17520
|
+
}
|
|
17521
|
+
)
|
|
17522
|
+
]
|
|
17523
|
+
},
|
|
17524
|
+
`${action.event}-${idx}`
|
|
17525
|
+
)),
|
|
18483
17526
|
notificationsEnabled && /* @__PURE__ */ jsxs(
|
|
18484
17527
|
Button,
|
|
18485
17528
|
{
|
|
@@ -18722,9 +17765,9 @@ function DataGrid({
|
|
|
18722
17765
|
return next;
|
|
18723
17766
|
});
|
|
18724
17767
|
}, [data, selectionEvent, eventBus]);
|
|
18725
|
-
const titleField = fieldDefs.find((
|
|
18726
|
-
const badgeFields = fieldDefs.filter((
|
|
18727
|
-
const bodyFields = fieldDefs.filter((
|
|
17768
|
+
const titleField = fieldDefs.find((f) => f.variant === "h3" || f.variant === "h4") ?? fieldDefs[0];
|
|
17769
|
+
const badgeFields = fieldDefs.filter((f) => f.variant === "badge" && f !== titleField);
|
|
17770
|
+
const bodyFields = fieldDefs.filter((f) => f !== titleField && !badgeFields.includes(f));
|
|
18728
17771
|
const primaryActions = itemActions?.filter((a) => a.variant !== "danger") ?? [];
|
|
18729
17772
|
const dangerActions = itemActions?.filter((a) => a.variant === "danger") ?? [];
|
|
18730
17773
|
const handleActionClick = (action, itemData) => (e) => {
|
|
@@ -19079,13 +18122,13 @@ function DataList({
|
|
|
19079
18122
|
}) {
|
|
19080
18123
|
const eventBus = useEventBus();
|
|
19081
18124
|
const { t } = useTranslate();
|
|
19082
|
-
const [visibleCount, setVisibleCount] =
|
|
18125
|
+
const [visibleCount, setVisibleCount] = React105__default.useState(pageSize || Infinity);
|
|
19083
18126
|
const fieldDefs = fields ?? columns ?? [];
|
|
19084
18127
|
const allData = Array.isArray(entity) ? entity : entity ? [entity] : [];
|
|
19085
18128
|
const data = pageSize > 0 ? allData.slice(0, visibleCount) : allData;
|
|
19086
18129
|
const hasMoreLocal = pageSize > 0 && visibleCount < allData.length;
|
|
19087
18130
|
const hasRenderProp = typeof children === "function";
|
|
19088
|
-
|
|
18131
|
+
React105__default.useEffect(() => {
|
|
19089
18132
|
const renderItemTypeOf = typeof schemaRenderItem;
|
|
19090
18133
|
const childrenTypeOf = typeof children;
|
|
19091
18134
|
if (data.length > 0 && !hasRenderProp) {
|
|
@@ -19105,11 +18148,11 @@ function DataList({
|
|
|
19105
18148
|
});
|
|
19106
18149
|
}
|
|
19107
18150
|
}, [data, hasRenderProp, schemaRenderItem, children, fieldDefs]);
|
|
19108
|
-
const titleField = fieldDefs.find((
|
|
19109
|
-
const badgeFields = fieldDefs.filter((
|
|
19110
|
-
const progressFields = fieldDefs.filter((
|
|
18151
|
+
const titleField = fieldDefs.find((f) => f.variant === "h3" || f.variant === "h4") ?? fieldDefs[0];
|
|
18152
|
+
const badgeFields = fieldDefs.filter((f) => f.variant === "badge" && f !== titleField);
|
|
18153
|
+
const progressFields = fieldDefs.filter((f) => f.variant === "progress");
|
|
19111
18154
|
const bodyFields = fieldDefs.filter(
|
|
19112
|
-
(
|
|
18155
|
+
(f) => f !== titleField && !badgeFields.includes(f) && !progressFields.includes(f)
|
|
19113
18156
|
);
|
|
19114
18157
|
const handleActionClick = (action, itemData) => (e) => {
|
|
19115
18158
|
e.stopPropagation();
|
|
@@ -19141,14 +18184,14 @@ function DataList({
|
|
|
19141
18184
|
const items2 = data.map((item) => item);
|
|
19142
18185
|
const groups2 = groupBy ? groupData(items2, groupBy) : [{ label: "", items: items2 }];
|
|
19143
18186
|
const contentField = titleField?.name ?? fieldDefs[0]?.name ?? "";
|
|
19144
|
-
return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(
|
|
18187
|
+
return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
|
|
19145
18188
|
group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: "my-2" }),
|
|
19146
18189
|
group.items.map((itemData, index) => {
|
|
19147
18190
|
const id = itemData.id || `${gi}-${index}`;
|
|
19148
18191
|
const sender = senderField ? String(getNestedValue(itemData, senderField) ?? "") : "";
|
|
19149
18192
|
const isSent = Boolean(currentUser && sender === currentUser);
|
|
19150
18193
|
const content = getNestedValue(itemData, contentField);
|
|
19151
|
-
const timestampField = fieldDefs.find((
|
|
18194
|
+
const timestampField = fieldDefs.find((f) => f.format === "date");
|
|
19152
18195
|
const timestamp = timestampField ? getNestedValue(itemData, timestampField.name) : null;
|
|
19153
18196
|
return /* @__PURE__ */ jsx(
|
|
19154
18197
|
Box,
|
|
@@ -19332,7 +18375,7 @@ function DataList({
|
|
|
19332
18375
|
className
|
|
19333
18376
|
),
|
|
19334
18377
|
children: [
|
|
19335
|
-
groups.map((group, gi) => /* @__PURE__ */ jsxs(
|
|
18378
|
+
groups.map((group, gi) => /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
|
|
19336
18379
|
group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: gi > 0 ? "mt-4" : "mt-0" }),
|
|
19337
18380
|
group.items.map(
|
|
19338
18381
|
(itemData, index) => renderItem(itemData, index, gi === groups.length - 1 && index === group.items.length - 1)
|
|
@@ -19387,135 +18430,6 @@ var init_DataList = __esm({
|
|
|
19387
18430
|
DataList.displayName = "DataList";
|
|
19388
18431
|
}
|
|
19389
18432
|
});
|
|
19390
|
-
function fileIcon(name) {
|
|
19391
|
-
const ext = name.split(".").pop()?.toLowerCase() ?? "";
|
|
19392
|
-
switch (ext) {
|
|
19393
|
-
case "ts":
|
|
19394
|
-
case "tsx":
|
|
19395
|
-
return "file-code";
|
|
19396
|
-
case "js":
|
|
19397
|
-
case "jsx":
|
|
19398
|
-
return "file-code";
|
|
19399
|
-
case "json":
|
|
19400
|
-
case "orb":
|
|
19401
|
-
return "file-json";
|
|
19402
|
-
case "css":
|
|
19403
|
-
case "scss":
|
|
19404
|
-
return "file-text";
|
|
19405
|
-
case "md":
|
|
19406
|
-
return "file-text";
|
|
19407
|
-
case "py":
|
|
19408
|
-
return "file-code";
|
|
19409
|
-
case "html":
|
|
19410
|
-
return "file-code";
|
|
19411
|
-
default:
|
|
19412
|
-
return "file";
|
|
19413
|
-
}
|
|
19414
|
-
}
|
|
19415
|
-
var TreeNodeItem, FileTree;
|
|
19416
|
-
var init_FileTree = __esm({
|
|
19417
|
-
"components/molecules/FileTree.tsx"() {
|
|
19418
|
-
"use client";
|
|
19419
|
-
init_Box();
|
|
19420
|
-
init_Typography();
|
|
19421
|
-
init_Icon();
|
|
19422
|
-
TreeNodeItem = ({
|
|
19423
|
-
node,
|
|
19424
|
-
depth,
|
|
19425
|
-
indent,
|
|
19426
|
-
selectedPath,
|
|
19427
|
-
onFileSelect,
|
|
19428
|
-
defaultExpanded = false
|
|
19429
|
-
}) => {
|
|
19430
|
-
const [expanded, setExpanded] = useState(defaultExpanded || depth < 1);
|
|
19431
|
-
const isDir = node.type === "dir";
|
|
19432
|
-
const isSelected = node.path === selectedPath;
|
|
19433
|
-
const handleClick = useCallback(() => {
|
|
19434
|
-
if (isDir) {
|
|
19435
|
-
setExpanded((prev) => !prev);
|
|
19436
|
-
} else {
|
|
19437
|
-
onFileSelect?.(node.path);
|
|
19438
|
-
}
|
|
19439
|
-
}, [isDir, node.path, onFileSelect]);
|
|
19440
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
19441
|
-
/* @__PURE__ */ jsxs(
|
|
19442
|
-
Box,
|
|
19443
|
-
{
|
|
19444
|
-
className: `flex items-center gap-1.5 py-0.5 px-2 cursor-pointer rounded-sm transition-colors ${isSelected ? "bg-[var(--color-primary)] bg-opacity-15 text-[var(--color-primary)]" : "hover:bg-[var(--color-muted)] hover:bg-opacity-30"}`,
|
|
19445
|
-
style: { paddingLeft: depth * indent + 8 },
|
|
19446
|
-
onClick: handleClick,
|
|
19447
|
-
role: "treeitem",
|
|
19448
|
-
"aria-selected": isSelected,
|
|
19449
|
-
"aria-expanded": isDir ? expanded : void 0,
|
|
19450
|
-
children: [
|
|
19451
|
-
isDir ? /* @__PURE__ */ jsx(
|
|
19452
|
-
Icon,
|
|
19453
|
-
{
|
|
19454
|
-
name: expanded ? "chevron-down" : "chevron-right",
|
|
19455
|
-
size: "xs",
|
|
19456
|
-
className: "text-[var(--color-muted-foreground)] flex-shrink-0"
|
|
19457
|
-
}
|
|
19458
|
-
) : /* @__PURE__ */ jsx(Box, { style: { width: 12, flexShrink: 0 } }),
|
|
19459
|
-
/* @__PURE__ */ jsx(
|
|
19460
|
-
Icon,
|
|
19461
|
-
{
|
|
19462
|
-
name: isDir ? expanded ? "folder-open" : "folder" : fileIcon(node.name),
|
|
19463
|
-
size: "xs",
|
|
19464
|
-
className: isDir ? "text-[var(--color-warning)]" : "text-[var(--color-muted-foreground)]"
|
|
19465
|
-
}
|
|
19466
|
-
),
|
|
19467
|
-
/* @__PURE__ */ jsx(
|
|
19468
|
-
Typography,
|
|
19469
|
-
{
|
|
19470
|
-
variant: "caption",
|
|
19471
|
-
className: `truncate font-mono text-[11px] ${isSelected ? "font-semibold" : ""}`,
|
|
19472
|
-
children: node.name
|
|
19473
|
-
}
|
|
19474
|
-
),
|
|
19475
|
-
!isDir && node.size !== void 0 && /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-[var(--color-muted-foreground)] text-[9px] ml-auto flex-shrink-0", children: node.size < 1024 ? `${node.size}B` : `${Math.round(node.size / 1024)}KB` })
|
|
19476
|
-
]
|
|
19477
|
-
}
|
|
19478
|
-
),
|
|
19479
|
-
isDir && expanded && node.children && /* @__PURE__ */ jsx(Box, { role: "group", children: node.children.map((child) => /* @__PURE__ */ jsx(
|
|
19480
|
-
TreeNodeItem,
|
|
19481
|
-
{
|
|
19482
|
-
node: child,
|
|
19483
|
-
depth: depth + 1,
|
|
19484
|
-
indent,
|
|
19485
|
-
selectedPath,
|
|
19486
|
-
onFileSelect,
|
|
19487
|
-
defaultExpanded: depth < 0
|
|
19488
|
-
},
|
|
19489
|
-
child.path
|
|
19490
|
-
)) })
|
|
19491
|
-
] });
|
|
19492
|
-
};
|
|
19493
|
-
FileTree = ({
|
|
19494
|
-
tree,
|
|
19495
|
-
selectedPath,
|
|
19496
|
-
onFileSelect,
|
|
19497
|
-
className,
|
|
19498
|
-
indent = 16
|
|
19499
|
-
}) => {
|
|
19500
|
-
if (tree.length === 0) {
|
|
19501
|
-
return /* @__PURE__ */ jsx(Box, { className: `p-4 ${className ?? ""}`, children: /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: "No files" }) });
|
|
19502
|
-
}
|
|
19503
|
-
return /* @__PURE__ */ jsx(Box, { className: `py-1 overflow-y-auto ${className ?? ""}`, role: "tree", children: tree.map((node) => /* @__PURE__ */ jsx(
|
|
19504
|
-
TreeNodeItem,
|
|
19505
|
-
{
|
|
19506
|
-
node,
|
|
19507
|
-
depth: 0,
|
|
19508
|
-
indent,
|
|
19509
|
-
selectedPath,
|
|
19510
|
-
onFileSelect,
|
|
19511
|
-
defaultExpanded: true
|
|
19512
|
-
},
|
|
19513
|
-
node.path
|
|
19514
|
-
)) });
|
|
19515
|
-
};
|
|
19516
|
-
FileTree.displayName = "FileTree";
|
|
19517
|
-
}
|
|
19518
|
-
});
|
|
19519
18433
|
var FormField;
|
|
19520
18434
|
var init_FormField = __esm({
|
|
19521
18435
|
"components/molecules/FormField.tsx"() {
|
|
@@ -19866,7 +18780,7 @@ var init_FilterGroup = __esm({
|
|
|
19866
18780
|
) }, filter.field)),
|
|
19867
18781
|
activeFilterCount > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
19868
18782
|
Object.entries(selectedValues).map(([field, value]) => {
|
|
19869
|
-
const filterDef = filters.find((
|
|
18783
|
+
const filterDef = filters.find((f) => f.field === field);
|
|
19870
18784
|
return /* @__PURE__ */ jsxs(
|
|
19871
18785
|
Badge,
|
|
19872
18786
|
{
|
|
@@ -20608,7 +19522,7 @@ var init_WizardProgress = __esm({
|
|
|
20608
19522
|
children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: normalizedSteps.map((step, index) => {
|
|
20609
19523
|
const isActive = index === currentStep;
|
|
20610
19524
|
const isCompleted = index < currentStep;
|
|
20611
|
-
return /* @__PURE__ */ jsxs(
|
|
19525
|
+
return /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
|
|
20612
19526
|
/* @__PURE__ */ jsx(
|
|
20613
19527
|
"button",
|
|
20614
19528
|
{
|
|
@@ -21519,7 +20433,7 @@ function InventoryGrid({
|
|
|
21519
20433
|
const eventBus = useEventBus();
|
|
21520
20434
|
const slotCount = totalSlots ?? items.length;
|
|
21521
20435
|
const emptySlotCount = Math.max(0, slotCount - items.length);
|
|
21522
|
-
const handleSelect =
|
|
20436
|
+
const handleSelect = React105.useCallback(
|
|
21523
20437
|
(id) => {
|
|
21524
20438
|
onSelect?.(id);
|
|
21525
20439
|
if (selectEvent) {
|
|
@@ -21732,15 +20646,15 @@ function GameCanvas2D({
|
|
|
21732
20646
|
fps = 60,
|
|
21733
20647
|
className
|
|
21734
20648
|
}) {
|
|
21735
|
-
const canvasRef =
|
|
21736
|
-
const rafRef =
|
|
21737
|
-
const frameRef =
|
|
21738
|
-
const lastTimeRef =
|
|
21739
|
-
const onDrawRef =
|
|
20649
|
+
const canvasRef = React105.useRef(null);
|
|
20650
|
+
const rafRef = React105.useRef(0);
|
|
20651
|
+
const frameRef = React105.useRef(0);
|
|
20652
|
+
const lastTimeRef = React105.useRef(0);
|
|
20653
|
+
const onDrawRef = React105.useRef(onDraw);
|
|
21740
20654
|
onDrawRef.current = onDraw;
|
|
21741
|
-
const onTickRef =
|
|
20655
|
+
const onTickRef = React105.useRef(onTick);
|
|
21742
20656
|
onTickRef.current = onTick;
|
|
21743
|
-
|
|
20657
|
+
React105.useEffect(() => {
|
|
21744
20658
|
const canvas = canvasRef.current;
|
|
21745
20659
|
if (!canvas) return;
|
|
21746
20660
|
const ctx = canvas.getContext("2d");
|
|
@@ -22029,7 +20943,7 @@ function TurnPanel({
|
|
|
22029
20943
|
className
|
|
22030
20944
|
}) {
|
|
22031
20945
|
const eventBus = useEventBus();
|
|
22032
|
-
const handleAction =
|
|
20946
|
+
const handleAction = React105.useCallback(
|
|
22033
20947
|
(event) => {
|
|
22034
20948
|
if (event) {
|
|
22035
20949
|
eventBus.emit(event, { turn: currentTurn, phase, activeTeam });
|
|
@@ -22175,7 +21089,7 @@ function UnitCommandBar({
|
|
|
22175
21089
|
className
|
|
22176
21090
|
}) {
|
|
22177
21091
|
const eventBus = useEventBus();
|
|
22178
|
-
const handleCommand =
|
|
21092
|
+
const handleCommand = React105.useCallback(
|
|
22179
21093
|
(event) => {
|
|
22180
21094
|
if (event) {
|
|
22181
21095
|
eventBus.emit(event, { unitId: selectedUnitId });
|
|
@@ -22660,7 +21574,7 @@ function GameMenu({
|
|
|
22660
21574
|
} catch {
|
|
22661
21575
|
}
|
|
22662
21576
|
const eventBus = eventBusProp || eventBusFromHook;
|
|
22663
|
-
const handleOptionClick =
|
|
21577
|
+
const handleOptionClick = React105.useCallback(
|
|
22664
21578
|
(option) => {
|
|
22665
21579
|
if (option.event && eventBus) {
|
|
22666
21580
|
eventBus.emit(`UI:${option.event}`, { option });
|
|
@@ -22774,7 +21688,7 @@ function GameOverScreen({
|
|
|
22774
21688
|
} catch {
|
|
22775
21689
|
}
|
|
22776
21690
|
const eventBus = eventBusProp || eventBusFromHook;
|
|
22777
|
-
const handleActionClick =
|
|
21691
|
+
const handleActionClick = React105.useCallback(
|
|
22778
21692
|
(action) => {
|
|
22779
21693
|
if (action.event && eventBus) {
|
|
22780
21694
|
eventBus.emit(`UI:${action.event}`, { action });
|
|
@@ -23144,28 +22058,6 @@ var init_PlatformerCanvas = __esm({
|
|
|
23144
22058
|
// components/molecules/game/index.ts
|
|
23145
22059
|
var init_game2 = __esm({
|
|
23146
22060
|
"components/molecules/game/index.ts"() {
|
|
23147
|
-
init_DPad();
|
|
23148
|
-
init_ActionButtons();
|
|
23149
|
-
init_StatBadge();
|
|
23150
|
-
init_InventoryGrid();
|
|
23151
|
-
init_QuestTracker();
|
|
23152
|
-
init_CraftingRecipe();
|
|
23153
|
-
init_PowerupSlots();
|
|
23154
|
-
init_GameCanvas2D();
|
|
23155
|
-
init_HealthPanel();
|
|
23156
|
-
init_ScoreBoard();
|
|
23157
|
-
init_ResourceBar();
|
|
23158
|
-
init_TurnPanel();
|
|
23159
|
-
init_EnemyPlate();
|
|
23160
|
-
init_UnitCommandBar();
|
|
23161
|
-
init_GameHud();
|
|
23162
|
-
init_DialogueBox();
|
|
23163
|
-
init_CombatLog();
|
|
23164
|
-
init_InventoryPanel();
|
|
23165
|
-
init_GameMenu();
|
|
23166
|
-
init_GameOverScreen();
|
|
23167
|
-
init_PlatformerCanvas();
|
|
23168
|
-
init_IsometricCanvas();
|
|
23169
22061
|
}
|
|
23170
22062
|
});
|
|
23171
22063
|
function resolveNodeColor(node, groups) {
|
|
@@ -23903,7 +22795,7 @@ var init_UploadDropZone = __esm({
|
|
|
23903
22795
|
if (action) {
|
|
23904
22796
|
eventBus.emit(`UI:${action}`, {
|
|
23905
22797
|
...actionPayload,
|
|
23906
|
-
files: valid.map((
|
|
22798
|
+
files: valid.map((f) => ({ name: f.name, size: f.size, type: f.type }))
|
|
23907
22799
|
});
|
|
23908
22800
|
}
|
|
23909
22801
|
}
|
|
@@ -25052,1758 +23944,13 @@ var init_PullToRefresh = __esm({
|
|
|
25052
23944
|
PullToRefresh.displayName = "PullToRefresh";
|
|
25053
23945
|
}
|
|
25054
23946
|
});
|
|
25055
|
-
var InstallBox;
|
|
25056
|
-
var init_InstallBox = __esm({
|
|
25057
|
-
"components/molecules/InstallBox.tsx"() {
|
|
25058
|
-
"use client";
|
|
25059
|
-
init_cn();
|
|
25060
|
-
init_Box();
|
|
25061
|
-
init_Typography();
|
|
25062
|
-
init_Button();
|
|
25063
|
-
InstallBox = ({
|
|
25064
|
-
command,
|
|
25065
|
-
label,
|
|
25066
|
-
className
|
|
25067
|
-
}) => {
|
|
25068
|
-
const [copied, setCopied] = useState(false);
|
|
25069
|
-
const handleCopy = useCallback(() => {
|
|
25070
|
-
void navigator.clipboard.writeText(command);
|
|
25071
|
-
setCopied(true);
|
|
25072
|
-
const timer = setTimeout(() => setCopied(false), 2e3);
|
|
25073
|
-
return () => clearTimeout(timer);
|
|
25074
|
-
}, [command]);
|
|
25075
|
-
return /* @__PURE__ */ jsxs(Box, { className: cn("inline-block", className), children: [
|
|
25076
|
-
label && /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "mb-1", children: label }),
|
|
25077
|
-
/* @__PURE__ */ jsx(
|
|
25078
|
-
Box,
|
|
25079
|
-
{
|
|
25080
|
-
className: "bg-surface rounded-md border-[length:var(--border-width)] border-border",
|
|
25081
|
-
padding: "md",
|
|
25082
|
-
children: /* @__PURE__ */ jsxs(Box, { className: "flex items-center gap-3", children: [
|
|
25083
|
-
/* @__PURE__ */ jsx(
|
|
25084
|
-
Typography,
|
|
25085
|
-
{
|
|
25086
|
-
variant: "body2",
|
|
25087
|
-
className: "font-mono flex-1 min-w-0 select-all",
|
|
25088
|
-
truncate: true,
|
|
25089
|
-
children: command
|
|
25090
|
-
}
|
|
25091
|
-
),
|
|
25092
|
-
/* @__PURE__ */ jsx(
|
|
25093
|
-
Button,
|
|
25094
|
-
{
|
|
25095
|
-
variant: "ghost",
|
|
25096
|
-
size: "sm",
|
|
25097
|
-
leftIcon: copied ? "check" : "copy",
|
|
25098
|
-
onClick: handleCopy,
|
|
25099
|
-
className: "flex-shrink-0",
|
|
25100
|
-
"aria-label": copied ? "Copied" : "Copy to clipboard",
|
|
25101
|
-
children: copied ? "Copied" : "Copy"
|
|
25102
|
-
}
|
|
25103
|
-
)
|
|
25104
|
-
] })
|
|
25105
|
-
}
|
|
25106
|
-
)
|
|
25107
|
-
] });
|
|
25108
|
-
};
|
|
25109
|
-
InstallBox.displayName = "InstallBox";
|
|
25110
|
-
}
|
|
25111
|
-
});
|
|
25112
|
-
var iconSizeMap, gapMap, FeatureCard;
|
|
25113
|
-
var init_FeatureCard = __esm({
|
|
25114
|
-
"components/molecules/FeatureCard.tsx"() {
|
|
25115
|
-
"use client";
|
|
25116
|
-
init_cn();
|
|
25117
|
-
init_Card();
|
|
25118
|
-
init_Stack();
|
|
25119
|
-
init_Icon();
|
|
25120
|
-
init_Typography();
|
|
25121
|
-
init_Button();
|
|
25122
|
-
iconSizeMap = {
|
|
25123
|
-
sm: "lg",
|
|
25124
|
-
md: "xl",
|
|
25125
|
-
lg: "xl"
|
|
25126
|
-
};
|
|
25127
|
-
gapMap = {
|
|
25128
|
-
sm: "sm",
|
|
25129
|
-
md: "md",
|
|
25130
|
-
lg: "lg"
|
|
25131
|
-
};
|
|
25132
|
-
FeatureCard = ({
|
|
25133
|
-
icon,
|
|
25134
|
-
title,
|
|
25135
|
-
description,
|
|
25136
|
-
href,
|
|
25137
|
-
linkLabel = "Learn more",
|
|
25138
|
-
variant = "bordered",
|
|
25139
|
-
size = "md",
|
|
25140
|
-
className
|
|
25141
|
-
}) => {
|
|
25142
|
-
const renderIcon = () => {
|
|
25143
|
-
if (!icon) return null;
|
|
25144
|
-
if (typeof icon === "string") {
|
|
25145
|
-
return /* @__PURE__ */ jsx(
|
|
25146
|
-
Icon,
|
|
25147
|
-
{
|
|
25148
|
-
name: icon,
|
|
25149
|
-
size: iconSizeMap[size],
|
|
25150
|
-
className: "text-accent"
|
|
25151
|
-
}
|
|
25152
|
-
);
|
|
25153
|
-
}
|
|
25154
|
-
return icon;
|
|
25155
|
-
};
|
|
25156
|
-
const handleLinkClick = () => {
|
|
25157
|
-
if (href) {
|
|
25158
|
-
window.open(href, "_blank", "noopener,noreferrer");
|
|
25159
|
-
}
|
|
25160
|
-
};
|
|
25161
|
-
return /* @__PURE__ */ jsx(
|
|
25162
|
-
Card,
|
|
25163
|
-
{
|
|
25164
|
-
variant,
|
|
25165
|
-
padding: size,
|
|
25166
|
-
className: cn(
|
|
25167
|
-
variant === "interactive" && "hover:border-primary",
|
|
25168
|
-
className
|
|
25169
|
-
),
|
|
25170
|
-
onClick: variant === "interactive" && href ? handleLinkClick : void 0,
|
|
25171
|
-
children: /* @__PURE__ */ jsxs(VStack, { gap: gapMap[size], align: "start", children: [
|
|
25172
|
-
renderIcon(),
|
|
25173
|
-
/* @__PURE__ */ jsx(Typography, { variant: "h4", className: size === "sm" ? "text-base" : void 0, children: title }),
|
|
25174
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body2", color: "muted", children: description }),
|
|
25175
|
-
href && variant !== "interactive" && /* @__PURE__ */ jsx(
|
|
25176
|
-
Button,
|
|
25177
|
-
{
|
|
25178
|
-
variant: "ghost",
|
|
25179
|
-
size: "sm",
|
|
25180
|
-
onClick: handleLinkClick,
|
|
25181
|
-
className: "text-primary -ml-2",
|
|
25182
|
-
children: linkLabel
|
|
25183
|
-
}
|
|
25184
|
-
)
|
|
25185
|
-
] })
|
|
25186
|
-
}
|
|
25187
|
-
);
|
|
25188
|
-
};
|
|
25189
|
-
FeatureCard.displayName = "FeatureCard";
|
|
25190
|
-
}
|
|
25191
|
-
});
|
|
25192
|
-
var FeatureGrid;
|
|
25193
|
-
var init_FeatureGrid = __esm({
|
|
25194
|
-
"components/molecules/FeatureGrid.tsx"() {
|
|
25195
|
-
"use client";
|
|
25196
|
-
init_cn();
|
|
25197
|
-
init_SimpleGrid();
|
|
25198
|
-
init_FeatureCard();
|
|
25199
|
-
FeatureGrid = ({
|
|
25200
|
-
items,
|
|
25201
|
-
columns = 3,
|
|
25202
|
-
gap = "md",
|
|
25203
|
-
className
|
|
25204
|
-
}) => {
|
|
25205
|
-
return /* @__PURE__ */ jsx(
|
|
25206
|
-
SimpleGrid,
|
|
25207
|
-
{
|
|
25208
|
-
cols: columns,
|
|
25209
|
-
gap,
|
|
25210
|
-
className: cn(className),
|
|
25211
|
-
children: items.map((item, index) => /* @__PURE__ */ jsx(FeatureCard, { ...item }, `${item.title}-${index}`))
|
|
25212
|
-
}
|
|
25213
|
-
);
|
|
25214
|
-
};
|
|
25215
|
-
FeatureGrid.displayName = "FeatureGrid";
|
|
25216
|
-
}
|
|
25217
|
-
});
|
|
25218
|
-
var CTABanner;
|
|
25219
|
-
var init_CTABanner = __esm({
|
|
25220
|
-
"components/molecules/CTABanner.tsx"() {
|
|
25221
|
-
"use client";
|
|
25222
|
-
init_cn();
|
|
25223
|
-
init_Box();
|
|
25224
|
-
init_Stack();
|
|
25225
|
-
init_Typography();
|
|
25226
|
-
init_Button();
|
|
25227
|
-
CTABanner = ({
|
|
25228
|
-
title,
|
|
25229
|
-
subtitle,
|
|
25230
|
-
primaryAction,
|
|
25231
|
-
secondaryAction,
|
|
25232
|
-
background = "alt",
|
|
25233
|
-
align = "center",
|
|
25234
|
-
className
|
|
25235
|
-
}) => {
|
|
25236
|
-
const handleAction = (href) => {
|
|
25237
|
-
window.open(href, "_blank", "noopener,noreferrer");
|
|
25238
|
-
};
|
|
25239
|
-
return /* @__PURE__ */ jsx(
|
|
25240
|
-
Box,
|
|
25241
|
-
{
|
|
25242
|
-
className: cn(
|
|
25243
|
-
"py-16",
|
|
25244
|
-
background === "alt" && "bg-surface",
|
|
25245
|
-
background === "dark" && "bg-surface",
|
|
25246
|
-
background === "gradient" && "bg-surface",
|
|
25247
|
-
background === "primary" && "bg-surface",
|
|
25248
|
-
className
|
|
25249
|
-
),
|
|
25250
|
-
children: /* @__PURE__ */ jsxs(
|
|
25251
|
-
VStack,
|
|
25252
|
-
{
|
|
25253
|
-
gap: "lg",
|
|
25254
|
-
align: align === "center" ? "center" : "start",
|
|
25255
|
-
className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",
|
|
25256
|
-
children: [
|
|
25257
|
-
/* @__PURE__ */ jsx(Typography, { variant: "h2", align, children: title }),
|
|
25258
|
-
subtitle && /* @__PURE__ */ jsx(Typography, { variant: "body", color: "muted", align, children: subtitle }),
|
|
25259
|
-
(primaryAction || secondaryAction) && /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "center", children: [
|
|
25260
|
-
primaryAction && /* @__PURE__ */ jsx(
|
|
25261
|
-
Button,
|
|
25262
|
-
{
|
|
25263
|
-
variant: "primary",
|
|
25264
|
-
size: "lg",
|
|
25265
|
-
onClick: () => handleAction(primaryAction.href),
|
|
25266
|
-
children: primaryAction.label
|
|
25267
|
-
}
|
|
25268
|
-
),
|
|
25269
|
-
secondaryAction && /* @__PURE__ */ jsx(
|
|
25270
|
-
Button,
|
|
25271
|
-
{
|
|
25272
|
-
variant: "secondary",
|
|
25273
|
-
size: "lg",
|
|
25274
|
-
onClick: () => handleAction(secondaryAction.href),
|
|
25275
|
-
children: secondaryAction.label
|
|
25276
|
-
}
|
|
25277
|
-
)
|
|
25278
|
-
] })
|
|
25279
|
-
]
|
|
25280
|
-
}
|
|
25281
|
-
)
|
|
25282
|
-
}
|
|
25283
|
-
);
|
|
25284
|
-
};
|
|
25285
|
-
CTABanner.displayName = "CTABanner";
|
|
25286
|
-
}
|
|
25287
|
-
});
|
|
25288
|
-
var tagVariantMap, MarketingImage, HeroSection;
|
|
25289
|
-
var init_HeroSection = __esm({
|
|
25290
|
-
"components/molecules/HeroSection.tsx"() {
|
|
25291
|
-
"use client";
|
|
25292
|
-
init_cn();
|
|
25293
|
-
init_Box();
|
|
25294
|
-
init_Stack();
|
|
25295
|
-
init_Badge();
|
|
25296
|
-
init_Typography();
|
|
25297
|
-
init_Button();
|
|
25298
|
-
init_InstallBox();
|
|
25299
|
-
tagVariantMap = {
|
|
25300
|
-
primary: "primary",
|
|
25301
|
-
secondary: "secondary",
|
|
25302
|
-
accent: "info"
|
|
25303
|
-
};
|
|
25304
|
-
MarketingImage = ({ src, alt, className }) => /* @__PURE__ */ jsx(
|
|
25305
|
-
Box,
|
|
25306
|
-
{
|
|
25307
|
-
className: cn(
|
|
25308
|
-
"overflow-hidden rounded-lg bg-cover bg-center bg-no-repeat",
|
|
25309
|
-
className
|
|
25310
|
-
),
|
|
25311
|
-
style: { backgroundImage: `url(${src})` },
|
|
25312
|
-
role: "img",
|
|
25313
|
-
"aria-label": alt
|
|
25314
|
-
}
|
|
25315
|
-
);
|
|
25316
|
-
MarketingImage.displayName = "MarketingImage";
|
|
25317
|
-
HeroSection = ({
|
|
25318
|
-
tag,
|
|
25319
|
-
tagVariant = "primary",
|
|
25320
|
-
title,
|
|
25321
|
-
titleAccent,
|
|
25322
|
-
subtitle,
|
|
25323
|
-
primaryAction,
|
|
25324
|
-
secondaryAction,
|
|
25325
|
-
installCommand,
|
|
25326
|
-
image,
|
|
25327
|
-
imagePosition = "below",
|
|
25328
|
-
background = "subtle",
|
|
25329
|
-
align = "center",
|
|
25330
|
-
backgroundElement,
|
|
25331
|
-
children,
|
|
25332
|
-
className
|
|
25333
|
-
}) => {
|
|
25334
|
-
const isCenter = align === "center";
|
|
25335
|
-
const isDark = background === "dark";
|
|
25336
|
-
const titleNode = titleAccent ? /* @__PURE__ */ jsxs(
|
|
25337
|
-
Typography,
|
|
25338
|
-
{
|
|
25339
|
-
variant: "h1",
|
|
25340
|
-
align: isCenter ? "center" : "left",
|
|
25341
|
-
className: cn(
|
|
25342
|
-
"max-w-3xl leading-tight",
|
|
25343
|
-
isDark && "text-background"
|
|
25344
|
-
),
|
|
25345
|
-
children: [
|
|
25346
|
-
title,
|
|
25347
|
-
" ",
|
|
25348
|
-
/* @__PURE__ */ jsx(
|
|
25349
|
-
Typography,
|
|
25350
|
-
{
|
|
25351
|
-
as: "span",
|
|
25352
|
-
variant: "h1",
|
|
25353
|
-
className: "text-primary",
|
|
25354
|
-
children: titleAccent
|
|
25355
|
-
}
|
|
25356
|
-
)
|
|
25357
|
-
]
|
|
25358
|
-
}
|
|
25359
|
-
) : /* @__PURE__ */ jsx(
|
|
25360
|
-
Typography,
|
|
25361
|
-
{
|
|
25362
|
-
variant: "h1",
|
|
25363
|
-
align: isCenter ? "center" : "left",
|
|
25364
|
-
className: cn(
|
|
25365
|
-
"max-w-3xl leading-tight",
|
|
25366
|
-
isDark && "text-background"
|
|
25367
|
-
),
|
|
25368
|
-
children: title
|
|
25369
|
-
}
|
|
25370
|
-
);
|
|
25371
|
-
const textContent = /* @__PURE__ */ jsxs(
|
|
25372
|
-
VStack,
|
|
25373
|
-
{
|
|
25374
|
-
gap: "lg",
|
|
25375
|
-
align: isCenter ? "center" : "start",
|
|
25376
|
-
className: cn(
|
|
25377
|
-
isCenter && "items-center",
|
|
25378
|
-
imagePosition === "right" ? "flex-1" : "w-full"
|
|
25379
|
-
),
|
|
25380
|
-
children: [
|
|
25381
|
-
tag && /* @__PURE__ */ jsx(Badge, { variant: tagVariantMap[tagVariant] ?? "primary", size: "md", children: tag }),
|
|
25382
|
-
titleNode,
|
|
25383
|
-
/* @__PURE__ */ jsx(
|
|
25384
|
-
Typography,
|
|
25385
|
-
{
|
|
25386
|
-
variant: "body1",
|
|
25387
|
-
color: "muted",
|
|
25388
|
-
align: isCenter ? "center" : "left",
|
|
25389
|
-
className: "max-w-xl",
|
|
25390
|
-
children: subtitle
|
|
25391
|
-
}
|
|
25392
|
-
),
|
|
25393
|
-
installCommand && /* @__PURE__ */ jsx(InstallBox, { command: installCommand }),
|
|
25394
|
-
(primaryAction || secondaryAction) && /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "center", children: [
|
|
25395
|
-
primaryAction && /* @__PURE__ */ jsx(
|
|
25396
|
-
"a",
|
|
25397
|
-
{
|
|
25398
|
-
href: primaryAction.href,
|
|
25399
|
-
target: primaryAction.href.startsWith("http") ? "_blank" : void 0,
|
|
25400
|
-
rel: primaryAction.href.startsWith("http") ? "noopener noreferrer" : void 0,
|
|
25401
|
-
className: "no-underline",
|
|
25402
|
-
children: /* @__PURE__ */ jsx(Button, { variant: "primary", size: "lg", children: primaryAction.label })
|
|
25403
|
-
}
|
|
25404
|
-
),
|
|
25405
|
-
secondaryAction && /* @__PURE__ */ jsx(
|
|
25406
|
-
"a",
|
|
25407
|
-
{
|
|
25408
|
-
href: secondaryAction.href,
|
|
25409
|
-
target: secondaryAction.href.startsWith("http") ? "_blank" : void 0,
|
|
25410
|
-
rel: secondaryAction.href.startsWith("http") ? "noopener noreferrer" : void 0,
|
|
25411
|
-
className: "no-underline",
|
|
25412
|
-
children: /* @__PURE__ */ jsx(Button, { variant: "secondary", size: "lg", children: secondaryAction.label })
|
|
25413
|
-
}
|
|
25414
|
-
)
|
|
25415
|
-
] }),
|
|
25416
|
-
children
|
|
25417
|
-
]
|
|
25418
|
-
}
|
|
25419
|
-
);
|
|
25420
|
-
const imageNode = image && /* @__PURE__ */ jsx(
|
|
25421
|
-
MarketingImage,
|
|
25422
|
-
{
|
|
25423
|
-
src: image.src,
|
|
25424
|
-
alt: image.alt,
|
|
25425
|
-
className: cn(
|
|
25426
|
-
imagePosition === "right" ? "w-full max-w-[280px] max-h-[280px]" : "w-full min-h-[400px]"
|
|
25427
|
-
)
|
|
25428
|
-
}
|
|
25429
|
-
);
|
|
25430
|
-
const innerContent = image && imagePosition === "right" ? /* @__PURE__ */ jsxs(HStack, { gap: "xl", align: "center", className: "w-full max-w-7xl", responsive: true, children: [
|
|
25431
|
-
textContent,
|
|
25432
|
-
imageNode
|
|
25433
|
-
] }) : /* @__PURE__ */ jsxs(VStack, { gap: "xl", align: isCenter ? "center" : "start", className: "w-full max-w-7xl", children: [
|
|
25434
|
-
textContent,
|
|
25435
|
-
image && imagePosition === "below" && imageNode
|
|
25436
|
-
] });
|
|
25437
|
-
return /* @__PURE__ */ jsxs(
|
|
25438
|
-
Box,
|
|
25439
|
-
{
|
|
25440
|
-
as: "header",
|
|
25441
|
-
className: cn(
|
|
25442
|
-
"w-full min-h-[60vh] flex items-center justify-center",
|
|
25443
|
-
"py-20",
|
|
25444
|
-
"relative overflow-hidden",
|
|
25445
|
-
className
|
|
25446
|
-
),
|
|
25447
|
-
children: [
|
|
25448
|
-
backgroundElement,
|
|
25449
|
-
image && imagePosition === "background" && /* @__PURE__ */ jsx(
|
|
25450
|
-
MarketingImage,
|
|
25451
|
-
{
|
|
25452
|
-
src: image.src,
|
|
25453
|
-
alt: image.alt,
|
|
25454
|
-
className: "absolute inset-0 w-full h-full opacity-20"
|
|
25455
|
-
}
|
|
25456
|
-
),
|
|
25457
|
-
/* @__PURE__ */ jsx(Box, { className: "relative z-10 w-full flex justify-center px-4 sm:px-6 lg:px-8", children: innerContent })
|
|
25458
|
-
]
|
|
25459
|
-
}
|
|
25460
|
-
);
|
|
25461
|
-
};
|
|
25462
|
-
HeroSection.displayName = "HeroSection";
|
|
25463
|
-
}
|
|
25464
|
-
});
|
|
25465
|
-
var PricingCard;
|
|
25466
|
-
var init_PricingCard = __esm({
|
|
25467
|
-
"components/molecules/PricingCard.tsx"() {
|
|
25468
|
-
"use client";
|
|
25469
|
-
init_cn();
|
|
25470
|
-
init_Card();
|
|
25471
|
-
init_Stack();
|
|
25472
|
-
init_Badge();
|
|
25473
|
-
init_Typography();
|
|
25474
|
-
init_Icon();
|
|
25475
|
-
init_Divider();
|
|
25476
|
-
init_Spacer();
|
|
25477
|
-
init_Button();
|
|
25478
|
-
PricingCard = ({
|
|
25479
|
-
name,
|
|
25480
|
-
price,
|
|
25481
|
-
description,
|
|
25482
|
-
features,
|
|
25483
|
-
action,
|
|
25484
|
-
highlighted = false,
|
|
25485
|
-
badge,
|
|
25486
|
-
className
|
|
25487
|
-
}) => {
|
|
25488
|
-
return /* @__PURE__ */ jsx(
|
|
25489
|
-
Card,
|
|
25490
|
-
{
|
|
25491
|
-
variant: highlighted ? "elevated" : "bordered",
|
|
25492
|
-
padding: "lg",
|
|
25493
|
-
className: cn(
|
|
25494
|
-
"flex flex-col h-full",
|
|
25495
|
-
"hover:-translate-y-1 transition-all",
|
|
25496
|
-
highlighted && [
|
|
25497
|
-
"border-[length:2px] border-primary",
|
|
25498
|
-
"shadow-lg",
|
|
25499
|
-
"scale-[1.05]",
|
|
25500
|
-
"ring-2 ring-primary"
|
|
25501
|
-
],
|
|
25502
|
-
className
|
|
25503
|
-
),
|
|
25504
|
-
children: /* @__PURE__ */ jsxs(VStack, { gap: "md", className: "flex-1", children: [
|
|
25505
|
-
badge && /* @__PURE__ */ jsx(Badge, { variant: "primary", size: "sm", children: badge }),
|
|
25506
|
-
/* @__PURE__ */ jsx(Typography, { variant: "h3", children: name }),
|
|
25507
|
-
/* @__PURE__ */ jsx(
|
|
25508
|
-
Typography,
|
|
25509
|
-
{
|
|
25510
|
-
variant: "h2",
|
|
25511
|
-
className: "text-primary font-bold",
|
|
25512
|
-
children: price
|
|
25513
|
-
}
|
|
25514
|
-
),
|
|
25515
|
-
description && /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "muted", children: description }),
|
|
25516
|
-
/* @__PURE__ */ jsx(Divider, {}),
|
|
25517
|
-
/* @__PURE__ */ jsx(VStack, { gap: "sm", children: features.map((feature) => /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", children: [
|
|
25518
|
-
/* @__PURE__ */ jsx(
|
|
25519
|
-
Icon,
|
|
25520
|
-
{
|
|
25521
|
-
icon: Check,
|
|
25522
|
-
size: "sm",
|
|
25523
|
-
className: "flex-shrink-0 text-success"
|
|
25524
|
-
}
|
|
25525
|
-
),
|
|
25526
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body2", children: feature })
|
|
25527
|
-
] }, feature)) }),
|
|
25528
|
-
/* @__PURE__ */ jsx(Spacer, {}),
|
|
25529
|
-
/* @__PURE__ */ jsx(
|
|
25530
|
-
Button,
|
|
25531
|
-
{
|
|
25532
|
-
variant: highlighted ? "primary" : "secondary",
|
|
25533
|
-
size: "lg",
|
|
25534
|
-
className: "w-full",
|
|
25535
|
-
children: action.label
|
|
25536
|
-
}
|
|
25537
|
-
)
|
|
25538
|
-
] })
|
|
25539
|
-
}
|
|
25540
|
-
);
|
|
25541
|
-
};
|
|
25542
|
-
PricingCard.displayName = "PricingCard";
|
|
25543
|
-
}
|
|
25544
|
-
});
|
|
25545
|
-
var PricingGrid;
|
|
25546
|
-
var init_PricingGrid = __esm({
|
|
25547
|
-
"components/molecules/PricingGrid.tsx"() {
|
|
25548
|
-
"use client";
|
|
25549
|
-
init_cn();
|
|
25550
|
-
init_SimpleGrid();
|
|
25551
|
-
init_PricingCard();
|
|
25552
|
-
PricingGrid = ({
|
|
25553
|
-
plans,
|
|
25554
|
-
className
|
|
25555
|
-
}) => {
|
|
25556
|
-
const cols = Math.min(plans.length, 4);
|
|
25557
|
-
return /* @__PURE__ */ jsx(
|
|
25558
|
-
SimpleGrid,
|
|
25559
|
-
{
|
|
25560
|
-
cols: cols > 0 ? cols : 1,
|
|
25561
|
-
gap: "lg",
|
|
25562
|
-
className: cn("items-stretch", className),
|
|
25563
|
-
children: plans.map((plan) => /* @__PURE__ */ jsx(PricingCard, { ...plan }, plan.name))
|
|
25564
|
-
}
|
|
25565
|
-
);
|
|
25566
|
-
};
|
|
25567
|
-
PricingGrid.displayName = "PricingGrid";
|
|
25568
|
-
}
|
|
25569
|
-
});
|
|
25570
|
-
var StatsGrid;
|
|
25571
|
-
var init_StatsGrid = __esm({
|
|
25572
|
-
"components/molecules/StatsGrid.tsx"() {
|
|
25573
|
-
"use client";
|
|
25574
|
-
init_cn();
|
|
25575
|
-
init_SimpleGrid();
|
|
25576
|
-
init_Stack();
|
|
25577
|
-
init_Typography();
|
|
25578
|
-
StatsGrid = ({
|
|
25579
|
-
stats,
|
|
25580
|
-
columns = 3,
|
|
25581
|
-
className
|
|
25582
|
-
}) => {
|
|
25583
|
-
return /* @__PURE__ */ jsx(SimpleGrid, { cols: columns, gap: "lg", className: cn("w-full", className), children: stats.map((stat) => /* @__PURE__ */ jsxs(VStack, { gap: "xs", align: "center", className: "py-4", children: [
|
|
25584
|
-
/* @__PURE__ */ jsx(
|
|
25585
|
-
Typography,
|
|
25586
|
-
{
|
|
25587
|
-
variant: "h2",
|
|
25588
|
-
className: "font-bold text-primary",
|
|
25589
|
-
children: stat.value
|
|
25590
|
-
}
|
|
25591
|
-
),
|
|
25592
|
-
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: stat.label })
|
|
25593
|
-
] }, stat.label)) });
|
|
25594
|
-
};
|
|
25595
|
-
StatsGrid.displayName = "StatsGrid";
|
|
25596
|
-
}
|
|
25597
|
-
});
|
|
25598
|
-
var ServiceCatalog;
|
|
25599
|
-
var init_ServiceCatalog = __esm({
|
|
25600
|
-
"components/molecules/ServiceCatalog.tsx"() {
|
|
25601
|
-
"use client";
|
|
25602
|
-
init_cn();
|
|
25603
|
-
init_Card();
|
|
25604
|
-
init_Stack();
|
|
25605
|
-
init_Badge();
|
|
25606
|
-
init_Typography();
|
|
25607
|
-
init_SimpleGrid();
|
|
25608
|
-
ServiceCatalog = ({
|
|
25609
|
-
services,
|
|
25610
|
-
className
|
|
25611
|
-
}) => {
|
|
25612
|
-
return /* @__PURE__ */ jsx(SimpleGrid, { cols: 4, gap: "sm", className: cn(className), children: services.map((service) => /* @__PURE__ */ jsx(Card, { variant: "bordered", padding: "sm", children: /* @__PURE__ */ jsxs(VStack, { gap: "xs", align: "start", children: [
|
|
25613
|
-
/* @__PURE__ */ jsx(
|
|
25614
|
-
Badge,
|
|
25615
|
-
{
|
|
25616
|
-
size: "sm",
|
|
25617
|
-
className: service.layerColor,
|
|
25618
|
-
children: service.layer
|
|
25619
|
-
}
|
|
25620
|
-
),
|
|
25621
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body", children: service.name })
|
|
25622
|
-
] }) }, service.name)) });
|
|
25623
|
-
};
|
|
25624
|
-
ServiceCatalog.displayName = "ServiceCatalog";
|
|
25625
|
-
}
|
|
25626
|
-
});
|
|
25627
|
-
var CaseStudyCard;
|
|
25628
|
-
var init_CaseStudyCard = __esm({
|
|
25629
|
-
"components/molecules/CaseStudyCard.tsx"() {
|
|
25630
|
-
"use client";
|
|
25631
|
-
init_cn();
|
|
25632
|
-
init_Card();
|
|
25633
|
-
init_Stack();
|
|
25634
|
-
init_Badge();
|
|
25635
|
-
init_Typography();
|
|
25636
|
-
init_Button();
|
|
25637
|
-
CaseStudyCard = ({
|
|
25638
|
-
title,
|
|
25639
|
-
description,
|
|
25640
|
-
category,
|
|
25641
|
-
categoryColor,
|
|
25642
|
-
href,
|
|
25643
|
-
linkLabel = "Read more",
|
|
25644
|
-
className
|
|
25645
|
-
}) => {
|
|
25646
|
-
const handleClick = () => {
|
|
25647
|
-
window.open(href, "_blank", "noopener,noreferrer");
|
|
25648
|
-
};
|
|
25649
|
-
return /* @__PURE__ */ jsx(Card, { variant: "interactive", className: cn(className), children: /* @__PURE__ */ jsxs(VStack, { gap: "md", align: "start", children: [
|
|
25650
|
-
/* @__PURE__ */ jsx(
|
|
25651
|
-
Badge,
|
|
25652
|
-
{
|
|
25653
|
-
size: "sm",
|
|
25654
|
-
style: categoryColor ? { backgroundColor: categoryColor, color: "white" } : void 0,
|
|
25655
|
-
children: category
|
|
25656
|
-
}
|
|
25657
|
-
),
|
|
25658
|
-
/* @__PURE__ */ jsx(Typography, { variant: "h3", children: title }),
|
|
25659
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body", color: "muted", children: description }),
|
|
25660
|
-
/* @__PURE__ */ jsxs(
|
|
25661
|
-
Button,
|
|
25662
|
-
{
|
|
25663
|
-
variant: "ghost",
|
|
25664
|
-
size: "sm",
|
|
25665
|
-
onClick: handleClick,
|
|
25666
|
-
className: "text-primary -ml-2",
|
|
25667
|
-
children: [
|
|
25668
|
-
linkLabel,
|
|
25669
|
-
" \u2192"
|
|
25670
|
-
]
|
|
25671
|
-
}
|
|
25672
|
-
)
|
|
25673
|
-
] }) });
|
|
25674
|
-
};
|
|
25675
|
-
CaseStudyCard.displayName = "CaseStudyCard";
|
|
25676
|
-
}
|
|
25677
|
-
});
|
|
25678
|
-
var ArticleSection;
|
|
25679
|
-
var init_ArticleSection = __esm({
|
|
25680
|
-
"components/molecules/ArticleSection.tsx"() {
|
|
25681
|
-
"use client";
|
|
25682
|
-
init_cn();
|
|
25683
|
-
init_Box();
|
|
25684
|
-
init_Stack();
|
|
25685
|
-
init_Typography();
|
|
25686
|
-
ArticleSection = ({
|
|
25687
|
-
title,
|
|
25688
|
-
children,
|
|
25689
|
-
maxWidth = "md",
|
|
25690
|
-
className
|
|
25691
|
-
}) => {
|
|
25692
|
-
return /* @__PURE__ */ jsx(
|
|
25693
|
-
Box,
|
|
25694
|
-
{
|
|
25695
|
-
className: cn(
|
|
25696
|
-
"w-full",
|
|
25697
|
-
className
|
|
25698
|
-
),
|
|
25699
|
-
padding: "md",
|
|
25700
|
-
children: /* @__PURE__ */ jsxs(VStack, { gap: "lg", align: "start", children: [
|
|
25701
|
-
/* @__PURE__ */ jsx(Typography, { variant: "h2", children: title }),
|
|
25702
|
-
/* @__PURE__ */ jsx(Box, { className: "w-full", children })
|
|
25703
|
-
] })
|
|
25704
|
-
}
|
|
25705
|
-
);
|
|
25706
|
-
};
|
|
25707
|
-
ArticleSection.displayName = "ArticleSection";
|
|
25708
|
-
}
|
|
25709
|
-
});
|
|
25710
|
-
var CodeExample;
|
|
25711
|
-
var init_CodeExample = __esm({
|
|
25712
|
-
"components/molecules/CodeExample.tsx"() {
|
|
25713
|
-
"use client";
|
|
25714
|
-
init_cn();
|
|
25715
|
-
init_Box();
|
|
25716
|
-
init_Stack();
|
|
25717
|
-
init_Typography();
|
|
25718
|
-
init_Button();
|
|
25719
|
-
init_Spacer();
|
|
25720
|
-
CodeExample = ({
|
|
25721
|
-
code,
|
|
25722
|
-
language,
|
|
25723
|
-
title,
|
|
25724
|
-
copyable = false,
|
|
25725
|
-
maxHeight,
|
|
25726
|
-
className
|
|
25727
|
-
}) => {
|
|
25728
|
-
const [copied, setCopied] = useState(false);
|
|
25729
|
-
const handleCopy = useCallback(() => {
|
|
25730
|
-
void navigator.clipboard.writeText(code);
|
|
25731
|
-
setCopied(true);
|
|
25732
|
-
const timer = setTimeout(() => setCopied(false), 2e3);
|
|
25733
|
-
return () => clearTimeout(timer);
|
|
25734
|
-
}, [code]);
|
|
25735
|
-
const showHeader = title || copyable;
|
|
25736
|
-
return /* @__PURE__ */ jsxs(
|
|
25737
|
-
Box,
|
|
25738
|
-
{
|
|
25739
|
-
className: cn(
|
|
25740
|
-
"bg-foreground",
|
|
25741
|
-
"rounded-md",
|
|
25742
|
-
"border-[length:var(--border-width)] border-border",
|
|
25743
|
-
"overflow-hidden",
|
|
25744
|
-
className
|
|
25745
|
-
),
|
|
25746
|
-
children: [
|
|
25747
|
-
showHeader && /* @__PURE__ */ jsx(
|
|
25748
|
-
Box,
|
|
25749
|
-
{
|
|
25750
|
-
className: "bg-foreground border-b-[length:var(--border-width)] border-border",
|
|
25751
|
-
padding: "sm",
|
|
25752
|
-
children: /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", children: [
|
|
25753
|
-
title ? /* @__PURE__ */ jsx(
|
|
25754
|
-
Typography,
|
|
25755
|
-
{
|
|
25756
|
-
variant: "caption",
|
|
25757
|
-
className: "text-background opacity-70",
|
|
25758
|
-
children: title
|
|
25759
|
-
}
|
|
25760
|
-
) : /* @__PURE__ */ jsx(
|
|
25761
|
-
Typography,
|
|
25762
|
-
{
|
|
25763
|
-
variant: "caption",
|
|
25764
|
-
className: "text-background opacity-50",
|
|
25765
|
-
children: language
|
|
25766
|
-
}
|
|
25767
|
-
),
|
|
25768
|
-
/* @__PURE__ */ jsx(Spacer, {}),
|
|
25769
|
-
copyable && /* @__PURE__ */ jsx(
|
|
25770
|
-
Button,
|
|
25771
|
-
{
|
|
25772
|
-
variant: "ghost",
|
|
25773
|
-
size: "sm",
|
|
25774
|
-
onClick: handleCopy,
|
|
25775
|
-
className: "text-background hover:text-background opacity-70 hover:opacity-100",
|
|
25776
|
-
children: copied ? "Copied!" : "Copy"
|
|
25777
|
-
}
|
|
25778
|
-
)
|
|
25779
|
-
] })
|
|
25780
|
-
}
|
|
25781
|
-
),
|
|
25782
|
-
/* @__PURE__ */ jsx(
|
|
25783
|
-
Box,
|
|
25784
|
-
{
|
|
25785
|
-
className: "overflow-auto",
|
|
25786
|
-
padding: "md",
|
|
25787
|
-
style: maxHeight ? { maxHeight } : void 0,
|
|
25788
|
-
children: /* @__PURE__ */ jsx(
|
|
25789
|
-
Typography,
|
|
25790
|
-
{
|
|
25791
|
-
variant: "body2",
|
|
25792
|
-
className: "font-mono text-sm whitespace-pre text-background select-all",
|
|
25793
|
-
children: code
|
|
25794
|
-
}
|
|
25795
|
-
)
|
|
25796
|
-
}
|
|
25797
|
-
)
|
|
25798
|
-
]
|
|
25799
|
-
}
|
|
25800
|
-
);
|
|
25801
|
-
};
|
|
25802
|
-
CodeExample.displayName = "CodeExample";
|
|
25803
|
-
}
|
|
25804
|
-
});
|
|
25805
|
-
var LogosVariant, QuotesVariant, BadgesVariant, SocialProof;
|
|
25806
|
-
var init_SocialProof = __esm({
|
|
25807
|
-
"components/molecules/SocialProof.tsx"() {
|
|
25808
|
-
"use client";
|
|
25809
|
-
init_cn();
|
|
25810
|
-
init_Box();
|
|
25811
|
-
init_Stack();
|
|
25812
|
-
init_Stack();
|
|
25813
|
-
init_Card();
|
|
25814
|
-
init_Badge();
|
|
25815
|
-
init_Typography();
|
|
25816
|
-
init_SimpleGrid();
|
|
25817
|
-
LogosVariant = ({ items }) => /* @__PURE__ */ jsx(HStack, { gap: "xl", justify: "center", className: "flex-wrap", children: items.map((item) => /* @__PURE__ */ jsx(
|
|
25818
|
-
Box,
|
|
25819
|
-
{
|
|
25820
|
-
className: "opacity-60 hover:opacity-100 transition-opacity cursor-default",
|
|
25821
|
-
children: /* @__PURE__ */ jsxs(VStack, { gap: "xs", align: "center", children: [
|
|
25822
|
-
item.logo && /* @__PURE__ */ jsx(
|
|
25823
|
-
Box,
|
|
25824
|
-
{
|
|
25825
|
-
className: "w-12 h-12 bg-contain bg-center bg-no-repeat",
|
|
25826
|
-
style: { backgroundImage: `url(${item.logo})` }
|
|
25827
|
-
}
|
|
25828
|
-
),
|
|
25829
|
-
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: item.name })
|
|
25830
|
-
] })
|
|
25831
|
-
},
|
|
25832
|
-
item.name
|
|
25833
|
-
)) });
|
|
25834
|
-
LogosVariant.displayName = "SocialProof.LogosVariant";
|
|
25835
|
-
QuotesVariant = ({ items }) => {
|
|
25836
|
-
const cols = items.length >= 3 ? 3 : items.length >= 2 ? 2 : 1;
|
|
25837
|
-
return /* @__PURE__ */ jsx(SimpleGrid, { cols, gap: "md", children: items.map((item) => /* @__PURE__ */ jsx(Card, { variant: "bordered", padding: "md", children: /* @__PURE__ */ jsxs(VStack, { gap: "sm", align: "start", children: [
|
|
25838
|
-
item.quote && /* @__PURE__ */ jsxs(Typography, { variant: "body", className: "italic", children: [
|
|
25839
|
-
"\u201C",
|
|
25840
|
-
item.quote,
|
|
25841
|
-
"\u201D"
|
|
25842
|
-
] }),
|
|
25843
|
-
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: item.name })
|
|
25844
|
-
] }) }, item.name)) });
|
|
25845
|
-
};
|
|
25846
|
-
QuotesVariant.displayName = "SocialProof.QuotesVariant";
|
|
25847
|
-
BadgesVariant = ({ items }) => /* @__PURE__ */ jsx(HStack, { gap: "sm", justify: "center", className: "flex-wrap", children: items.map((item) => /* @__PURE__ */ jsx(Badge, { size: "md", children: item.name }, item.name)) });
|
|
25848
|
-
BadgesVariant.displayName = "SocialProof.BadgesVariant";
|
|
25849
|
-
SocialProof = ({
|
|
25850
|
-
items,
|
|
25851
|
-
variant = "logos",
|
|
25852
|
-
className
|
|
25853
|
-
}) => {
|
|
25854
|
-
return /* @__PURE__ */ jsxs(Box, { className: cn(className), children: [
|
|
25855
|
-
variant === "logos" && /* @__PURE__ */ jsx(LogosVariant, { items }),
|
|
25856
|
-
variant === "quotes" && /* @__PURE__ */ jsx(QuotesVariant, { items }),
|
|
25857
|
-
variant === "badges" && /* @__PURE__ */ jsx(BadgesVariant, { items })
|
|
25858
|
-
] });
|
|
25859
|
-
};
|
|
25860
|
-
SocialProof.displayName = "SocialProof";
|
|
25861
|
-
}
|
|
25862
|
-
});
|
|
25863
|
-
var StepCircle, StepFlow;
|
|
25864
|
-
var init_StepFlow = __esm({
|
|
25865
|
-
"components/molecules/StepFlow.tsx"() {
|
|
25866
|
-
"use client";
|
|
25867
|
-
init_cn();
|
|
25868
|
-
init_Box();
|
|
25869
|
-
init_Stack();
|
|
25870
|
-
init_Center();
|
|
25871
|
-
init_Typography();
|
|
25872
|
-
init_Icon();
|
|
25873
|
-
init_Divider();
|
|
25874
|
-
StepCircle = ({ step, index }) => {
|
|
25875
|
-
if (step.icon) {
|
|
25876
|
-
return /* @__PURE__ */ jsx(
|
|
25877
|
-
Center,
|
|
25878
|
-
{
|
|
25879
|
-
className: cn(
|
|
25880
|
-
"w-10 h-10 rounded-full flex-shrink-0",
|
|
25881
|
-
"flex items-center justify-center",
|
|
25882
|
-
"bg-primary text-primary-foreground"
|
|
25883
|
-
),
|
|
25884
|
-
children: /* @__PURE__ */ jsx(Icon, { name: step.icon, size: "sm", className: "text-primary-foreground" })
|
|
25885
|
-
}
|
|
25886
|
-
);
|
|
25887
|
-
}
|
|
25888
|
-
return /* @__PURE__ */ jsx(
|
|
25889
|
-
Center,
|
|
25890
|
-
{
|
|
25891
|
-
className: cn(
|
|
25892
|
-
"w-10 h-10 rounded-full flex-shrink-0",
|
|
25893
|
-
"flex items-center justify-center",
|
|
25894
|
-
"bg-primary text-primary-foreground"
|
|
25895
|
-
),
|
|
25896
|
-
children: /* @__PURE__ */ jsx("span", { className: "font-semibold text-sm text-primary-foreground leading-none", children: step.number ?? index + 1 })
|
|
25897
|
-
}
|
|
25898
|
-
);
|
|
25899
|
-
};
|
|
25900
|
-
StepCircle.displayName = "StepCircle";
|
|
25901
|
-
StepFlow = ({
|
|
25902
|
-
steps,
|
|
25903
|
-
orientation = "horizontal",
|
|
25904
|
-
showConnectors = true,
|
|
25905
|
-
className
|
|
25906
|
-
}) => {
|
|
25907
|
-
if (orientation === "vertical") {
|
|
25908
|
-
return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React115__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
|
|
25909
|
-
/* @__PURE__ */ jsxs(VStack, { gap: "none", align: "center", children: [
|
|
25910
|
-
/* @__PURE__ */ jsx(StepCircle, { step, index }),
|
|
25911
|
-
showConnectors && index < steps.length - 1 && /* @__PURE__ */ jsx(Box, { className: "w-px h-8 bg-border" })
|
|
25912
|
-
] }),
|
|
25913
|
-
/* @__PURE__ */ jsxs(VStack, { gap: "xs", className: "flex-1 pt-1", children: [
|
|
25914
|
-
/* @__PURE__ */ jsx(Typography, { variant: "h4", children: step.title }),
|
|
25915
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body2", color: "muted", children: step.description })
|
|
25916
|
-
] })
|
|
25917
|
-
] }) }, index)) });
|
|
25918
|
-
}
|
|
25919
|
-
return /* @__PURE__ */ jsx(Box, { className: cn("w-full flex flex-col md:flex-row items-start gap-0", className), children: steps.map((step, index) => /* @__PURE__ */ jsxs(React115__default.Fragment, { children: [
|
|
25920
|
-
/* @__PURE__ */ jsxs(VStack, { gap: "sm", align: "center", className: "flex-1 w-full md:w-auto", children: [
|
|
25921
|
-
/* @__PURE__ */ jsx(StepCircle, { step, index }),
|
|
25922
|
-
/* @__PURE__ */ jsx(Typography, { variant: "h4", className: "text-center", children: step.title }),
|
|
25923
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body2", color: "muted", className: "text-center", children: step.description })
|
|
25924
|
-
] }),
|
|
25925
|
-
showConnectors && index < steps.length - 1 && /* @__PURE__ */ jsx(Box, { className: "flex-shrink-0 self-center py-2 md:pt-5 md:py-0 md:px-2", children: /* @__PURE__ */ jsx(Divider, { orientation: "horizontal", className: "w-12 md:w-12" }) })
|
|
25926
|
-
] }, index)) });
|
|
25927
|
-
};
|
|
25928
|
-
StepFlow.displayName = "StepFlow";
|
|
25929
|
-
}
|
|
25930
|
-
});
|
|
25931
|
-
var SplitSection;
|
|
25932
|
-
var init_SplitSection = __esm({
|
|
25933
|
-
"components/molecules/SplitSection.tsx"() {
|
|
25934
|
-
"use client";
|
|
25935
|
-
init_cn();
|
|
25936
|
-
init_Box();
|
|
25937
|
-
init_Stack();
|
|
25938
|
-
init_Typography();
|
|
25939
|
-
init_Icon();
|
|
25940
|
-
SplitSection = ({
|
|
25941
|
-
title,
|
|
25942
|
-
description,
|
|
25943
|
-
bullets,
|
|
25944
|
-
image,
|
|
25945
|
-
imagePosition = "right",
|
|
25946
|
-
background = "default",
|
|
25947
|
-
children,
|
|
25948
|
-
className
|
|
25949
|
-
}) => {
|
|
25950
|
-
const textContent = /* @__PURE__ */ jsxs(VStack, { gap: "md", className: "flex-1 min-w-0", children: [
|
|
25951
|
-
/* @__PURE__ */ jsx(Typography, { variant: "h2", children: title }),
|
|
25952
|
-
typeof description === "string" ? /* @__PURE__ */ jsx(Typography, { variant: "body", color: "muted", children: description }) : description,
|
|
25953
|
-
bullets && bullets.length > 0 && /* @__PURE__ */ jsx(VStack, { gap: "sm", children: bullets.map((bullet, index) => /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "start", className: "mt-0.5", children: [
|
|
25954
|
-
/* @__PURE__ */ jsx(
|
|
25955
|
-
Icon,
|
|
25956
|
-
{
|
|
25957
|
-
name: "check",
|
|
25958
|
-
size: "sm",
|
|
25959
|
-
className: "text-primary flex-shrink-0 mt-0.5"
|
|
25960
|
-
}
|
|
25961
|
-
),
|
|
25962
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body2", children: bullet })
|
|
25963
|
-
] }, index)) })
|
|
25964
|
-
] });
|
|
25965
|
-
const mediaContent = children ?? (image ? /* @__PURE__ */ jsx(
|
|
25966
|
-
Box,
|
|
25967
|
-
{
|
|
25968
|
-
className: cn(
|
|
25969
|
-
"flex-1 min-w-0 min-h-[240px] rounded-md",
|
|
25970
|
-
"bg-cover bg-center"
|
|
25971
|
-
),
|
|
25972
|
-
style: { backgroundImage: `url(${image.src})` },
|
|
25973
|
-
role: "img",
|
|
25974
|
-
"aria-label": image.alt
|
|
25975
|
-
}
|
|
25976
|
-
) : null);
|
|
25977
|
-
const isImageLeft = imagePosition === "left";
|
|
25978
|
-
return /* @__PURE__ */ jsx(
|
|
25979
|
-
Box,
|
|
25980
|
-
{
|
|
25981
|
-
className: cn(
|
|
25982
|
-
"w-full",
|
|
25983
|
-
background === "alt" ? "bg-muted" : "bg-background",
|
|
25984
|
-
className
|
|
25985
|
-
),
|
|
25986
|
-
padding: "lg",
|
|
25987
|
-
children: /* @__PURE__ */ jsxs(Box, { className: cn("w-full flex flex-col lg:flex-row gap-10 lg:gap-16 items-center", isImageLeft && "lg:flex-row-reverse"), children: [
|
|
25988
|
-
/* @__PURE__ */ jsx(Box, { className: "flex-1 min-w-0 lg:min-w-[45%]", children: textContent }),
|
|
25989
|
-
/* @__PURE__ */ jsx(Box, { className: "flex-1 min-w-0 lg:max-w-[50%]", children: mediaContent })
|
|
25990
|
-
] })
|
|
25991
|
-
}
|
|
25992
|
-
);
|
|
25993
|
-
};
|
|
25994
|
-
SplitSection.displayName = "SplitSection";
|
|
25995
|
-
}
|
|
25996
|
-
});
|
|
25997
|
-
function normalizeTags(tags) {
|
|
25998
|
-
if (tags.length === 0) return [];
|
|
25999
|
-
if (typeof tags[0] === "string") {
|
|
26000
|
-
return tags.map((label) => ({ label }));
|
|
26001
|
-
}
|
|
26002
|
-
return tags;
|
|
26003
|
-
}
|
|
26004
|
-
var variantMap4, TagCloud;
|
|
26005
|
-
var init_TagCloud = __esm({
|
|
26006
|
-
"components/molecules/TagCloud.tsx"() {
|
|
26007
|
-
"use client";
|
|
26008
|
-
init_cn();
|
|
26009
|
-
init_Stack();
|
|
26010
|
-
init_Badge();
|
|
26011
|
-
variantMap4 = {
|
|
26012
|
-
default: "default",
|
|
26013
|
-
primary: "primary",
|
|
26014
|
-
accent: "info"
|
|
26015
|
-
};
|
|
26016
|
-
TagCloud = ({
|
|
26017
|
-
tags,
|
|
26018
|
-
variant = "default",
|
|
26019
|
-
className
|
|
26020
|
-
}) => {
|
|
26021
|
-
const normalizedTags = normalizeTags(tags);
|
|
26022
|
-
return /* @__PURE__ */ jsx(HStack, { gap: "sm", className: cn("flex-wrap justify-center", className), children: normalizedTags.map((tag, index) => {
|
|
26023
|
-
const badgeVariant = tag.variant ? variantMap4[tag.variant] ?? "default" : variantMap4[variant] ?? "default";
|
|
26024
|
-
return /* @__PURE__ */ jsx(Badge, { variant: badgeVariant, label: tag.label }, index);
|
|
26025
|
-
}) });
|
|
26026
|
-
};
|
|
26027
|
-
TagCloud.displayName = "TagCloud";
|
|
26028
|
-
}
|
|
26029
|
-
});
|
|
26030
|
-
function formatCount(count) {
|
|
26031
|
-
if (count >= 1e3) {
|
|
26032
|
-
return `${(count / 1e3).toFixed(1)}k`;
|
|
26033
|
-
}
|
|
26034
|
-
return String(count);
|
|
26035
|
-
}
|
|
26036
|
-
var CommunityLinks;
|
|
26037
|
-
var init_CommunityLinks = __esm({
|
|
26038
|
-
"components/molecules/CommunityLinks.tsx"() {
|
|
26039
|
-
"use client";
|
|
26040
|
-
init_Stack();
|
|
26041
|
-
init_Typography();
|
|
26042
|
-
init_Button();
|
|
26043
|
-
init_Icon();
|
|
26044
|
-
CommunityLinks = ({
|
|
26045
|
-
github,
|
|
26046
|
-
discord,
|
|
26047
|
-
twitter,
|
|
26048
|
-
heading,
|
|
26049
|
-
subtitle,
|
|
26050
|
-
className
|
|
26051
|
-
}) => {
|
|
26052
|
-
const openLink = (url) => () => {
|
|
26053
|
-
window.open(url, "_blank", "noopener,noreferrer");
|
|
26054
|
-
};
|
|
26055
|
-
return /* @__PURE__ */ jsxs(VStack, { gap: "lg", align: "center", className, children: [
|
|
26056
|
-
heading && /* @__PURE__ */ jsx(Typography, { variant: "h2", className: "text-center", children: heading }),
|
|
26057
|
-
subtitle && /* @__PURE__ */ jsx(Typography, { variant: "body", color: "muted", className: "text-center", children: subtitle }),
|
|
26058
|
-
/* @__PURE__ */ jsxs(HStack, { gap: "md", className: "flex-wrap justify-center", children: [
|
|
26059
|
-
github && /* @__PURE__ */ jsx(Button, { variant: "primary", onClick: openLink(github.url), children: /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", children: [
|
|
26060
|
-
/* @__PURE__ */ jsx(Icon, { name: "github", size: "sm" }),
|
|
26061
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body2", className: "text-inherit", children: github.stars != null ? `GitHub (${formatCount(github.stars)} stars)` : "GitHub" })
|
|
26062
|
-
] }) }),
|
|
26063
|
-
discord && /* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: openLink(discord.url), children: /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", children: [
|
|
26064
|
-
/* @__PURE__ */ jsx(Icon, { name: "message-circle", size: "sm" }),
|
|
26065
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body2", className: "text-inherit", children: discord.members != null ? `Discord (${formatCount(discord.members)} members)` : "Discord" })
|
|
26066
|
-
] }) }),
|
|
26067
|
-
twitter && /* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: openLink(twitter.url), children: /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", children: [
|
|
26068
|
-
/* @__PURE__ */ jsx(Icon, { name: "twitter", size: "sm" }),
|
|
26069
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body2", className: "text-inherit", children: twitter.followers != null ? `Twitter (${formatCount(twitter.followers)} followers)` : "Twitter" })
|
|
26070
|
-
] }) })
|
|
26071
|
-
] })
|
|
26072
|
-
] });
|
|
26073
|
-
};
|
|
26074
|
-
CommunityLinks.displayName = "CommunityLinks";
|
|
26075
|
-
}
|
|
26076
|
-
});
|
|
26077
|
-
var TeamCard;
|
|
26078
|
-
var init_TeamCard = __esm({
|
|
26079
|
-
"components/molecules/TeamCard.tsx"() {
|
|
26080
|
-
"use client";
|
|
26081
|
-
init_cn();
|
|
26082
|
-
init_Box();
|
|
26083
|
-
init_Card();
|
|
26084
|
-
init_Stack();
|
|
26085
|
-
init_Avatar();
|
|
26086
|
-
init_Typography();
|
|
26087
|
-
TeamCard = ({
|
|
26088
|
-
name,
|
|
26089
|
-
nameAr,
|
|
26090
|
-
role,
|
|
26091
|
-
bio,
|
|
26092
|
-
avatar,
|
|
26093
|
-
className
|
|
26094
|
-
}) => {
|
|
26095
|
-
const avatarSrc = typeof avatar === "string" ? avatar : void 0;
|
|
26096
|
-
const avatarInitials = typeof avatar === "object" && avatar !== null ? avatar.initials : void 0;
|
|
26097
|
-
return /* @__PURE__ */ jsx(Card, { variant: "bordered", padding: "lg", className: cn("w-full", className), children: /* @__PURE__ */ jsxs(VStack, { gap: "md", align: "center", children: [
|
|
26098
|
-
/* @__PURE__ */ jsx(
|
|
26099
|
-
Avatar,
|
|
26100
|
-
{
|
|
26101
|
-
src: avatarSrc,
|
|
26102
|
-
initials: avatarInitials,
|
|
26103
|
-
name: !avatarSrc && !avatarInitials ? name : void 0,
|
|
26104
|
-
size: "lg"
|
|
26105
|
-
}
|
|
26106
|
-
),
|
|
26107
|
-
/* @__PURE__ */ jsx(Typography, { variant: "h3", className: "text-center", children: name }),
|
|
26108
|
-
nameAr && /* @__PURE__ */ jsx(Box, { className: "text-center", style: { direction: "rtl" }, children: /* @__PURE__ */ jsx(Typography, { variant: "caption", children: nameAr }) }),
|
|
26109
|
-
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "text-center", children: role }),
|
|
26110
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body", className: "text-center", children: bio })
|
|
26111
|
-
] }) });
|
|
26112
|
-
};
|
|
26113
|
-
TeamCard.displayName = "TeamCard";
|
|
26114
|
-
}
|
|
26115
|
-
});
|
|
26116
|
-
var ShowcaseCard;
|
|
26117
|
-
var init_ShowcaseCard = __esm({
|
|
26118
|
-
"components/molecules/ShowcaseCard.tsx"() {
|
|
26119
|
-
"use client";
|
|
26120
|
-
init_cn();
|
|
26121
|
-
init_Card();
|
|
26122
|
-
init_Box();
|
|
26123
|
-
init_Stack();
|
|
26124
|
-
init_Badge();
|
|
26125
|
-
init_Typography();
|
|
26126
|
-
ShowcaseCard = ({
|
|
26127
|
-
title,
|
|
26128
|
-
description,
|
|
26129
|
-
image,
|
|
26130
|
-
href,
|
|
26131
|
-
badge,
|
|
26132
|
-
accentColor,
|
|
26133
|
-
className
|
|
26134
|
-
}) => {
|
|
26135
|
-
const cardVariant = href ? "interactive" : "bordered";
|
|
26136
|
-
const handleClick = () => {
|
|
26137
|
-
if (href) {
|
|
26138
|
-
window.open(href, "_blank", "noopener,noreferrer");
|
|
26139
|
-
}
|
|
26140
|
-
};
|
|
26141
|
-
return /* @__PURE__ */ jsxs(
|
|
26142
|
-
Card,
|
|
26143
|
-
{
|
|
26144
|
-
variant: cardVariant,
|
|
26145
|
-
padding: "none",
|
|
26146
|
-
className: cn("overflow-hidden w-full", className),
|
|
26147
|
-
style: accentColor ? { borderTopColor: accentColor, borderTopWidth: "3px" } : void 0,
|
|
26148
|
-
onClick: href ? handleClick : void 0,
|
|
26149
|
-
children: [
|
|
26150
|
-
/* @__PURE__ */ jsx(
|
|
26151
|
-
Box,
|
|
26152
|
-
{
|
|
26153
|
-
className: cn(
|
|
26154
|
-
"w-full aspect-video bg-cover bg-center",
|
|
26155
|
-
"rounded-t-md"
|
|
26156
|
-
),
|
|
26157
|
-
style: { backgroundImage: `url(${image.src})` },
|
|
26158
|
-
role: "img",
|
|
26159
|
-
"aria-label": image.alt
|
|
26160
|
-
}
|
|
26161
|
-
),
|
|
26162
|
-
/* @__PURE__ */ jsxs(VStack, { gap: "sm", className: "p-4", children: [
|
|
26163
|
-
badge && /* @__PURE__ */ jsx(Badge, { variant: "primary", label: badge }),
|
|
26164
|
-
/* @__PURE__ */ jsx(Typography, { variant: "h3", children: title }),
|
|
26165
|
-
description && /* @__PURE__ */ jsx(Typography, { variant: "body", color: "muted", children: description })
|
|
26166
|
-
] })
|
|
26167
|
-
]
|
|
26168
|
-
}
|
|
26169
|
-
);
|
|
26170
|
-
};
|
|
26171
|
-
ShowcaseCard.displayName = "ShowcaseCard";
|
|
26172
|
-
}
|
|
26173
|
-
});
|
|
26174
|
-
function PatternDefs({
|
|
26175
|
-
patternId,
|
|
26176
|
-
variant,
|
|
26177
|
-
size,
|
|
26178
|
-
color,
|
|
26179
|
-
strokeWidth
|
|
26180
|
-
}) {
|
|
26181
|
-
const dims = getTileDimensions(variant, size);
|
|
26182
|
-
return /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx(
|
|
26183
|
-
"pattern",
|
|
26184
|
-
{
|
|
26185
|
-
id: patternId,
|
|
26186
|
-
x: "0",
|
|
26187
|
-
y: "0",
|
|
26188
|
-
width: dims.width,
|
|
26189
|
-
height: dims.height,
|
|
26190
|
-
patternUnits: "userSpaceOnUse",
|
|
26191
|
-
children: /* @__PURE__ */ jsx(
|
|
26192
|
-
PatternTile,
|
|
26193
|
-
{
|
|
26194
|
-
variant,
|
|
26195
|
-
size,
|
|
26196
|
-
color,
|
|
26197
|
-
strokeWidth
|
|
26198
|
-
}
|
|
26199
|
-
)
|
|
26200
|
-
}
|
|
26201
|
-
) });
|
|
26202
|
-
}
|
|
26203
|
-
function BackgroundMode({
|
|
26204
|
-
patternId,
|
|
26205
|
-
variant,
|
|
26206
|
-
size,
|
|
26207
|
-
color,
|
|
26208
|
-
strokeWidth,
|
|
26209
|
-
opacity,
|
|
26210
|
-
className
|
|
26211
|
-
}) {
|
|
26212
|
-
return /* @__PURE__ */ jsxs(
|
|
26213
|
-
"svg",
|
|
26214
|
-
{
|
|
26215
|
-
className: cn("absolute inset-0 w-full h-full pointer-events-none", className),
|
|
26216
|
-
preserveAspectRatio: "none",
|
|
26217
|
-
"aria-hidden": "true",
|
|
26218
|
-
children: [
|
|
26219
|
-
/* @__PURE__ */ jsx(
|
|
26220
|
-
PatternDefs,
|
|
26221
|
-
{
|
|
26222
|
-
patternId,
|
|
26223
|
-
variant,
|
|
26224
|
-
size,
|
|
26225
|
-
color,
|
|
26226
|
-
strokeWidth
|
|
26227
|
-
}
|
|
26228
|
-
),
|
|
26229
|
-
/* @__PURE__ */ jsx(
|
|
26230
|
-
"rect",
|
|
26231
|
-
{
|
|
26232
|
-
width: "100%",
|
|
26233
|
-
height: "100%",
|
|
26234
|
-
fill: `url(#${patternId})`,
|
|
26235
|
-
opacity
|
|
26236
|
-
}
|
|
26237
|
-
)
|
|
26238
|
-
]
|
|
26239
|
-
}
|
|
26240
|
-
);
|
|
26241
|
-
}
|
|
26242
|
-
function SideMode({
|
|
26243
|
-
patternId,
|
|
26244
|
-
variant,
|
|
26245
|
-
size,
|
|
26246
|
-
color,
|
|
26247
|
-
strokeWidth,
|
|
26248
|
-
opacity,
|
|
26249
|
-
side,
|
|
26250
|
-
className
|
|
26251
|
-
}) {
|
|
26252
|
-
const maskId = `${patternId}-mask`;
|
|
26253
|
-
const gradientId = `${patternId}-grad`;
|
|
26254
|
-
const x1 = side === "left" ? "0%" : "100%";
|
|
26255
|
-
const x2 = side === "left" ? "60%" : "40%";
|
|
26256
|
-
return /* @__PURE__ */ jsxs(
|
|
26257
|
-
"svg",
|
|
26258
|
-
{
|
|
26259
|
-
className: cn("absolute inset-0 w-full h-full pointer-events-none", className),
|
|
26260
|
-
preserveAspectRatio: "none",
|
|
26261
|
-
"aria-hidden": "true",
|
|
26262
|
-
children: [
|
|
26263
|
-
/* @__PURE__ */ jsx(
|
|
26264
|
-
PatternDefs,
|
|
26265
|
-
{
|
|
26266
|
-
patternId,
|
|
26267
|
-
variant,
|
|
26268
|
-
size,
|
|
26269
|
-
color,
|
|
26270
|
-
strokeWidth
|
|
26271
|
-
}
|
|
26272
|
-
),
|
|
26273
|
-
/* @__PURE__ */ jsxs("defs", { children: [
|
|
26274
|
-
/* @__PURE__ */ jsxs("linearGradient", { id: gradientId, x1, y1: "0%", x2, y2: "0%", children: [
|
|
26275
|
-
/* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "white", stopOpacity: "1" }),
|
|
26276
|
-
/* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "white", stopOpacity: "0" })
|
|
26277
|
-
] }),
|
|
26278
|
-
/* @__PURE__ */ jsx("mask", { id: maskId, children: /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: `url(#${gradientId})` }) })
|
|
26279
|
-
] }),
|
|
26280
|
-
/* @__PURE__ */ jsx(
|
|
26281
|
-
"rect",
|
|
26282
|
-
{
|
|
26283
|
-
width: "100%",
|
|
26284
|
-
height: "100%",
|
|
26285
|
-
fill: `url(#${patternId})`,
|
|
26286
|
-
mask: `url(#${maskId})`,
|
|
26287
|
-
opacity
|
|
26288
|
-
}
|
|
26289
|
-
)
|
|
26290
|
-
]
|
|
26291
|
-
}
|
|
26292
|
-
);
|
|
26293
|
-
}
|
|
26294
|
-
function DualMode({
|
|
26295
|
-
patternId,
|
|
26296
|
-
variant,
|
|
26297
|
-
size,
|
|
26298
|
-
color,
|
|
26299
|
-
strokeWidth,
|
|
26300
|
-
opacity,
|
|
26301
|
-
className
|
|
26302
|
-
}) {
|
|
26303
|
-
const maskId = `${patternId}-dmask`;
|
|
26304
|
-
const gradientId = `${patternId}-dgrad`;
|
|
26305
|
-
return /* @__PURE__ */ jsxs(
|
|
26306
|
-
"svg",
|
|
26307
|
-
{
|
|
26308
|
-
className: cn("absolute inset-0 w-full h-full pointer-events-none", className),
|
|
26309
|
-
preserveAspectRatio: "none",
|
|
26310
|
-
"aria-hidden": "true",
|
|
26311
|
-
children: [
|
|
26312
|
-
/* @__PURE__ */ jsx(
|
|
26313
|
-
PatternDefs,
|
|
26314
|
-
{
|
|
26315
|
-
patternId,
|
|
26316
|
-
variant,
|
|
26317
|
-
size,
|
|
26318
|
-
color,
|
|
26319
|
-
strokeWidth
|
|
26320
|
-
}
|
|
26321
|
-
),
|
|
26322
|
-
/* @__PURE__ */ jsxs("defs", { children: [
|
|
26323
|
-
/* @__PURE__ */ jsxs("linearGradient", { id: gradientId, x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
|
|
26324
|
-
/* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "white", stopOpacity: "1" }),
|
|
26325
|
-
/* @__PURE__ */ jsx("stop", { offset: "35%", stopColor: "white", stopOpacity: "0" }),
|
|
26326
|
-
/* @__PURE__ */ jsx("stop", { offset: "65%", stopColor: "white", stopOpacity: "0" }),
|
|
26327
|
-
/* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "white", stopOpacity: "1" })
|
|
26328
|
-
] }),
|
|
26329
|
-
/* @__PURE__ */ jsx("mask", { id: maskId, children: /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: `url(#${gradientId})` }) })
|
|
26330
|
-
] }),
|
|
26331
|
-
/* @__PURE__ */ jsx(
|
|
26332
|
-
"rect",
|
|
26333
|
-
{
|
|
26334
|
-
width: "100%",
|
|
26335
|
-
height: "100%",
|
|
26336
|
-
fill: `url(#${patternId})`,
|
|
26337
|
-
mask: `url(#${maskId})`,
|
|
26338
|
-
opacity
|
|
26339
|
-
}
|
|
26340
|
-
)
|
|
26341
|
-
]
|
|
26342
|
-
}
|
|
26343
|
-
);
|
|
26344
|
-
}
|
|
26345
|
-
function AroundMode({
|
|
26346
|
-
patternId,
|
|
26347
|
-
variant,
|
|
26348
|
-
size,
|
|
26349
|
-
color,
|
|
26350
|
-
strokeWidth,
|
|
26351
|
-
opacity,
|
|
26352
|
-
className
|
|
26353
|
-
}) {
|
|
26354
|
-
const maskId = `${patternId}-amask`;
|
|
26355
|
-
const gradientId = `${patternId}-agrad`;
|
|
26356
|
-
return /* @__PURE__ */ jsxs(
|
|
26357
|
-
"svg",
|
|
26358
|
-
{
|
|
26359
|
-
className: cn("absolute inset-0 w-full h-full pointer-events-none", className),
|
|
26360
|
-
preserveAspectRatio: "none",
|
|
26361
|
-
"aria-hidden": "true",
|
|
26362
|
-
children: [
|
|
26363
|
-
/* @__PURE__ */ jsx(
|
|
26364
|
-
PatternDefs,
|
|
26365
|
-
{
|
|
26366
|
-
patternId,
|
|
26367
|
-
variant,
|
|
26368
|
-
size,
|
|
26369
|
-
color,
|
|
26370
|
-
strokeWidth
|
|
26371
|
-
}
|
|
26372
|
-
),
|
|
26373
|
-
/* @__PURE__ */ jsxs("defs", { children: [
|
|
26374
|
-
/* @__PURE__ */ jsxs("radialGradient", { id: gradientId, cx: "50%", cy: "50%", r: "50%", children: [
|
|
26375
|
-
/* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "white", stopOpacity: "0" }),
|
|
26376
|
-
/* @__PURE__ */ jsx("stop", { offset: "55%", stopColor: "white", stopOpacity: "0" }),
|
|
26377
|
-
/* @__PURE__ */ jsx("stop", { offset: "85%", stopColor: "white", stopOpacity: "1" }),
|
|
26378
|
-
/* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "white", stopOpacity: "1" })
|
|
26379
|
-
] }),
|
|
26380
|
-
/* @__PURE__ */ jsx("mask", { id: maskId, children: /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: `url(#${gradientId})` }) })
|
|
26381
|
-
] }),
|
|
26382
|
-
/* @__PURE__ */ jsx(
|
|
26383
|
-
"rect",
|
|
26384
|
-
{
|
|
26385
|
-
width: "100%",
|
|
26386
|
-
height: "100%",
|
|
26387
|
-
fill: `url(#${patternId})`,
|
|
26388
|
-
mask: `url(#${maskId})`,
|
|
26389
|
-
opacity
|
|
26390
|
-
}
|
|
26391
|
-
)
|
|
26392
|
-
]
|
|
26393
|
-
}
|
|
26394
|
-
);
|
|
26395
|
-
}
|
|
26396
|
-
function FrameStrip({
|
|
26397
|
-
patternId,
|
|
26398
|
-
variant,
|
|
26399
|
-
size,
|
|
26400
|
-
color,
|
|
26401
|
-
strokeWidth,
|
|
26402
|
-
opacity,
|
|
26403
|
-
height
|
|
26404
|
-
}) {
|
|
26405
|
-
return /* @__PURE__ */ jsxs(
|
|
26406
|
-
"svg",
|
|
26407
|
-
{
|
|
26408
|
-
className: "w-full pointer-events-none",
|
|
26409
|
-
style: { height },
|
|
26410
|
-
preserveAspectRatio: "none",
|
|
26411
|
-
"aria-hidden": "true",
|
|
26412
|
-
children: [
|
|
26413
|
-
/* @__PURE__ */ jsx(
|
|
26414
|
-
PatternDefs,
|
|
26415
|
-
{
|
|
26416
|
-
patternId,
|
|
26417
|
-
variant,
|
|
26418
|
-
size,
|
|
26419
|
-
color,
|
|
26420
|
-
strokeWidth
|
|
26421
|
-
}
|
|
26422
|
-
),
|
|
26423
|
-
/* @__PURE__ */ jsx(
|
|
26424
|
-
"rect",
|
|
26425
|
-
{
|
|
26426
|
-
width: "100%",
|
|
26427
|
-
height: "100%",
|
|
26428
|
-
fill: `url(#${patternId})`,
|
|
26429
|
-
opacity
|
|
26430
|
-
}
|
|
26431
|
-
)
|
|
26432
|
-
]
|
|
26433
|
-
}
|
|
26434
|
-
);
|
|
26435
|
-
}
|
|
26436
|
-
var GeometricPattern;
|
|
26437
|
-
var init_GeometricPattern = __esm({
|
|
26438
|
-
"components/molecules/GeometricPattern.tsx"() {
|
|
26439
|
-
"use client";
|
|
26440
|
-
init_cn();
|
|
26441
|
-
init_PatternTile();
|
|
26442
|
-
init_Box();
|
|
26443
|
-
GeometricPattern = ({
|
|
26444
|
-
variant = "star8",
|
|
26445
|
-
mode = "background",
|
|
26446
|
-
opacity = 0.06,
|
|
26447
|
-
color = "var(--color-primary)",
|
|
26448
|
-
scale = 1,
|
|
26449
|
-
strokeWidth = 0.5,
|
|
26450
|
-
children,
|
|
26451
|
-
className
|
|
26452
|
-
}) => {
|
|
26453
|
-
const reactId = useId();
|
|
26454
|
-
const patternId = `gp${reactId.replace(/:/g, "")}`;
|
|
26455
|
-
const size = 60 * scale;
|
|
26456
|
-
const stripHeight = 40 * scale;
|
|
26457
|
-
if (mode === "frame") {
|
|
26458
|
-
const topId = `${patternId}-top`;
|
|
26459
|
-
const botId = `${patternId}-bot`;
|
|
26460
|
-
return /* @__PURE__ */ jsxs(Box, { className: cn("relative", className), children: [
|
|
26461
|
-
/* @__PURE__ */ jsx(
|
|
26462
|
-
FrameStrip,
|
|
26463
|
-
{
|
|
26464
|
-
patternId: topId,
|
|
26465
|
-
variant,
|
|
26466
|
-
size,
|
|
26467
|
-
color,
|
|
26468
|
-
strokeWidth,
|
|
26469
|
-
opacity,
|
|
26470
|
-
height: stripHeight
|
|
26471
|
-
}
|
|
26472
|
-
),
|
|
26473
|
-
children,
|
|
26474
|
-
/* @__PURE__ */ jsx(
|
|
26475
|
-
FrameStrip,
|
|
26476
|
-
{
|
|
26477
|
-
patternId: botId,
|
|
26478
|
-
variant,
|
|
26479
|
-
size,
|
|
26480
|
-
color,
|
|
26481
|
-
strokeWidth,
|
|
26482
|
-
opacity,
|
|
26483
|
-
height: stripHeight
|
|
26484
|
-
}
|
|
26485
|
-
)
|
|
26486
|
-
] });
|
|
26487
|
-
}
|
|
26488
|
-
if (mode === "around") {
|
|
26489
|
-
return /* @__PURE__ */ jsx(
|
|
26490
|
-
AroundMode,
|
|
26491
|
-
{
|
|
26492
|
-
patternId,
|
|
26493
|
-
variant,
|
|
26494
|
-
size,
|
|
26495
|
-
color,
|
|
26496
|
-
strokeWidth,
|
|
26497
|
-
opacity,
|
|
26498
|
-
className
|
|
26499
|
-
}
|
|
26500
|
-
);
|
|
26501
|
-
}
|
|
26502
|
-
if (mode === "dual") {
|
|
26503
|
-
return /* @__PURE__ */ jsx(
|
|
26504
|
-
DualMode,
|
|
26505
|
-
{
|
|
26506
|
-
patternId,
|
|
26507
|
-
variant,
|
|
26508
|
-
size,
|
|
26509
|
-
color,
|
|
26510
|
-
strokeWidth,
|
|
26511
|
-
opacity,
|
|
26512
|
-
className
|
|
26513
|
-
}
|
|
26514
|
-
);
|
|
26515
|
-
}
|
|
26516
|
-
if (mode === "left" || mode === "right") {
|
|
26517
|
-
return /* @__PURE__ */ jsx(
|
|
26518
|
-
SideMode,
|
|
26519
|
-
{
|
|
26520
|
-
patternId,
|
|
26521
|
-
variant,
|
|
26522
|
-
size,
|
|
26523
|
-
color,
|
|
26524
|
-
strokeWidth,
|
|
26525
|
-
opacity,
|
|
26526
|
-
side: mode,
|
|
26527
|
-
className
|
|
26528
|
-
}
|
|
26529
|
-
);
|
|
26530
|
-
}
|
|
26531
|
-
return /* @__PURE__ */ jsx(
|
|
26532
|
-
BackgroundMode,
|
|
26533
|
-
{
|
|
26534
|
-
patternId,
|
|
26535
|
-
variant,
|
|
26536
|
-
size,
|
|
26537
|
-
color,
|
|
26538
|
-
strokeWidth,
|
|
26539
|
-
opacity,
|
|
26540
|
-
className
|
|
26541
|
-
}
|
|
26542
|
-
);
|
|
26543
|
-
};
|
|
26544
|
-
GeometricPattern.displayName = "GeometricPattern";
|
|
26545
|
-
}
|
|
26546
|
-
});
|
|
26547
|
-
function ArchSVG({
|
|
26548
|
-
facing,
|
|
26549
|
-
w,
|
|
26550
|
-
h,
|
|
26551
|
-
color,
|
|
26552
|
-
strokeWidth
|
|
26553
|
-
}) {
|
|
26554
|
-
const paths = [];
|
|
26555
|
-
const archCount = 3;
|
|
26556
|
-
const archH = h / archCount;
|
|
26557
|
-
const rings = 5;
|
|
26558
|
-
for (let a = 0; a < archCount; a++) {
|
|
26559
|
-
const baseY = a * archH + archH;
|
|
26560
|
-
const topY = a * archH + archH * 0.05;
|
|
26561
|
-
for (let r = 0; r < rings; r++) {
|
|
26562
|
-
const scale = 1 - r * 0.17;
|
|
26563
|
-
const archW = w * 0.95 * scale;
|
|
26564
|
-
const aTopY = topY + (1 - scale) * (baseY - topY) * 0.5;
|
|
26565
|
-
const aBaseY = baseY - (1 - scale) * archH * 0.05;
|
|
26566
|
-
const edgeX2 = facing === "right" ? w : 0;
|
|
26567
|
-
const innerX2 = facing === "right" ? w - archW : archW;
|
|
26568
|
-
const midY = (aTopY + aBaseY) / 2;
|
|
26569
|
-
const radius = Math.sqrt(archW * archW + (aBaseY - midY) * (aBaseY - midY));
|
|
26570
|
-
if (facing === "right") {
|
|
26571
|
-
paths.push(
|
|
26572
|
-
`M ${f2(edgeX2)},${f2(aBaseY)} A ${f2(radius)} ${f2(radius)} 0 0 0 ${f2(innerX2)},${f2(aTopY + (aBaseY - aTopY) * 0.5)} A ${f2(radius)} ${f2(radius)} 0 0 0 ${f2(edgeX2)},${f2(aTopY)}`
|
|
26573
|
-
);
|
|
26574
|
-
} else {
|
|
26575
|
-
paths.push(
|
|
26576
|
-
`M ${f2(edgeX2)},${f2(aBaseY)} A ${f2(radius)} ${f2(radius)} 0 0 1 ${f2(innerX2)},${f2(aTopY + (aBaseY - aTopY) * 0.5)} A ${f2(radius)} ${f2(radius)} 0 0 1 ${f2(edgeX2)},${f2(aTopY)}`
|
|
26577
|
-
);
|
|
26578
|
-
}
|
|
26579
|
-
}
|
|
26580
|
-
const edgeX = facing === "right" ? w : 0;
|
|
26581
|
-
const innerX = facing === "right" ? w * 0.05 : w * 0.95;
|
|
26582
|
-
paths.push(`M ${f2(edgeX)},${f2(baseY)} L ${f2(innerX)},${f2(baseY)}`);
|
|
26583
|
-
}
|
|
26584
|
-
return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
|
|
26585
|
-
}
|
|
26586
|
-
function VineSVG({
|
|
26587
|
-
facing,
|
|
26588
|
-
w,
|
|
26589
|
-
h,
|
|
26590
|
-
color,
|
|
26591
|
-
strokeWidth
|
|
26592
|
-
}) {
|
|
26593
|
-
const paths = [];
|
|
26594
|
-
const dir = facing === "right" ? -1 : 1;
|
|
26595
|
-
const edgeX = facing === "right" ? w * 0.85 : w * 0.15;
|
|
26596
|
-
const segments = 5;
|
|
26597
|
-
const segH = h / segments;
|
|
26598
|
-
for (let i = 0; i < segments; i++) {
|
|
26599
|
-
const y0 = i * segH;
|
|
26600
|
-
const y1 = y0 + segH;
|
|
26601
|
-
const sway = w * 0.12 * (i % 2 === 0 ? 1 : -1);
|
|
26602
|
-
paths.push(
|
|
26603
|
-
`M ${f2(edgeX + sway)},${f2(y0)} C ${f2(edgeX - sway)},${f2(y0 + segH * 0.33)} ${f2(edgeX + sway)},${f2(y0 + segH * 0.66)} ${f2(edgeX - sway)},${f2(y1)}`
|
|
26604
|
-
);
|
|
26605
|
-
const branchY = y0 + segH * 0.35;
|
|
26606
|
-
const branchX = edgeX;
|
|
26607
|
-
const leafW = w * 0.55;
|
|
26608
|
-
const leafH = segH * 0.35;
|
|
26609
|
-
const leafTipX = branchX + dir * leafW;
|
|
26610
|
-
const leafTipY = branchY - leafH * 0.2;
|
|
26611
|
-
paths.push(
|
|
26612
|
-
`M ${f2(branchX)},${f2(branchY)} C ${f2(branchX + dir * leafW * 0.3)},${f2(branchY - leafH)} ${f2(leafTipX - dir * leafW * 0.1)},${f2(leafTipY - leafH * 0.3)} ${f2(leafTipX)},${f2(leafTipY)}`
|
|
26613
|
-
);
|
|
26614
|
-
paths.push(
|
|
26615
|
-
`M ${f2(leafTipX)},${f2(leafTipY)} C ${f2(leafTipX - dir * leafW * 0.2)},${f2(leafTipY + leafH * 0.6)} ${f2(branchX + dir * leafW * 0.15)},${f2(branchY + leafH * 0.4)} ${f2(branchX)},${f2(branchY + leafH * 0.1)}`
|
|
26616
|
-
);
|
|
26617
|
-
const tendrilY = y0 + segH * 0.7;
|
|
26618
|
-
const tendrilW = w * 0.35;
|
|
26619
|
-
const tendrilTipX = edgeX + dir * tendrilW;
|
|
26620
|
-
paths.push(
|
|
26621
|
-
`M ${f2(edgeX)},${f2(tendrilY)} Q ${f2(edgeX + dir * tendrilW * 0.6)},${f2(tendrilY - segH * 0.12)} ${f2(tendrilTipX)},${f2(tendrilY + segH * 0.05)}`
|
|
26622
|
-
);
|
|
26623
|
-
const spR = leafW * 0.08;
|
|
26624
|
-
paths.push(
|
|
26625
|
-
`M ${f2(leafTipX)},${f2(leafTipY)} A ${f2(spR)} ${f2(spR)} 0 1 ${facing === "right" ? 0 : 1} ${f2(leafTipX + dir * spR * 0.5)},${f2(leafTipY + spR)}`
|
|
26626
|
-
);
|
|
26627
|
-
}
|
|
26628
|
-
return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
|
|
26629
|
-
}
|
|
26630
|
-
function LatticeSVG({
|
|
26631
|
-
facing,
|
|
26632
|
-
w,
|
|
26633
|
-
h,
|
|
26634
|
-
color,
|
|
26635
|
-
strokeWidth
|
|
26636
|
-
}) {
|
|
26637
|
-
const paths = [];
|
|
26638
|
-
const cols = 5;
|
|
26639
|
-
const rows = Math.ceil(h / (w / cols));
|
|
26640
|
-
const cellW = w / cols;
|
|
26641
|
-
const cellH = cellW;
|
|
26642
|
-
const bulge = cellW * 0.3;
|
|
26643
|
-
for (let row = 0; row < rows; row++) {
|
|
26644
|
-
for (let col = 0; col < cols; col++) {
|
|
26645
|
-
const cx = col * cellW + cellW / 2;
|
|
26646
|
-
const cy = row * cellH + cellH / 2;
|
|
26647
|
-
const hw = cellW * 0.5;
|
|
26648
|
-
const hh = cellH * 0.5;
|
|
26649
|
-
paths.push(
|
|
26650
|
-
`M ${f2(cx)},${f2(cy - hh)} Q ${f2(cx + bulge)},${f2(cy)} ${f2(cx)},${f2(cy + hh)}`
|
|
26651
|
-
);
|
|
26652
|
-
paths.push(
|
|
26653
|
-
`M ${f2(cx)},${f2(cy - hh)} Q ${f2(cx - bulge)},${f2(cy)} ${f2(cx)},${f2(cy + hh)}`
|
|
26654
|
-
);
|
|
26655
|
-
paths.push(
|
|
26656
|
-
`M ${f2(cx - hw)},${f2(cy)} Q ${f2(cx)},${f2(cy - bulge * 0.5)} ${f2(cx + hw)},${f2(cy)}`
|
|
26657
|
-
);
|
|
26658
|
-
paths.push(
|
|
26659
|
-
`M ${f2(cx - hw)},${f2(cy)} Q ${f2(cx)},${f2(cy + bulge * 0.5)} ${f2(cx + hw)},${f2(cy)}`
|
|
26660
|
-
);
|
|
26661
|
-
}
|
|
26662
|
-
}
|
|
26663
|
-
return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
|
|
26664
|
-
}
|
|
26665
|
-
function f2(n) {
|
|
26666
|
-
return n.toFixed(2);
|
|
26667
|
-
}
|
|
26668
|
-
var VARIANT_MAP2, EdgeDecoration;
|
|
26669
|
-
var init_EdgeDecoration = __esm({
|
|
26670
|
-
"components/molecules/EdgeDecoration.tsx"() {
|
|
26671
|
-
"use client";
|
|
26672
|
-
init_cn();
|
|
26673
|
-
VARIANT_MAP2 = {
|
|
26674
|
-
arch: ArchSVG,
|
|
26675
|
-
vine: VineSVG,
|
|
26676
|
-
lattice: LatticeSVG
|
|
26677
|
-
};
|
|
26678
|
-
EdgeDecoration = ({
|
|
26679
|
-
variant = "arch",
|
|
26680
|
-
side = "both",
|
|
26681
|
-
opacity = 0.15,
|
|
26682
|
-
color = "var(--color-primary)",
|
|
26683
|
-
strokeWidth = 0.5,
|
|
26684
|
-
width = 15,
|
|
26685
|
-
className
|
|
26686
|
-
}) => {
|
|
26687
|
-
const id = useId();
|
|
26688
|
-
const Variant = VARIANT_MAP2[variant];
|
|
26689
|
-
const sides = side === "both" ? ["left", "right"] : [side];
|
|
26690
|
-
return /* @__PURE__ */ jsx(Fragment, { children: sides.map((s) => /* @__PURE__ */ jsx(
|
|
26691
|
-
"svg",
|
|
26692
|
-
{
|
|
26693
|
-
className: cn(
|
|
26694
|
-
"absolute top-0 h-full pointer-events-none",
|
|
26695
|
-
s === "left" ? "left-0" : "right-0",
|
|
26696
|
-
className
|
|
26697
|
-
),
|
|
26698
|
-
style: {
|
|
26699
|
-
width: `${width}%`,
|
|
26700
|
-
opacity
|
|
26701
|
-
},
|
|
26702
|
-
viewBox: `0 0 200 ${200 * 3}`,
|
|
26703
|
-
preserveAspectRatio: "none",
|
|
26704
|
-
"aria-hidden": "true",
|
|
26705
|
-
children: /* @__PURE__ */ jsx(
|
|
26706
|
-
Variant,
|
|
26707
|
-
{
|
|
26708
|
-
facing: s,
|
|
26709
|
-
w: 200,
|
|
26710
|
-
h: 600,
|
|
26711
|
-
color,
|
|
26712
|
-
strokeWidth
|
|
26713
|
-
}
|
|
26714
|
-
)
|
|
26715
|
-
},
|
|
26716
|
-
`${id}-${s}`
|
|
26717
|
-
)) });
|
|
26718
|
-
};
|
|
26719
|
-
EdgeDecoration.displayName = "EdgeDecoration";
|
|
26720
|
-
}
|
|
26721
|
-
});
|
|
26722
23947
|
|
|
26723
23948
|
// components/molecules/index.ts
|
|
26724
23949
|
var init_molecules = __esm({
|
|
26725
23950
|
"components/molecules/index.ts"() {
|
|
26726
|
-
init_ErrorBoundary();
|
|
26727
|
-
init_FileTree();
|
|
26728
|
-
init_FormField();
|
|
26729
23951
|
init_EmptyState();
|
|
26730
|
-
init_LoadingState();
|
|
26731
|
-
init_ErrorState();
|
|
26732
|
-
init_Skeleton();
|
|
26733
|
-
init_Accordion();
|
|
26734
|
-
init_Alert();
|
|
26735
|
-
init_Breadcrumb();
|
|
26736
|
-
init_ButtonGroup();
|
|
26737
|
-
init_FilterGroup();
|
|
26738
|
-
init_Card2();
|
|
26739
|
-
init_Container();
|
|
26740
|
-
init_Flex();
|
|
26741
|
-
init_FloatingActionButton();
|
|
26742
|
-
init_Grid();
|
|
26743
|
-
init_InputGroup();
|
|
26744
|
-
init_Menu();
|
|
26745
|
-
init_Modal();
|
|
26746
23952
|
init_Pagination();
|
|
26747
|
-
init_Popover();
|
|
26748
|
-
init_RelationSelect();
|
|
26749
|
-
init_SearchInput();
|
|
26750
|
-
init_SidePanel();
|
|
26751
|
-
init_SimpleGrid();
|
|
26752
|
-
init_Tabs();
|
|
26753
|
-
init_Toast();
|
|
26754
|
-
init_Tooltip();
|
|
26755
|
-
init_Drawer();
|
|
26756
|
-
init_WizardProgress();
|
|
26757
|
-
init_WizardNavigation();
|
|
26758
|
-
init_MarkdownContent();
|
|
26759
|
-
init_CodeBlock();
|
|
26760
|
-
init_QuizBlock();
|
|
26761
|
-
init_ScaledDiagram();
|
|
26762
|
-
init_CalendarGrid();
|
|
26763
|
-
init_RepeatableFormSection();
|
|
26764
|
-
init_ViolationAlert();
|
|
26765
|
-
init_FormSectionHeader();
|
|
26766
|
-
init_FlipCard();
|
|
26767
|
-
init_DateRangeSelector();
|
|
26768
|
-
init_ChartLegend();
|
|
26769
|
-
init_LineChart();
|
|
26770
|
-
init_ProgressDots();
|
|
26771
23953
|
init_game2();
|
|
26772
|
-
init_GraphView();
|
|
26773
|
-
init_MapView();
|
|
26774
|
-
init_NumberStepper();
|
|
26775
|
-
init_StarRating();
|
|
26776
|
-
init_UploadDropZone();
|
|
26777
|
-
init_Lightbox();
|
|
26778
|
-
init_DataGrid();
|
|
26779
|
-
init_DataList();
|
|
26780
|
-
init_StatDisplay();
|
|
26781
|
-
init_Meter();
|
|
26782
|
-
init_SwipeableRow();
|
|
26783
|
-
init_SortableList();
|
|
26784
|
-
init_Carousel();
|
|
26785
|
-
init_PullToRefresh();
|
|
26786
|
-
init_InstallBox();
|
|
26787
|
-
init_FeatureCard();
|
|
26788
|
-
init_FeatureGrid();
|
|
26789
|
-
init_CTABanner();
|
|
26790
|
-
init_HeroSection();
|
|
26791
|
-
init_PricingCard();
|
|
26792
|
-
init_PricingGrid();
|
|
26793
|
-
init_StatsGrid();
|
|
26794
|
-
init_ServiceCatalog();
|
|
26795
|
-
init_CaseStudyCard();
|
|
26796
|
-
init_ArticleSection();
|
|
26797
|
-
init_CodeExample();
|
|
26798
|
-
init_SocialProof();
|
|
26799
|
-
init_StepFlow();
|
|
26800
|
-
init_SplitSection();
|
|
26801
|
-
init_TagCloud();
|
|
26802
|
-
init_CommunityLinks();
|
|
26803
|
-
init_TeamCard();
|
|
26804
|
-
init_ShowcaseCard();
|
|
26805
|
-
init_GeometricPattern();
|
|
26806
|
-
init_EdgeDecoration();
|
|
26807
23954
|
}
|
|
26808
23955
|
});
|
|
26809
23956
|
|
|
@@ -27469,19 +24616,19 @@ function renderRichFieldValue(value, fieldName, fieldType) {
|
|
|
27469
24616
|
}
|
|
27470
24617
|
function normalizeFieldDefs(fields) {
|
|
27471
24618
|
if (!fields) return [];
|
|
27472
|
-
return fields.map((
|
|
27473
|
-
if (typeof
|
|
27474
|
-
if ("key" in
|
|
27475
|
-
if ("name" in
|
|
27476
|
-
return String(
|
|
24619
|
+
return fields.map((f) => {
|
|
24620
|
+
if (typeof f === "string") return f;
|
|
24621
|
+
if ("key" in f) return f.key;
|
|
24622
|
+
if ("name" in f) return f.name;
|
|
24623
|
+
return String(f);
|
|
27477
24624
|
});
|
|
27478
24625
|
}
|
|
27479
24626
|
function buildFieldTypeMap(fields) {
|
|
27480
24627
|
const map = {};
|
|
27481
24628
|
if (!fields) return map;
|
|
27482
|
-
for (const
|
|
27483
|
-
if (typeof
|
|
27484
|
-
map[
|
|
24629
|
+
for (const f of fields) {
|
|
24630
|
+
if (typeof f === "object" && "name" in f && "type" in f) {
|
|
24631
|
+
map[f.name] = f.type;
|
|
27485
24632
|
}
|
|
27486
24633
|
}
|
|
27487
24634
|
return map;
|
|
@@ -27578,22 +24725,22 @@ var init_DetailPanel = __esm({
|
|
|
27578
24725
|
title = String(normalizedData[primaryField]);
|
|
27579
24726
|
}
|
|
27580
24727
|
const statusFields = effectiveFieldNames.filter(
|
|
27581
|
-
(
|
|
24728
|
+
(f) => f.toLowerCase().includes("status") || f.toLowerCase().includes("priority")
|
|
27582
24729
|
);
|
|
27583
24730
|
const progressFields = effectiveFieldNames.filter(
|
|
27584
|
-
(
|
|
24731
|
+
(f) => f.toLowerCase().includes("progress") || f.toLowerCase().includes("percent")
|
|
27585
24732
|
);
|
|
27586
24733
|
const metricFields = effectiveFieldNames.filter(
|
|
27587
|
-
(
|
|
24734
|
+
(f) => (f.toLowerCase().includes("budget") || f.toLowerCase().includes("cost") || f.toLowerCase().includes("count")) && !progressFields.includes(f)
|
|
27588
24735
|
);
|
|
27589
24736
|
const dateFields = effectiveFieldNames.filter(
|
|
27590
|
-
(
|
|
24737
|
+
(f) => f.toLowerCase().includes("date") || f.toLowerCase().includes("time")
|
|
27591
24738
|
);
|
|
27592
24739
|
const descriptionFields = effectiveFieldNames.filter(
|
|
27593
|
-
(
|
|
24740
|
+
(f) => f.toLowerCase().includes("description") || f.toLowerCase().includes("note")
|
|
27594
24741
|
);
|
|
27595
24742
|
const otherFields = effectiveFieldNames.filter(
|
|
27596
|
-
(
|
|
24743
|
+
(f) => f !== primaryField && !statusFields.includes(f) && !progressFields.includes(f) && !metricFields.includes(f) && !dateFields.includes(f) && !descriptionFields.includes(f)
|
|
27597
24744
|
);
|
|
27598
24745
|
sections = [];
|
|
27599
24746
|
if (statusFields.length > 0 || otherFields.length > 0) {
|
|
@@ -27747,7 +24894,7 @@ var init_DetailPanel = __esm({
|
|
|
27747
24894
|
subtitle && /* @__PURE__ */ jsx(Typography, { variant: "body", color: "secondary", children: subtitle }),
|
|
27748
24895
|
/* @__PURE__ */ jsxs(HStack, { gap: "xs", wrap: true, children: [
|
|
27749
24896
|
normalizedData && effectiveFieldNames && effectiveFieldNames.filter(
|
|
27750
|
-
(
|
|
24897
|
+
(f) => f.toLowerCase().includes("status") || f.toLowerCase().includes("priority")
|
|
27751
24898
|
).map((field) => {
|
|
27752
24899
|
const value = getNestedValue(normalizedData, field);
|
|
27753
24900
|
if (!value) return null;
|
|
@@ -27763,7 +24910,7 @@ var init_DetailPanel = __esm({
|
|
|
27763
24910
|
status && /* @__PURE__ */ jsx(Badge, { variant: status.variant ?? "default", children: status.label })
|
|
27764
24911
|
] }),
|
|
27765
24912
|
normalizedData && effectiveFieldNames && effectiveFieldNames.filter(
|
|
27766
|
-
(
|
|
24913
|
+
(f) => f.toLowerCase().includes("progress") || f.toLowerCase().includes("percent")
|
|
27767
24914
|
).map((field) => {
|
|
27768
24915
|
const value = getNestedValue(normalizedData, field);
|
|
27769
24916
|
if (value === void 0 || value === null || typeof value !== "number")
|
|
@@ -28030,7 +25177,7 @@ var init_DocumentViewer = __esm({
|
|
|
28030
25177
|
}
|
|
28031
25178
|
});
|
|
28032
25179
|
function extractTitle(children) {
|
|
28033
|
-
if (!
|
|
25180
|
+
if (!React105__default.isValidElement(children)) return void 0;
|
|
28034
25181
|
const props = children.props;
|
|
28035
25182
|
if (typeof props.title === "string") {
|
|
28036
25183
|
return props.title;
|
|
@@ -28085,7 +25232,7 @@ function LinearView({
|
|
|
28085
25232
|
/* @__PURE__ */ jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
|
|
28086
25233
|
const isDone = i < currentIdx;
|
|
28087
25234
|
const isCurrent = i === currentIdx;
|
|
28088
|
-
return /* @__PURE__ */ jsxs(
|
|
25235
|
+
return /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
|
|
28089
25236
|
i > 0 && /* @__PURE__ */ jsx(
|
|
28090
25237
|
Typography,
|
|
28091
25238
|
{
|
|
@@ -28869,51 +26016,51 @@ var init_Form = __esm({
|
|
|
28869
26016
|
const isSchemaEntity = isOrbitalEntitySchema(entity);
|
|
28870
26017
|
const resolvedEntity = isSchemaEntity ? entity : void 0;
|
|
28871
26018
|
const entityName = typeof entity === "string" ? entity : resolvedEntity?.name;
|
|
28872
|
-
const normalizedInitialData =
|
|
26019
|
+
const normalizedInitialData = React105__default.useMemo(() => {
|
|
28873
26020
|
const entityRowAsInitial = isPlainEntityRow(entity) ? entity : void 0;
|
|
28874
26021
|
const callerInitial = initialData !== null && typeof initialData === "object" && !Array.isArray(initialData) ? initialData : {};
|
|
28875
26022
|
return entityRowAsInitial !== void 0 ? { ...entityRowAsInitial, ...callerInitial } : callerInitial;
|
|
28876
26023
|
}, [entity, initialData]);
|
|
28877
|
-
const entityDerivedFields =
|
|
26024
|
+
const entityDerivedFields = React105__default.useMemo(() => {
|
|
28878
26025
|
if (fields && fields.length > 0) return void 0;
|
|
28879
26026
|
if (!resolvedEntity) return void 0;
|
|
28880
26027
|
return resolvedEntity.fields.map(
|
|
28881
|
-
(
|
|
28882
|
-
name:
|
|
28883
|
-
type:
|
|
28884
|
-
required:
|
|
28885
|
-
defaultValue:
|
|
28886
|
-
values:
|
|
28887
|
-
min:
|
|
28888
|
-
max:
|
|
28889
|
-
relation:
|
|
26028
|
+
(f) => ({
|
|
26029
|
+
name: f.name,
|
|
26030
|
+
type: f.type,
|
|
26031
|
+
required: f.required,
|
|
26032
|
+
defaultValue: f.default,
|
|
26033
|
+
values: f.values,
|
|
26034
|
+
min: f.min,
|
|
26035
|
+
max: f.max,
|
|
26036
|
+
relation: f.relation ? { entity: f.relation.entity } : void 0
|
|
28890
26037
|
})
|
|
28891
26038
|
);
|
|
28892
26039
|
}, [entity, fields]);
|
|
28893
26040
|
const conditionalFields = typeof conditionalFieldsRaw === "boolean" ? {} : conditionalFieldsRaw;
|
|
28894
26041
|
const hiddenCalculations = typeof hiddenCalculationsRaw === "boolean" ? [] : hiddenCalculationsRaw;
|
|
28895
26042
|
const violationTriggers = typeof violationTriggersRaw === "boolean" ? [] : violationTriggersRaw;
|
|
28896
|
-
const [formData, setFormData] =
|
|
26043
|
+
const [formData, setFormData] = React105__default.useState(
|
|
28897
26044
|
normalizedInitialData
|
|
28898
26045
|
);
|
|
28899
|
-
const [collapsedSections, setCollapsedSections] =
|
|
26046
|
+
const [collapsedSections, setCollapsedSections] = React105__default.useState(
|
|
28900
26047
|
/* @__PURE__ */ new Set()
|
|
28901
26048
|
);
|
|
28902
26049
|
const formMode = props.mode;
|
|
28903
|
-
const mountedRef =
|
|
26050
|
+
const mountedRef = React105__default.useRef(false);
|
|
28904
26051
|
if (!mountedRef.current) {
|
|
28905
26052
|
mountedRef.current = true;
|
|
28906
26053
|
debug("forms", "mount", {
|
|
28907
26054
|
mode: formMode,
|
|
28908
26055
|
submitEvent,
|
|
28909
26056
|
cancelEvent,
|
|
28910
|
-
fieldNames: (fields ?? []).map((
|
|
26057
|
+
fieldNames: (fields ?? []).map((f) => f.name ?? f.field).filter(Boolean),
|
|
28911
26058
|
initialDataKeys: Object.keys(normalizedInitialData),
|
|
28912
26059
|
initialData: normalizedInitialData
|
|
28913
26060
|
});
|
|
28914
26061
|
}
|
|
28915
26062
|
const shouldShowCancel = showCancel ?? (fields && fields.length > 0);
|
|
28916
|
-
const evalContext =
|
|
26063
|
+
const evalContext = React105__default.useMemo(
|
|
28917
26064
|
() => ({
|
|
28918
26065
|
formValues: formData,
|
|
28919
26066
|
globalVariables: externalContext?.globalVariables ?? {},
|
|
@@ -28922,7 +26069,7 @@ var init_Form = __esm({
|
|
|
28922
26069
|
}),
|
|
28923
26070
|
[formData, externalContext]
|
|
28924
26071
|
);
|
|
28925
|
-
|
|
26072
|
+
React105__default.useEffect(() => {
|
|
28926
26073
|
debug("forms", "initialData-sync", {
|
|
28927
26074
|
mode: formMode,
|
|
28928
26075
|
normalizedInitialData,
|
|
@@ -28933,7 +26080,7 @@ var init_Form = __esm({
|
|
|
28933
26080
|
setFormData(normalizedInitialData);
|
|
28934
26081
|
}
|
|
28935
26082
|
}, [normalizedInitialData]);
|
|
28936
|
-
const processCalculations =
|
|
26083
|
+
const processCalculations = React105__default.useCallback(
|
|
28937
26084
|
(changedFieldId, newFormData) => {
|
|
28938
26085
|
if (!hiddenCalculations.length) return;
|
|
28939
26086
|
const context = {
|
|
@@ -28958,7 +26105,7 @@ var init_Form = __esm({
|
|
|
28958
26105
|
},
|
|
28959
26106
|
[hiddenCalculations, externalContext, eventBus]
|
|
28960
26107
|
);
|
|
28961
|
-
const checkViolations =
|
|
26108
|
+
const checkViolations = React105__default.useCallback(
|
|
28962
26109
|
(changedFieldId, newFormData) => {
|
|
28963
26110
|
if (!violationTriggers.length) return;
|
|
28964
26111
|
const context = {
|
|
@@ -28996,7 +26143,7 @@ var init_Form = __esm({
|
|
|
28996
26143
|
processCalculations(name, newFormData);
|
|
28997
26144
|
checkViolations(name, newFormData);
|
|
28998
26145
|
};
|
|
28999
|
-
const isFieldVisible =
|
|
26146
|
+
const isFieldVisible = React105__default.useCallback(
|
|
29000
26147
|
(fieldName) => {
|
|
29001
26148
|
const condition = conditionalFields[fieldName];
|
|
29002
26149
|
if (!condition) return true;
|
|
@@ -29004,7 +26151,7 @@ var init_Form = __esm({
|
|
|
29004
26151
|
},
|
|
29005
26152
|
[conditionalFields, evalContext]
|
|
29006
26153
|
);
|
|
29007
|
-
const isSectionVisible =
|
|
26154
|
+
const isSectionVisible = React105__default.useCallback(
|
|
29008
26155
|
(section) => {
|
|
29009
26156
|
if (!section.condition) return true;
|
|
29010
26157
|
return Boolean(evaluateFormExpression(section.condition, evalContext));
|
|
@@ -29048,7 +26195,7 @@ var init_Form = __esm({
|
|
|
29048
26195
|
eventBus.emit(`UI:${onCancel}`);
|
|
29049
26196
|
}
|
|
29050
26197
|
};
|
|
29051
|
-
const renderField =
|
|
26198
|
+
const renderField = React105__default.useCallback(
|
|
29052
26199
|
(field) => {
|
|
29053
26200
|
const fieldName = field.name || field.field;
|
|
29054
26201
|
if (!fieldName) return null;
|
|
@@ -29069,11 +26216,11 @@ var init_Form = __esm({
|
|
|
29069
26216
|
[formData, isFieldVisible, relationsData, relationsLoading, isLoading]
|
|
29070
26217
|
);
|
|
29071
26218
|
const effectiveFields = entityDerivedFields ?? fields;
|
|
29072
|
-
const normalizedFields =
|
|
26219
|
+
const normalizedFields = React105__default.useMemo(() => {
|
|
29073
26220
|
if (!effectiveFields || effectiveFields.length === 0) return [];
|
|
29074
26221
|
return effectiveFields.map((field) => {
|
|
29075
26222
|
if (typeof field === "string") {
|
|
29076
|
-
const entityField = resolvedEntity?.fields?.find((
|
|
26223
|
+
const entityField = resolvedEntity?.fields?.find((f) => f.name === field);
|
|
29077
26224
|
if (entityField) {
|
|
29078
26225
|
return {
|
|
29079
26226
|
name: field,
|
|
@@ -29091,7 +26238,7 @@ var init_Form = __esm({
|
|
|
29091
26238
|
return field;
|
|
29092
26239
|
});
|
|
29093
26240
|
}, [effectiveFields, resolvedEntity]);
|
|
29094
|
-
const schemaFields =
|
|
26241
|
+
const schemaFields = React105__default.useMemo(() => {
|
|
29095
26242
|
if (normalizedFields.length === 0) return null;
|
|
29096
26243
|
if (isDebugEnabled()) {
|
|
29097
26244
|
debugGroup(`Form: ${entityName || "unknown"}`);
|
|
@@ -29101,7 +26248,7 @@ var init_Form = __esm({
|
|
|
29101
26248
|
}
|
|
29102
26249
|
return normalizedFields.map(renderField).filter(Boolean);
|
|
29103
26250
|
}, [normalizedFields, renderField, entityName, conditionalFields]);
|
|
29104
|
-
const sectionElements =
|
|
26251
|
+
const sectionElements = React105__default.useMemo(() => {
|
|
29105
26252
|
if (!sections || sections.length === 0) return null;
|
|
29106
26253
|
return sections.map((section) => {
|
|
29107
26254
|
if (!isSectionVisible(section)) {
|
|
@@ -30406,7 +27553,7 @@ var init_InventoryPanel2 = __esm({
|
|
|
30406
27553
|
});
|
|
30407
27554
|
function normalizeFields2(fields) {
|
|
30408
27555
|
if (!fields) return [];
|
|
30409
|
-
return fields.map((
|
|
27556
|
+
return fields.map((f) => typeof f === "string" ? f : f.key ?? f.name ?? "");
|
|
30410
27557
|
}
|
|
30411
27558
|
function entityFieldsFromListItem(item) {
|
|
30412
27559
|
const {
|
|
@@ -30625,7 +27772,7 @@ var init_List = __esm({
|
|
|
30625
27772
|
if (entity && typeof entity === "object" && "id" in entity) return [entity];
|
|
30626
27773
|
return [];
|
|
30627
27774
|
}, [entity]);
|
|
30628
|
-
const getItemActions =
|
|
27775
|
+
const getItemActions = React105__default.useCallback(
|
|
30629
27776
|
(item) => {
|
|
30630
27777
|
if (!itemActions) return [];
|
|
30631
27778
|
if (typeof itemActions === "function") {
|
|
@@ -30729,19 +27876,19 @@ var init_List = __esm({
|
|
|
30729
27876
|
const rowActionPayload = { row: entityFieldsFromListItem(item) };
|
|
30730
27877
|
const primaryField = effectiveFieldNames?.[0];
|
|
30731
27878
|
const statusField = effectiveFieldNames?.find(
|
|
30732
|
-
(
|
|
27879
|
+
(f) => f.toLowerCase().includes("status")
|
|
30733
27880
|
);
|
|
30734
27881
|
const priorityField = effectiveFieldNames?.find(
|
|
30735
|
-
(
|
|
27882
|
+
(f) => f.toLowerCase().includes("priority")
|
|
30736
27883
|
);
|
|
30737
27884
|
const progressField = effectiveFieldNames?.find(
|
|
30738
|
-
(
|
|
27885
|
+
(f) => f.toLowerCase().includes("progress") || f.toLowerCase().includes("percent")
|
|
30739
27886
|
);
|
|
30740
27887
|
const dateFields = effectiveFieldNames?.filter(
|
|
30741
|
-
(
|
|
27888
|
+
(f) => f.toLowerCase().includes("date") || f.toLowerCase().includes("due")
|
|
30742
27889
|
) || [];
|
|
30743
27890
|
const metadataFields = effectiveFieldNames?.filter(
|
|
30744
|
-
(
|
|
27891
|
+
(f) => f !== primaryField && f !== statusField && f !== priorityField && f !== progressField && !dateFields.includes(f)
|
|
30745
27892
|
).slice(0, 2) || [];
|
|
30746
27893
|
const statusValue = statusField ? item._fields?.[statusField] : null;
|
|
30747
27894
|
statusValue ? getStatusStyle(statusField, String(statusValue)) : null;
|
|
@@ -31062,7 +28209,7 @@ var init_MediaGallery = __esm({
|
|
|
31062
28209
|
[selectable, selectedItems, selectionEvent, eventBus]
|
|
31063
28210
|
);
|
|
31064
28211
|
const entityData = Array.isArray(entity) ? entity : [];
|
|
31065
|
-
const items =
|
|
28212
|
+
const items = React105__default.useMemo(() => {
|
|
31066
28213
|
if (propItems) return propItems;
|
|
31067
28214
|
if (entityData.length === 0) return [];
|
|
31068
28215
|
return entityData.map((record, idx) => ({
|
|
@@ -31226,7 +28373,7 @@ var init_MediaGallery = __esm({
|
|
|
31226
28373
|
}
|
|
31227
28374
|
});
|
|
31228
28375
|
function extractTitle2(children) {
|
|
31229
|
-
if (!
|
|
28376
|
+
if (!React105__default.isValidElement(children)) return void 0;
|
|
31230
28377
|
const props = children.props;
|
|
31231
28378
|
if (typeof props.title === "string") {
|
|
31232
28379
|
return props.title;
|
|
@@ -31939,7 +29086,7 @@ var init_PageHeader = __esm({
|
|
|
31939
29086
|
info: "bg-info/10 text-info"
|
|
31940
29087
|
};
|
|
31941
29088
|
return /* @__PURE__ */ jsxs(Box, { className: cn("mb-6", className), children: [
|
|
31942
|
-
breadcrumbs && breadcrumbs.length > 0 && /* @__PURE__ */ jsx(Box, { as: "nav", className: "mb-4", children: /* @__PURE__ */ jsx(Box, { as: "ol", className: "flex items-center gap-2 text-sm", children: breadcrumbs.map((crumb, idx) => /* @__PURE__ */ jsxs(
|
|
29089
|
+
breadcrumbs && breadcrumbs.length > 0 && /* @__PURE__ */ jsx(Box, { as: "nav", className: "mb-4", children: /* @__PURE__ */ jsx(Box, { as: "ol", className: "flex items-center gap-2 text-sm", children: breadcrumbs.map((crumb, idx) => /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
|
|
31943
29090
|
idx > 0 && /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: "/" }),
|
|
31944
29091
|
crumb.href ? /* @__PURE__ */ jsx(
|
|
31945
29092
|
"a",
|
|
@@ -32113,7 +29260,7 @@ var init_debugRegistry = __esm({
|
|
|
32113
29260
|
}
|
|
32114
29261
|
});
|
|
32115
29262
|
function useDebugData() {
|
|
32116
|
-
const [data, setData] =
|
|
29263
|
+
const [data, setData] = React105.useState(() => ({
|
|
32117
29264
|
traits: [],
|
|
32118
29265
|
ticks: [],
|
|
32119
29266
|
guards: [],
|
|
@@ -32127,7 +29274,7 @@ function useDebugData() {
|
|
|
32127
29274
|
},
|
|
32128
29275
|
lastUpdate: Date.now()
|
|
32129
29276
|
}));
|
|
32130
|
-
|
|
29277
|
+
React105.useEffect(() => {
|
|
32131
29278
|
const updateData = () => {
|
|
32132
29279
|
setData({
|
|
32133
29280
|
traits: getAllTraits(),
|
|
@@ -32236,12 +29383,12 @@ function layoutGraph(states, transitions, initialState, width, height) {
|
|
|
32236
29383
|
return positions;
|
|
32237
29384
|
}
|
|
32238
29385
|
function WalkMinimap() {
|
|
32239
|
-
const [walkStep, setWalkStep] =
|
|
32240
|
-
const [traits2, setTraits] =
|
|
32241
|
-
const [coveredEdges, setCoveredEdges] =
|
|
32242
|
-
const [completedTraits, setCompletedTraits] =
|
|
32243
|
-
const prevTraitRef =
|
|
32244
|
-
|
|
29386
|
+
const [walkStep, setWalkStep] = React105.useState(null);
|
|
29387
|
+
const [traits2, setTraits] = React105.useState([]);
|
|
29388
|
+
const [coveredEdges, setCoveredEdges] = React105.useState([]);
|
|
29389
|
+
const [completedTraits, setCompletedTraits] = React105.useState(/* @__PURE__ */ new Set());
|
|
29390
|
+
const prevTraitRef = React105.useRef(null);
|
|
29391
|
+
React105.useEffect(() => {
|
|
32245
29392
|
const interval = setInterval(() => {
|
|
32246
29393
|
const w = window;
|
|
32247
29394
|
const step = w.__orbitalWalkStep;
|
|
@@ -32688,15 +29835,15 @@ var init_EntitiesTab = __esm({
|
|
|
32688
29835
|
}
|
|
32689
29836
|
});
|
|
32690
29837
|
function EventFlowTab({ events: events2 }) {
|
|
32691
|
-
const [filter, setFilter] =
|
|
32692
|
-
const containerRef =
|
|
32693
|
-
const [autoScroll, setAutoScroll] =
|
|
32694
|
-
|
|
29838
|
+
const [filter, setFilter] = React105.useState("all");
|
|
29839
|
+
const containerRef = React105.useRef(null);
|
|
29840
|
+
const [autoScroll, setAutoScroll] = React105.useState(true);
|
|
29841
|
+
React105.useEffect(() => {
|
|
32695
29842
|
if (autoScroll && containerRef.current) {
|
|
32696
29843
|
containerRef.current.scrollTop = containerRef.current.scrollHeight;
|
|
32697
29844
|
}
|
|
32698
29845
|
}, [events2.length, autoScroll]);
|
|
32699
|
-
const filteredEvents =
|
|
29846
|
+
const filteredEvents = React105.useMemo(() => {
|
|
32700
29847
|
if (filter === "all") return events2;
|
|
32701
29848
|
return events2.filter((e) => e.type === filter);
|
|
32702
29849
|
}, [events2, filter]);
|
|
@@ -32815,7 +29962,7 @@ var init_EventFlowTab = __esm({
|
|
|
32815
29962
|
}
|
|
32816
29963
|
});
|
|
32817
29964
|
function GuardsPanel({ guards }) {
|
|
32818
|
-
const [filter, setFilter] =
|
|
29965
|
+
const [filter, setFilter] = React105.useState("all");
|
|
32819
29966
|
if (guards.length === 0) {
|
|
32820
29967
|
return /* @__PURE__ */ jsx(
|
|
32821
29968
|
EmptyState,
|
|
@@ -32828,7 +29975,7 @@ function GuardsPanel({ guards }) {
|
|
|
32828
29975
|
}
|
|
32829
29976
|
const passedCount = guards.filter((g) => g.result).length;
|
|
32830
29977
|
const failedCount = guards.length - passedCount;
|
|
32831
|
-
const filteredGuards =
|
|
29978
|
+
const filteredGuards = React105.useMemo(() => {
|
|
32832
29979
|
if (filter === "all") return guards;
|
|
32833
29980
|
if (filter === "passed") return guards.filter((g) => g.result);
|
|
32834
29981
|
return guards.filter((g) => !g.result);
|
|
@@ -32989,10 +30136,10 @@ function EffectBadge({ effect }) {
|
|
|
32989
30136
|
] });
|
|
32990
30137
|
}
|
|
32991
30138
|
function TransitionTimeline({ transitions }) {
|
|
32992
|
-
const containerRef =
|
|
32993
|
-
const [autoScroll, setAutoScroll] =
|
|
32994
|
-
const [expandedId, setExpandedId] =
|
|
32995
|
-
|
|
30139
|
+
const containerRef = React105.useRef(null);
|
|
30140
|
+
const [autoScroll, setAutoScroll] = React105.useState(true);
|
|
30141
|
+
const [expandedId, setExpandedId] = React105.useState(null);
|
|
30142
|
+
React105.useEffect(() => {
|
|
32996
30143
|
if (autoScroll && containerRef.current) {
|
|
32997
30144
|
containerRef.current.scrollTop = containerRef.current.scrollHeight;
|
|
32998
30145
|
}
|
|
@@ -33216,9 +30363,9 @@ function extractPayloadFields(schema, eventName) {
|
|
|
33216
30363
|
for (const evt of events2) {
|
|
33217
30364
|
if (evt.name !== eventName) continue;
|
|
33218
30365
|
const payload = evt.payload ?? [];
|
|
33219
|
-
return payload.map((
|
|
33220
|
-
name:
|
|
33221
|
-
type:
|
|
30366
|
+
return payload.map((f) => ({
|
|
30367
|
+
name: f.name,
|
|
30368
|
+
type: f.type ?? "string"
|
|
33222
30369
|
}));
|
|
33223
30370
|
}
|
|
33224
30371
|
}
|
|
@@ -33278,9 +30425,9 @@ function getAllEvents(traits2) {
|
|
|
33278
30425
|
}
|
|
33279
30426
|
function EventDispatcherTab({ traits: traits2, schema }) {
|
|
33280
30427
|
const eventBus = useEventBus();
|
|
33281
|
-
const [log4, setLog] =
|
|
33282
|
-
const prevStatesRef =
|
|
33283
|
-
|
|
30428
|
+
const [log4, setLog] = React105.useState([]);
|
|
30429
|
+
const prevStatesRef = React105.useRef(/* @__PURE__ */ new Map());
|
|
30430
|
+
React105.useEffect(() => {
|
|
33284
30431
|
for (const trait of traits2) {
|
|
33285
30432
|
const prev = prevStatesRef.current.get(trait.id);
|
|
33286
30433
|
if (prev && prev !== trait.currentState) {
|
|
@@ -33450,10 +30597,10 @@ function VerifyModePanel({
|
|
|
33450
30597
|
serverCount,
|
|
33451
30598
|
localCount
|
|
33452
30599
|
}) {
|
|
33453
|
-
const [expanded, setExpanded] =
|
|
33454
|
-
const scrollRef =
|
|
33455
|
-
const prevCountRef =
|
|
33456
|
-
|
|
30600
|
+
const [expanded, setExpanded] = React105.useState(true);
|
|
30601
|
+
const scrollRef = React105.useRef(null);
|
|
30602
|
+
const prevCountRef = React105.useRef(0);
|
|
30603
|
+
React105.useEffect(() => {
|
|
33457
30604
|
if (expanded && transitions.length > prevCountRef.current && scrollRef.current) {
|
|
33458
30605
|
scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
|
|
33459
30606
|
}
|
|
@@ -33519,10 +30666,10 @@ function RuntimeDebugger({
|
|
|
33519
30666
|
defaultTab,
|
|
33520
30667
|
schema
|
|
33521
30668
|
}) {
|
|
33522
|
-
const [isCollapsed, setIsCollapsed] =
|
|
33523
|
-
const [isVisible, setIsVisible] =
|
|
30669
|
+
const [isCollapsed, setIsCollapsed] = React105.useState(mode === "verify" ? true : defaultCollapsed);
|
|
30670
|
+
const [isVisible, setIsVisible] = React105.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
|
|
33524
30671
|
const debugData = useDebugData();
|
|
33525
|
-
|
|
30672
|
+
React105.useEffect(() => {
|
|
33526
30673
|
if (mode === "inline") return;
|
|
33527
30674
|
return onDebugToggle((enabled) => {
|
|
33528
30675
|
setIsVisible(enabled);
|
|
@@ -33531,7 +30678,7 @@ function RuntimeDebugger({
|
|
|
33531
30678
|
}
|
|
33532
30679
|
});
|
|
33533
30680
|
}, [mode]);
|
|
33534
|
-
|
|
30681
|
+
React105.useEffect(() => {
|
|
33535
30682
|
if (mode === "inline") return;
|
|
33536
30683
|
const handleKeyDown = (e) => {
|
|
33537
30684
|
if (e.key === "`" && isVisible) {
|
|
@@ -34080,7 +31227,7 @@ function SequenceBar({
|
|
|
34080
31227
|
onSlotRemove(index);
|
|
34081
31228
|
}, [onSlotRemove, playing]);
|
|
34082
31229
|
const paddedSlots = Array.from({ length: maxSlots }, (_, i) => slots[i]);
|
|
34083
|
-
return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(
|
|
31230
|
+
return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
|
|
34084
31231
|
i > 0 && /* @__PURE__ */ jsx(
|
|
34085
31232
|
Typography,
|
|
34086
31233
|
{
|
|
@@ -34224,7 +31371,7 @@ function SequencerBoard({
|
|
|
34224
31371
|
setPlayState("idle");
|
|
34225
31372
|
setCurrentStep(-1);
|
|
34226
31373
|
emit("UI:PLAY_SOUND", { key: "fail" });
|
|
34227
|
-
const correctCount2 = feedback.filter((
|
|
31374
|
+
const correctCount2 = feedback.filter((f) => f === "correct").length;
|
|
34228
31375
|
for (let ci = 0; ci < correctCount2; ci++) {
|
|
34229
31376
|
setTimeout(() => {
|
|
34230
31377
|
emit("UI:PLAY_SOUND", { key: "correctSlot" });
|
|
@@ -34251,8 +31398,8 @@ function SequencerBoard({
|
|
|
34251
31398
|
};
|
|
34252
31399
|
const usedIds = entity.allowDuplicates === false ? slots.filter(Boolean).map((s) => s?.id || "") : [];
|
|
34253
31400
|
const showHint = attempts >= 3 && !!entity.hint;
|
|
34254
|
-
const hasFeedback = slotFeedback.some((
|
|
34255
|
-
const correctCount = slotFeedback.filter((
|
|
31401
|
+
const hasFeedback = slotFeedback.some((f) => f !== null);
|
|
31402
|
+
const correctCount = slotFeedback.filter((f) => f === "correct").length;
|
|
34256
31403
|
const encourageKey = ENCOURAGEMENT_KEYS2[Math.min(attempts - 1, ENCOURAGEMENT_KEYS2.length - 1)] ?? ENCOURAGEMENT_KEYS2[0];
|
|
34257
31404
|
return /* @__PURE__ */ jsxs(
|
|
34258
31405
|
VStack,
|
|
@@ -35388,7 +32535,7 @@ var init_SplitPane = __esm({
|
|
|
35388
32535
|
}
|
|
35389
32536
|
});
|
|
35390
32537
|
var StatCard;
|
|
35391
|
-
var
|
|
32538
|
+
var init_StatCard = __esm({
|
|
35392
32539
|
"components/organisms/StatCard.tsx"() {
|
|
35393
32540
|
"use client";
|
|
35394
32541
|
init_cn();
|
|
@@ -35425,7 +32572,7 @@ var init_StatCard2 = __esm({
|
|
|
35425
32572
|
const labelToUse = propLabel ?? propTitle;
|
|
35426
32573
|
const eventBus = useEventBus();
|
|
35427
32574
|
const { t } = useTranslate();
|
|
35428
|
-
const handleActionClick =
|
|
32575
|
+
const handleActionClick = React105__default.useCallback(() => {
|
|
35429
32576
|
if (action?.event) {
|
|
35430
32577
|
eventBus.emit(`UI:${action.event}`, {});
|
|
35431
32578
|
}
|
|
@@ -35436,7 +32583,7 @@ var init_StatCard2 = __esm({
|
|
|
35436
32583
|
const data = Array.isArray(entity) ? entity : entity ? [entity] : [];
|
|
35437
32584
|
const isLoading = externalLoading ?? false;
|
|
35438
32585
|
const error = externalError;
|
|
35439
|
-
const computeMetricValue =
|
|
32586
|
+
const computeMetricValue = React105__default.useCallback(
|
|
35440
32587
|
(metric, items) => {
|
|
35441
32588
|
if (metric.value !== void 0) {
|
|
35442
32589
|
return metric.value;
|
|
@@ -35475,7 +32622,7 @@ var init_StatCard2 = __esm({
|
|
|
35475
32622
|
},
|
|
35476
32623
|
[]
|
|
35477
32624
|
);
|
|
35478
|
-
const schemaStats =
|
|
32625
|
+
const schemaStats = React105__default.useMemo(() => {
|
|
35479
32626
|
if (!metrics || metrics.length === 0) return null;
|
|
35480
32627
|
return metrics.map((metric) => ({
|
|
35481
32628
|
label: metric.label,
|
|
@@ -35483,7 +32630,7 @@ var init_StatCard2 = __esm({
|
|
|
35483
32630
|
format: metric.format
|
|
35484
32631
|
}));
|
|
35485
32632
|
}, [metrics, data, computeMetricValue]);
|
|
35486
|
-
const calculatedTrend =
|
|
32633
|
+
const calculatedTrend = React105__default.useMemo(() => {
|
|
35487
32634
|
if (manualTrend !== void 0) return manualTrend;
|
|
35488
32635
|
if (previousValue === void 0 || currentValue === void 0)
|
|
35489
32636
|
return void 0;
|
|
@@ -36467,23 +33614,23 @@ var init_Timeline = __esm({
|
|
|
36467
33614
|
}) => {
|
|
36468
33615
|
const { t } = useTranslate();
|
|
36469
33616
|
const entityData = Array.isArray(entity) ? entity : [];
|
|
36470
|
-
const items =
|
|
33617
|
+
const items = React105__default.useMemo(() => {
|
|
36471
33618
|
if (propItems) return propItems;
|
|
36472
33619
|
if (entityData.length === 0) return [];
|
|
36473
33620
|
return entityData.map((record, idx) => {
|
|
36474
|
-
const resolveField = (
|
|
36475
|
-
if (typeof
|
|
36476
|
-
if (
|
|
33621
|
+
const resolveField = (f) => {
|
|
33622
|
+
if (typeof f === "string") return f;
|
|
33623
|
+
if (f && typeof f === "object" && "name" in f) return String(f.name);
|
|
36477
33624
|
return "";
|
|
36478
33625
|
};
|
|
36479
33626
|
const resolvedFields = fields?.map(resolveField) ?? [];
|
|
36480
33627
|
const titleField = resolvedFields[0] || "title";
|
|
36481
33628
|
const descField = resolvedFields[1] || "description";
|
|
36482
33629
|
const dateField = resolvedFields.find(
|
|
36483
|
-
(
|
|
33630
|
+
(f) => f.toLowerCase().includes("date")
|
|
36484
33631
|
) || "date";
|
|
36485
33632
|
const statusField = resolvedFields.find(
|
|
36486
|
-
(
|
|
33633
|
+
(f) => f.toLowerCase().includes("status")
|
|
36487
33634
|
) || "status";
|
|
36488
33635
|
return {
|
|
36489
33636
|
id: String(record.id ?? idx),
|
|
@@ -36574,7 +33721,7 @@ var init_Timeline = __esm({
|
|
|
36574
33721
|
}
|
|
36575
33722
|
});
|
|
36576
33723
|
function extractToastProps(children) {
|
|
36577
|
-
if (!
|
|
33724
|
+
if (!React105__default.isValidElement(children)) {
|
|
36578
33725
|
if (typeof children === "string") {
|
|
36579
33726
|
return { message: children };
|
|
36580
33727
|
}
|
|
@@ -36612,7 +33759,7 @@ var init_ToastSlot = __esm({
|
|
|
36612
33759
|
eventBus.emit("UI:CLOSE");
|
|
36613
33760
|
};
|
|
36614
33761
|
if (!isVisible) return null;
|
|
36615
|
-
const isCustomContent =
|
|
33762
|
+
const isCustomContent = React105__default.isValidElement(children) && !message;
|
|
36616
33763
|
return /* @__PURE__ */ jsx(Box, { className: "fixed bottom-4 right-4 z-50", children: isCustomContent ? children : /* @__PURE__ */ jsx(
|
|
36617
33764
|
Toast,
|
|
36618
33765
|
{
|
|
@@ -36881,7 +34028,7 @@ var init_WizardContainer = __esm({
|
|
|
36881
34028
|
const isCompleted = index < currentStep;
|
|
36882
34029
|
const stepKey = step.id ?? step.tabId ?? `step-${index}`;
|
|
36883
34030
|
const stepTitle = step.title ?? step.name ?? `Step ${index + 1}`;
|
|
36884
|
-
return /* @__PURE__ */ jsxs(
|
|
34031
|
+
return /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
|
|
36885
34032
|
/* @__PURE__ */ jsx(
|
|
36886
34033
|
Button,
|
|
36887
34034
|
{
|
|
@@ -37263,12 +34410,12 @@ var init_WorldMapTemplate = __esm({
|
|
|
37263
34410
|
}
|
|
37264
34411
|
});
|
|
37265
34412
|
function lazyThree(name, loader) {
|
|
37266
|
-
const Lazy =
|
|
34413
|
+
const Lazy = React105__default.lazy(() => loader().then((m) => ({ default: m[name] })));
|
|
37267
34414
|
function ThreeWrapper(props) {
|
|
37268
|
-
return
|
|
37269
|
-
|
|
34415
|
+
return React105__default.createElement(
|
|
34416
|
+
React105__default.Suspense,
|
|
37270
34417
|
{ fallback: null },
|
|
37271
|
-
|
|
34418
|
+
React105__default.createElement(Lazy, props)
|
|
37272
34419
|
);
|
|
37273
34420
|
}
|
|
37274
34421
|
ThreeWrapper.displayName = `Lazy(${name})`;
|
|
@@ -37424,7 +34571,7 @@ var init_component_registry_generated = __esm({
|
|
|
37424
34571
|
init_Stack();
|
|
37425
34572
|
init_StarRating();
|
|
37426
34573
|
init_StatBadge();
|
|
37427
|
-
|
|
34574
|
+
init_StatCard();
|
|
37428
34575
|
init_StatDisplay();
|
|
37429
34576
|
init_StateArchitectBoard();
|
|
37430
34577
|
init_StateIndicator();
|
|
@@ -37756,7 +34903,7 @@ function SuspenseConfigProvider({
|
|
|
37756
34903
|
config,
|
|
37757
34904
|
children
|
|
37758
34905
|
}) {
|
|
37759
|
-
return
|
|
34906
|
+
return React105__default.createElement(
|
|
37760
34907
|
SuspenseConfigContext.Provider,
|
|
37761
34908
|
{ value: config },
|
|
37762
34909
|
children
|
|
@@ -37777,7 +34924,7 @@ function getComponentForPattern(patternType) {
|
|
|
37777
34924
|
return COMPONENT_REGISTRY[name] ?? null;
|
|
37778
34925
|
}
|
|
37779
34926
|
function enrichFormFields(fields, entityDef) {
|
|
37780
|
-
const fieldMap = new Map(entityDef.fields.map((
|
|
34927
|
+
const fieldMap = new Map(entityDef.fields.map((f) => [f.name, f]));
|
|
37781
34928
|
return fields.map((field) => {
|
|
37782
34929
|
if (typeof field === "string") {
|
|
37783
34930
|
const entityField = fieldMap.get(field);
|
|
@@ -38239,7 +35386,7 @@ function renderPatternChildren(children, onDismiss, parentId = "root", parentPat
|
|
|
38239
35386
|
const key = `${parentId}-${index}-trait:${traitName}`;
|
|
38240
35387
|
return /* @__PURE__ */ jsx(TraitFrame, { traitName }, key);
|
|
38241
35388
|
}
|
|
38242
|
-
return /* @__PURE__ */ jsx(
|
|
35389
|
+
return /* @__PURE__ */ jsx(React105__default.Fragment, { children: child }, `${parentId}-${index}`);
|
|
38243
35390
|
}
|
|
38244
35391
|
if (!child || typeof child !== "object") return null;
|
|
38245
35392
|
const childId = `${parentId}-${index}`;
|
|
@@ -38276,14 +35423,14 @@ function isPatternConfig(value) {
|
|
|
38276
35423
|
if (value === null || value === void 0) return false;
|
|
38277
35424
|
if (typeof value !== "object") return false;
|
|
38278
35425
|
if (Array.isArray(value)) return false;
|
|
38279
|
-
if (
|
|
35426
|
+
if (React105__default.isValidElement(value)) return false;
|
|
38280
35427
|
if (value instanceof Date) return false;
|
|
38281
35428
|
if (typeof value === "function") return false;
|
|
38282
35429
|
const record = value;
|
|
38283
35430
|
return "type" in record && typeof record.type === "string";
|
|
38284
35431
|
}
|
|
38285
35432
|
function isPlainConfigObject(value) {
|
|
38286
|
-
if (
|
|
35433
|
+
if (React105__default.isValidElement(value)) return false;
|
|
38287
35434
|
if (value instanceof Date) return false;
|
|
38288
35435
|
const proto = Object.getPrototypeOf(value);
|
|
38289
35436
|
return proto === Object.prototype || proto === null;
|
|
@@ -39015,9 +36162,6 @@ function VerificationProvider({
|
|
|
39015
36162
|
return /* @__PURE__ */ jsx(Fragment, { children });
|
|
39016
36163
|
}
|
|
39017
36164
|
VerificationProvider.displayName = "VerificationProvider";
|
|
39018
|
-
|
|
39019
|
-
// providers/OrbitalProvider.tsx
|
|
39020
|
-
init_ThemeContext();
|
|
39021
36165
|
function OrbitalProvider({
|
|
39022
36166
|
children,
|
|
39023
36167
|
themes,
|