@almadar/ui 4.25.0 → 4.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/avl/index.cjs +1403 -4331
- package/dist/avl/index.js +330 -3258
- package/dist/components/index.cjs +1059 -1131
- package/dist/components/index.js +161 -233
- package/dist/providers/index.cjs +990 -3874
- package/dist/providers/index.js +258 -3142
- package/dist/runtime/index.cjs +1036 -3978
- package/dist/runtime/index.js +272 -3214
- package/package.json +5 -1
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({
|
|
@@ -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);
|
|
@@ -18722,9 +17737,9 @@ function DataGrid({
|
|
|
18722
17737
|
return next;
|
|
18723
17738
|
});
|
|
18724
17739
|
}, [data, selectionEvent, eventBus]);
|
|
18725
|
-
const titleField = fieldDefs.find((
|
|
18726
|
-
const badgeFields = fieldDefs.filter((
|
|
18727
|
-
const bodyFields = fieldDefs.filter((
|
|
17740
|
+
const titleField = fieldDefs.find((f) => f.variant === "h3" || f.variant === "h4") ?? fieldDefs[0];
|
|
17741
|
+
const badgeFields = fieldDefs.filter((f) => f.variant === "badge" && f !== titleField);
|
|
17742
|
+
const bodyFields = fieldDefs.filter((f) => f !== titleField && !badgeFields.includes(f));
|
|
18728
17743
|
const primaryActions = itemActions?.filter((a) => a.variant !== "danger") ?? [];
|
|
18729
17744
|
const dangerActions = itemActions?.filter((a) => a.variant === "danger") ?? [];
|
|
18730
17745
|
const handleActionClick = (action, itemData) => (e) => {
|
|
@@ -19079,13 +18094,13 @@ function DataList({
|
|
|
19079
18094
|
}) {
|
|
19080
18095
|
const eventBus = useEventBus();
|
|
19081
18096
|
const { t } = useTranslate();
|
|
19082
|
-
const [visibleCount, setVisibleCount] =
|
|
18097
|
+
const [visibleCount, setVisibleCount] = React105__default.useState(pageSize || Infinity);
|
|
19083
18098
|
const fieldDefs = fields ?? columns ?? [];
|
|
19084
18099
|
const allData = Array.isArray(entity) ? entity : entity ? [entity] : [];
|
|
19085
18100
|
const data = pageSize > 0 ? allData.slice(0, visibleCount) : allData;
|
|
19086
18101
|
const hasMoreLocal = pageSize > 0 && visibleCount < allData.length;
|
|
19087
18102
|
const hasRenderProp = typeof children === "function";
|
|
19088
|
-
|
|
18103
|
+
React105__default.useEffect(() => {
|
|
19089
18104
|
const renderItemTypeOf = typeof schemaRenderItem;
|
|
19090
18105
|
const childrenTypeOf = typeof children;
|
|
19091
18106
|
if (data.length > 0 && !hasRenderProp) {
|
|
@@ -19105,11 +18120,11 @@ function DataList({
|
|
|
19105
18120
|
});
|
|
19106
18121
|
}
|
|
19107
18122
|
}, [data, hasRenderProp, schemaRenderItem, children, fieldDefs]);
|
|
19108
|
-
const titleField = fieldDefs.find((
|
|
19109
|
-
const badgeFields = fieldDefs.filter((
|
|
19110
|
-
const progressFields = fieldDefs.filter((
|
|
18123
|
+
const titleField = fieldDefs.find((f) => f.variant === "h3" || f.variant === "h4") ?? fieldDefs[0];
|
|
18124
|
+
const badgeFields = fieldDefs.filter((f) => f.variant === "badge" && f !== titleField);
|
|
18125
|
+
const progressFields = fieldDefs.filter((f) => f.variant === "progress");
|
|
19111
18126
|
const bodyFields = fieldDefs.filter(
|
|
19112
|
-
(
|
|
18127
|
+
(f) => f !== titleField && !badgeFields.includes(f) && !progressFields.includes(f)
|
|
19113
18128
|
);
|
|
19114
18129
|
const handleActionClick = (action, itemData) => (e) => {
|
|
19115
18130
|
e.stopPropagation();
|
|
@@ -19141,14 +18156,14 @@ function DataList({
|
|
|
19141
18156
|
const items2 = data.map((item) => item);
|
|
19142
18157
|
const groups2 = groupBy ? groupData(items2, groupBy) : [{ label: "", items: items2 }];
|
|
19143
18158
|
const contentField = titleField?.name ?? fieldDefs[0]?.name ?? "";
|
|
19144
|
-
return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(
|
|
18159
|
+
return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
|
|
19145
18160
|
group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: "my-2" }),
|
|
19146
18161
|
group.items.map((itemData, index) => {
|
|
19147
18162
|
const id = itemData.id || `${gi}-${index}`;
|
|
19148
18163
|
const sender = senderField ? String(getNestedValue(itemData, senderField) ?? "") : "";
|
|
19149
18164
|
const isSent = Boolean(currentUser && sender === currentUser);
|
|
19150
18165
|
const content = getNestedValue(itemData, contentField);
|
|
19151
|
-
const timestampField = fieldDefs.find((
|
|
18166
|
+
const timestampField = fieldDefs.find((f) => f.format === "date");
|
|
19152
18167
|
const timestamp = timestampField ? getNestedValue(itemData, timestampField.name) : null;
|
|
19153
18168
|
return /* @__PURE__ */ jsx(
|
|
19154
18169
|
Box,
|
|
@@ -19332,7 +18347,7 @@ function DataList({
|
|
|
19332
18347
|
className
|
|
19333
18348
|
),
|
|
19334
18349
|
children: [
|
|
19335
|
-
groups.map((group, gi) => /* @__PURE__ */ jsxs(
|
|
18350
|
+
groups.map((group, gi) => /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
|
|
19336
18351
|
group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: gi > 0 ? "mt-4" : "mt-0" }),
|
|
19337
18352
|
group.items.map(
|
|
19338
18353
|
(itemData, index) => renderItem(itemData, index, gi === groups.length - 1 && index === group.items.length - 1)
|
|
@@ -19387,135 +18402,6 @@ var init_DataList = __esm({
|
|
|
19387
18402
|
DataList.displayName = "DataList";
|
|
19388
18403
|
}
|
|
19389
18404
|
});
|
|
19390
|
-
function fileIcon(name) {
|
|
19391
|
-
const ext = name.split(".").pop()?.toLowerCase() ?? "";
|
|
19392
|
-
switch (ext) {
|
|
19393
|
-
case "ts":
|
|
19394
|
-
case "tsx":
|
|
19395
|
-
return "file-code";
|
|
19396
|
-
case "js":
|
|
19397
|
-
case "jsx":
|
|
19398
|
-
return "file-code";
|
|
19399
|
-
case "json":
|
|
19400
|
-
case "orb":
|
|
19401
|
-
return "file-json";
|
|
19402
|
-
case "css":
|
|
19403
|
-
case "scss":
|
|
19404
|
-
return "file-text";
|
|
19405
|
-
case "md":
|
|
19406
|
-
return "file-text";
|
|
19407
|
-
case "py":
|
|
19408
|
-
return "file-code";
|
|
19409
|
-
case "html":
|
|
19410
|
-
return "file-code";
|
|
19411
|
-
default:
|
|
19412
|
-
return "file";
|
|
19413
|
-
}
|
|
19414
|
-
}
|
|
19415
|
-
var TreeNodeItem, FileTree;
|
|
19416
|
-
var init_FileTree = __esm({
|
|
19417
|
-
"components/molecules/FileTree.tsx"() {
|
|
19418
|
-
"use client";
|
|
19419
|
-
init_Box();
|
|
19420
|
-
init_Typography();
|
|
19421
|
-
init_Icon();
|
|
19422
|
-
TreeNodeItem = ({
|
|
19423
|
-
node,
|
|
19424
|
-
depth,
|
|
19425
|
-
indent,
|
|
19426
|
-
selectedPath,
|
|
19427
|
-
onFileSelect,
|
|
19428
|
-
defaultExpanded = false
|
|
19429
|
-
}) => {
|
|
19430
|
-
const [expanded, setExpanded] = useState(defaultExpanded || depth < 1);
|
|
19431
|
-
const isDir = node.type === "dir";
|
|
19432
|
-
const isSelected = node.path === selectedPath;
|
|
19433
|
-
const handleClick = useCallback(() => {
|
|
19434
|
-
if (isDir) {
|
|
19435
|
-
setExpanded((prev) => !prev);
|
|
19436
|
-
} else {
|
|
19437
|
-
onFileSelect?.(node.path);
|
|
19438
|
-
}
|
|
19439
|
-
}, [isDir, node.path, onFileSelect]);
|
|
19440
|
-
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
19441
|
-
/* @__PURE__ */ jsxs(
|
|
19442
|
-
Box,
|
|
19443
|
-
{
|
|
19444
|
-
className: `flex items-center gap-1.5 py-0.5 px-2 cursor-pointer rounded-sm transition-colors ${isSelected ? "bg-[var(--color-primary)] bg-opacity-15 text-[var(--color-primary)]" : "hover:bg-[var(--color-muted)] hover:bg-opacity-30"}`,
|
|
19445
|
-
style: { paddingLeft: depth * indent + 8 },
|
|
19446
|
-
onClick: handleClick,
|
|
19447
|
-
role: "treeitem",
|
|
19448
|
-
"aria-selected": isSelected,
|
|
19449
|
-
"aria-expanded": isDir ? expanded : void 0,
|
|
19450
|
-
children: [
|
|
19451
|
-
isDir ? /* @__PURE__ */ jsx(
|
|
19452
|
-
Icon,
|
|
19453
|
-
{
|
|
19454
|
-
name: expanded ? "chevron-down" : "chevron-right",
|
|
19455
|
-
size: "xs",
|
|
19456
|
-
className: "text-[var(--color-muted-foreground)] flex-shrink-0"
|
|
19457
|
-
}
|
|
19458
|
-
) : /* @__PURE__ */ jsx(Box, { style: { width: 12, flexShrink: 0 } }),
|
|
19459
|
-
/* @__PURE__ */ jsx(
|
|
19460
|
-
Icon,
|
|
19461
|
-
{
|
|
19462
|
-
name: isDir ? expanded ? "folder-open" : "folder" : fileIcon(node.name),
|
|
19463
|
-
size: "xs",
|
|
19464
|
-
className: isDir ? "text-[var(--color-warning)]" : "text-[var(--color-muted-foreground)]"
|
|
19465
|
-
}
|
|
19466
|
-
),
|
|
19467
|
-
/* @__PURE__ */ jsx(
|
|
19468
|
-
Typography,
|
|
19469
|
-
{
|
|
19470
|
-
variant: "caption",
|
|
19471
|
-
className: `truncate font-mono text-[11px] ${isSelected ? "font-semibold" : ""}`,
|
|
19472
|
-
children: node.name
|
|
19473
|
-
}
|
|
19474
|
-
),
|
|
19475
|
-
!isDir && node.size !== void 0 && /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "text-[var(--color-muted-foreground)] text-[9px] ml-auto flex-shrink-0", children: node.size < 1024 ? `${node.size}B` : `${Math.round(node.size / 1024)}KB` })
|
|
19476
|
-
]
|
|
19477
|
-
}
|
|
19478
|
-
),
|
|
19479
|
-
isDir && expanded && node.children && /* @__PURE__ */ jsx(Box, { role: "group", children: node.children.map((child) => /* @__PURE__ */ jsx(
|
|
19480
|
-
TreeNodeItem,
|
|
19481
|
-
{
|
|
19482
|
-
node: child,
|
|
19483
|
-
depth: depth + 1,
|
|
19484
|
-
indent,
|
|
19485
|
-
selectedPath,
|
|
19486
|
-
onFileSelect,
|
|
19487
|
-
defaultExpanded: depth < 0
|
|
19488
|
-
},
|
|
19489
|
-
child.path
|
|
19490
|
-
)) })
|
|
19491
|
-
] });
|
|
19492
|
-
};
|
|
19493
|
-
FileTree = ({
|
|
19494
|
-
tree,
|
|
19495
|
-
selectedPath,
|
|
19496
|
-
onFileSelect,
|
|
19497
|
-
className,
|
|
19498
|
-
indent = 16
|
|
19499
|
-
}) => {
|
|
19500
|
-
if (tree.length === 0) {
|
|
19501
|
-
return /* @__PURE__ */ jsx(Box, { className: `p-4 ${className ?? ""}`, children: /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: "No files" }) });
|
|
19502
|
-
}
|
|
19503
|
-
return /* @__PURE__ */ jsx(Box, { className: `py-1 overflow-y-auto ${className ?? ""}`, role: "tree", children: tree.map((node) => /* @__PURE__ */ jsx(
|
|
19504
|
-
TreeNodeItem,
|
|
19505
|
-
{
|
|
19506
|
-
node,
|
|
19507
|
-
depth: 0,
|
|
19508
|
-
indent,
|
|
19509
|
-
selectedPath,
|
|
19510
|
-
onFileSelect,
|
|
19511
|
-
defaultExpanded: true
|
|
19512
|
-
},
|
|
19513
|
-
node.path
|
|
19514
|
-
)) });
|
|
19515
|
-
};
|
|
19516
|
-
FileTree.displayName = "FileTree";
|
|
19517
|
-
}
|
|
19518
|
-
});
|
|
19519
18405
|
var FormField;
|
|
19520
18406
|
var init_FormField = __esm({
|
|
19521
18407
|
"components/molecules/FormField.tsx"() {
|
|
@@ -19866,7 +18752,7 @@ var init_FilterGroup = __esm({
|
|
|
19866
18752
|
) }, filter.field)),
|
|
19867
18753
|
activeFilterCount > 0 && /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
19868
18754
|
Object.entries(selectedValues).map(([field, value]) => {
|
|
19869
|
-
const filterDef = filters.find((
|
|
18755
|
+
const filterDef = filters.find((f) => f.field === field);
|
|
19870
18756
|
return /* @__PURE__ */ jsxs(
|
|
19871
18757
|
Badge,
|
|
19872
18758
|
{
|
|
@@ -20608,7 +19494,7 @@ var init_WizardProgress = __esm({
|
|
|
20608
19494
|
children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: normalizedSteps.map((step, index) => {
|
|
20609
19495
|
const isActive = index === currentStep;
|
|
20610
19496
|
const isCompleted = index < currentStep;
|
|
20611
|
-
return /* @__PURE__ */ jsxs(
|
|
19497
|
+
return /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
|
|
20612
19498
|
/* @__PURE__ */ jsx(
|
|
20613
19499
|
"button",
|
|
20614
19500
|
{
|
|
@@ -21519,7 +20405,7 @@ function InventoryGrid({
|
|
|
21519
20405
|
const eventBus = useEventBus();
|
|
21520
20406
|
const slotCount = totalSlots ?? items.length;
|
|
21521
20407
|
const emptySlotCount = Math.max(0, slotCount - items.length);
|
|
21522
|
-
const handleSelect =
|
|
20408
|
+
const handleSelect = React105.useCallback(
|
|
21523
20409
|
(id) => {
|
|
21524
20410
|
onSelect?.(id);
|
|
21525
20411
|
if (selectEvent) {
|
|
@@ -21732,15 +20618,15 @@ function GameCanvas2D({
|
|
|
21732
20618
|
fps = 60,
|
|
21733
20619
|
className
|
|
21734
20620
|
}) {
|
|
21735
|
-
const canvasRef =
|
|
21736
|
-
const rafRef =
|
|
21737
|
-
const frameRef =
|
|
21738
|
-
const lastTimeRef =
|
|
21739
|
-
const onDrawRef =
|
|
20621
|
+
const canvasRef = React105.useRef(null);
|
|
20622
|
+
const rafRef = React105.useRef(0);
|
|
20623
|
+
const frameRef = React105.useRef(0);
|
|
20624
|
+
const lastTimeRef = React105.useRef(0);
|
|
20625
|
+
const onDrawRef = React105.useRef(onDraw);
|
|
21740
20626
|
onDrawRef.current = onDraw;
|
|
21741
|
-
const onTickRef =
|
|
20627
|
+
const onTickRef = React105.useRef(onTick);
|
|
21742
20628
|
onTickRef.current = onTick;
|
|
21743
|
-
|
|
20629
|
+
React105.useEffect(() => {
|
|
21744
20630
|
const canvas = canvasRef.current;
|
|
21745
20631
|
if (!canvas) return;
|
|
21746
20632
|
const ctx = canvas.getContext("2d");
|
|
@@ -22029,7 +20915,7 @@ function TurnPanel({
|
|
|
22029
20915
|
className
|
|
22030
20916
|
}) {
|
|
22031
20917
|
const eventBus = useEventBus();
|
|
22032
|
-
const handleAction =
|
|
20918
|
+
const handleAction = React105.useCallback(
|
|
22033
20919
|
(event) => {
|
|
22034
20920
|
if (event) {
|
|
22035
20921
|
eventBus.emit(event, { turn: currentTurn, phase, activeTeam });
|
|
@@ -22175,7 +21061,7 @@ function UnitCommandBar({
|
|
|
22175
21061
|
className
|
|
22176
21062
|
}) {
|
|
22177
21063
|
const eventBus = useEventBus();
|
|
22178
|
-
const handleCommand =
|
|
21064
|
+
const handleCommand = React105.useCallback(
|
|
22179
21065
|
(event) => {
|
|
22180
21066
|
if (event) {
|
|
22181
21067
|
eventBus.emit(event, { unitId: selectedUnitId });
|
|
@@ -22660,7 +21546,7 @@ function GameMenu({
|
|
|
22660
21546
|
} catch {
|
|
22661
21547
|
}
|
|
22662
21548
|
const eventBus = eventBusProp || eventBusFromHook;
|
|
22663
|
-
const handleOptionClick =
|
|
21549
|
+
const handleOptionClick = React105.useCallback(
|
|
22664
21550
|
(option) => {
|
|
22665
21551
|
if (option.event && eventBus) {
|
|
22666
21552
|
eventBus.emit(`UI:${option.event}`, { option });
|
|
@@ -22774,7 +21660,7 @@ function GameOverScreen({
|
|
|
22774
21660
|
} catch {
|
|
22775
21661
|
}
|
|
22776
21662
|
const eventBus = eventBusProp || eventBusFromHook;
|
|
22777
|
-
const handleActionClick =
|
|
21663
|
+
const handleActionClick = React105.useCallback(
|
|
22778
21664
|
(action) => {
|
|
22779
21665
|
if (action.event && eventBus) {
|
|
22780
21666
|
eventBus.emit(`UI:${action.event}`, { action });
|
|
@@ -23144,28 +22030,6 @@ var init_PlatformerCanvas = __esm({
|
|
|
23144
22030
|
// components/molecules/game/index.ts
|
|
23145
22031
|
var init_game2 = __esm({
|
|
23146
22032
|
"components/molecules/game/index.ts"() {
|
|
23147
|
-
init_DPad();
|
|
23148
|
-
init_ActionButtons();
|
|
23149
|
-
init_StatBadge();
|
|
23150
|
-
init_InventoryGrid();
|
|
23151
|
-
init_QuestTracker();
|
|
23152
|
-
init_CraftingRecipe();
|
|
23153
|
-
init_PowerupSlots();
|
|
23154
|
-
init_GameCanvas2D();
|
|
23155
|
-
init_HealthPanel();
|
|
23156
|
-
init_ScoreBoard();
|
|
23157
|
-
init_ResourceBar();
|
|
23158
|
-
init_TurnPanel();
|
|
23159
|
-
init_EnemyPlate();
|
|
23160
|
-
init_UnitCommandBar();
|
|
23161
|
-
init_GameHud();
|
|
23162
|
-
init_DialogueBox();
|
|
23163
|
-
init_CombatLog();
|
|
23164
|
-
init_InventoryPanel();
|
|
23165
|
-
init_GameMenu();
|
|
23166
|
-
init_GameOverScreen();
|
|
23167
|
-
init_PlatformerCanvas();
|
|
23168
|
-
init_IsometricCanvas();
|
|
23169
22033
|
}
|
|
23170
22034
|
});
|
|
23171
22035
|
function resolveNodeColor(node, groups) {
|
|
@@ -23903,7 +22767,7 @@ var init_UploadDropZone = __esm({
|
|
|
23903
22767
|
if (action) {
|
|
23904
22768
|
eventBus.emit(`UI:${action}`, {
|
|
23905
22769
|
...actionPayload,
|
|
23906
|
-
files: valid.map((
|
|
22770
|
+
files: valid.map((f) => ({ name: f.name, size: f.size, type: f.type }))
|
|
23907
22771
|
});
|
|
23908
22772
|
}
|
|
23909
22773
|
}
|
|
@@ -25052,1758 +23916,13 @@ var init_PullToRefresh = __esm({
|
|
|
25052
23916
|
PullToRefresh.displayName = "PullToRefresh";
|
|
25053
23917
|
}
|
|
25054
23918
|
});
|
|
25055
|
-
var InstallBox;
|
|
25056
|
-
var init_InstallBox = __esm({
|
|
25057
|
-
"components/molecules/InstallBox.tsx"() {
|
|
25058
|
-
"use client";
|
|
25059
|
-
init_cn();
|
|
25060
|
-
init_Box();
|
|
25061
|
-
init_Typography();
|
|
25062
|
-
init_Button();
|
|
25063
|
-
InstallBox = ({
|
|
25064
|
-
command,
|
|
25065
|
-
label,
|
|
25066
|
-
className
|
|
25067
|
-
}) => {
|
|
25068
|
-
const [copied, setCopied] = useState(false);
|
|
25069
|
-
const handleCopy = useCallback(() => {
|
|
25070
|
-
void navigator.clipboard.writeText(command);
|
|
25071
|
-
setCopied(true);
|
|
25072
|
-
const timer = setTimeout(() => setCopied(false), 2e3);
|
|
25073
|
-
return () => clearTimeout(timer);
|
|
25074
|
-
}, [command]);
|
|
25075
|
-
return /* @__PURE__ */ jsxs(Box, { className: cn("inline-block", className), children: [
|
|
25076
|
-
label && /* @__PURE__ */ jsx(Typography, { variant: "caption", className: "mb-1", children: label }),
|
|
25077
|
-
/* @__PURE__ */ jsx(
|
|
25078
|
-
Box,
|
|
25079
|
-
{
|
|
25080
|
-
className: "bg-surface rounded-md border-[length:var(--border-width)] border-border",
|
|
25081
|
-
padding: "md",
|
|
25082
|
-
children: /* @__PURE__ */ jsxs(Box, { className: "flex items-center gap-3", children: [
|
|
25083
|
-
/* @__PURE__ */ jsx(
|
|
25084
|
-
Typography,
|
|
25085
|
-
{
|
|
25086
|
-
variant: "body2",
|
|
25087
|
-
className: "font-mono flex-1 min-w-0 select-all",
|
|
25088
|
-
truncate: true,
|
|
25089
|
-
children: command
|
|
25090
|
-
}
|
|
25091
|
-
),
|
|
25092
|
-
/* @__PURE__ */ jsx(
|
|
25093
|
-
Button,
|
|
25094
|
-
{
|
|
25095
|
-
variant: "ghost",
|
|
25096
|
-
size: "sm",
|
|
25097
|
-
leftIcon: copied ? "check" : "copy",
|
|
25098
|
-
onClick: handleCopy,
|
|
25099
|
-
className: "flex-shrink-0",
|
|
25100
|
-
"aria-label": copied ? "Copied" : "Copy to clipboard",
|
|
25101
|
-
children: copied ? "Copied" : "Copy"
|
|
25102
|
-
}
|
|
25103
|
-
)
|
|
25104
|
-
] })
|
|
25105
|
-
}
|
|
25106
|
-
)
|
|
25107
|
-
] });
|
|
25108
|
-
};
|
|
25109
|
-
InstallBox.displayName = "InstallBox";
|
|
25110
|
-
}
|
|
25111
|
-
});
|
|
25112
|
-
var iconSizeMap, gapMap, FeatureCard;
|
|
25113
|
-
var init_FeatureCard = __esm({
|
|
25114
|
-
"components/molecules/FeatureCard.tsx"() {
|
|
25115
|
-
"use client";
|
|
25116
|
-
init_cn();
|
|
25117
|
-
init_Card();
|
|
25118
|
-
init_Stack();
|
|
25119
|
-
init_Icon();
|
|
25120
|
-
init_Typography();
|
|
25121
|
-
init_Button();
|
|
25122
|
-
iconSizeMap = {
|
|
25123
|
-
sm: "lg",
|
|
25124
|
-
md: "xl",
|
|
25125
|
-
lg: "xl"
|
|
25126
|
-
};
|
|
25127
|
-
gapMap = {
|
|
25128
|
-
sm: "sm",
|
|
25129
|
-
md: "md",
|
|
25130
|
-
lg: "lg"
|
|
25131
|
-
};
|
|
25132
|
-
FeatureCard = ({
|
|
25133
|
-
icon,
|
|
25134
|
-
title,
|
|
25135
|
-
description,
|
|
25136
|
-
href,
|
|
25137
|
-
linkLabel = "Learn more",
|
|
25138
|
-
variant = "bordered",
|
|
25139
|
-
size = "md",
|
|
25140
|
-
className
|
|
25141
|
-
}) => {
|
|
25142
|
-
const renderIcon = () => {
|
|
25143
|
-
if (!icon) return null;
|
|
25144
|
-
if (typeof icon === "string") {
|
|
25145
|
-
return /* @__PURE__ */ jsx(
|
|
25146
|
-
Icon,
|
|
25147
|
-
{
|
|
25148
|
-
name: icon,
|
|
25149
|
-
size: iconSizeMap[size],
|
|
25150
|
-
className: "text-accent"
|
|
25151
|
-
}
|
|
25152
|
-
);
|
|
25153
|
-
}
|
|
25154
|
-
return icon;
|
|
25155
|
-
};
|
|
25156
|
-
const handleLinkClick = () => {
|
|
25157
|
-
if (href) {
|
|
25158
|
-
window.open(href, "_blank", "noopener,noreferrer");
|
|
25159
|
-
}
|
|
25160
|
-
};
|
|
25161
|
-
return /* @__PURE__ */ jsx(
|
|
25162
|
-
Card,
|
|
25163
|
-
{
|
|
25164
|
-
variant,
|
|
25165
|
-
padding: size,
|
|
25166
|
-
className: cn(
|
|
25167
|
-
variant === "interactive" && "hover:border-primary",
|
|
25168
|
-
className
|
|
25169
|
-
),
|
|
25170
|
-
onClick: variant === "interactive" && href ? handleLinkClick : void 0,
|
|
25171
|
-
children: /* @__PURE__ */ jsxs(VStack, { gap: gapMap[size], align: "start", children: [
|
|
25172
|
-
renderIcon(),
|
|
25173
|
-
/* @__PURE__ */ jsx(Typography, { variant: "h4", className: size === "sm" ? "text-base" : void 0, children: title }),
|
|
25174
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body2", color: "muted", children: description }),
|
|
25175
|
-
href && variant !== "interactive" && /* @__PURE__ */ jsx(
|
|
25176
|
-
Button,
|
|
25177
|
-
{
|
|
25178
|
-
variant: "ghost",
|
|
25179
|
-
size: "sm",
|
|
25180
|
-
onClick: handleLinkClick,
|
|
25181
|
-
className: "text-primary -ml-2",
|
|
25182
|
-
children: linkLabel
|
|
25183
|
-
}
|
|
25184
|
-
)
|
|
25185
|
-
] })
|
|
25186
|
-
}
|
|
25187
|
-
);
|
|
25188
|
-
};
|
|
25189
|
-
FeatureCard.displayName = "FeatureCard";
|
|
25190
|
-
}
|
|
25191
|
-
});
|
|
25192
|
-
var FeatureGrid;
|
|
25193
|
-
var init_FeatureGrid = __esm({
|
|
25194
|
-
"components/molecules/FeatureGrid.tsx"() {
|
|
25195
|
-
"use client";
|
|
25196
|
-
init_cn();
|
|
25197
|
-
init_SimpleGrid();
|
|
25198
|
-
init_FeatureCard();
|
|
25199
|
-
FeatureGrid = ({
|
|
25200
|
-
items,
|
|
25201
|
-
columns = 3,
|
|
25202
|
-
gap = "md",
|
|
25203
|
-
className
|
|
25204
|
-
}) => {
|
|
25205
|
-
return /* @__PURE__ */ jsx(
|
|
25206
|
-
SimpleGrid,
|
|
25207
|
-
{
|
|
25208
|
-
cols: columns,
|
|
25209
|
-
gap,
|
|
25210
|
-
className: cn(className),
|
|
25211
|
-
children: items.map((item, index) => /* @__PURE__ */ jsx(FeatureCard, { ...item }, `${item.title}-${index}`))
|
|
25212
|
-
}
|
|
25213
|
-
);
|
|
25214
|
-
};
|
|
25215
|
-
FeatureGrid.displayName = "FeatureGrid";
|
|
25216
|
-
}
|
|
25217
|
-
});
|
|
25218
|
-
var CTABanner;
|
|
25219
|
-
var init_CTABanner = __esm({
|
|
25220
|
-
"components/molecules/CTABanner.tsx"() {
|
|
25221
|
-
"use client";
|
|
25222
|
-
init_cn();
|
|
25223
|
-
init_Box();
|
|
25224
|
-
init_Stack();
|
|
25225
|
-
init_Typography();
|
|
25226
|
-
init_Button();
|
|
25227
|
-
CTABanner = ({
|
|
25228
|
-
title,
|
|
25229
|
-
subtitle,
|
|
25230
|
-
primaryAction,
|
|
25231
|
-
secondaryAction,
|
|
25232
|
-
background = "alt",
|
|
25233
|
-
align = "center",
|
|
25234
|
-
className
|
|
25235
|
-
}) => {
|
|
25236
|
-
const handleAction = (href) => {
|
|
25237
|
-
window.open(href, "_blank", "noopener,noreferrer");
|
|
25238
|
-
};
|
|
25239
|
-
return /* @__PURE__ */ jsx(
|
|
25240
|
-
Box,
|
|
25241
|
-
{
|
|
25242
|
-
className: cn(
|
|
25243
|
-
"py-16",
|
|
25244
|
-
background === "alt" && "bg-surface",
|
|
25245
|
-
background === "dark" && "bg-surface",
|
|
25246
|
-
background === "gradient" && "bg-surface",
|
|
25247
|
-
background === "primary" && "bg-surface",
|
|
25248
|
-
className
|
|
25249
|
-
),
|
|
25250
|
-
children: /* @__PURE__ */ jsxs(
|
|
25251
|
-
VStack,
|
|
25252
|
-
{
|
|
25253
|
-
gap: "lg",
|
|
25254
|
-
align: align === "center" ? "center" : "start",
|
|
25255
|
-
className: "max-w-7xl mx-auto px-4 sm:px-6 lg:px-8",
|
|
25256
|
-
children: [
|
|
25257
|
-
/* @__PURE__ */ jsx(Typography, { variant: "h2", align, children: title }),
|
|
25258
|
-
subtitle && /* @__PURE__ */ jsx(Typography, { variant: "body", color: "muted", align, children: subtitle }),
|
|
25259
|
-
(primaryAction || secondaryAction) && /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "center", children: [
|
|
25260
|
-
primaryAction && /* @__PURE__ */ jsx(
|
|
25261
|
-
Button,
|
|
25262
|
-
{
|
|
25263
|
-
variant: "primary",
|
|
25264
|
-
size: "lg",
|
|
25265
|
-
onClick: () => handleAction(primaryAction.href),
|
|
25266
|
-
children: primaryAction.label
|
|
25267
|
-
}
|
|
25268
|
-
),
|
|
25269
|
-
secondaryAction && /* @__PURE__ */ jsx(
|
|
25270
|
-
Button,
|
|
25271
|
-
{
|
|
25272
|
-
variant: "secondary",
|
|
25273
|
-
size: "lg",
|
|
25274
|
-
onClick: () => handleAction(secondaryAction.href),
|
|
25275
|
-
children: secondaryAction.label
|
|
25276
|
-
}
|
|
25277
|
-
)
|
|
25278
|
-
] })
|
|
25279
|
-
]
|
|
25280
|
-
}
|
|
25281
|
-
)
|
|
25282
|
-
}
|
|
25283
|
-
);
|
|
25284
|
-
};
|
|
25285
|
-
CTABanner.displayName = "CTABanner";
|
|
25286
|
-
}
|
|
25287
|
-
});
|
|
25288
|
-
var tagVariantMap, MarketingImage, HeroSection;
|
|
25289
|
-
var init_HeroSection = __esm({
|
|
25290
|
-
"components/molecules/HeroSection.tsx"() {
|
|
25291
|
-
"use client";
|
|
25292
|
-
init_cn();
|
|
25293
|
-
init_Box();
|
|
25294
|
-
init_Stack();
|
|
25295
|
-
init_Badge();
|
|
25296
|
-
init_Typography();
|
|
25297
|
-
init_Button();
|
|
25298
|
-
init_InstallBox();
|
|
25299
|
-
tagVariantMap = {
|
|
25300
|
-
primary: "primary",
|
|
25301
|
-
secondary: "secondary",
|
|
25302
|
-
accent: "info"
|
|
25303
|
-
};
|
|
25304
|
-
MarketingImage = ({ src, alt, className }) => /* @__PURE__ */ jsx(
|
|
25305
|
-
Box,
|
|
25306
|
-
{
|
|
25307
|
-
className: cn(
|
|
25308
|
-
"overflow-hidden rounded-lg bg-cover bg-center bg-no-repeat",
|
|
25309
|
-
className
|
|
25310
|
-
),
|
|
25311
|
-
style: { backgroundImage: `url(${src})` },
|
|
25312
|
-
role: "img",
|
|
25313
|
-
"aria-label": alt
|
|
25314
|
-
}
|
|
25315
|
-
);
|
|
25316
|
-
MarketingImage.displayName = "MarketingImage";
|
|
25317
|
-
HeroSection = ({
|
|
25318
|
-
tag,
|
|
25319
|
-
tagVariant = "primary",
|
|
25320
|
-
title,
|
|
25321
|
-
titleAccent,
|
|
25322
|
-
subtitle,
|
|
25323
|
-
primaryAction,
|
|
25324
|
-
secondaryAction,
|
|
25325
|
-
installCommand,
|
|
25326
|
-
image,
|
|
25327
|
-
imagePosition = "below",
|
|
25328
|
-
background = "subtle",
|
|
25329
|
-
align = "center",
|
|
25330
|
-
backgroundElement,
|
|
25331
|
-
children,
|
|
25332
|
-
className
|
|
25333
|
-
}) => {
|
|
25334
|
-
const isCenter = align === "center";
|
|
25335
|
-
const isDark = background === "dark";
|
|
25336
|
-
const titleNode = titleAccent ? /* @__PURE__ */ jsxs(
|
|
25337
|
-
Typography,
|
|
25338
|
-
{
|
|
25339
|
-
variant: "h1",
|
|
25340
|
-
align: isCenter ? "center" : "left",
|
|
25341
|
-
className: cn(
|
|
25342
|
-
"max-w-3xl leading-tight",
|
|
25343
|
-
isDark && "text-background"
|
|
25344
|
-
),
|
|
25345
|
-
children: [
|
|
25346
|
-
title,
|
|
25347
|
-
" ",
|
|
25348
|
-
/* @__PURE__ */ jsx(
|
|
25349
|
-
Typography,
|
|
25350
|
-
{
|
|
25351
|
-
as: "span",
|
|
25352
|
-
variant: "h1",
|
|
25353
|
-
className: "text-primary",
|
|
25354
|
-
children: titleAccent
|
|
25355
|
-
}
|
|
25356
|
-
)
|
|
25357
|
-
]
|
|
25358
|
-
}
|
|
25359
|
-
) : /* @__PURE__ */ jsx(
|
|
25360
|
-
Typography,
|
|
25361
|
-
{
|
|
25362
|
-
variant: "h1",
|
|
25363
|
-
align: isCenter ? "center" : "left",
|
|
25364
|
-
className: cn(
|
|
25365
|
-
"max-w-3xl leading-tight",
|
|
25366
|
-
isDark && "text-background"
|
|
25367
|
-
),
|
|
25368
|
-
children: title
|
|
25369
|
-
}
|
|
25370
|
-
);
|
|
25371
|
-
const textContent = /* @__PURE__ */ jsxs(
|
|
25372
|
-
VStack,
|
|
25373
|
-
{
|
|
25374
|
-
gap: "lg",
|
|
25375
|
-
align: isCenter ? "center" : "start",
|
|
25376
|
-
className: cn(
|
|
25377
|
-
isCenter && "items-center",
|
|
25378
|
-
imagePosition === "right" ? "flex-1" : "w-full"
|
|
25379
|
-
),
|
|
25380
|
-
children: [
|
|
25381
|
-
tag && /* @__PURE__ */ jsx(Badge, { variant: tagVariantMap[tagVariant] ?? "primary", size: "md", children: tag }),
|
|
25382
|
-
titleNode,
|
|
25383
|
-
/* @__PURE__ */ jsx(
|
|
25384
|
-
Typography,
|
|
25385
|
-
{
|
|
25386
|
-
variant: "body1",
|
|
25387
|
-
color: "muted",
|
|
25388
|
-
align: isCenter ? "center" : "left",
|
|
25389
|
-
className: "max-w-xl",
|
|
25390
|
-
children: subtitle
|
|
25391
|
-
}
|
|
25392
|
-
),
|
|
25393
|
-
installCommand && /* @__PURE__ */ jsx(InstallBox, { command: installCommand }),
|
|
25394
|
-
(primaryAction || secondaryAction) && /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "center", children: [
|
|
25395
|
-
primaryAction && /* @__PURE__ */ jsx(
|
|
25396
|
-
"a",
|
|
25397
|
-
{
|
|
25398
|
-
href: primaryAction.href,
|
|
25399
|
-
target: primaryAction.href.startsWith("http") ? "_blank" : void 0,
|
|
25400
|
-
rel: primaryAction.href.startsWith("http") ? "noopener noreferrer" : void 0,
|
|
25401
|
-
className: "no-underline",
|
|
25402
|
-
children: /* @__PURE__ */ jsx(Button, { variant: "primary", size: "lg", children: primaryAction.label })
|
|
25403
|
-
}
|
|
25404
|
-
),
|
|
25405
|
-
secondaryAction && /* @__PURE__ */ jsx(
|
|
25406
|
-
"a",
|
|
25407
|
-
{
|
|
25408
|
-
href: secondaryAction.href,
|
|
25409
|
-
target: secondaryAction.href.startsWith("http") ? "_blank" : void 0,
|
|
25410
|
-
rel: secondaryAction.href.startsWith("http") ? "noopener noreferrer" : void 0,
|
|
25411
|
-
className: "no-underline",
|
|
25412
|
-
children: /* @__PURE__ */ jsx(Button, { variant: "secondary", size: "lg", children: secondaryAction.label })
|
|
25413
|
-
}
|
|
25414
|
-
)
|
|
25415
|
-
] }),
|
|
25416
|
-
children
|
|
25417
|
-
]
|
|
25418
|
-
}
|
|
25419
|
-
);
|
|
25420
|
-
const imageNode = image && /* @__PURE__ */ jsx(
|
|
25421
|
-
MarketingImage,
|
|
25422
|
-
{
|
|
25423
|
-
src: image.src,
|
|
25424
|
-
alt: image.alt,
|
|
25425
|
-
className: cn(
|
|
25426
|
-
imagePosition === "right" ? "w-full max-w-[280px] max-h-[280px]" : "w-full min-h-[400px]"
|
|
25427
|
-
)
|
|
25428
|
-
}
|
|
25429
|
-
);
|
|
25430
|
-
const innerContent = image && imagePosition === "right" ? /* @__PURE__ */ jsxs(HStack, { gap: "xl", align: "center", className: "w-full max-w-7xl", responsive: true, children: [
|
|
25431
|
-
textContent,
|
|
25432
|
-
imageNode
|
|
25433
|
-
] }) : /* @__PURE__ */ jsxs(VStack, { gap: "xl", align: isCenter ? "center" : "start", className: "w-full max-w-7xl", children: [
|
|
25434
|
-
textContent,
|
|
25435
|
-
image && imagePosition === "below" && imageNode
|
|
25436
|
-
] });
|
|
25437
|
-
return /* @__PURE__ */ jsxs(
|
|
25438
|
-
Box,
|
|
25439
|
-
{
|
|
25440
|
-
as: "header",
|
|
25441
|
-
className: cn(
|
|
25442
|
-
"w-full min-h-[60vh] flex items-center justify-center",
|
|
25443
|
-
"py-20",
|
|
25444
|
-
"relative overflow-hidden",
|
|
25445
|
-
className
|
|
25446
|
-
),
|
|
25447
|
-
children: [
|
|
25448
|
-
backgroundElement,
|
|
25449
|
-
image && imagePosition === "background" && /* @__PURE__ */ jsx(
|
|
25450
|
-
MarketingImage,
|
|
25451
|
-
{
|
|
25452
|
-
src: image.src,
|
|
25453
|
-
alt: image.alt,
|
|
25454
|
-
className: "absolute inset-0 w-full h-full opacity-20"
|
|
25455
|
-
}
|
|
25456
|
-
),
|
|
25457
|
-
/* @__PURE__ */ jsx(Box, { className: "relative z-10 w-full flex justify-center px-4 sm:px-6 lg:px-8", children: innerContent })
|
|
25458
|
-
]
|
|
25459
|
-
}
|
|
25460
|
-
);
|
|
25461
|
-
};
|
|
25462
|
-
HeroSection.displayName = "HeroSection";
|
|
25463
|
-
}
|
|
25464
|
-
});
|
|
25465
|
-
var PricingCard;
|
|
25466
|
-
var init_PricingCard = __esm({
|
|
25467
|
-
"components/molecules/PricingCard.tsx"() {
|
|
25468
|
-
"use client";
|
|
25469
|
-
init_cn();
|
|
25470
|
-
init_Card();
|
|
25471
|
-
init_Stack();
|
|
25472
|
-
init_Badge();
|
|
25473
|
-
init_Typography();
|
|
25474
|
-
init_Icon();
|
|
25475
|
-
init_Divider();
|
|
25476
|
-
init_Spacer();
|
|
25477
|
-
init_Button();
|
|
25478
|
-
PricingCard = ({
|
|
25479
|
-
name,
|
|
25480
|
-
price,
|
|
25481
|
-
description,
|
|
25482
|
-
features,
|
|
25483
|
-
action,
|
|
25484
|
-
highlighted = false,
|
|
25485
|
-
badge,
|
|
25486
|
-
className
|
|
25487
|
-
}) => {
|
|
25488
|
-
return /* @__PURE__ */ jsx(
|
|
25489
|
-
Card,
|
|
25490
|
-
{
|
|
25491
|
-
variant: highlighted ? "elevated" : "bordered",
|
|
25492
|
-
padding: "lg",
|
|
25493
|
-
className: cn(
|
|
25494
|
-
"flex flex-col h-full",
|
|
25495
|
-
"hover:-translate-y-1 transition-all",
|
|
25496
|
-
highlighted && [
|
|
25497
|
-
"border-[length:2px] border-primary",
|
|
25498
|
-
"shadow-lg",
|
|
25499
|
-
"scale-[1.05]",
|
|
25500
|
-
"ring-2 ring-primary"
|
|
25501
|
-
],
|
|
25502
|
-
className
|
|
25503
|
-
),
|
|
25504
|
-
children: /* @__PURE__ */ jsxs(VStack, { gap: "md", className: "flex-1", children: [
|
|
25505
|
-
badge && /* @__PURE__ */ jsx(Badge, { variant: "primary", size: "sm", children: badge }),
|
|
25506
|
-
/* @__PURE__ */ jsx(Typography, { variant: "h3", children: name }),
|
|
25507
|
-
/* @__PURE__ */ jsx(
|
|
25508
|
-
Typography,
|
|
25509
|
-
{
|
|
25510
|
-
variant: "h2",
|
|
25511
|
-
className: "text-primary font-bold",
|
|
25512
|
-
children: price
|
|
25513
|
-
}
|
|
25514
|
-
),
|
|
25515
|
-
description && /* @__PURE__ */ jsx(Typography, { variant: "body2", color: "muted", children: description }),
|
|
25516
|
-
/* @__PURE__ */ jsx(Divider, {}),
|
|
25517
|
-
/* @__PURE__ */ jsx(VStack, { gap: "sm", children: features.map((feature) => /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", children: [
|
|
25518
|
-
/* @__PURE__ */ jsx(
|
|
25519
|
-
Icon,
|
|
25520
|
-
{
|
|
25521
|
-
icon: Check,
|
|
25522
|
-
size: "sm",
|
|
25523
|
-
className: "flex-shrink-0 text-success"
|
|
25524
|
-
}
|
|
25525
|
-
),
|
|
25526
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body2", children: feature })
|
|
25527
|
-
] }, feature)) }),
|
|
25528
|
-
/* @__PURE__ */ jsx(Spacer, {}),
|
|
25529
|
-
/* @__PURE__ */ jsx(
|
|
25530
|
-
Button,
|
|
25531
|
-
{
|
|
25532
|
-
variant: highlighted ? "primary" : "secondary",
|
|
25533
|
-
size: "lg",
|
|
25534
|
-
className: "w-full",
|
|
25535
|
-
children: action.label
|
|
25536
|
-
}
|
|
25537
|
-
)
|
|
25538
|
-
] })
|
|
25539
|
-
}
|
|
25540
|
-
);
|
|
25541
|
-
};
|
|
25542
|
-
PricingCard.displayName = "PricingCard";
|
|
25543
|
-
}
|
|
25544
|
-
});
|
|
25545
|
-
var PricingGrid;
|
|
25546
|
-
var init_PricingGrid = __esm({
|
|
25547
|
-
"components/molecules/PricingGrid.tsx"() {
|
|
25548
|
-
"use client";
|
|
25549
|
-
init_cn();
|
|
25550
|
-
init_SimpleGrid();
|
|
25551
|
-
init_PricingCard();
|
|
25552
|
-
PricingGrid = ({
|
|
25553
|
-
plans,
|
|
25554
|
-
className
|
|
25555
|
-
}) => {
|
|
25556
|
-
const cols = Math.min(plans.length, 4);
|
|
25557
|
-
return /* @__PURE__ */ jsx(
|
|
25558
|
-
SimpleGrid,
|
|
25559
|
-
{
|
|
25560
|
-
cols: cols > 0 ? cols : 1,
|
|
25561
|
-
gap: "lg",
|
|
25562
|
-
className: cn("items-stretch", className),
|
|
25563
|
-
children: plans.map((plan) => /* @__PURE__ */ jsx(PricingCard, { ...plan }, plan.name))
|
|
25564
|
-
}
|
|
25565
|
-
);
|
|
25566
|
-
};
|
|
25567
|
-
PricingGrid.displayName = "PricingGrid";
|
|
25568
|
-
}
|
|
25569
|
-
});
|
|
25570
|
-
var StatsGrid;
|
|
25571
|
-
var init_StatsGrid = __esm({
|
|
25572
|
-
"components/molecules/StatsGrid.tsx"() {
|
|
25573
|
-
"use client";
|
|
25574
|
-
init_cn();
|
|
25575
|
-
init_SimpleGrid();
|
|
25576
|
-
init_Stack();
|
|
25577
|
-
init_Typography();
|
|
25578
|
-
StatsGrid = ({
|
|
25579
|
-
stats,
|
|
25580
|
-
columns = 3,
|
|
25581
|
-
className
|
|
25582
|
-
}) => {
|
|
25583
|
-
return /* @__PURE__ */ jsx(SimpleGrid, { cols: columns, gap: "lg", className: cn("w-full", className), children: stats.map((stat) => /* @__PURE__ */ jsxs(VStack, { gap: "xs", align: "center", className: "py-4", children: [
|
|
25584
|
-
/* @__PURE__ */ jsx(
|
|
25585
|
-
Typography,
|
|
25586
|
-
{
|
|
25587
|
-
variant: "h2",
|
|
25588
|
-
className: "font-bold text-primary",
|
|
25589
|
-
children: stat.value
|
|
25590
|
-
}
|
|
25591
|
-
),
|
|
25592
|
-
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: stat.label })
|
|
25593
|
-
] }, stat.label)) });
|
|
25594
|
-
};
|
|
25595
|
-
StatsGrid.displayName = "StatsGrid";
|
|
25596
|
-
}
|
|
25597
|
-
});
|
|
25598
|
-
var ServiceCatalog;
|
|
25599
|
-
var init_ServiceCatalog = __esm({
|
|
25600
|
-
"components/molecules/ServiceCatalog.tsx"() {
|
|
25601
|
-
"use client";
|
|
25602
|
-
init_cn();
|
|
25603
|
-
init_Card();
|
|
25604
|
-
init_Stack();
|
|
25605
|
-
init_Badge();
|
|
25606
|
-
init_Typography();
|
|
25607
|
-
init_SimpleGrid();
|
|
25608
|
-
ServiceCatalog = ({
|
|
25609
|
-
services,
|
|
25610
|
-
className
|
|
25611
|
-
}) => {
|
|
25612
|
-
return /* @__PURE__ */ jsx(SimpleGrid, { cols: 4, gap: "sm", className: cn(className), children: services.map((service) => /* @__PURE__ */ jsx(Card, { variant: "bordered", padding: "sm", children: /* @__PURE__ */ jsxs(VStack, { gap: "xs", align: "start", children: [
|
|
25613
|
-
/* @__PURE__ */ jsx(
|
|
25614
|
-
Badge,
|
|
25615
|
-
{
|
|
25616
|
-
size: "sm",
|
|
25617
|
-
className: service.layerColor,
|
|
25618
|
-
children: service.layer
|
|
25619
|
-
}
|
|
25620
|
-
),
|
|
25621
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body", children: service.name })
|
|
25622
|
-
] }) }, service.name)) });
|
|
25623
|
-
};
|
|
25624
|
-
ServiceCatalog.displayName = "ServiceCatalog";
|
|
25625
|
-
}
|
|
25626
|
-
});
|
|
25627
|
-
var CaseStudyCard;
|
|
25628
|
-
var init_CaseStudyCard = __esm({
|
|
25629
|
-
"components/molecules/CaseStudyCard.tsx"() {
|
|
25630
|
-
"use client";
|
|
25631
|
-
init_cn();
|
|
25632
|
-
init_Card();
|
|
25633
|
-
init_Stack();
|
|
25634
|
-
init_Badge();
|
|
25635
|
-
init_Typography();
|
|
25636
|
-
init_Button();
|
|
25637
|
-
CaseStudyCard = ({
|
|
25638
|
-
title,
|
|
25639
|
-
description,
|
|
25640
|
-
category,
|
|
25641
|
-
categoryColor,
|
|
25642
|
-
href,
|
|
25643
|
-
linkLabel = "Read more",
|
|
25644
|
-
className
|
|
25645
|
-
}) => {
|
|
25646
|
-
const handleClick = () => {
|
|
25647
|
-
window.open(href, "_blank", "noopener,noreferrer");
|
|
25648
|
-
};
|
|
25649
|
-
return /* @__PURE__ */ jsx(Card, { variant: "interactive", className: cn(className), children: /* @__PURE__ */ jsxs(VStack, { gap: "md", align: "start", children: [
|
|
25650
|
-
/* @__PURE__ */ jsx(
|
|
25651
|
-
Badge,
|
|
25652
|
-
{
|
|
25653
|
-
size: "sm",
|
|
25654
|
-
style: categoryColor ? { backgroundColor: categoryColor, color: "white" } : void 0,
|
|
25655
|
-
children: category
|
|
25656
|
-
}
|
|
25657
|
-
),
|
|
25658
|
-
/* @__PURE__ */ jsx(Typography, { variant: "h3", children: title }),
|
|
25659
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body", color: "muted", children: description }),
|
|
25660
|
-
/* @__PURE__ */ jsxs(
|
|
25661
|
-
Button,
|
|
25662
|
-
{
|
|
25663
|
-
variant: "ghost",
|
|
25664
|
-
size: "sm",
|
|
25665
|
-
onClick: handleClick,
|
|
25666
|
-
className: "text-primary -ml-2",
|
|
25667
|
-
children: [
|
|
25668
|
-
linkLabel,
|
|
25669
|
-
" \u2192"
|
|
25670
|
-
]
|
|
25671
|
-
}
|
|
25672
|
-
)
|
|
25673
|
-
] }) });
|
|
25674
|
-
};
|
|
25675
|
-
CaseStudyCard.displayName = "CaseStudyCard";
|
|
25676
|
-
}
|
|
25677
|
-
});
|
|
25678
|
-
var ArticleSection;
|
|
25679
|
-
var init_ArticleSection = __esm({
|
|
25680
|
-
"components/molecules/ArticleSection.tsx"() {
|
|
25681
|
-
"use client";
|
|
25682
|
-
init_cn();
|
|
25683
|
-
init_Box();
|
|
25684
|
-
init_Stack();
|
|
25685
|
-
init_Typography();
|
|
25686
|
-
ArticleSection = ({
|
|
25687
|
-
title,
|
|
25688
|
-
children,
|
|
25689
|
-
maxWidth = "md",
|
|
25690
|
-
className
|
|
25691
|
-
}) => {
|
|
25692
|
-
return /* @__PURE__ */ jsx(
|
|
25693
|
-
Box,
|
|
25694
|
-
{
|
|
25695
|
-
className: cn(
|
|
25696
|
-
"w-full",
|
|
25697
|
-
className
|
|
25698
|
-
),
|
|
25699
|
-
padding: "md",
|
|
25700
|
-
children: /* @__PURE__ */ jsxs(VStack, { gap: "lg", align: "start", children: [
|
|
25701
|
-
/* @__PURE__ */ jsx(Typography, { variant: "h2", children: title }),
|
|
25702
|
-
/* @__PURE__ */ jsx(Box, { className: "w-full", children })
|
|
25703
|
-
] })
|
|
25704
|
-
}
|
|
25705
|
-
);
|
|
25706
|
-
};
|
|
25707
|
-
ArticleSection.displayName = "ArticleSection";
|
|
25708
|
-
}
|
|
25709
|
-
});
|
|
25710
|
-
var CodeExample;
|
|
25711
|
-
var init_CodeExample = __esm({
|
|
25712
|
-
"components/molecules/CodeExample.tsx"() {
|
|
25713
|
-
"use client";
|
|
25714
|
-
init_cn();
|
|
25715
|
-
init_Box();
|
|
25716
|
-
init_Stack();
|
|
25717
|
-
init_Typography();
|
|
25718
|
-
init_Button();
|
|
25719
|
-
init_Spacer();
|
|
25720
|
-
CodeExample = ({
|
|
25721
|
-
code,
|
|
25722
|
-
language,
|
|
25723
|
-
title,
|
|
25724
|
-
copyable = false,
|
|
25725
|
-
maxHeight,
|
|
25726
|
-
className
|
|
25727
|
-
}) => {
|
|
25728
|
-
const [copied, setCopied] = useState(false);
|
|
25729
|
-
const handleCopy = useCallback(() => {
|
|
25730
|
-
void navigator.clipboard.writeText(code);
|
|
25731
|
-
setCopied(true);
|
|
25732
|
-
const timer = setTimeout(() => setCopied(false), 2e3);
|
|
25733
|
-
return () => clearTimeout(timer);
|
|
25734
|
-
}, [code]);
|
|
25735
|
-
const showHeader = title || copyable;
|
|
25736
|
-
return /* @__PURE__ */ jsxs(
|
|
25737
|
-
Box,
|
|
25738
|
-
{
|
|
25739
|
-
className: cn(
|
|
25740
|
-
"bg-foreground",
|
|
25741
|
-
"rounded-md",
|
|
25742
|
-
"border-[length:var(--border-width)] border-border",
|
|
25743
|
-
"overflow-hidden",
|
|
25744
|
-
className
|
|
25745
|
-
),
|
|
25746
|
-
children: [
|
|
25747
|
-
showHeader && /* @__PURE__ */ jsx(
|
|
25748
|
-
Box,
|
|
25749
|
-
{
|
|
25750
|
-
className: "bg-foreground border-b-[length:var(--border-width)] border-border",
|
|
25751
|
-
padding: "sm",
|
|
25752
|
-
children: /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", children: [
|
|
25753
|
-
title ? /* @__PURE__ */ jsx(
|
|
25754
|
-
Typography,
|
|
25755
|
-
{
|
|
25756
|
-
variant: "caption",
|
|
25757
|
-
className: "text-background opacity-70",
|
|
25758
|
-
children: title
|
|
25759
|
-
}
|
|
25760
|
-
) : /* @__PURE__ */ jsx(
|
|
25761
|
-
Typography,
|
|
25762
|
-
{
|
|
25763
|
-
variant: "caption",
|
|
25764
|
-
className: "text-background opacity-50",
|
|
25765
|
-
children: language
|
|
25766
|
-
}
|
|
25767
|
-
),
|
|
25768
|
-
/* @__PURE__ */ jsx(Spacer, {}),
|
|
25769
|
-
copyable && /* @__PURE__ */ jsx(
|
|
25770
|
-
Button,
|
|
25771
|
-
{
|
|
25772
|
-
variant: "ghost",
|
|
25773
|
-
size: "sm",
|
|
25774
|
-
onClick: handleCopy,
|
|
25775
|
-
className: "text-background hover:text-background opacity-70 hover:opacity-100",
|
|
25776
|
-
children: copied ? "Copied!" : "Copy"
|
|
25777
|
-
}
|
|
25778
|
-
)
|
|
25779
|
-
] })
|
|
25780
|
-
}
|
|
25781
|
-
),
|
|
25782
|
-
/* @__PURE__ */ jsx(
|
|
25783
|
-
Box,
|
|
25784
|
-
{
|
|
25785
|
-
className: "overflow-auto",
|
|
25786
|
-
padding: "md",
|
|
25787
|
-
style: maxHeight ? { maxHeight } : void 0,
|
|
25788
|
-
children: /* @__PURE__ */ jsx(
|
|
25789
|
-
Typography,
|
|
25790
|
-
{
|
|
25791
|
-
variant: "body2",
|
|
25792
|
-
className: "font-mono text-sm whitespace-pre text-background select-all",
|
|
25793
|
-
children: code
|
|
25794
|
-
}
|
|
25795
|
-
)
|
|
25796
|
-
}
|
|
25797
|
-
)
|
|
25798
|
-
]
|
|
25799
|
-
}
|
|
25800
|
-
);
|
|
25801
|
-
};
|
|
25802
|
-
CodeExample.displayName = "CodeExample";
|
|
25803
|
-
}
|
|
25804
|
-
});
|
|
25805
|
-
var LogosVariant, QuotesVariant, BadgesVariant, SocialProof;
|
|
25806
|
-
var init_SocialProof = __esm({
|
|
25807
|
-
"components/molecules/SocialProof.tsx"() {
|
|
25808
|
-
"use client";
|
|
25809
|
-
init_cn();
|
|
25810
|
-
init_Box();
|
|
25811
|
-
init_Stack();
|
|
25812
|
-
init_Stack();
|
|
25813
|
-
init_Card();
|
|
25814
|
-
init_Badge();
|
|
25815
|
-
init_Typography();
|
|
25816
|
-
init_SimpleGrid();
|
|
25817
|
-
LogosVariant = ({ items }) => /* @__PURE__ */ jsx(HStack, { gap: "xl", justify: "center", className: "flex-wrap", children: items.map((item) => /* @__PURE__ */ jsx(
|
|
25818
|
-
Box,
|
|
25819
|
-
{
|
|
25820
|
-
className: "opacity-60 hover:opacity-100 transition-opacity cursor-default",
|
|
25821
|
-
children: /* @__PURE__ */ jsxs(VStack, { gap: "xs", align: "center", children: [
|
|
25822
|
-
item.logo && /* @__PURE__ */ jsx(
|
|
25823
|
-
Box,
|
|
25824
|
-
{
|
|
25825
|
-
className: "w-12 h-12 bg-contain bg-center bg-no-repeat",
|
|
25826
|
-
style: { backgroundImage: `url(${item.logo})` }
|
|
25827
|
-
}
|
|
25828
|
-
),
|
|
25829
|
-
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: item.name })
|
|
25830
|
-
] })
|
|
25831
|
-
},
|
|
25832
|
-
item.name
|
|
25833
|
-
)) });
|
|
25834
|
-
LogosVariant.displayName = "SocialProof.LogosVariant";
|
|
25835
|
-
QuotesVariant = ({ items }) => {
|
|
25836
|
-
const cols = items.length >= 3 ? 3 : items.length >= 2 ? 2 : 1;
|
|
25837
|
-
return /* @__PURE__ */ jsx(SimpleGrid, { cols, gap: "md", children: items.map((item) => /* @__PURE__ */ jsx(Card, { variant: "bordered", padding: "md", children: /* @__PURE__ */ jsxs(VStack, { gap: "sm", align: "start", children: [
|
|
25838
|
-
item.quote && /* @__PURE__ */ jsxs(Typography, { variant: "body", className: "italic", children: [
|
|
25839
|
-
"\u201C",
|
|
25840
|
-
item.quote,
|
|
25841
|
-
"\u201D"
|
|
25842
|
-
] }),
|
|
25843
|
-
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", children: item.name })
|
|
25844
|
-
] }) }, item.name)) });
|
|
25845
|
-
};
|
|
25846
|
-
QuotesVariant.displayName = "SocialProof.QuotesVariant";
|
|
25847
|
-
BadgesVariant = ({ items }) => /* @__PURE__ */ jsx(HStack, { gap: "sm", justify: "center", className: "flex-wrap", children: items.map((item) => /* @__PURE__ */ jsx(Badge, { size: "md", children: item.name }, item.name)) });
|
|
25848
|
-
BadgesVariant.displayName = "SocialProof.BadgesVariant";
|
|
25849
|
-
SocialProof = ({
|
|
25850
|
-
items,
|
|
25851
|
-
variant = "logos",
|
|
25852
|
-
className
|
|
25853
|
-
}) => {
|
|
25854
|
-
return /* @__PURE__ */ jsxs(Box, { className: cn(className), children: [
|
|
25855
|
-
variant === "logos" && /* @__PURE__ */ jsx(LogosVariant, { items }),
|
|
25856
|
-
variant === "quotes" && /* @__PURE__ */ jsx(QuotesVariant, { items }),
|
|
25857
|
-
variant === "badges" && /* @__PURE__ */ jsx(BadgesVariant, { items })
|
|
25858
|
-
] });
|
|
25859
|
-
};
|
|
25860
|
-
SocialProof.displayName = "SocialProof";
|
|
25861
|
-
}
|
|
25862
|
-
});
|
|
25863
|
-
var StepCircle, StepFlow;
|
|
25864
|
-
var init_StepFlow = __esm({
|
|
25865
|
-
"components/molecules/StepFlow.tsx"() {
|
|
25866
|
-
"use client";
|
|
25867
|
-
init_cn();
|
|
25868
|
-
init_Box();
|
|
25869
|
-
init_Stack();
|
|
25870
|
-
init_Center();
|
|
25871
|
-
init_Typography();
|
|
25872
|
-
init_Icon();
|
|
25873
|
-
init_Divider();
|
|
25874
|
-
StepCircle = ({ step, index }) => {
|
|
25875
|
-
if (step.icon) {
|
|
25876
|
-
return /* @__PURE__ */ jsx(
|
|
25877
|
-
Center,
|
|
25878
|
-
{
|
|
25879
|
-
className: cn(
|
|
25880
|
-
"w-10 h-10 rounded-full flex-shrink-0",
|
|
25881
|
-
"flex items-center justify-center",
|
|
25882
|
-
"bg-primary text-primary-foreground"
|
|
25883
|
-
),
|
|
25884
|
-
children: /* @__PURE__ */ jsx(Icon, { name: step.icon, size: "sm", className: "text-primary-foreground" })
|
|
25885
|
-
}
|
|
25886
|
-
);
|
|
25887
|
-
}
|
|
25888
|
-
return /* @__PURE__ */ jsx(
|
|
25889
|
-
Center,
|
|
25890
|
-
{
|
|
25891
|
-
className: cn(
|
|
25892
|
-
"w-10 h-10 rounded-full flex-shrink-0",
|
|
25893
|
-
"flex items-center justify-center",
|
|
25894
|
-
"bg-primary text-primary-foreground"
|
|
25895
|
-
),
|
|
25896
|
-
children: /* @__PURE__ */ jsx("span", { className: "font-semibold text-sm text-primary-foreground leading-none", children: step.number ?? index + 1 })
|
|
25897
|
-
}
|
|
25898
|
-
);
|
|
25899
|
-
};
|
|
25900
|
-
StepCircle.displayName = "StepCircle";
|
|
25901
|
-
StepFlow = ({
|
|
25902
|
-
steps,
|
|
25903
|
-
orientation = "horizontal",
|
|
25904
|
-
showConnectors = true,
|
|
25905
|
-
className
|
|
25906
|
-
}) => {
|
|
25907
|
-
if (orientation === "vertical") {
|
|
25908
|
-
return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React115__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
|
|
25909
|
-
/* @__PURE__ */ jsxs(VStack, { gap: "none", align: "center", children: [
|
|
25910
|
-
/* @__PURE__ */ jsx(StepCircle, { step, index }),
|
|
25911
|
-
showConnectors && index < steps.length - 1 && /* @__PURE__ */ jsx(Box, { className: "w-px h-8 bg-border" })
|
|
25912
|
-
] }),
|
|
25913
|
-
/* @__PURE__ */ jsxs(VStack, { gap: "xs", className: "flex-1 pt-1", children: [
|
|
25914
|
-
/* @__PURE__ */ jsx(Typography, { variant: "h4", children: step.title }),
|
|
25915
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body2", color: "muted", children: step.description })
|
|
25916
|
-
] })
|
|
25917
|
-
] }) }, index)) });
|
|
25918
|
-
}
|
|
25919
|
-
return /* @__PURE__ */ jsx(Box, { className: cn("w-full flex flex-col md:flex-row items-start gap-0", className), children: steps.map((step, index) => /* @__PURE__ */ jsxs(React115__default.Fragment, { children: [
|
|
25920
|
-
/* @__PURE__ */ jsxs(VStack, { gap: "sm", align: "center", className: "flex-1 w-full md:w-auto", children: [
|
|
25921
|
-
/* @__PURE__ */ jsx(StepCircle, { step, index }),
|
|
25922
|
-
/* @__PURE__ */ jsx(Typography, { variant: "h4", className: "text-center", children: step.title }),
|
|
25923
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body2", color: "muted", className: "text-center", children: step.description })
|
|
25924
|
-
] }),
|
|
25925
|
-
showConnectors && index < steps.length - 1 && /* @__PURE__ */ jsx(Box, { className: "flex-shrink-0 self-center py-2 md:pt-5 md:py-0 md:px-2", children: /* @__PURE__ */ jsx(Divider, { orientation: "horizontal", className: "w-12 md:w-12" }) })
|
|
25926
|
-
] }, index)) });
|
|
25927
|
-
};
|
|
25928
|
-
StepFlow.displayName = "StepFlow";
|
|
25929
|
-
}
|
|
25930
|
-
});
|
|
25931
|
-
var SplitSection;
|
|
25932
|
-
var init_SplitSection = __esm({
|
|
25933
|
-
"components/molecules/SplitSection.tsx"() {
|
|
25934
|
-
"use client";
|
|
25935
|
-
init_cn();
|
|
25936
|
-
init_Box();
|
|
25937
|
-
init_Stack();
|
|
25938
|
-
init_Typography();
|
|
25939
|
-
init_Icon();
|
|
25940
|
-
SplitSection = ({
|
|
25941
|
-
title,
|
|
25942
|
-
description,
|
|
25943
|
-
bullets,
|
|
25944
|
-
image,
|
|
25945
|
-
imagePosition = "right",
|
|
25946
|
-
background = "default",
|
|
25947
|
-
children,
|
|
25948
|
-
className
|
|
25949
|
-
}) => {
|
|
25950
|
-
const textContent = /* @__PURE__ */ jsxs(VStack, { gap: "md", className: "flex-1 min-w-0", children: [
|
|
25951
|
-
/* @__PURE__ */ jsx(Typography, { variant: "h2", children: title }),
|
|
25952
|
-
typeof description === "string" ? /* @__PURE__ */ jsx(Typography, { variant: "body", color: "muted", children: description }) : description,
|
|
25953
|
-
bullets && bullets.length > 0 && /* @__PURE__ */ jsx(VStack, { gap: "sm", children: bullets.map((bullet, index) => /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "start", className: "mt-0.5", children: [
|
|
25954
|
-
/* @__PURE__ */ jsx(
|
|
25955
|
-
Icon,
|
|
25956
|
-
{
|
|
25957
|
-
name: "check",
|
|
25958
|
-
size: "sm",
|
|
25959
|
-
className: "text-primary flex-shrink-0 mt-0.5"
|
|
25960
|
-
}
|
|
25961
|
-
),
|
|
25962
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body2", children: bullet })
|
|
25963
|
-
] }, index)) })
|
|
25964
|
-
] });
|
|
25965
|
-
const mediaContent = children ?? (image ? /* @__PURE__ */ jsx(
|
|
25966
|
-
Box,
|
|
25967
|
-
{
|
|
25968
|
-
className: cn(
|
|
25969
|
-
"flex-1 min-w-0 min-h-[240px] rounded-md",
|
|
25970
|
-
"bg-cover bg-center"
|
|
25971
|
-
),
|
|
25972
|
-
style: { backgroundImage: `url(${image.src})` },
|
|
25973
|
-
role: "img",
|
|
25974
|
-
"aria-label": image.alt
|
|
25975
|
-
}
|
|
25976
|
-
) : null);
|
|
25977
|
-
const isImageLeft = imagePosition === "left";
|
|
25978
|
-
return /* @__PURE__ */ jsx(
|
|
25979
|
-
Box,
|
|
25980
|
-
{
|
|
25981
|
-
className: cn(
|
|
25982
|
-
"w-full",
|
|
25983
|
-
background === "alt" ? "bg-muted" : "bg-background",
|
|
25984
|
-
className
|
|
25985
|
-
),
|
|
25986
|
-
padding: "lg",
|
|
25987
|
-
children: /* @__PURE__ */ jsxs(Box, { className: cn("w-full flex flex-col lg:flex-row gap-10 lg:gap-16 items-center", isImageLeft && "lg:flex-row-reverse"), children: [
|
|
25988
|
-
/* @__PURE__ */ jsx(Box, { className: "flex-1 min-w-0 lg:min-w-[45%]", children: textContent }),
|
|
25989
|
-
/* @__PURE__ */ jsx(Box, { className: "flex-1 min-w-0 lg:max-w-[50%]", children: mediaContent })
|
|
25990
|
-
] })
|
|
25991
|
-
}
|
|
25992
|
-
);
|
|
25993
|
-
};
|
|
25994
|
-
SplitSection.displayName = "SplitSection";
|
|
25995
|
-
}
|
|
25996
|
-
});
|
|
25997
|
-
function normalizeTags(tags) {
|
|
25998
|
-
if (tags.length === 0) return [];
|
|
25999
|
-
if (typeof tags[0] === "string") {
|
|
26000
|
-
return tags.map((label) => ({ label }));
|
|
26001
|
-
}
|
|
26002
|
-
return tags;
|
|
26003
|
-
}
|
|
26004
|
-
var variantMap4, TagCloud;
|
|
26005
|
-
var init_TagCloud = __esm({
|
|
26006
|
-
"components/molecules/TagCloud.tsx"() {
|
|
26007
|
-
"use client";
|
|
26008
|
-
init_cn();
|
|
26009
|
-
init_Stack();
|
|
26010
|
-
init_Badge();
|
|
26011
|
-
variantMap4 = {
|
|
26012
|
-
default: "default",
|
|
26013
|
-
primary: "primary",
|
|
26014
|
-
accent: "info"
|
|
26015
|
-
};
|
|
26016
|
-
TagCloud = ({
|
|
26017
|
-
tags,
|
|
26018
|
-
variant = "default",
|
|
26019
|
-
className
|
|
26020
|
-
}) => {
|
|
26021
|
-
const normalizedTags = normalizeTags(tags);
|
|
26022
|
-
return /* @__PURE__ */ jsx(HStack, { gap: "sm", className: cn("flex-wrap justify-center", className), children: normalizedTags.map((tag, index) => {
|
|
26023
|
-
const badgeVariant = tag.variant ? variantMap4[tag.variant] ?? "default" : variantMap4[variant] ?? "default";
|
|
26024
|
-
return /* @__PURE__ */ jsx(Badge, { variant: badgeVariant, label: tag.label }, index);
|
|
26025
|
-
}) });
|
|
26026
|
-
};
|
|
26027
|
-
TagCloud.displayName = "TagCloud";
|
|
26028
|
-
}
|
|
26029
|
-
});
|
|
26030
|
-
function formatCount(count) {
|
|
26031
|
-
if (count >= 1e3) {
|
|
26032
|
-
return `${(count / 1e3).toFixed(1)}k`;
|
|
26033
|
-
}
|
|
26034
|
-
return String(count);
|
|
26035
|
-
}
|
|
26036
|
-
var CommunityLinks;
|
|
26037
|
-
var init_CommunityLinks = __esm({
|
|
26038
|
-
"components/molecules/CommunityLinks.tsx"() {
|
|
26039
|
-
"use client";
|
|
26040
|
-
init_Stack();
|
|
26041
|
-
init_Typography();
|
|
26042
|
-
init_Button();
|
|
26043
|
-
init_Icon();
|
|
26044
|
-
CommunityLinks = ({
|
|
26045
|
-
github,
|
|
26046
|
-
discord,
|
|
26047
|
-
twitter,
|
|
26048
|
-
heading,
|
|
26049
|
-
subtitle,
|
|
26050
|
-
className
|
|
26051
|
-
}) => {
|
|
26052
|
-
const openLink = (url) => () => {
|
|
26053
|
-
window.open(url, "_blank", "noopener,noreferrer");
|
|
26054
|
-
};
|
|
26055
|
-
return /* @__PURE__ */ jsxs(VStack, { gap: "lg", align: "center", className, children: [
|
|
26056
|
-
heading && /* @__PURE__ */ jsx(Typography, { variant: "h2", className: "text-center", children: heading }),
|
|
26057
|
-
subtitle && /* @__PURE__ */ jsx(Typography, { variant: "body", color: "muted", className: "text-center", children: subtitle }),
|
|
26058
|
-
/* @__PURE__ */ jsxs(HStack, { gap: "md", className: "flex-wrap justify-center", children: [
|
|
26059
|
-
github && /* @__PURE__ */ jsx(Button, { variant: "primary", onClick: openLink(github.url), children: /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", children: [
|
|
26060
|
-
/* @__PURE__ */ jsx(Icon, { name: "github", size: "sm" }),
|
|
26061
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body2", className: "text-inherit", children: github.stars != null ? `GitHub (${formatCount(github.stars)} stars)` : "GitHub" })
|
|
26062
|
-
] }) }),
|
|
26063
|
-
discord && /* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: openLink(discord.url), children: /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", children: [
|
|
26064
|
-
/* @__PURE__ */ jsx(Icon, { name: "message-circle", size: "sm" }),
|
|
26065
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body2", className: "text-inherit", children: discord.members != null ? `Discord (${formatCount(discord.members)} members)` : "Discord" })
|
|
26066
|
-
] }) }),
|
|
26067
|
-
twitter && /* @__PURE__ */ jsx(Button, { variant: "secondary", onClick: openLink(twitter.url), children: /* @__PURE__ */ jsxs(HStack, { gap: "sm", align: "center", children: [
|
|
26068
|
-
/* @__PURE__ */ jsx(Icon, { name: "twitter", size: "sm" }),
|
|
26069
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body2", className: "text-inherit", children: twitter.followers != null ? `Twitter (${formatCount(twitter.followers)} followers)` : "Twitter" })
|
|
26070
|
-
] }) })
|
|
26071
|
-
] })
|
|
26072
|
-
] });
|
|
26073
|
-
};
|
|
26074
|
-
CommunityLinks.displayName = "CommunityLinks";
|
|
26075
|
-
}
|
|
26076
|
-
});
|
|
26077
|
-
var TeamCard;
|
|
26078
|
-
var init_TeamCard = __esm({
|
|
26079
|
-
"components/molecules/TeamCard.tsx"() {
|
|
26080
|
-
"use client";
|
|
26081
|
-
init_cn();
|
|
26082
|
-
init_Box();
|
|
26083
|
-
init_Card();
|
|
26084
|
-
init_Stack();
|
|
26085
|
-
init_Avatar();
|
|
26086
|
-
init_Typography();
|
|
26087
|
-
TeamCard = ({
|
|
26088
|
-
name,
|
|
26089
|
-
nameAr,
|
|
26090
|
-
role,
|
|
26091
|
-
bio,
|
|
26092
|
-
avatar,
|
|
26093
|
-
className
|
|
26094
|
-
}) => {
|
|
26095
|
-
const avatarSrc = typeof avatar === "string" ? avatar : void 0;
|
|
26096
|
-
const avatarInitials = typeof avatar === "object" && avatar !== null ? avatar.initials : void 0;
|
|
26097
|
-
return /* @__PURE__ */ jsx(Card, { variant: "bordered", padding: "lg", className: cn("w-full", className), children: /* @__PURE__ */ jsxs(VStack, { gap: "md", align: "center", children: [
|
|
26098
|
-
/* @__PURE__ */ jsx(
|
|
26099
|
-
Avatar,
|
|
26100
|
-
{
|
|
26101
|
-
src: avatarSrc,
|
|
26102
|
-
initials: avatarInitials,
|
|
26103
|
-
name: !avatarSrc && !avatarInitials ? name : void 0,
|
|
26104
|
-
size: "lg"
|
|
26105
|
-
}
|
|
26106
|
-
),
|
|
26107
|
-
/* @__PURE__ */ jsx(Typography, { variant: "h3", className: "text-center", children: name }),
|
|
26108
|
-
nameAr && /* @__PURE__ */ jsx(Box, { className: "text-center", style: { direction: "rtl" }, children: /* @__PURE__ */ jsx(Typography, { variant: "caption", children: nameAr }) }),
|
|
26109
|
-
/* @__PURE__ */ jsx(Typography, { variant: "caption", color: "muted", className: "text-center", children: role }),
|
|
26110
|
-
/* @__PURE__ */ jsx(Typography, { variant: "body", className: "text-center", children: bio })
|
|
26111
|
-
] }) });
|
|
26112
|
-
};
|
|
26113
|
-
TeamCard.displayName = "TeamCard";
|
|
26114
|
-
}
|
|
26115
|
-
});
|
|
26116
|
-
var ShowcaseCard;
|
|
26117
|
-
var init_ShowcaseCard = __esm({
|
|
26118
|
-
"components/molecules/ShowcaseCard.tsx"() {
|
|
26119
|
-
"use client";
|
|
26120
|
-
init_cn();
|
|
26121
|
-
init_Card();
|
|
26122
|
-
init_Box();
|
|
26123
|
-
init_Stack();
|
|
26124
|
-
init_Badge();
|
|
26125
|
-
init_Typography();
|
|
26126
|
-
ShowcaseCard = ({
|
|
26127
|
-
title,
|
|
26128
|
-
description,
|
|
26129
|
-
image,
|
|
26130
|
-
href,
|
|
26131
|
-
badge,
|
|
26132
|
-
accentColor,
|
|
26133
|
-
className
|
|
26134
|
-
}) => {
|
|
26135
|
-
const cardVariant = href ? "interactive" : "bordered";
|
|
26136
|
-
const handleClick = () => {
|
|
26137
|
-
if (href) {
|
|
26138
|
-
window.open(href, "_blank", "noopener,noreferrer");
|
|
26139
|
-
}
|
|
26140
|
-
};
|
|
26141
|
-
return /* @__PURE__ */ jsxs(
|
|
26142
|
-
Card,
|
|
26143
|
-
{
|
|
26144
|
-
variant: cardVariant,
|
|
26145
|
-
padding: "none",
|
|
26146
|
-
className: cn("overflow-hidden w-full", className),
|
|
26147
|
-
style: accentColor ? { borderTopColor: accentColor, borderTopWidth: "3px" } : void 0,
|
|
26148
|
-
onClick: href ? handleClick : void 0,
|
|
26149
|
-
children: [
|
|
26150
|
-
/* @__PURE__ */ jsx(
|
|
26151
|
-
Box,
|
|
26152
|
-
{
|
|
26153
|
-
className: cn(
|
|
26154
|
-
"w-full aspect-video bg-cover bg-center",
|
|
26155
|
-
"rounded-t-md"
|
|
26156
|
-
),
|
|
26157
|
-
style: { backgroundImage: `url(${image.src})` },
|
|
26158
|
-
role: "img",
|
|
26159
|
-
"aria-label": image.alt
|
|
26160
|
-
}
|
|
26161
|
-
),
|
|
26162
|
-
/* @__PURE__ */ jsxs(VStack, { gap: "sm", className: "p-4", children: [
|
|
26163
|
-
badge && /* @__PURE__ */ jsx(Badge, { variant: "primary", label: badge }),
|
|
26164
|
-
/* @__PURE__ */ jsx(Typography, { variant: "h3", children: title }),
|
|
26165
|
-
description && /* @__PURE__ */ jsx(Typography, { variant: "body", color: "muted", children: description })
|
|
26166
|
-
] })
|
|
26167
|
-
]
|
|
26168
|
-
}
|
|
26169
|
-
);
|
|
26170
|
-
};
|
|
26171
|
-
ShowcaseCard.displayName = "ShowcaseCard";
|
|
26172
|
-
}
|
|
26173
|
-
});
|
|
26174
|
-
function PatternDefs({
|
|
26175
|
-
patternId,
|
|
26176
|
-
variant,
|
|
26177
|
-
size,
|
|
26178
|
-
color,
|
|
26179
|
-
strokeWidth
|
|
26180
|
-
}) {
|
|
26181
|
-
const dims = getTileDimensions(variant, size);
|
|
26182
|
-
return /* @__PURE__ */ jsx("defs", { children: /* @__PURE__ */ jsx(
|
|
26183
|
-
"pattern",
|
|
26184
|
-
{
|
|
26185
|
-
id: patternId,
|
|
26186
|
-
x: "0",
|
|
26187
|
-
y: "0",
|
|
26188
|
-
width: dims.width,
|
|
26189
|
-
height: dims.height,
|
|
26190
|
-
patternUnits: "userSpaceOnUse",
|
|
26191
|
-
children: /* @__PURE__ */ jsx(
|
|
26192
|
-
PatternTile,
|
|
26193
|
-
{
|
|
26194
|
-
variant,
|
|
26195
|
-
size,
|
|
26196
|
-
color,
|
|
26197
|
-
strokeWidth
|
|
26198
|
-
}
|
|
26199
|
-
)
|
|
26200
|
-
}
|
|
26201
|
-
) });
|
|
26202
|
-
}
|
|
26203
|
-
function BackgroundMode({
|
|
26204
|
-
patternId,
|
|
26205
|
-
variant,
|
|
26206
|
-
size,
|
|
26207
|
-
color,
|
|
26208
|
-
strokeWidth,
|
|
26209
|
-
opacity,
|
|
26210
|
-
className
|
|
26211
|
-
}) {
|
|
26212
|
-
return /* @__PURE__ */ jsxs(
|
|
26213
|
-
"svg",
|
|
26214
|
-
{
|
|
26215
|
-
className: cn("absolute inset-0 w-full h-full pointer-events-none", className),
|
|
26216
|
-
preserveAspectRatio: "none",
|
|
26217
|
-
"aria-hidden": "true",
|
|
26218
|
-
children: [
|
|
26219
|
-
/* @__PURE__ */ jsx(
|
|
26220
|
-
PatternDefs,
|
|
26221
|
-
{
|
|
26222
|
-
patternId,
|
|
26223
|
-
variant,
|
|
26224
|
-
size,
|
|
26225
|
-
color,
|
|
26226
|
-
strokeWidth
|
|
26227
|
-
}
|
|
26228
|
-
),
|
|
26229
|
-
/* @__PURE__ */ jsx(
|
|
26230
|
-
"rect",
|
|
26231
|
-
{
|
|
26232
|
-
width: "100%",
|
|
26233
|
-
height: "100%",
|
|
26234
|
-
fill: `url(#${patternId})`,
|
|
26235
|
-
opacity
|
|
26236
|
-
}
|
|
26237
|
-
)
|
|
26238
|
-
]
|
|
26239
|
-
}
|
|
26240
|
-
);
|
|
26241
|
-
}
|
|
26242
|
-
function SideMode({
|
|
26243
|
-
patternId,
|
|
26244
|
-
variant,
|
|
26245
|
-
size,
|
|
26246
|
-
color,
|
|
26247
|
-
strokeWidth,
|
|
26248
|
-
opacity,
|
|
26249
|
-
side,
|
|
26250
|
-
className
|
|
26251
|
-
}) {
|
|
26252
|
-
const maskId = `${patternId}-mask`;
|
|
26253
|
-
const gradientId = `${patternId}-grad`;
|
|
26254
|
-
const x1 = side === "left" ? "0%" : "100%";
|
|
26255
|
-
const x2 = side === "left" ? "60%" : "40%";
|
|
26256
|
-
return /* @__PURE__ */ jsxs(
|
|
26257
|
-
"svg",
|
|
26258
|
-
{
|
|
26259
|
-
className: cn("absolute inset-0 w-full h-full pointer-events-none", className),
|
|
26260
|
-
preserveAspectRatio: "none",
|
|
26261
|
-
"aria-hidden": "true",
|
|
26262
|
-
children: [
|
|
26263
|
-
/* @__PURE__ */ jsx(
|
|
26264
|
-
PatternDefs,
|
|
26265
|
-
{
|
|
26266
|
-
patternId,
|
|
26267
|
-
variant,
|
|
26268
|
-
size,
|
|
26269
|
-
color,
|
|
26270
|
-
strokeWidth
|
|
26271
|
-
}
|
|
26272
|
-
),
|
|
26273
|
-
/* @__PURE__ */ jsxs("defs", { children: [
|
|
26274
|
-
/* @__PURE__ */ jsxs("linearGradient", { id: gradientId, x1, y1: "0%", x2, y2: "0%", children: [
|
|
26275
|
-
/* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "white", stopOpacity: "1" }),
|
|
26276
|
-
/* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "white", stopOpacity: "0" })
|
|
26277
|
-
] }),
|
|
26278
|
-
/* @__PURE__ */ jsx("mask", { id: maskId, children: /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: `url(#${gradientId})` }) })
|
|
26279
|
-
] }),
|
|
26280
|
-
/* @__PURE__ */ jsx(
|
|
26281
|
-
"rect",
|
|
26282
|
-
{
|
|
26283
|
-
width: "100%",
|
|
26284
|
-
height: "100%",
|
|
26285
|
-
fill: `url(#${patternId})`,
|
|
26286
|
-
mask: `url(#${maskId})`,
|
|
26287
|
-
opacity
|
|
26288
|
-
}
|
|
26289
|
-
)
|
|
26290
|
-
]
|
|
26291
|
-
}
|
|
26292
|
-
);
|
|
26293
|
-
}
|
|
26294
|
-
function DualMode({
|
|
26295
|
-
patternId,
|
|
26296
|
-
variant,
|
|
26297
|
-
size,
|
|
26298
|
-
color,
|
|
26299
|
-
strokeWidth,
|
|
26300
|
-
opacity,
|
|
26301
|
-
className
|
|
26302
|
-
}) {
|
|
26303
|
-
const maskId = `${patternId}-dmask`;
|
|
26304
|
-
const gradientId = `${patternId}-dgrad`;
|
|
26305
|
-
return /* @__PURE__ */ jsxs(
|
|
26306
|
-
"svg",
|
|
26307
|
-
{
|
|
26308
|
-
className: cn("absolute inset-0 w-full h-full pointer-events-none", className),
|
|
26309
|
-
preserveAspectRatio: "none",
|
|
26310
|
-
"aria-hidden": "true",
|
|
26311
|
-
children: [
|
|
26312
|
-
/* @__PURE__ */ jsx(
|
|
26313
|
-
PatternDefs,
|
|
26314
|
-
{
|
|
26315
|
-
patternId,
|
|
26316
|
-
variant,
|
|
26317
|
-
size,
|
|
26318
|
-
color,
|
|
26319
|
-
strokeWidth
|
|
26320
|
-
}
|
|
26321
|
-
),
|
|
26322
|
-
/* @__PURE__ */ jsxs("defs", { children: [
|
|
26323
|
-
/* @__PURE__ */ jsxs("linearGradient", { id: gradientId, x1: "0%", y1: "0%", x2: "100%", y2: "0%", children: [
|
|
26324
|
-
/* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "white", stopOpacity: "1" }),
|
|
26325
|
-
/* @__PURE__ */ jsx("stop", { offset: "35%", stopColor: "white", stopOpacity: "0" }),
|
|
26326
|
-
/* @__PURE__ */ jsx("stop", { offset: "65%", stopColor: "white", stopOpacity: "0" }),
|
|
26327
|
-
/* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "white", stopOpacity: "1" })
|
|
26328
|
-
] }),
|
|
26329
|
-
/* @__PURE__ */ jsx("mask", { id: maskId, children: /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: `url(#${gradientId})` }) })
|
|
26330
|
-
] }),
|
|
26331
|
-
/* @__PURE__ */ jsx(
|
|
26332
|
-
"rect",
|
|
26333
|
-
{
|
|
26334
|
-
width: "100%",
|
|
26335
|
-
height: "100%",
|
|
26336
|
-
fill: `url(#${patternId})`,
|
|
26337
|
-
mask: `url(#${maskId})`,
|
|
26338
|
-
opacity
|
|
26339
|
-
}
|
|
26340
|
-
)
|
|
26341
|
-
]
|
|
26342
|
-
}
|
|
26343
|
-
);
|
|
26344
|
-
}
|
|
26345
|
-
function AroundMode({
|
|
26346
|
-
patternId,
|
|
26347
|
-
variant,
|
|
26348
|
-
size,
|
|
26349
|
-
color,
|
|
26350
|
-
strokeWidth,
|
|
26351
|
-
opacity,
|
|
26352
|
-
className
|
|
26353
|
-
}) {
|
|
26354
|
-
const maskId = `${patternId}-amask`;
|
|
26355
|
-
const gradientId = `${patternId}-agrad`;
|
|
26356
|
-
return /* @__PURE__ */ jsxs(
|
|
26357
|
-
"svg",
|
|
26358
|
-
{
|
|
26359
|
-
className: cn("absolute inset-0 w-full h-full pointer-events-none", className),
|
|
26360
|
-
preserveAspectRatio: "none",
|
|
26361
|
-
"aria-hidden": "true",
|
|
26362
|
-
children: [
|
|
26363
|
-
/* @__PURE__ */ jsx(
|
|
26364
|
-
PatternDefs,
|
|
26365
|
-
{
|
|
26366
|
-
patternId,
|
|
26367
|
-
variant,
|
|
26368
|
-
size,
|
|
26369
|
-
color,
|
|
26370
|
-
strokeWidth
|
|
26371
|
-
}
|
|
26372
|
-
),
|
|
26373
|
-
/* @__PURE__ */ jsxs("defs", { children: [
|
|
26374
|
-
/* @__PURE__ */ jsxs("radialGradient", { id: gradientId, cx: "50%", cy: "50%", r: "50%", children: [
|
|
26375
|
-
/* @__PURE__ */ jsx("stop", { offset: "0%", stopColor: "white", stopOpacity: "0" }),
|
|
26376
|
-
/* @__PURE__ */ jsx("stop", { offset: "55%", stopColor: "white", stopOpacity: "0" }),
|
|
26377
|
-
/* @__PURE__ */ jsx("stop", { offset: "85%", stopColor: "white", stopOpacity: "1" }),
|
|
26378
|
-
/* @__PURE__ */ jsx("stop", { offset: "100%", stopColor: "white", stopOpacity: "1" })
|
|
26379
|
-
] }),
|
|
26380
|
-
/* @__PURE__ */ jsx("mask", { id: maskId, children: /* @__PURE__ */ jsx("rect", { width: "100%", height: "100%", fill: `url(#${gradientId})` }) })
|
|
26381
|
-
] }),
|
|
26382
|
-
/* @__PURE__ */ jsx(
|
|
26383
|
-
"rect",
|
|
26384
|
-
{
|
|
26385
|
-
width: "100%",
|
|
26386
|
-
height: "100%",
|
|
26387
|
-
fill: `url(#${patternId})`,
|
|
26388
|
-
mask: `url(#${maskId})`,
|
|
26389
|
-
opacity
|
|
26390
|
-
}
|
|
26391
|
-
)
|
|
26392
|
-
]
|
|
26393
|
-
}
|
|
26394
|
-
);
|
|
26395
|
-
}
|
|
26396
|
-
function FrameStrip({
|
|
26397
|
-
patternId,
|
|
26398
|
-
variant,
|
|
26399
|
-
size,
|
|
26400
|
-
color,
|
|
26401
|
-
strokeWidth,
|
|
26402
|
-
opacity,
|
|
26403
|
-
height
|
|
26404
|
-
}) {
|
|
26405
|
-
return /* @__PURE__ */ jsxs(
|
|
26406
|
-
"svg",
|
|
26407
|
-
{
|
|
26408
|
-
className: "w-full pointer-events-none",
|
|
26409
|
-
style: { height },
|
|
26410
|
-
preserveAspectRatio: "none",
|
|
26411
|
-
"aria-hidden": "true",
|
|
26412
|
-
children: [
|
|
26413
|
-
/* @__PURE__ */ jsx(
|
|
26414
|
-
PatternDefs,
|
|
26415
|
-
{
|
|
26416
|
-
patternId,
|
|
26417
|
-
variant,
|
|
26418
|
-
size,
|
|
26419
|
-
color,
|
|
26420
|
-
strokeWidth
|
|
26421
|
-
}
|
|
26422
|
-
),
|
|
26423
|
-
/* @__PURE__ */ jsx(
|
|
26424
|
-
"rect",
|
|
26425
|
-
{
|
|
26426
|
-
width: "100%",
|
|
26427
|
-
height: "100%",
|
|
26428
|
-
fill: `url(#${patternId})`,
|
|
26429
|
-
opacity
|
|
26430
|
-
}
|
|
26431
|
-
)
|
|
26432
|
-
]
|
|
26433
|
-
}
|
|
26434
|
-
);
|
|
26435
|
-
}
|
|
26436
|
-
var GeometricPattern;
|
|
26437
|
-
var init_GeometricPattern = __esm({
|
|
26438
|
-
"components/molecules/GeometricPattern.tsx"() {
|
|
26439
|
-
"use client";
|
|
26440
|
-
init_cn();
|
|
26441
|
-
init_PatternTile();
|
|
26442
|
-
init_Box();
|
|
26443
|
-
GeometricPattern = ({
|
|
26444
|
-
variant = "star8",
|
|
26445
|
-
mode = "background",
|
|
26446
|
-
opacity = 0.06,
|
|
26447
|
-
color = "var(--color-primary)",
|
|
26448
|
-
scale = 1,
|
|
26449
|
-
strokeWidth = 0.5,
|
|
26450
|
-
children,
|
|
26451
|
-
className
|
|
26452
|
-
}) => {
|
|
26453
|
-
const reactId = useId();
|
|
26454
|
-
const patternId = `gp${reactId.replace(/:/g, "")}`;
|
|
26455
|
-
const size = 60 * scale;
|
|
26456
|
-
const stripHeight = 40 * scale;
|
|
26457
|
-
if (mode === "frame") {
|
|
26458
|
-
const topId = `${patternId}-top`;
|
|
26459
|
-
const botId = `${patternId}-bot`;
|
|
26460
|
-
return /* @__PURE__ */ jsxs(Box, { className: cn("relative", className), children: [
|
|
26461
|
-
/* @__PURE__ */ jsx(
|
|
26462
|
-
FrameStrip,
|
|
26463
|
-
{
|
|
26464
|
-
patternId: topId,
|
|
26465
|
-
variant,
|
|
26466
|
-
size,
|
|
26467
|
-
color,
|
|
26468
|
-
strokeWidth,
|
|
26469
|
-
opacity,
|
|
26470
|
-
height: stripHeight
|
|
26471
|
-
}
|
|
26472
|
-
),
|
|
26473
|
-
children,
|
|
26474
|
-
/* @__PURE__ */ jsx(
|
|
26475
|
-
FrameStrip,
|
|
26476
|
-
{
|
|
26477
|
-
patternId: botId,
|
|
26478
|
-
variant,
|
|
26479
|
-
size,
|
|
26480
|
-
color,
|
|
26481
|
-
strokeWidth,
|
|
26482
|
-
opacity,
|
|
26483
|
-
height: stripHeight
|
|
26484
|
-
}
|
|
26485
|
-
)
|
|
26486
|
-
] });
|
|
26487
|
-
}
|
|
26488
|
-
if (mode === "around") {
|
|
26489
|
-
return /* @__PURE__ */ jsx(
|
|
26490
|
-
AroundMode,
|
|
26491
|
-
{
|
|
26492
|
-
patternId,
|
|
26493
|
-
variant,
|
|
26494
|
-
size,
|
|
26495
|
-
color,
|
|
26496
|
-
strokeWidth,
|
|
26497
|
-
opacity,
|
|
26498
|
-
className
|
|
26499
|
-
}
|
|
26500
|
-
);
|
|
26501
|
-
}
|
|
26502
|
-
if (mode === "dual") {
|
|
26503
|
-
return /* @__PURE__ */ jsx(
|
|
26504
|
-
DualMode,
|
|
26505
|
-
{
|
|
26506
|
-
patternId,
|
|
26507
|
-
variant,
|
|
26508
|
-
size,
|
|
26509
|
-
color,
|
|
26510
|
-
strokeWidth,
|
|
26511
|
-
opacity,
|
|
26512
|
-
className
|
|
26513
|
-
}
|
|
26514
|
-
);
|
|
26515
|
-
}
|
|
26516
|
-
if (mode === "left" || mode === "right") {
|
|
26517
|
-
return /* @__PURE__ */ jsx(
|
|
26518
|
-
SideMode,
|
|
26519
|
-
{
|
|
26520
|
-
patternId,
|
|
26521
|
-
variant,
|
|
26522
|
-
size,
|
|
26523
|
-
color,
|
|
26524
|
-
strokeWidth,
|
|
26525
|
-
opacity,
|
|
26526
|
-
side: mode,
|
|
26527
|
-
className
|
|
26528
|
-
}
|
|
26529
|
-
);
|
|
26530
|
-
}
|
|
26531
|
-
return /* @__PURE__ */ jsx(
|
|
26532
|
-
BackgroundMode,
|
|
26533
|
-
{
|
|
26534
|
-
patternId,
|
|
26535
|
-
variant,
|
|
26536
|
-
size,
|
|
26537
|
-
color,
|
|
26538
|
-
strokeWidth,
|
|
26539
|
-
opacity,
|
|
26540
|
-
className
|
|
26541
|
-
}
|
|
26542
|
-
);
|
|
26543
|
-
};
|
|
26544
|
-
GeometricPattern.displayName = "GeometricPattern";
|
|
26545
|
-
}
|
|
26546
|
-
});
|
|
26547
|
-
function ArchSVG({
|
|
26548
|
-
facing,
|
|
26549
|
-
w,
|
|
26550
|
-
h,
|
|
26551
|
-
color,
|
|
26552
|
-
strokeWidth
|
|
26553
|
-
}) {
|
|
26554
|
-
const paths = [];
|
|
26555
|
-
const archCount = 3;
|
|
26556
|
-
const archH = h / archCount;
|
|
26557
|
-
const rings = 5;
|
|
26558
|
-
for (let a = 0; a < archCount; a++) {
|
|
26559
|
-
const baseY = a * archH + archH;
|
|
26560
|
-
const topY = a * archH + archH * 0.05;
|
|
26561
|
-
for (let r = 0; r < rings; r++) {
|
|
26562
|
-
const scale = 1 - r * 0.17;
|
|
26563
|
-
const archW = w * 0.95 * scale;
|
|
26564
|
-
const aTopY = topY + (1 - scale) * (baseY - topY) * 0.5;
|
|
26565
|
-
const aBaseY = baseY - (1 - scale) * archH * 0.05;
|
|
26566
|
-
const edgeX2 = facing === "right" ? w : 0;
|
|
26567
|
-
const innerX2 = facing === "right" ? w - archW : archW;
|
|
26568
|
-
const midY = (aTopY + aBaseY) / 2;
|
|
26569
|
-
const radius = Math.sqrt(archW * archW + (aBaseY - midY) * (aBaseY - midY));
|
|
26570
|
-
if (facing === "right") {
|
|
26571
|
-
paths.push(
|
|
26572
|
-
`M ${f2(edgeX2)},${f2(aBaseY)} A ${f2(radius)} ${f2(radius)} 0 0 0 ${f2(innerX2)},${f2(aTopY + (aBaseY - aTopY) * 0.5)} A ${f2(radius)} ${f2(radius)} 0 0 0 ${f2(edgeX2)},${f2(aTopY)}`
|
|
26573
|
-
);
|
|
26574
|
-
} else {
|
|
26575
|
-
paths.push(
|
|
26576
|
-
`M ${f2(edgeX2)},${f2(aBaseY)} A ${f2(radius)} ${f2(radius)} 0 0 1 ${f2(innerX2)},${f2(aTopY + (aBaseY - aTopY) * 0.5)} A ${f2(radius)} ${f2(radius)} 0 0 1 ${f2(edgeX2)},${f2(aTopY)}`
|
|
26577
|
-
);
|
|
26578
|
-
}
|
|
26579
|
-
}
|
|
26580
|
-
const edgeX = facing === "right" ? w : 0;
|
|
26581
|
-
const innerX = facing === "right" ? w * 0.05 : w * 0.95;
|
|
26582
|
-
paths.push(`M ${f2(edgeX)},${f2(baseY)} L ${f2(innerX)},${f2(baseY)}`);
|
|
26583
|
-
}
|
|
26584
|
-
return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
|
|
26585
|
-
}
|
|
26586
|
-
function VineSVG({
|
|
26587
|
-
facing,
|
|
26588
|
-
w,
|
|
26589
|
-
h,
|
|
26590
|
-
color,
|
|
26591
|
-
strokeWidth
|
|
26592
|
-
}) {
|
|
26593
|
-
const paths = [];
|
|
26594
|
-
const dir = facing === "right" ? -1 : 1;
|
|
26595
|
-
const edgeX = facing === "right" ? w * 0.85 : w * 0.15;
|
|
26596
|
-
const segments = 5;
|
|
26597
|
-
const segH = h / segments;
|
|
26598
|
-
for (let i = 0; i < segments; i++) {
|
|
26599
|
-
const y0 = i * segH;
|
|
26600
|
-
const y1 = y0 + segH;
|
|
26601
|
-
const sway = w * 0.12 * (i % 2 === 0 ? 1 : -1);
|
|
26602
|
-
paths.push(
|
|
26603
|
-
`M ${f2(edgeX + sway)},${f2(y0)} C ${f2(edgeX - sway)},${f2(y0 + segH * 0.33)} ${f2(edgeX + sway)},${f2(y0 + segH * 0.66)} ${f2(edgeX - sway)},${f2(y1)}`
|
|
26604
|
-
);
|
|
26605
|
-
const branchY = y0 + segH * 0.35;
|
|
26606
|
-
const branchX = edgeX;
|
|
26607
|
-
const leafW = w * 0.55;
|
|
26608
|
-
const leafH = segH * 0.35;
|
|
26609
|
-
const leafTipX = branchX + dir * leafW;
|
|
26610
|
-
const leafTipY = branchY - leafH * 0.2;
|
|
26611
|
-
paths.push(
|
|
26612
|
-
`M ${f2(branchX)},${f2(branchY)} C ${f2(branchX + dir * leafW * 0.3)},${f2(branchY - leafH)} ${f2(leafTipX - dir * leafW * 0.1)},${f2(leafTipY - leafH * 0.3)} ${f2(leafTipX)},${f2(leafTipY)}`
|
|
26613
|
-
);
|
|
26614
|
-
paths.push(
|
|
26615
|
-
`M ${f2(leafTipX)},${f2(leafTipY)} C ${f2(leafTipX - dir * leafW * 0.2)},${f2(leafTipY + leafH * 0.6)} ${f2(branchX + dir * leafW * 0.15)},${f2(branchY + leafH * 0.4)} ${f2(branchX)},${f2(branchY + leafH * 0.1)}`
|
|
26616
|
-
);
|
|
26617
|
-
const tendrilY = y0 + segH * 0.7;
|
|
26618
|
-
const tendrilW = w * 0.35;
|
|
26619
|
-
const tendrilTipX = edgeX + dir * tendrilW;
|
|
26620
|
-
paths.push(
|
|
26621
|
-
`M ${f2(edgeX)},${f2(tendrilY)} Q ${f2(edgeX + dir * tendrilW * 0.6)},${f2(tendrilY - segH * 0.12)} ${f2(tendrilTipX)},${f2(tendrilY + segH * 0.05)}`
|
|
26622
|
-
);
|
|
26623
|
-
const spR = leafW * 0.08;
|
|
26624
|
-
paths.push(
|
|
26625
|
-
`M ${f2(leafTipX)},${f2(leafTipY)} A ${f2(spR)} ${f2(spR)} 0 1 ${facing === "right" ? 0 : 1} ${f2(leafTipX + dir * spR * 0.5)},${f2(leafTipY + spR)}`
|
|
26626
|
-
);
|
|
26627
|
-
}
|
|
26628
|
-
return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
|
|
26629
|
-
}
|
|
26630
|
-
function LatticeSVG({
|
|
26631
|
-
facing,
|
|
26632
|
-
w,
|
|
26633
|
-
h,
|
|
26634
|
-
color,
|
|
26635
|
-
strokeWidth
|
|
26636
|
-
}) {
|
|
26637
|
-
const paths = [];
|
|
26638
|
-
const cols = 5;
|
|
26639
|
-
const rows = Math.ceil(h / (w / cols));
|
|
26640
|
-
const cellW = w / cols;
|
|
26641
|
-
const cellH = cellW;
|
|
26642
|
-
const bulge = cellW * 0.3;
|
|
26643
|
-
for (let row = 0; row < rows; row++) {
|
|
26644
|
-
for (let col = 0; col < cols; col++) {
|
|
26645
|
-
const cx = col * cellW + cellW / 2;
|
|
26646
|
-
const cy = row * cellH + cellH / 2;
|
|
26647
|
-
const hw = cellW * 0.5;
|
|
26648
|
-
const hh = cellH * 0.5;
|
|
26649
|
-
paths.push(
|
|
26650
|
-
`M ${f2(cx)},${f2(cy - hh)} Q ${f2(cx + bulge)},${f2(cy)} ${f2(cx)},${f2(cy + hh)}`
|
|
26651
|
-
);
|
|
26652
|
-
paths.push(
|
|
26653
|
-
`M ${f2(cx)},${f2(cy - hh)} Q ${f2(cx - bulge)},${f2(cy)} ${f2(cx)},${f2(cy + hh)}`
|
|
26654
|
-
);
|
|
26655
|
-
paths.push(
|
|
26656
|
-
`M ${f2(cx - hw)},${f2(cy)} Q ${f2(cx)},${f2(cy - bulge * 0.5)} ${f2(cx + hw)},${f2(cy)}`
|
|
26657
|
-
);
|
|
26658
|
-
paths.push(
|
|
26659
|
-
`M ${f2(cx - hw)},${f2(cy)} Q ${f2(cx)},${f2(cy + bulge * 0.5)} ${f2(cx + hw)},${f2(cy)}`
|
|
26660
|
-
);
|
|
26661
|
-
}
|
|
26662
|
-
}
|
|
26663
|
-
return /* @__PURE__ */ jsx("g", { fill: "none", stroke: color, strokeWidth, children: paths.map((d, i) => /* @__PURE__ */ jsx("path", { d }, i)) });
|
|
26664
|
-
}
|
|
26665
|
-
function f2(n) {
|
|
26666
|
-
return n.toFixed(2);
|
|
26667
|
-
}
|
|
26668
|
-
var VARIANT_MAP2, EdgeDecoration;
|
|
26669
|
-
var init_EdgeDecoration = __esm({
|
|
26670
|
-
"components/molecules/EdgeDecoration.tsx"() {
|
|
26671
|
-
"use client";
|
|
26672
|
-
init_cn();
|
|
26673
|
-
VARIANT_MAP2 = {
|
|
26674
|
-
arch: ArchSVG,
|
|
26675
|
-
vine: VineSVG,
|
|
26676
|
-
lattice: LatticeSVG
|
|
26677
|
-
};
|
|
26678
|
-
EdgeDecoration = ({
|
|
26679
|
-
variant = "arch",
|
|
26680
|
-
side = "both",
|
|
26681
|
-
opacity = 0.15,
|
|
26682
|
-
color = "var(--color-primary)",
|
|
26683
|
-
strokeWidth = 0.5,
|
|
26684
|
-
width = 15,
|
|
26685
|
-
className
|
|
26686
|
-
}) => {
|
|
26687
|
-
const id = useId();
|
|
26688
|
-
const Variant = VARIANT_MAP2[variant];
|
|
26689
|
-
const sides = side === "both" ? ["left", "right"] : [side];
|
|
26690
|
-
return /* @__PURE__ */ jsx(Fragment, { children: sides.map((s) => /* @__PURE__ */ jsx(
|
|
26691
|
-
"svg",
|
|
26692
|
-
{
|
|
26693
|
-
className: cn(
|
|
26694
|
-
"absolute top-0 h-full pointer-events-none",
|
|
26695
|
-
s === "left" ? "left-0" : "right-0",
|
|
26696
|
-
className
|
|
26697
|
-
),
|
|
26698
|
-
style: {
|
|
26699
|
-
width: `${width}%`,
|
|
26700
|
-
opacity
|
|
26701
|
-
},
|
|
26702
|
-
viewBox: `0 0 200 ${200 * 3}`,
|
|
26703
|
-
preserveAspectRatio: "none",
|
|
26704
|
-
"aria-hidden": "true",
|
|
26705
|
-
children: /* @__PURE__ */ jsx(
|
|
26706
|
-
Variant,
|
|
26707
|
-
{
|
|
26708
|
-
facing: s,
|
|
26709
|
-
w: 200,
|
|
26710
|
-
h: 600,
|
|
26711
|
-
color,
|
|
26712
|
-
strokeWidth
|
|
26713
|
-
}
|
|
26714
|
-
)
|
|
26715
|
-
},
|
|
26716
|
-
`${id}-${s}`
|
|
26717
|
-
)) });
|
|
26718
|
-
};
|
|
26719
|
-
EdgeDecoration.displayName = "EdgeDecoration";
|
|
26720
|
-
}
|
|
26721
|
-
});
|
|
26722
23919
|
|
|
26723
23920
|
// components/molecules/index.ts
|
|
26724
23921
|
var init_molecules = __esm({
|
|
26725
23922
|
"components/molecules/index.ts"() {
|
|
26726
|
-
init_ErrorBoundary();
|
|
26727
|
-
init_FileTree();
|
|
26728
|
-
init_FormField();
|
|
26729
23923
|
init_EmptyState();
|
|
26730
|
-
init_LoadingState();
|
|
26731
|
-
init_ErrorState();
|
|
26732
|
-
init_Skeleton();
|
|
26733
|
-
init_Accordion();
|
|
26734
|
-
init_Alert();
|
|
26735
|
-
init_Breadcrumb();
|
|
26736
|
-
init_ButtonGroup();
|
|
26737
|
-
init_FilterGroup();
|
|
26738
|
-
init_Card2();
|
|
26739
|
-
init_Container();
|
|
26740
|
-
init_Flex();
|
|
26741
|
-
init_FloatingActionButton();
|
|
26742
|
-
init_Grid();
|
|
26743
|
-
init_InputGroup();
|
|
26744
|
-
init_Menu();
|
|
26745
|
-
init_Modal();
|
|
26746
23924
|
init_Pagination();
|
|
26747
|
-
init_Popover();
|
|
26748
|
-
init_RelationSelect();
|
|
26749
|
-
init_SearchInput();
|
|
26750
|
-
init_SidePanel();
|
|
26751
|
-
init_SimpleGrid();
|
|
26752
|
-
init_Tabs();
|
|
26753
|
-
init_Toast();
|
|
26754
|
-
init_Tooltip();
|
|
26755
|
-
init_Drawer();
|
|
26756
|
-
init_WizardProgress();
|
|
26757
|
-
init_WizardNavigation();
|
|
26758
|
-
init_MarkdownContent();
|
|
26759
|
-
init_CodeBlock();
|
|
26760
|
-
init_QuizBlock();
|
|
26761
|
-
init_ScaledDiagram();
|
|
26762
|
-
init_CalendarGrid();
|
|
26763
|
-
init_RepeatableFormSection();
|
|
26764
|
-
init_ViolationAlert();
|
|
26765
|
-
init_FormSectionHeader();
|
|
26766
|
-
init_FlipCard();
|
|
26767
|
-
init_DateRangeSelector();
|
|
26768
|
-
init_ChartLegend();
|
|
26769
|
-
init_LineChart();
|
|
26770
|
-
init_ProgressDots();
|
|
26771
23925
|
init_game2();
|
|
26772
|
-
init_GraphView();
|
|
26773
|
-
init_MapView();
|
|
26774
|
-
init_NumberStepper();
|
|
26775
|
-
init_StarRating();
|
|
26776
|
-
init_UploadDropZone();
|
|
26777
|
-
init_Lightbox();
|
|
26778
|
-
init_DataGrid();
|
|
26779
|
-
init_DataList();
|
|
26780
|
-
init_StatDisplay();
|
|
26781
|
-
init_Meter();
|
|
26782
|
-
init_SwipeableRow();
|
|
26783
|
-
init_SortableList();
|
|
26784
|
-
init_Carousel();
|
|
26785
|
-
init_PullToRefresh();
|
|
26786
|
-
init_InstallBox();
|
|
26787
|
-
init_FeatureCard();
|
|
26788
|
-
init_FeatureGrid();
|
|
26789
|
-
init_CTABanner();
|
|
26790
|
-
init_HeroSection();
|
|
26791
|
-
init_PricingCard();
|
|
26792
|
-
init_PricingGrid();
|
|
26793
|
-
init_StatsGrid();
|
|
26794
|
-
init_ServiceCatalog();
|
|
26795
|
-
init_CaseStudyCard();
|
|
26796
|
-
init_ArticleSection();
|
|
26797
|
-
init_CodeExample();
|
|
26798
|
-
init_SocialProof();
|
|
26799
|
-
init_StepFlow();
|
|
26800
|
-
init_SplitSection();
|
|
26801
|
-
init_TagCloud();
|
|
26802
|
-
init_CommunityLinks();
|
|
26803
|
-
init_TeamCard();
|
|
26804
|
-
init_ShowcaseCard();
|
|
26805
|
-
init_GeometricPattern();
|
|
26806
|
-
init_EdgeDecoration();
|
|
26807
23926
|
}
|
|
26808
23927
|
});
|
|
26809
23928
|
|
|
@@ -27469,19 +24588,19 @@ function renderRichFieldValue(value, fieldName, fieldType) {
|
|
|
27469
24588
|
}
|
|
27470
24589
|
function normalizeFieldDefs(fields) {
|
|
27471
24590
|
if (!fields) return [];
|
|
27472
|
-
return fields.map((
|
|
27473
|
-
if (typeof
|
|
27474
|
-
if ("key" in
|
|
27475
|
-
if ("name" in
|
|
27476
|
-
return String(
|
|
24591
|
+
return fields.map((f) => {
|
|
24592
|
+
if (typeof f === "string") return f;
|
|
24593
|
+
if ("key" in f) return f.key;
|
|
24594
|
+
if ("name" in f) return f.name;
|
|
24595
|
+
return String(f);
|
|
27477
24596
|
});
|
|
27478
24597
|
}
|
|
27479
24598
|
function buildFieldTypeMap(fields) {
|
|
27480
24599
|
const map = {};
|
|
27481
24600
|
if (!fields) return map;
|
|
27482
|
-
for (const
|
|
27483
|
-
if (typeof
|
|
27484
|
-
map[
|
|
24601
|
+
for (const f of fields) {
|
|
24602
|
+
if (typeof f === "object" && "name" in f && "type" in f) {
|
|
24603
|
+
map[f.name] = f.type;
|
|
27485
24604
|
}
|
|
27486
24605
|
}
|
|
27487
24606
|
return map;
|
|
@@ -27578,22 +24697,22 @@ var init_DetailPanel = __esm({
|
|
|
27578
24697
|
title = String(normalizedData[primaryField]);
|
|
27579
24698
|
}
|
|
27580
24699
|
const statusFields = effectiveFieldNames.filter(
|
|
27581
|
-
(
|
|
24700
|
+
(f) => f.toLowerCase().includes("status") || f.toLowerCase().includes("priority")
|
|
27582
24701
|
);
|
|
27583
24702
|
const progressFields = effectiveFieldNames.filter(
|
|
27584
|
-
(
|
|
24703
|
+
(f) => f.toLowerCase().includes("progress") || f.toLowerCase().includes("percent")
|
|
27585
24704
|
);
|
|
27586
24705
|
const metricFields = effectiveFieldNames.filter(
|
|
27587
|
-
(
|
|
24706
|
+
(f) => (f.toLowerCase().includes("budget") || f.toLowerCase().includes("cost") || f.toLowerCase().includes("count")) && !progressFields.includes(f)
|
|
27588
24707
|
);
|
|
27589
24708
|
const dateFields = effectiveFieldNames.filter(
|
|
27590
|
-
(
|
|
24709
|
+
(f) => f.toLowerCase().includes("date") || f.toLowerCase().includes("time")
|
|
27591
24710
|
);
|
|
27592
24711
|
const descriptionFields = effectiveFieldNames.filter(
|
|
27593
|
-
(
|
|
24712
|
+
(f) => f.toLowerCase().includes("description") || f.toLowerCase().includes("note")
|
|
27594
24713
|
);
|
|
27595
24714
|
const otherFields = effectiveFieldNames.filter(
|
|
27596
|
-
(
|
|
24715
|
+
(f) => f !== primaryField && !statusFields.includes(f) && !progressFields.includes(f) && !metricFields.includes(f) && !dateFields.includes(f) && !descriptionFields.includes(f)
|
|
27597
24716
|
);
|
|
27598
24717
|
sections = [];
|
|
27599
24718
|
if (statusFields.length > 0 || otherFields.length > 0) {
|
|
@@ -27747,7 +24866,7 @@ var init_DetailPanel = __esm({
|
|
|
27747
24866
|
subtitle && /* @__PURE__ */ jsx(Typography, { variant: "body", color: "secondary", children: subtitle }),
|
|
27748
24867
|
/* @__PURE__ */ jsxs(HStack, { gap: "xs", wrap: true, children: [
|
|
27749
24868
|
normalizedData && effectiveFieldNames && effectiveFieldNames.filter(
|
|
27750
|
-
(
|
|
24869
|
+
(f) => f.toLowerCase().includes("status") || f.toLowerCase().includes("priority")
|
|
27751
24870
|
).map((field) => {
|
|
27752
24871
|
const value = getNestedValue(normalizedData, field);
|
|
27753
24872
|
if (!value) return null;
|
|
@@ -27763,7 +24882,7 @@ var init_DetailPanel = __esm({
|
|
|
27763
24882
|
status && /* @__PURE__ */ jsx(Badge, { variant: status.variant ?? "default", children: status.label })
|
|
27764
24883
|
] }),
|
|
27765
24884
|
normalizedData && effectiveFieldNames && effectiveFieldNames.filter(
|
|
27766
|
-
(
|
|
24885
|
+
(f) => f.toLowerCase().includes("progress") || f.toLowerCase().includes("percent")
|
|
27767
24886
|
).map((field) => {
|
|
27768
24887
|
const value = getNestedValue(normalizedData, field);
|
|
27769
24888
|
if (value === void 0 || value === null || typeof value !== "number")
|
|
@@ -28030,7 +25149,7 @@ var init_DocumentViewer = __esm({
|
|
|
28030
25149
|
}
|
|
28031
25150
|
});
|
|
28032
25151
|
function extractTitle(children) {
|
|
28033
|
-
if (!
|
|
25152
|
+
if (!React105__default.isValidElement(children)) return void 0;
|
|
28034
25153
|
const props = children.props;
|
|
28035
25154
|
if (typeof props.title === "string") {
|
|
28036
25155
|
return props.title;
|
|
@@ -28085,7 +25204,7 @@ function LinearView({
|
|
|
28085
25204
|
/* @__PURE__ */ jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
|
|
28086
25205
|
const isDone = i < currentIdx;
|
|
28087
25206
|
const isCurrent = i === currentIdx;
|
|
28088
|
-
return /* @__PURE__ */ jsxs(
|
|
25207
|
+
return /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
|
|
28089
25208
|
i > 0 && /* @__PURE__ */ jsx(
|
|
28090
25209
|
Typography,
|
|
28091
25210
|
{
|
|
@@ -28869,51 +25988,51 @@ var init_Form = __esm({
|
|
|
28869
25988
|
const isSchemaEntity = isOrbitalEntitySchema(entity);
|
|
28870
25989
|
const resolvedEntity = isSchemaEntity ? entity : void 0;
|
|
28871
25990
|
const entityName = typeof entity === "string" ? entity : resolvedEntity?.name;
|
|
28872
|
-
const normalizedInitialData =
|
|
25991
|
+
const normalizedInitialData = React105__default.useMemo(() => {
|
|
28873
25992
|
const entityRowAsInitial = isPlainEntityRow(entity) ? entity : void 0;
|
|
28874
25993
|
const callerInitial = initialData !== null && typeof initialData === "object" && !Array.isArray(initialData) ? initialData : {};
|
|
28875
25994
|
return entityRowAsInitial !== void 0 ? { ...entityRowAsInitial, ...callerInitial } : callerInitial;
|
|
28876
25995
|
}, [entity, initialData]);
|
|
28877
|
-
const entityDerivedFields =
|
|
25996
|
+
const entityDerivedFields = React105__default.useMemo(() => {
|
|
28878
25997
|
if (fields && fields.length > 0) return void 0;
|
|
28879
25998
|
if (!resolvedEntity) return void 0;
|
|
28880
25999
|
return resolvedEntity.fields.map(
|
|
28881
|
-
(
|
|
28882
|
-
name:
|
|
28883
|
-
type:
|
|
28884
|
-
required:
|
|
28885
|
-
defaultValue:
|
|
28886
|
-
values:
|
|
28887
|
-
min:
|
|
28888
|
-
max:
|
|
28889
|
-
relation:
|
|
26000
|
+
(f) => ({
|
|
26001
|
+
name: f.name,
|
|
26002
|
+
type: f.type,
|
|
26003
|
+
required: f.required,
|
|
26004
|
+
defaultValue: f.default,
|
|
26005
|
+
values: f.values,
|
|
26006
|
+
min: f.min,
|
|
26007
|
+
max: f.max,
|
|
26008
|
+
relation: f.relation ? { entity: f.relation.entity } : void 0
|
|
28890
26009
|
})
|
|
28891
26010
|
);
|
|
28892
26011
|
}, [entity, fields]);
|
|
28893
26012
|
const conditionalFields = typeof conditionalFieldsRaw === "boolean" ? {} : conditionalFieldsRaw;
|
|
28894
26013
|
const hiddenCalculations = typeof hiddenCalculationsRaw === "boolean" ? [] : hiddenCalculationsRaw;
|
|
28895
26014
|
const violationTriggers = typeof violationTriggersRaw === "boolean" ? [] : violationTriggersRaw;
|
|
28896
|
-
const [formData, setFormData] =
|
|
26015
|
+
const [formData, setFormData] = React105__default.useState(
|
|
28897
26016
|
normalizedInitialData
|
|
28898
26017
|
);
|
|
28899
|
-
const [collapsedSections, setCollapsedSections] =
|
|
26018
|
+
const [collapsedSections, setCollapsedSections] = React105__default.useState(
|
|
28900
26019
|
/* @__PURE__ */ new Set()
|
|
28901
26020
|
);
|
|
28902
26021
|
const formMode = props.mode;
|
|
28903
|
-
const mountedRef =
|
|
26022
|
+
const mountedRef = React105__default.useRef(false);
|
|
28904
26023
|
if (!mountedRef.current) {
|
|
28905
26024
|
mountedRef.current = true;
|
|
28906
26025
|
debug("forms", "mount", {
|
|
28907
26026
|
mode: formMode,
|
|
28908
26027
|
submitEvent,
|
|
28909
26028
|
cancelEvent,
|
|
28910
|
-
fieldNames: (fields ?? []).map((
|
|
26029
|
+
fieldNames: (fields ?? []).map((f) => f.name ?? f.field).filter(Boolean),
|
|
28911
26030
|
initialDataKeys: Object.keys(normalizedInitialData),
|
|
28912
26031
|
initialData: normalizedInitialData
|
|
28913
26032
|
});
|
|
28914
26033
|
}
|
|
28915
26034
|
const shouldShowCancel = showCancel ?? (fields && fields.length > 0);
|
|
28916
|
-
const evalContext =
|
|
26035
|
+
const evalContext = React105__default.useMemo(
|
|
28917
26036
|
() => ({
|
|
28918
26037
|
formValues: formData,
|
|
28919
26038
|
globalVariables: externalContext?.globalVariables ?? {},
|
|
@@ -28922,7 +26041,7 @@ var init_Form = __esm({
|
|
|
28922
26041
|
}),
|
|
28923
26042
|
[formData, externalContext]
|
|
28924
26043
|
);
|
|
28925
|
-
|
|
26044
|
+
React105__default.useEffect(() => {
|
|
28926
26045
|
debug("forms", "initialData-sync", {
|
|
28927
26046
|
mode: formMode,
|
|
28928
26047
|
normalizedInitialData,
|
|
@@ -28933,7 +26052,7 @@ var init_Form = __esm({
|
|
|
28933
26052
|
setFormData(normalizedInitialData);
|
|
28934
26053
|
}
|
|
28935
26054
|
}, [normalizedInitialData]);
|
|
28936
|
-
const processCalculations =
|
|
26055
|
+
const processCalculations = React105__default.useCallback(
|
|
28937
26056
|
(changedFieldId, newFormData) => {
|
|
28938
26057
|
if (!hiddenCalculations.length) return;
|
|
28939
26058
|
const context = {
|
|
@@ -28958,7 +26077,7 @@ var init_Form = __esm({
|
|
|
28958
26077
|
},
|
|
28959
26078
|
[hiddenCalculations, externalContext, eventBus]
|
|
28960
26079
|
);
|
|
28961
|
-
const checkViolations =
|
|
26080
|
+
const checkViolations = React105__default.useCallback(
|
|
28962
26081
|
(changedFieldId, newFormData) => {
|
|
28963
26082
|
if (!violationTriggers.length) return;
|
|
28964
26083
|
const context = {
|
|
@@ -28996,7 +26115,7 @@ var init_Form = __esm({
|
|
|
28996
26115
|
processCalculations(name, newFormData);
|
|
28997
26116
|
checkViolations(name, newFormData);
|
|
28998
26117
|
};
|
|
28999
|
-
const isFieldVisible =
|
|
26118
|
+
const isFieldVisible = React105__default.useCallback(
|
|
29000
26119
|
(fieldName) => {
|
|
29001
26120
|
const condition = conditionalFields[fieldName];
|
|
29002
26121
|
if (!condition) return true;
|
|
@@ -29004,7 +26123,7 @@ var init_Form = __esm({
|
|
|
29004
26123
|
},
|
|
29005
26124
|
[conditionalFields, evalContext]
|
|
29006
26125
|
);
|
|
29007
|
-
const isSectionVisible =
|
|
26126
|
+
const isSectionVisible = React105__default.useCallback(
|
|
29008
26127
|
(section) => {
|
|
29009
26128
|
if (!section.condition) return true;
|
|
29010
26129
|
return Boolean(evaluateFormExpression(section.condition, evalContext));
|
|
@@ -29048,7 +26167,7 @@ var init_Form = __esm({
|
|
|
29048
26167
|
eventBus.emit(`UI:${onCancel}`);
|
|
29049
26168
|
}
|
|
29050
26169
|
};
|
|
29051
|
-
const renderField =
|
|
26170
|
+
const renderField = React105__default.useCallback(
|
|
29052
26171
|
(field) => {
|
|
29053
26172
|
const fieldName = field.name || field.field;
|
|
29054
26173
|
if (!fieldName) return null;
|
|
@@ -29069,11 +26188,11 @@ var init_Form = __esm({
|
|
|
29069
26188
|
[formData, isFieldVisible, relationsData, relationsLoading, isLoading]
|
|
29070
26189
|
);
|
|
29071
26190
|
const effectiveFields = entityDerivedFields ?? fields;
|
|
29072
|
-
const normalizedFields =
|
|
26191
|
+
const normalizedFields = React105__default.useMemo(() => {
|
|
29073
26192
|
if (!effectiveFields || effectiveFields.length === 0) return [];
|
|
29074
26193
|
return effectiveFields.map((field) => {
|
|
29075
26194
|
if (typeof field === "string") {
|
|
29076
|
-
const entityField = resolvedEntity?.fields?.find((
|
|
26195
|
+
const entityField = resolvedEntity?.fields?.find((f) => f.name === field);
|
|
29077
26196
|
if (entityField) {
|
|
29078
26197
|
return {
|
|
29079
26198
|
name: field,
|
|
@@ -29091,7 +26210,7 @@ var init_Form = __esm({
|
|
|
29091
26210
|
return field;
|
|
29092
26211
|
});
|
|
29093
26212
|
}, [effectiveFields, resolvedEntity]);
|
|
29094
|
-
const schemaFields =
|
|
26213
|
+
const schemaFields = React105__default.useMemo(() => {
|
|
29095
26214
|
if (normalizedFields.length === 0) return null;
|
|
29096
26215
|
if (isDebugEnabled()) {
|
|
29097
26216
|
debugGroup(`Form: ${entityName || "unknown"}`);
|
|
@@ -29101,7 +26220,7 @@ var init_Form = __esm({
|
|
|
29101
26220
|
}
|
|
29102
26221
|
return normalizedFields.map(renderField).filter(Boolean);
|
|
29103
26222
|
}, [normalizedFields, renderField, entityName, conditionalFields]);
|
|
29104
|
-
const sectionElements =
|
|
26223
|
+
const sectionElements = React105__default.useMemo(() => {
|
|
29105
26224
|
if (!sections || sections.length === 0) return null;
|
|
29106
26225
|
return sections.map((section) => {
|
|
29107
26226
|
if (!isSectionVisible(section)) {
|
|
@@ -30406,7 +27525,7 @@ var init_InventoryPanel2 = __esm({
|
|
|
30406
27525
|
});
|
|
30407
27526
|
function normalizeFields2(fields) {
|
|
30408
27527
|
if (!fields) return [];
|
|
30409
|
-
return fields.map((
|
|
27528
|
+
return fields.map((f) => typeof f === "string" ? f : f.key ?? f.name ?? "");
|
|
30410
27529
|
}
|
|
30411
27530
|
function entityFieldsFromListItem(item) {
|
|
30412
27531
|
const {
|
|
@@ -30625,7 +27744,7 @@ var init_List = __esm({
|
|
|
30625
27744
|
if (entity && typeof entity === "object" && "id" in entity) return [entity];
|
|
30626
27745
|
return [];
|
|
30627
27746
|
}, [entity]);
|
|
30628
|
-
const getItemActions =
|
|
27747
|
+
const getItemActions = React105__default.useCallback(
|
|
30629
27748
|
(item) => {
|
|
30630
27749
|
if (!itemActions) return [];
|
|
30631
27750
|
if (typeof itemActions === "function") {
|
|
@@ -30729,19 +27848,19 @@ var init_List = __esm({
|
|
|
30729
27848
|
const rowActionPayload = { row: entityFieldsFromListItem(item) };
|
|
30730
27849
|
const primaryField = effectiveFieldNames?.[0];
|
|
30731
27850
|
const statusField = effectiveFieldNames?.find(
|
|
30732
|
-
(
|
|
27851
|
+
(f) => f.toLowerCase().includes("status")
|
|
30733
27852
|
);
|
|
30734
27853
|
const priorityField = effectiveFieldNames?.find(
|
|
30735
|
-
(
|
|
27854
|
+
(f) => f.toLowerCase().includes("priority")
|
|
30736
27855
|
);
|
|
30737
27856
|
const progressField = effectiveFieldNames?.find(
|
|
30738
|
-
(
|
|
27857
|
+
(f) => f.toLowerCase().includes("progress") || f.toLowerCase().includes("percent")
|
|
30739
27858
|
);
|
|
30740
27859
|
const dateFields = effectiveFieldNames?.filter(
|
|
30741
|
-
(
|
|
27860
|
+
(f) => f.toLowerCase().includes("date") || f.toLowerCase().includes("due")
|
|
30742
27861
|
) || [];
|
|
30743
27862
|
const metadataFields = effectiveFieldNames?.filter(
|
|
30744
|
-
(
|
|
27863
|
+
(f) => f !== primaryField && f !== statusField && f !== priorityField && f !== progressField && !dateFields.includes(f)
|
|
30745
27864
|
).slice(0, 2) || [];
|
|
30746
27865
|
const statusValue = statusField ? item._fields?.[statusField] : null;
|
|
30747
27866
|
statusValue ? getStatusStyle(statusField, String(statusValue)) : null;
|
|
@@ -31062,7 +28181,7 @@ var init_MediaGallery = __esm({
|
|
|
31062
28181
|
[selectable, selectedItems, selectionEvent, eventBus]
|
|
31063
28182
|
);
|
|
31064
28183
|
const entityData = Array.isArray(entity) ? entity : [];
|
|
31065
|
-
const items =
|
|
28184
|
+
const items = React105__default.useMemo(() => {
|
|
31066
28185
|
if (propItems) return propItems;
|
|
31067
28186
|
if (entityData.length === 0) return [];
|
|
31068
28187
|
return entityData.map((record, idx) => ({
|
|
@@ -31226,7 +28345,7 @@ var init_MediaGallery = __esm({
|
|
|
31226
28345
|
}
|
|
31227
28346
|
});
|
|
31228
28347
|
function extractTitle2(children) {
|
|
31229
|
-
if (!
|
|
28348
|
+
if (!React105__default.isValidElement(children)) return void 0;
|
|
31230
28349
|
const props = children.props;
|
|
31231
28350
|
if (typeof props.title === "string") {
|
|
31232
28351
|
return props.title;
|
|
@@ -31939,7 +29058,7 @@ var init_PageHeader = __esm({
|
|
|
31939
29058
|
info: "bg-info/10 text-info"
|
|
31940
29059
|
};
|
|
31941
29060
|
return /* @__PURE__ */ jsxs(Box, { className: cn("mb-6", className), children: [
|
|
31942
|
-
breadcrumbs && breadcrumbs.length > 0 && /* @__PURE__ */ jsx(Box, { as: "nav", className: "mb-4", children: /* @__PURE__ */ jsx(Box, { as: "ol", className: "flex items-center gap-2 text-sm", children: breadcrumbs.map((crumb, idx) => /* @__PURE__ */ jsxs(
|
|
29061
|
+
breadcrumbs && breadcrumbs.length > 0 && /* @__PURE__ */ jsx(Box, { as: "nav", className: "mb-4", children: /* @__PURE__ */ jsx(Box, { as: "ol", className: "flex items-center gap-2 text-sm", children: breadcrumbs.map((crumb, idx) => /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
|
|
31943
29062
|
idx > 0 && /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: "/" }),
|
|
31944
29063
|
crumb.href ? /* @__PURE__ */ jsx(
|
|
31945
29064
|
"a",
|
|
@@ -32113,7 +29232,7 @@ var init_debugRegistry = __esm({
|
|
|
32113
29232
|
}
|
|
32114
29233
|
});
|
|
32115
29234
|
function useDebugData() {
|
|
32116
|
-
const [data, setData] =
|
|
29235
|
+
const [data, setData] = React105.useState(() => ({
|
|
32117
29236
|
traits: [],
|
|
32118
29237
|
ticks: [],
|
|
32119
29238
|
guards: [],
|
|
@@ -32127,7 +29246,7 @@ function useDebugData() {
|
|
|
32127
29246
|
},
|
|
32128
29247
|
lastUpdate: Date.now()
|
|
32129
29248
|
}));
|
|
32130
|
-
|
|
29249
|
+
React105.useEffect(() => {
|
|
32131
29250
|
const updateData = () => {
|
|
32132
29251
|
setData({
|
|
32133
29252
|
traits: getAllTraits(),
|
|
@@ -32236,12 +29355,12 @@ function layoutGraph(states, transitions, initialState, width, height) {
|
|
|
32236
29355
|
return positions;
|
|
32237
29356
|
}
|
|
32238
29357
|
function WalkMinimap() {
|
|
32239
|
-
const [walkStep, setWalkStep] =
|
|
32240
|
-
const [traits2, setTraits] =
|
|
32241
|
-
const [coveredEdges, setCoveredEdges] =
|
|
32242
|
-
const [completedTraits, setCompletedTraits] =
|
|
32243
|
-
const prevTraitRef =
|
|
32244
|
-
|
|
29358
|
+
const [walkStep, setWalkStep] = React105.useState(null);
|
|
29359
|
+
const [traits2, setTraits] = React105.useState([]);
|
|
29360
|
+
const [coveredEdges, setCoveredEdges] = React105.useState([]);
|
|
29361
|
+
const [completedTraits, setCompletedTraits] = React105.useState(/* @__PURE__ */ new Set());
|
|
29362
|
+
const prevTraitRef = React105.useRef(null);
|
|
29363
|
+
React105.useEffect(() => {
|
|
32245
29364
|
const interval = setInterval(() => {
|
|
32246
29365
|
const w = window;
|
|
32247
29366
|
const step = w.__orbitalWalkStep;
|
|
@@ -32688,15 +29807,15 @@ var init_EntitiesTab = __esm({
|
|
|
32688
29807
|
}
|
|
32689
29808
|
});
|
|
32690
29809
|
function EventFlowTab({ events: events2 }) {
|
|
32691
|
-
const [filter, setFilter] =
|
|
32692
|
-
const containerRef =
|
|
32693
|
-
const [autoScroll, setAutoScroll] =
|
|
32694
|
-
|
|
29810
|
+
const [filter, setFilter] = React105.useState("all");
|
|
29811
|
+
const containerRef = React105.useRef(null);
|
|
29812
|
+
const [autoScroll, setAutoScroll] = React105.useState(true);
|
|
29813
|
+
React105.useEffect(() => {
|
|
32695
29814
|
if (autoScroll && containerRef.current) {
|
|
32696
29815
|
containerRef.current.scrollTop = containerRef.current.scrollHeight;
|
|
32697
29816
|
}
|
|
32698
29817
|
}, [events2.length, autoScroll]);
|
|
32699
|
-
const filteredEvents =
|
|
29818
|
+
const filteredEvents = React105.useMemo(() => {
|
|
32700
29819
|
if (filter === "all") return events2;
|
|
32701
29820
|
return events2.filter((e) => e.type === filter);
|
|
32702
29821
|
}, [events2, filter]);
|
|
@@ -32815,7 +29934,7 @@ var init_EventFlowTab = __esm({
|
|
|
32815
29934
|
}
|
|
32816
29935
|
});
|
|
32817
29936
|
function GuardsPanel({ guards }) {
|
|
32818
|
-
const [filter, setFilter] =
|
|
29937
|
+
const [filter, setFilter] = React105.useState("all");
|
|
32819
29938
|
if (guards.length === 0) {
|
|
32820
29939
|
return /* @__PURE__ */ jsx(
|
|
32821
29940
|
EmptyState,
|
|
@@ -32828,7 +29947,7 @@ function GuardsPanel({ guards }) {
|
|
|
32828
29947
|
}
|
|
32829
29948
|
const passedCount = guards.filter((g) => g.result).length;
|
|
32830
29949
|
const failedCount = guards.length - passedCount;
|
|
32831
|
-
const filteredGuards =
|
|
29950
|
+
const filteredGuards = React105.useMemo(() => {
|
|
32832
29951
|
if (filter === "all") return guards;
|
|
32833
29952
|
if (filter === "passed") return guards.filter((g) => g.result);
|
|
32834
29953
|
return guards.filter((g) => !g.result);
|
|
@@ -32989,10 +30108,10 @@ function EffectBadge({ effect }) {
|
|
|
32989
30108
|
] });
|
|
32990
30109
|
}
|
|
32991
30110
|
function TransitionTimeline({ transitions }) {
|
|
32992
|
-
const containerRef =
|
|
32993
|
-
const [autoScroll, setAutoScroll] =
|
|
32994
|
-
const [expandedId, setExpandedId] =
|
|
32995
|
-
|
|
30111
|
+
const containerRef = React105.useRef(null);
|
|
30112
|
+
const [autoScroll, setAutoScroll] = React105.useState(true);
|
|
30113
|
+
const [expandedId, setExpandedId] = React105.useState(null);
|
|
30114
|
+
React105.useEffect(() => {
|
|
32996
30115
|
if (autoScroll && containerRef.current) {
|
|
32997
30116
|
containerRef.current.scrollTop = containerRef.current.scrollHeight;
|
|
32998
30117
|
}
|
|
@@ -33216,9 +30335,9 @@ function extractPayloadFields(schema, eventName) {
|
|
|
33216
30335
|
for (const evt of events2) {
|
|
33217
30336
|
if (evt.name !== eventName) continue;
|
|
33218
30337
|
const payload = evt.payload ?? [];
|
|
33219
|
-
return payload.map((
|
|
33220
|
-
name:
|
|
33221
|
-
type:
|
|
30338
|
+
return payload.map((f) => ({
|
|
30339
|
+
name: f.name,
|
|
30340
|
+
type: f.type ?? "string"
|
|
33222
30341
|
}));
|
|
33223
30342
|
}
|
|
33224
30343
|
}
|
|
@@ -33278,9 +30397,9 @@ function getAllEvents(traits2) {
|
|
|
33278
30397
|
}
|
|
33279
30398
|
function EventDispatcherTab({ traits: traits2, schema }) {
|
|
33280
30399
|
const eventBus = useEventBus();
|
|
33281
|
-
const [log4, setLog] =
|
|
33282
|
-
const prevStatesRef =
|
|
33283
|
-
|
|
30400
|
+
const [log4, setLog] = React105.useState([]);
|
|
30401
|
+
const prevStatesRef = React105.useRef(/* @__PURE__ */ new Map());
|
|
30402
|
+
React105.useEffect(() => {
|
|
33284
30403
|
for (const trait of traits2) {
|
|
33285
30404
|
const prev = prevStatesRef.current.get(trait.id);
|
|
33286
30405
|
if (prev && prev !== trait.currentState) {
|
|
@@ -33450,10 +30569,10 @@ function VerifyModePanel({
|
|
|
33450
30569
|
serverCount,
|
|
33451
30570
|
localCount
|
|
33452
30571
|
}) {
|
|
33453
|
-
const [expanded, setExpanded] =
|
|
33454
|
-
const scrollRef =
|
|
33455
|
-
const prevCountRef =
|
|
33456
|
-
|
|
30572
|
+
const [expanded, setExpanded] = React105.useState(true);
|
|
30573
|
+
const scrollRef = React105.useRef(null);
|
|
30574
|
+
const prevCountRef = React105.useRef(0);
|
|
30575
|
+
React105.useEffect(() => {
|
|
33457
30576
|
if (expanded && transitions.length > prevCountRef.current && scrollRef.current) {
|
|
33458
30577
|
scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
|
|
33459
30578
|
}
|
|
@@ -33519,10 +30638,10 @@ function RuntimeDebugger({
|
|
|
33519
30638
|
defaultTab,
|
|
33520
30639
|
schema
|
|
33521
30640
|
}) {
|
|
33522
|
-
const [isCollapsed, setIsCollapsed] =
|
|
33523
|
-
const [isVisible, setIsVisible] =
|
|
30641
|
+
const [isCollapsed, setIsCollapsed] = React105.useState(mode === "verify" ? true : defaultCollapsed);
|
|
30642
|
+
const [isVisible, setIsVisible] = React105.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
|
|
33524
30643
|
const debugData = useDebugData();
|
|
33525
|
-
|
|
30644
|
+
React105.useEffect(() => {
|
|
33526
30645
|
if (mode === "inline") return;
|
|
33527
30646
|
return onDebugToggle((enabled) => {
|
|
33528
30647
|
setIsVisible(enabled);
|
|
@@ -33531,7 +30650,7 @@ function RuntimeDebugger({
|
|
|
33531
30650
|
}
|
|
33532
30651
|
});
|
|
33533
30652
|
}, [mode]);
|
|
33534
|
-
|
|
30653
|
+
React105.useEffect(() => {
|
|
33535
30654
|
if (mode === "inline") return;
|
|
33536
30655
|
const handleKeyDown = (e) => {
|
|
33537
30656
|
if (e.key === "`" && isVisible) {
|
|
@@ -34080,7 +31199,7 @@ function SequenceBar({
|
|
|
34080
31199
|
onSlotRemove(index);
|
|
34081
31200
|
}, [onSlotRemove, playing]);
|
|
34082
31201
|
const paddedSlots = Array.from({ length: maxSlots }, (_, i) => slots[i]);
|
|
34083
|
-
return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(
|
|
31202
|
+
return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
|
|
34084
31203
|
i > 0 && /* @__PURE__ */ jsx(
|
|
34085
31204
|
Typography,
|
|
34086
31205
|
{
|
|
@@ -34224,7 +31343,7 @@ function SequencerBoard({
|
|
|
34224
31343
|
setPlayState("idle");
|
|
34225
31344
|
setCurrentStep(-1);
|
|
34226
31345
|
emit("UI:PLAY_SOUND", { key: "fail" });
|
|
34227
|
-
const correctCount2 = feedback.filter((
|
|
31346
|
+
const correctCount2 = feedback.filter((f) => f === "correct").length;
|
|
34228
31347
|
for (let ci = 0; ci < correctCount2; ci++) {
|
|
34229
31348
|
setTimeout(() => {
|
|
34230
31349
|
emit("UI:PLAY_SOUND", { key: "correctSlot" });
|
|
@@ -34251,8 +31370,8 @@ function SequencerBoard({
|
|
|
34251
31370
|
};
|
|
34252
31371
|
const usedIds = entity.allowDuplicates === false ? slots.filter(Boolean).map((s) => s?.id || "") : [];
|
|
34253
31372
|
const showHint = attempts >= 3 && !!entity.hint;
|
|
34254
|
-
const hasFeedback = slotFeedback.some((
|
|
34255
|
-
const correctCount = slotFeedback.filter((
|
|
31373
|
+
const hasFeedback = slotFeedback.some((f) => f !== null);
|
|
31374
|
+
const correctCount = slotFeedback.filter((f) => f === "correct").length;
|
|
34256
31375
|
const encourageKey = ENCOURAGEMENT_KEYS2[Math.min(attempts - 1, ENCOURAGEMENT_KEYS2.length - 1)] ?? ENCOURAGEMENT_KEYS2[0];
|
|
34257
31376
|
return /* @__PURE__ */ jsxs(
|
|
34258
31377
|
VStack,
|
|
@@ -35388,7 +32507,7 @@ var init_SplitPane = __esm({
|
|
|
35388
32507
|
}
|
|
35389
32508
|
});
|
|
35390
32509
|
var StatCard;
|
|
35391
|
-
var
|
|
32510
|
+
var init_StatCard = __esm({
|
|
35392
32511
|
"components/organisms/StatCard.tsx"() {
|
|
35393
32512
|
"use client";
|
|
35394
32513
|
init_cn();
|
|
@@ -35425,7 +32544,7 @@ var init_StatCard2 = __esm({
|
|
|
35425
32544
|
const labelToUse = propLabel ?? propTitle;
|
|
35426
32545
|
const eventBus = useEventBus();
|
|
35427
32546
|
const { t } = useTranslate();
|
|
35428
|
-
const handleActionClick =
|
|
32547
|
+
const handleActionClick = React105__default.useCallback(() => {
|
|
35429
32548
|
if (action?.event) {
|
|
35430
32549
|
eventBus.emit(`UI:${action.event}`, {});
|
|
35431
32550
|
}
|
|
@@ -35436,7 +32555,7 @@ var init_StatCard2 = __esm({
|
|
|
35436
32555
|
const data = Array.isArray(entity) ? entity : entity ? [entity] : [];
|
|
35437
32556
|
const isLoading = externalLoading ?? false;
|
|
35438
32557
|
const error = externalError;
|
|
35439
|
-
const computeMetricValue =
|
|
32558
|
+
const computeMetricValue = React105__default.useCallback(
|
|
35440
32559
|
(metric, items) => {
|
|
35441
32560
|
if (metric.value !== void 0) {
|
|
35442
32561
|
return metric.value;
|
|
@@ -35475,7 +32594,7 @@ var init_StatCard2 = __esm({
|
|
|
35475
32594
|
},
|
|
35476
32595
|
[]
|
|
35477
32596
|
);
|
|
35478
|
-
const schemaStats =
|
|
32597
|
+
const schemaStats = React105__default.useMemo(() => {
|
|
35479
32598
|
if (!metrics || metrics.length === 0) return null;
|
|
35480
32599
|
return metrics.map((metric) => ({
|
|
35481
32600
|
label: metric.label,
|
|
@@ -35483,7 +32602,7 @@ var init_StatCard2 = __esm({
|
|
|
35483
32602
|
format: metric.format
|
|
35484
32603
|
}));
|
|
35485
32604
|
}, [metrics, data, computeMetricValue]);
|
|
35486
|
-
const calculatedTrend =
|
|
32605
|
+
const calculatedTrend = React105__default.useMemo(() => {
|
|
35487
32606
|
if (manualTrend !== void 0) return manualTrend;
|
|
35488
32607
|
if (previousValue === void 0 || currentValue === void 0)
|
|
35489
32608
|
return void 0;
|
|
@@ -36467,23 +33586,23 @@ var init_Timeline = __esm({
|
|
|
36467
33586
|
}) => {
|
|
36468
33587
|
const { t } = useTranslate();
|
|
36469
33588
|
const entityData = Array.isArray(entity) ? entity : [];
|
|
36470
|
-
const items =
|
|
33589
|
+
const items = React105__default.useMemo(() => {
|
|
36471
33590
|
if (propItems) return propItems;
|
|
36472
33591
|
if (entityData.length === 0) return [];
|
|
36473
33592
|
return entityData.map((record, idx) => {
|
|
36474
|
-
const resolveField = (
|
|
36475
|
-
if (typeof
|
|
36476
|
-
if (
|
|
33593
|
+
const resolveField = (f) => {
|
|
33594
|
+
if (typeof f === "string") return f;
|
|
33595
|
+
if (f && typeof f === "object" && "name" in f) return String(f.name);
|
|
36477
33596
|
return "";
|
|
36478
33597
|
};
|
|
36479
33598
|
const resolvedFields = fields?.map(resolveField) ?? [];
|
|
36480
33599
|
const titleField = resolvedFields[0] || "title";
|
|
36481
33600
|
const descField = resolvedFields[1] || "description";
|
|
36482
33601
|
const dateField = resolvedFields.find(
|
|
36483
|
-
(
|
|
33602
|
+
(f) => f.toLowerCase().includes("date")
|
|
36484
33603
|
) || "date";
|
|
36485
33604
|
const statusField = resolvedFields.find(
|
|
36486
|
-
(
|
|
33605
|
+
(f) => f.toLowerCase().includes("status")
|
|
36487
33606
|
) || "status";
|
|
36488
33607
|
return {
|
|
36489
33608
|
id: String(record.id ?? idx),
|
|
@@ -36574,7 +33693,7 @@ var init_Timeline = __esm({
|
|
|
36574
33693
|
}
|
|
36575
33694
|
});
|
|
36576
33695
|
function extractToastProps(children) {
|
|
36577
|
-
if (!
|
|
33696
|
+
if (!React105__default.isValidElement(children)) {
|
|
36578
33697
|
if (typeof children === "string") {
|
|
36579
33698
|
return { message: children };
|
|
36580
33699
|
}
|
|
@@ -36612,7 +33731,7 @@ var init_ToastSlot = __esm({
|
|
|
36612
33731
|
eventBus.emit("UI:CLOSE");
|
|
36613
33732
|
};
|
|
36614
33733
|
if (!isVisible) return null;
|
|
36615
|
-
const isCustomContent =
|
|
33734
|
+
const isCustomContent = React105__default.isValidElement(children) && !message;
|
|
36616
33735
|
return /* @__PURE__ */ jsx(Box, { className: "fixed bottom-4 right-4 z-50", children: isCustomContent ? children : /* @__PURE__ */ jsx(
|
|
36617
33736
|
Toast,
|
|
36618
33737
|
{
|
|
@@ -36881,7 +34000,7 @@ var init_WizardContainer = __esm({
|
|
|
36881
34000
|
const isCompleted = index < currentStep;
|
|
36882
34001
|
const stepKey = step.id ?? step.tabId ?? `step-${index}`;
|
|
36883
34002
|
const stepTitle = step.title ?? step.name ?? `Step ${index + 1}`;
|
|
36884
|
-
return /* @__PURE__ */ jsxs(
|
|
34003
|
+
return /* @__PURE__ */ jsxs(React105__default.Fragment, { children: [
|
|
36885
34004
|
/* @__PURE__ */ jsx(
|
|
36886
34005
|
Button,
|
|
36887
34006
|
{
|
|
@@ -37263,12 +34382,12 @@ var init_WorldMapTemplate = __esm({
|
|
|
37263
34382
|
}
|
|
37264
34383
|
});
|
|
37265
34384
|
function lazyThree(name, loader) {
|
|
37266
|
-
const Lazy =
|
|
34385
|
+
const Lazy = React105__default.lazy(() => loader().then((m) => ({ default: m[name] })));
|
|
37267
34386
|
function ThreeWrapper(props) {
|
|
37268
|
-
return
|
|
37269
|
-
|
|
34387
|
+
return React105__default.createElement(
|
|
34388
|
+
React105__default.Suspense,
|
|
37270
34389
|
{ fallback: null },
|
|
37271
|
-
|
|
34390
|
+
React105__default.createElement(Lazy, props)
|
|
37272
34391
|
);
|
|
37273
34392
|
}
|
|
37274
34393
|
ThreeWrapper.displayName = `Lazy(${name})`;
|
|
@@ -37424,7 +34543,7 @@ var init_component_registry_generated = __esm({
|
|
|
37424
34543
|
init_Stack();
|
|
37425
34544
|
init_StarRating();
|
|
37426
34545
|
init_StatBadge();
|
|
37427
|
-
|
|
34546
|
+
init_StatCard();
|
|
37428
34547
|
init_StatDisplay();
|
|
37429
34548
|
init_StateArchitectBoard();
|
|
37430
34549
|
init_StateIndicator();
|
|
@@ -37756,7 +34875,7 @@ function SuspenseConfigProvider({
|
|
|
37756
34875
|
config,
|
|
37757
34876
|
children
|
|
37758
34877
|
}) {
|
|
37759
|
-
return
|
|
34878
|
+
return React105__default.createElement(
|
|
37760
34879
|
SuspenseConfigContext.Provider,
|
|
37761
34880
|
{ value: config },
|
|
37762
34881
|
children
|
|
@@ -37777,7 +34896,7 @@ function getComponentForPattern(patternType) {
|
|
|
37777
34896
|
return COMPONENT_REGISTRY[name] ?? null;
|
|
37778
34897
|
}
|
|
37779
34898
|
function enrichFormFields(fields, entityDef) {
|
|
37780
|
-
const fieldMap = new Map(entityDef.fields.map((
|
|
34899
|
+
const fieldMap = new Map(entityDef.fields.map((f) => [f.name, f]));
|
|
37781
34900
|
return fields.map((field) => {
|
|
37782
34901
|
if (typeof field === "string") {
|
|
37783
34902
|
const entityField = fieldMap.get(field);
|
|
@@ -38239,7 +35358,7 @@ function renderPatternChildren(children, onDismiss, parentId = "root", parentPat
|
|
|
38239
35358
|
const key = `${parentId}-${index}-trait:${traitName}`;
|
|
38240
35359
|
return /* @__PURE__ */ jsx(TraitFrame, { traitName }, key);
|
|
38241
35360
|
}
|
|
38242
|
-
return /* @__PURE__ */ jsx(
|
|
35361
|
+
return /* @__PURE__ */ jsx(React105__default.Fragment, { children: child }, `${parentId}-${index}`);
|
|
38243
35362
|
}
|
|
38244
35363
|
if (!child || typeof child !== "object") return null;
|
|
38245
35364
|
const childId = `${parentId}-${index}`;
|
|
@@ -38276,14 +35395,14 @@ function isPatternConfig(value) {
|
|
|
38276
35395
|
if (value === null || value === void 0) return false;
|
|
38277
35396
|
if (typeof value !== "object") return false;
|
|
38278
35397
|
if (Array.isArray(value)) return false;
|
|
38279
|
-
if (
|
|
35398
|
+
if (React105__default.isValidElement(value)) return false;
|
|
38280
35399
|
if (value instanceof Date) return false;
|
|
38281
35400
|
if (typeof value === "function") return false;
|
|
38282
35401
|
const record = value;
|
|
38283
35402
|
return "type" in record && typeof record.type === "string";
|
|
38284
35403
|
}
|
|
38285
35404
|
function isPlainConfigObject(value) {
|
|
38286
|
-
if (
|
|
35405
|
+
if (React105__default.isValidElement(value)) return false;
|
|
38287
35406
|
if (value instanceof Date) return false;
|
|
38288
35407
|
const proto = Object.getPrototypeOf(value);
|
|
38289
35408
|
return proto === Object.prototype || proto === null;
|
|
@@ -39015,9 +36134,6 @@ function VerificationProvider({
|
|
|
39015
36134
|
return /* @__PURE__ */ jsx(Fragment, { children });
|
|
39016
36135
|
}
|
|
39017
36136
|
VerificationProvider.displayName = "VerificationProvider";
|
|
39018
|
-
|
|
39019
|
-
// providers/OrbitalProvider.tsx
|
|
39020
|
-
init_ThemeContext();
|
|
39021
36137
|
function OrbitalProvider({
|
|
39022
36138
|
children,
|
|
39023
36139
|
themes,
|