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