@almadar/ui 2.26.0 → 2.27.1
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/AnimatedGraphic.d.ts +29 -0
- package/dist/components/atoms/AnimatedReveal.d.ts +24 -0
- package/dist/components/atoms/index.d.ts +2 -0
- package/dist/components/index.cjs +1420 -1074
- package/dist/components/index.js +558 -214
- package/dist/components/organisms/debug/RuntimeDebugger.d.ts +2 -2
- package/dist/lib/index.cjs +62 -50
- package/dist/lib/index.js +62 -50
- package/dist/marketing/index.cjs +293 -10
- package/dist/marketing/index.d.cts +54 -1
- package/dist/marketing/index.d.ts +4 -0
- package/dist/marketing/index.js +293 -12
- package/dist/providers/index.cjs +445 -149
- package/dist/providers/index.js +357 -61
- package/dist/runtime/index.cjs +1344 -966
- package/dist/runtime/index.js +585 -207
- package/package.json +1 -1
package/dist/providers/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as
|
|
2
|
-
import
|
|
1
|
+
import * as React112 from 'react';
|
|
2
|
+
import React112__default, { createContext, useCallback, useState, useRef, useEffect, useLayoutEffect, lazy, useContext, useMemo } from 'react';
|
|
3
3
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
4
4
|
import { EventBusContext } from '@almadar/ui/providers';
|
|
5
5
|
import 'react-dom';
|
|
@@ -357,8 +357,8 @@ function EventBusProvider({ children, debug: debug2 = false }) {
|
|
|
357
357
|
payload,
|
|
358
358
|
timestamp: Date.now()
|
|
359
359
|
};
|
|
360
|
-
const
|
|
361
|
-
const listenerCount =
|
|
360
|
+
const listeners6 = listenersRef.current.get(type);
|
|
361
|
+
const listenerCount = listeners6?.size ?? 0;
|
|
362
362
|
if (debug2) {
|
|
363
363
|
if (listenerCount > 0) {
|
|
364
364
|
console.log(`[EventBus] Emit: ${type} \u2192 ${listenerCount} listener(s)`, payload);
|
|
@@ -366,8 +366,8 @@ function EventBusProvider({ children, debug: debug2 = false }) {
|
|
|
366
366
|
console.warn(`[EventBus] Emit: ${type} (NO LISTENERS - event may be lost!)`, payload);
|
|
367
367
|
}
|
|
368
368
|
}
|
|
369
|
-
if (
|
|
370
|
-
const listenersCopy = Array.from(
|
|
369
|
+
if (listeners6) {
|
|
370
|
+
const listenersCopy = Array.from(listeners6);
|
|
371
371
|
for (const listener of listenersCopy) {
|
|
372
372
|
try {
|
|
373
373
|
listener(event);
|
|
@@ -389,17 +389,17 @@ function EventBusProvider({ children, debug: debug2 = false }) {
|
|
|
389
389
|
if (!listenersRef.current.has(type)) {
|
|
390
390
|
listenersRef.current.set(type, /* @__PURE__ */ new Set());
|
|
391
391
|
}
|
|
392
|
-
const
|
|
393
|
-
|
|
392
|
+
const listeners6 = listenersRef.current.get(type);
|
|
393
|
+
listeners6.add(listener);
|
|
394
394
|
if (debug2) {
|
|
395
|
-
console.log(`[EventBus] Subscribed to '${type}', total: ${
|
|
395
|
+
console.log(`[EventBus] Subscribed to '${type}', total: ${listeners6.size}`);
|
|
396
396
|
}
|
|
397
397
|
return () => {
|
|
398
|
-
|
|
398
|
+
listeners6.delete(listener);
|
|
399
399
|
if (debug2) {
|
|
400
|
-
console.log(`[EventBus] Unsubscribed from '${type}', remaining: ${
|
|
400
|
+
console.log(`[EventBus] Unsubscribed from '${type}', remaining: ${listeners6.size}`);
|
|
401
401
|
}
|
|
402
|
-
if (
|
|
402
|
+
if (listeners6.size === 0) {
|
|
403
403
|
listenersRef.current.delete(type);
|
|
404
404
|
}
|
|
405
405
|
};
|
|
@@ -412,8 +412,8 @@ function EventBusProvider({ children, debug: debug2 = false }) {
|
|
|
412
412
|
return on(type, wrappedListener);
|
|
413
413
|
}, [on]);
|
|
414
414
|
const hasListeners = useCallback((type) => {
|
|
415
|
-
const
|
|
416
|
-
return
|
|
415
|
+
const listeners6 = listenersRef.current.get(type);
|
|
416
|
+
return listeners6 !== void 0 && listeners6.size > 0;
|
|
417
417
|
}, []);
|
|
418
418
|
const onAny = useCallback((listener) => {
|
|
419
419
|
anyListenersRef.current.add(listener);
|
|
@@ -674,7 +674,7 @@ var positionStyles = {
|
|
|
674
674
|
fixed: "fixed",
|
|
675
675
|
sticky: "sticky"
|
|
676
676
|
};
|
|
677
|
-
var Box =
|
|
677
|
+
var Box = React112__default.forwardRef(
|
|
678
678
|
({
|
|
679
679
|
padding,
|
|
680
680
|
paddingX,
|
|
@@ -944,7 +944,7 @@ function resolveIconProp(value, sizeClass) {
|
|
|
944
944
|
const IconComp = value;
|
|
945
945
|
return /* @__PURE__ */ jsx(IconComp, { className: sizeClass });
|
|
946
946
|
}
|
|
947
|
-
if (
|
|
947
|
+
if (React112__default.isValidElement(value)) {
|
|
948
948
|
return value;
|
|
949
949
|
}
|
|
950
950
|
if (typeof value === "object" && value !== null && "render" in value) {
|
|
@@ -953,7 +953,7 @@ function resolveIconProp(value, sizeClass) {
|
|
|
953
953
|
}
|
|
954
954
|
return value;
|
|
955
955
|
}
|
|
956
|
-
var Button =
|
|
956
|
+
var Button = React112__default.forwardRef(
|
|
957
957
|
({
|
|
958
958
|
className,
|
|
959
959
|
variant = "primary",
|
|
@@ -1049,7 +1049,7 @@ var sizeStyles3 = {
|
|
|
1049
1049
|
md: "px-2.5 py-1 text-sm",
|
|
1050
1050
|
lg: "px-3 py-1.5 text-base"
|
|
1051
1051
|
};
|
|
1052
|
-
var Badge =
|
|
1052
|
+
var Badge = React112__default.forwardRef(
|
|
1053
1053
|
({ className, variant = "default", size = "sm", amount, label, icon, children, ...props }, ref) => {
|
|
1054
1054
|
const iconSizes2 = { sm: "w-3 h-3", md: "w-3.5 h-3.5", lg: "w-4 h-4" };
|
|
1055
1055
|
const resolvedIcon = typeof icon === "string" ? (() => {
|
|
@@ -1076,7 +1076,7 @@ var Badge = React110__default.forwardRef(
|
|
|
1076
1076
|
}
|
|
1077
1077
|
);
|
|
1078
1078
|
Badge.displayName = "Badge";
|
|
1079
|
-
var Input =
|
|
1079
|
+
var Input = React112__default.forwardRef(
|
|
1080
1080
|
({
|
|
1081
1081
|
className,
|
|
1082
1082
|
inputType,
|
|
@@ -1188,7 +1188,7 @@ var Input = React110__default.forwardRef(
|
|
|
1188
1188
|
}
|
|
1189
1189
|
);
|
|
1190
1190
|
Input.displayName = "Input";
|
|
1191
|
-
var Label =
|
|
1191
|
+
var Label = React112__default.forwardRef(
|
|
1192
1192
|
({ className, required, children, ...props }, ref) => {
|
|
1193
1193
|
return /* @__PURE__ */ jsxs(
|
|
1194
1194
|
"label",
|
|
@@ -1208,7 +1208,7 @@ var Label = React110__default.forwardRef(
|
|
|
1208
1208
|
}
|
|
1209
1209
|
);
|
|
1210
1210
|
Label.displayName = "Label";
|
|
1211
|
-
var Textarea =
|
|
1211
|
+
var Textarea = React112__default.forwardRef(
|
|
1212
1212
|
({ className, error, ...props }, ref) => {
|
|
1213
1213
|
return /* @__PURE__ */ jsx(
|
|
1214
1214
|
"textarea",
|
|
@@ -1231,7 +1231,7 @@ var Textarea = React110__default.forwardRef(
|
|
|
1231
1231
|
}
|
|
1232
1232
|
);
|
|
1233
1233
|
Textarea.displayName = "Textarea";
|
|
1234
|
-
var Select =
|
|
1234
|
+
var Select = React112__default.forwardRef(
|
|
1235
1235
|
({ className, options, placeholder, error, ...props }, ref) => {
|
|
1236
1236
|
return /* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
1237
1237
|
/* @__PURE__ */ jsxs(
|
|
@@ -1267,7 +1267,7 @@ var Select = React110__default.forwardRef(
|
|
|
1267
1267
|
}
|
|
1268
1268
|
);
|
|
1269
1269
|
Select.displayName = "Select";
|
|
1270
|
-
var Checkbox =
|
|
1270
|
+
var Checkbox = React112__default.forwardRef(
|
|
1271
1271
|
({ className, label, id, ...props }, ref) => {
|
|
1272
1272
|
const inputId = id || `checkbox-${Math.random().toString(36).substr(2, 9)}`;
|
|
1273
1273
|
return /* @__PURE__ */ jsxs("div", { className: "flex items-center", children: [
|
|
@@ -1343,7 +1343,7 @@ var shadowStyles2 = {
|
|
|
1343
1343
|
md: "shadow",
|
|
1344
1344
|
lg: "shadow-lg"
|
|
1345
1345
|
};
|
|
1346
|
-
var Card =
|
|
1346
|
+
var Card = React112__default.forwardRef(
|
|
1347
1347
|
({
|
|
1348
1348
|
className,
|
|
1349
1349
|
variant = "bordered",
|
|
@@ -1379,9 +1379,9 @@ var Card = React110__default.forwardRef(
|
|
|
1379
1379
|
}
|
|
1380
1380
|
);
|
|
1381
1381
|
Card.displayName = "Card";
|
|
1382
|
-
var CardHeader =
|
|
1382
|
+
var CardHeader = React112__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
|
|
1383
1383
|
CardHeader.displayName = "CardHeader";
|
|
1384
|
-
var CardTitle =
|
|
1384
|
+
var CardTitle = React112__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
1385
1385
|
"h3",
|
|
1386
1386
|
{
|
|
1387
1387
|
ref,
|
|
@@ -1394,11 +1394,11 @@ var CardTitle = React110__default.forwardRef(({ className, ...props }, ref) => /
|
|
|
1394
1394
|
}
|
|
1395
1395
|
));
|
|
1396
1396
|
CardTitle.displayName = "CardTitle";
|
|
1397
|
-
var CardContent =
|
|
1397
|
+
var CardContent = React112__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
|
|
1398
1398
|
CardContent.displayName = "CardContent";
|
|
1399
1399
|
var CardBody = CardContent;
|
|
1400
1400
|
CardBody.displayName = "CardBody";
|
|
1401
|
-
var CardFooter =
|
|
1401
|
+
var CardFooter = React112__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
1402
1402
|
"div",
|
|
1403
1403
|
{
|
|
1404
1404
|
ref,
|
|
@@ -1413,7 +1413,7 @@ var sizeStyles4 = {
|
|
|
1413
1413
|
md: "h-6 w-6",
|
|
1414
1414
|
lg: "h-8 w-8"
|
|
1415
1415
|
};
|
|
1416
|
-
var Spinner =
|
|
1416
|
+
var Spinner = React112__default.forwardRef(
|
|
1417
1417
|
({ className, size = "md", ...props }, ref) => {
|
|
1418
1418
|
return /* @__PURE__ */ jsx(
|
|
1419
1419
|
"div",
|
|
@@ -1427,7 +1427,7 @@ var Spinner = React110__default.forwardRef(
|
|
|
1427
1427
|
}
|
|
1428
1428
|
);
|
|
1429
1429
|
Spinner.displayName = "Spinner";
|
|
1430
|
-
var Radio =
|
|
1430
|
+
var Radio = React112__default.forwardRef(
|
|
1431
1431
|
({
|
|
1432
1432
|
label,
|
|
1433
1433
|
helperText,
|
|
@@ -1531,7 +1531,7 @@ var Radio = React110__default.forwardRef(
|
|
|
1531
1531
|
}
|
|
1532
1532
|
);
|
|
1533
1533
|
Radio.displayName = "Radio";
|
|
1534
|
-
var Switch =
|
|
1534
|
+
var Switch = React112.forwardRef(
|
|
1535
1535
|
({
|
|
1536
1536
|
checked,
|
|
1537
1537
|
defaultChecked = false,
|
|
@@ -1542,10 +1542,10 @@ var Switch = React110.forwardRef(
|
|
|
1542
1542
|
name,
|
|
1543
1543
|
className
|
|
1544
1544
|
}, ref) => {
|
|
1545
|
-
const [isChecked, setIsChecked] =
|
|
1545
|
+
const [isChecked, setIsChecked] = React112.useState(
|
|
1546
1546
|
checked !== void 0 ? checked : defaultChecked
|
|
1547
1547
|
);
|
|
1548
|
-
|
|
1548
|
+
React112.useEffect(() => {
|
|
1549
1549
|
if (checked !== void 0) {
|
|
1550
1550
|
setIsChecked(checked);
|
|
1551
1551
|
}
|
|
@@ -1703,7 +1703,7 @@ var sizeStyles5 = {
|
|
|
1703
1703
|
md: "w-2.5 h-2.5",
|
|
1704
1704
|
lg: "w-3 h-3"
|
|
1705
1705
|
};
|
|
1706
|
-
var StatusDot =
|
|
1706
|
+
var StatusDot = React112__default.forwardRef(
|
|
1707
1707
|
({ className, status = "offline", pulse = false, size = "md", label, ...props }, ref) => {
|
|
1708
1708
|
return /* @__PURE__ */ jsx(
|
|
1709
1709
|
"span",
|
|
@@ -1750,7 +1750,7 @@ var iconMap2 = {
|
|
|
1750
1750
|
down: TrendingDown,
|
|
1751
1751
|
flat: ArrowRight
|
|
1752
1752
|
};
|
|
1753
|
-
var TrendIndicator =
|
|
1753
|
+
var TrendIndicator = React112__default.forwardRef(
|
|
1754
1754
|
({
|
|
1755
1755
|
className,
|
|
1756
1756
|
value,
|
|
@@ -1809,7 +1809,7 @@ var thumbSizes = {
|
|
|
1809
1809
|
md: "w-4 h-4",
|
|
1810
1810
|
lg: "w-5 h-5"
|
|
1811
1811
|
};
|
|
1812
|
-
var RangeSlider =
|
|
1812
|
+
var RangeSlider = React112__default.forwardRef(
|
|
1813
1813
|
({
|
|
1814
1814
|
className,
|
|
1815
1815
|
min = 0,
|
|
@@ -2012,7 +2012,7 @@ var paddingClasses = {
|
|
|
2012
2012
|
md: "py-16",
|
|
2013
2013
|
lg: "py-24"
|
|
2014
2014
|
};
|
|
2015
|
-
var ContentSection =
|
|
2015
|
+
var ContentSection = React112__default.forwardRef(
|
|
2016
2016
|
({ children, background = "default", padding = "lg", id, className }, ref) => {
|
|
2017
2017
|
return /* @__PURE__ */ jsx(
|
|
2018
2018
|
Box,
|
|
@@ -2031,6 +2031,289 @@ var ContentSection = React110__default.forwardRef(
|
|
|
2031
2031
|
}
|
|
2032
2032
|
);
|
|
2033
2033
|
ContentSection.displayName = "ContentSection";
|
|
2034
|
+
var initialStyles = {
|
|
2035
|
+
"fade-up": { opacity: 0, transform: "translateY(24px)" },
|
|
2036
|
+
"fade-down": { opacity: 0, transform: "translateY(-24px)" },
|
|
2037
|
+
"fade-in": { opacity: 0 },
|
|
2038
|
+
"fade-left": { opacity: 0, transform: "translateX(24px)" },
|
|
2039
|
+
"fade-right": { opacity: 0, transform: "translateX(-24px)" },
|
|
2040
|
+
"scale": { opacity: 0, transform: "scale(0.92)" },
|
|
2041
|
+
"scale-up": { opacity: 0, transform: "scale(0.92) translateY(16px)" },
|
|
2042
|
+
"none": {}
|
|
2043
|
+
};
|
|
2044
|
+
var animatedStyles = {
|
|
2045
|
+
"fade-up": { opacity: 1, transform: "translateY(0)" },
|
|
2046
|
+
"fade-down": { opacity: 1, transform: "translateY(0)" },
|
|
2047
|
+
"fade-in": { opacity: 1 },
|
|
2048
|
+
"fade-left": { opacity: 1, transform: "translateX(0)" },
|
|
2049
|
+
"fade-right": { opacity: 1, transform: "translateX(0)" },
|
|
2050
|
+
"scale": { opacity: 1, transform: "scale(1)" },
|
|
2051
|
+
"scale-up": { opacity: 1, transform: "scale(1) translateY(0)" },
|
|
2052
|
+
"none": {}
|
|
2053
|
+
};
|
|
2054
|
+
var AnimatedReveal = React112__default.forwardRef(
|
|
2055
|
+
({
|
|
2056
|
+
trigger = "scroll",
|
|
2057
|
+
animation = "fade-up",
|
|
2058
|
+
duration = 600,
|
|
2059
|
+
delay = 0,
|
|
2060
|
+
threshold = 0.15,
|
|
2061
|
+
once = true,
|
|
2062
|
+
animate: manualAnimate,
|
|
2063
|
+
easing = "cubic-bezier(0.16, 1, 0.3, 1)",
|
|
2064
|
+
children,
|
|
2065
|
+
className,
|
|
2066
|
+
style,
|
|
2067
|
+
...props
|
|
2068
|
+
}, forwardedRef) => {
|
|
2069
|
+
const [isAnimated, setIsAnimated] = useState(false);
|
|
2070
|
+
const internalRef = useRef(null);
|
|
2071
|
+
const hasAnimated = useRef(false);
|
|
2072
|
+
const setRef = useCallback(
|
|
2073
|
+
(node) => {
|
|
2074
|
+
internalRef.current = node;
|
|
2075
|
+
if (typeof forwardedRef === "function") forwardedRef(node);
|
|
2076
|
+
else if (forwardedRef) forwardedRef.current = node;
|
|
2077
|
+
},
|
|
2078
|
+
[forwardedRef]
|
|
2079
|
+
);
|
|
2080
|
+
useEffect(() => {
|
|
2081
|
+
if (trigger !== "scroll") return;
|
|
2082
|
+
const el = internalRef.current;
|
|
2083
|
+
if (!el) return;
|
|
2084
|
+
const observer = new IntersectionObserver(
|
|
2085
|
+
([entry]) => {
|
|
2086
|
+
if (entry.isIntersecting) {
|
|
2087
|
+
if (once && hasAnimated.current) return;
|
|
2088
|
+
hasAnimated.current = true;
|
|
2089
|
+
setIsAnimated(true);
|
|
2090
|
+
} else if (!once) {
|
|
2091
|
+
setIsAnimated(false);
|
|
2092
|
+
}
|
|
2093
|
+
},
|
|
2094
|
+
{ threshold }
|
|
2095
|
+
);
|
|
2096
|
+
observer.observe(el);
|
|
2097
|
+
return () => observer.disconnect();
|
|
2098
|
+
}, [trigger, threshold, once]);
|
|
2099
|
+
const handleMouseEnter = trigger === "hover" ? () => setIsAnimated(true) : void 0;
|
|
2100
|
+
const handleMouseLeave = trigger === "hover" ? () => {
|
|
2101
|
+
if (!once || !hasAnimated.current) {
|
|
2102
|
+
hasAnimated.current = true;
|
|
2103
|
+
setIsAnimated(false);
|
|
2104
|
+
}
|
|
2105
|
+
} : void 0;
|
|
2106
|
+
useEffect(() => {
|
|
2107
|
+
if (trigger === "manual" && manualAnimate !== void 0) {
|
|
2108
|
+
setIsAnimated(manualAnimate);
|
|
2109
|
+
}
|
|
2110
|
+
}, [trigger, manualAnimate]);
|
|
2111
|
+
const active = isAnimated;
|
|
2112
|
+
const currentStyle = active ? animatedStyles[animation] : initialStyles[animation];
|
|
2113
|
+
return /* @__PURE__ */ jsx(
|
|
2114
|
+
"div",
|
|
2115
|
+
{
|
|
2116
|
+
ref: setRef,
|
|
2117
|
+
className: cn("will-change-[opacity,transform]", className),
|
|
2118
|
+
style: {
|
|
2119
|
+
...currentStyle,
|
|
2120
|
+
transitionProperty: "opacity, transform",
|
|
2121
|
+
transitionDuration: `${duration}ms`,
|
|
2122
|
+
transitionDelay: `${delay}ms`,
|
|
2123
|
+
transitionTimingFunction: easing,
|
|
2124
|
+
...style
|
|
2125
|
+
},
|
|
2126
|
+
onMouseEnter: handleMouseEnter,
|
|
2127
|
+
onMouseLeave: handleMouseLeave,
|
|
2128
|
+
...props,
|
|
2129
|
+
children: typeof children === "function" ? children(active) : children
|
|
2130
|
+
}
|
|
2131
|
+
);
|
|
2132
|
+
}
|
|
2133
|
+
);
|
|
2134
|
+
AnimatedReveal.displayName = "AnimatedReveal";
|
|
2135
|
+
function useFetchedSvg(src) {
|
|
2136
|
+
const [svg, setSvg] = useState(null);
|
|
2137
|
+
const cache = useRef({});
|
|
2138
|
+
useEffect(() => {
|
|
2139
|
+
if (!src) {
|
|
2140
|
+
setSvg(null);
|
|
2141
|
+
return;
|
|
2142
|
+
}
|
|
2143
|
+
if (cache.current[src]) {
|
|
2144
|
+
setSvg(cache.current[src]);
|
|
2145
|
+
return;
|
|
2146
|
+
}
|
|
2147
|
+
let cancelled = false;
|
|
2148
|
+
fetch(src).then((res) => {
|
|
2149
|
+
if (!res.ok) throw new Error(`Failed to fetch SVG: ${res.status}`);
|
|
2150
|
+
return res.text();
|
|
2151
|
+
}).then((text) => {
|
|
2152
|
+
if (cancelled) return;
|
|
2153
|
+
cache.current[src] = text;
|
|
2154
|
+
setSvg(text);
|
|
2155
|
+
}).catch(() => {
|
|
2156
|
+
if (!cancelled) setSvg(null);
|
|
2157
|
+
});
|
|
2158
|
+
return () => {
|
|
2159
|
+
cancelled = true;
|
|
2160
|
+
};
|
|
2161
|
+
}, [src]);
|
|
2162
|
+
return svg;
|
|
2163
|
+
}
|
|
2164
|
+
function applyDrawAnimation(container, animate, duration, delay, easing) {
|
|
2165
|
+
const paths = container.querySelectorAll("path, line, polyline, polygon, circle, ellipse, rect");
|
|
2166
|
+
paths.forEach((el) => {
|
|
2167
|
+
if ("getTotalLength" in el && typeof el.getTotalLength === "function") {
|
|
2168
|
+
const len = el.getTotalLength();
|
|
2169
|
+
el.style.strokeDasharray = `${len}`;
|
|
2170
|
+
el.style.strokeDashoffset = animate ? "0" : `${len}`;
|
|
2171
|
+
el.style.transition = `stroke-dashoffset ${duration}ms ${easing} ${delay}ms`;
|
|
2172
|
+
}
|
|
2173
|
+
});
|
|
2174
|
+
}
|
|
2175
|
+
function applyFillAnimation(container, animate, duration, delay, easing, fillColor) {
|
|
2176
|
+
const paths = container.querySelectorAll("path, circle, ellipse, rect, polygon");
|
|
2177
|
+
paths.forEach((el) => {
|
|
2178
|
+
if ("getTotalLength" in el && typeof el.getTotalLength === "function") {
|
|
2179
|
+
const geom = el;
|
|
2180
|
+
const len = geom.getTotalLength();
|
|
2181
|
+
geom.style.strokeDasharray = `${len}`;
|
|
2182
|
+
geom.style.strokeDashoffset = animate ? "0" : `${len}`;
|
|
2183
|
+
geom.style.transition = `stroke-dashoffset ${duration * 0.6}ms ${easing} ${delay}ms, fill-opacity ${duration * 0.4}ms ${easing} ${delay + duration * 0.6}ms`;
|
|
2184
|
+
}
|
|
2185
|
+
if (fillColor) el.style.fill = fillColor;
|
|
2186
|
+
el.style.fillOpacity = animate ? "1" : "0";
|
|
2187
|
+
});
|
|
2188
|
+
}
|
|
2189
|
+
function applyPulseAnimation(container, animate, duration) {
|
|
2190
|
+
const svg = container.querySelector("svg");
|
|
2191
|
+
if (!svg) return;
|
|
2192
|
+
if (animate) {
|
|
2193
|
+
svg.style.animation = `ag-pulse ${duration}ms ease-in-out infinite`;
|
|
2194
|
+
} else {
|
|
2195
|
+
svg.style.animation = "none";
|
|
2196
|
+
}
|
|
2197
|
+
}
|
|
2198
|
+
function applyMorphAnimation(container, animate, duration, delay, easing) {
|
|
2199
|
+
const paths = container.querySelectorAll("path, circle, ellipse, rect, polygon");
|
|
2200
|
+
paths.forEach((el) => {
|
|
2201
|
+
el.style.transition = `all ${duration}ms ${easing} ${delay}ms`;
|
|
2202
|
+
el.style.transform = animate ? "scale(1)" : "scale(0)";
|
|
2203
|
+
el.style.transformOrigin = "center";
|
|
2204
|
+
el.style.opacity = animate ? "1" : "0";
|
|
2205
|
+
});
|
|
2206
|
+
}
|
|
2207
|
+
var AnimatedGraphic = React112__default.forwardRef(
|
|
2208
|
+
({
|
|
2209
|
+
src,
|
|
2210
|
+
svgContent,
|
|
2211
|
+
animation = "draw",
|
|
2212
|
+
animate = false,
|
|
2213
|
+
duration = 1200,
|
|
2214
|
+
delay = 0,
|
|
2215
|
+
easing = "cubic-bezier(0.16, 1, 0.3, 1)",
|
|
2216
|
+
width,
|
|
2217
|
+
height,
|
|
2218
|
+
strokeColor,
|
|
2219
|
+
fillColor,
|
|
2220
|
+
alt,
|
|
2221
|
+
className,
|
|
2222
|
+
style,
|
|
2223
|
+
children,
|
|
2224
|
+
...props
|
|
2225
|
+
}, ref) => {
|
|
2226
|
+
const containerRef = useRef(null);
|
|
2227
|
+
const fetchedSvg = useFetchedSvg(svgContent ? void 0 : src);
|
|
2228
|
+
const resolvedSvg = svgContent ?? fetchedSvg;
|
|
2229
|
+
const prevAnimateRef = useRef(animate);
|
|
2230
|
+
const setRef = React112__default.useCallback(
|
|
2231
|
+
(node) => {
|
|
2232
|
+
containerRef.current = node;
|
|
2233
|
+
if (typeof ref === "function") ref(node);
|
|
2234
|
+
else if (ref) ref.current = node;
|
|
2235
|
+
},
|
|
2236
|
+
[ref]
|
|
2237
|
+
);
|
|
2238
|
+
useEffect(() => {
|
|
2239
|
+
const el = containerRef.current;
|
|
2240
|
+
if (!el || !strokeColor) return;
|
|
2241
|
+
const paths = el.querySelectorAll("path, line, polyline, polygon, circle, ellipse, rect");
|
|
2242
|
+
paths.forEach((p2) => {
|
|
2243
|
+
p2.style.stroke = strokeColor;
|
|
2244
|
+
});
|
|
2245
|
+
}, [resolvedSvg, strokeColor]);
|
|
2246
|
+
useEffect(() => {
|
|
2247
|
+
const el = containerRef.current;
|
|
2248
|
+
if (!el || !resolvedSvg) return;
|
|
2249
|
+
if (animation === "draw" || animation === "fill") {
|
|
2250
|
+
const paths = el.querySelectorAll("path, line, polyline, polygon, circle, ellipse, rect");
|
|
2251
|
+
paths.forEach((p2) => {
|
|
2252
|
+
if ("getTotalLength" in p2 && typeof p2.getTotalLength === "function") {
|
|
2253
|
+
const len = p2.getTotalLength();
|
|
2254
|
+
p2.style.strokeDasharray = `${len}`;
|
|
2255
|
+
p2.style.strokeDashoffset = `${len}`;
|
|
2256
|
+
}
|
|
2257
|
+
if (animation === "fill") {
|
|
2258
|
+
p2.style.fillOpacity = "0";
|
|
2259
|
+
}
|
|
2260
|
+
});
|
|
2261
|
+
}
|
|
2262
|
+
if (animation === "morph") {
|
|
2263
|
+
const paths = el.querySelectorAll("path, circle, ellipse, rect, polygon");
|
|
2264
|
+
paths.forEach((p2) => {
|
|
2265
|
+
p2.style.transform = "scale(0)";
|
|
2266
|
+
p2.style.transformOrigin = "center";
|
|
2267
|
+
p2.style.opacity = "0";
|
|
2268
|
+
});
|
|
2269
|
+
}
|
|
2270
|
+
}, [resolvedSvg, animation]);
|
|
2271
|
+
useEffect(() => {
|
|
2272
|
+
const el = containerRef.current;
|
|
2273
|
+
if (!el) return;
|
|
2274
|
+
const id = requestAnimationFrame(() => {
|
|
2275
|
+
switch (animation) {
|
|
2276
|
+
case "draw":
|
|
2277
|
+
applyDrawAnimation(el, animate, duration, delay, easing);
|
|
2278
|
+
break;
|
|
2279
|
+
case "fill":
|
|
2280
|
+
applyFillAnimation(el, animate, duration, delay, easing, fillColor);
|
|
2281
|
+
break;
|
|
2282
|
+
case "pulse":
|
|
2283
|
+
applyPulseAnimation(el, animate, duration);
|
|
2284
|
+
break;
|
|
2285
|
+
case "morph":
|
|
2286
|
+
applyMorphAnimation(el, animate, duration, delay, easing);
|
|
2287
|
+
break;
|
|
2288
|
+
}
|
|
2289
|
+
});
|
|
2290
|
+
prevAnimateRef.current = animate;
|
|
2291
|
+
return () => cancelAnimationFrame(id);
|
|
2292
|
+
}, [animate, animation, duration, delay, easing, fillColor, resolvedSvg]);
|
|
2293
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
2294
|
+
/* @__PURE__ */ jsx("style", { children: `@keyframes ag-pulse { 0%, 100% { transform: scale(1); opacity: 1; } 50% { transform: scale(1.04); opacity: 0.85; } }` }),
|
|
2295
|
+
/* @__PURE__ */ jsx(
|
|
2296
|
+
"div",
|
|
2297
|
+
{
|
|
2298
|
+
ref: setRef,
|
|
2299
|
+
className: cn("inline-flex items-center justify-center", className),
|
|
2300
|
+
style: { width, height, ...style },
|
|
2301
|
+
role: alt ? "img" : void 0,
|
|
2302
|
+
"aria-label": alt,
|
|
2303
|
+
...props,
|
|
2304
|
+
children: resolvedSvg ? /* @__PURE__ */ jsx(
|
|
2305
|
+
"div",
|
|
2306
|
+
{
|
|
2307
|
+
className: "w-full h-full [&>svg]:w-full [&>svg]:h-full",
|
|
2308
|
+
dangerouslySetInnerHTML: { __html: resolvedSvg }
|
|
2309
|
+
}
|
|
2310
|
+
) : children
|
|
2311
|
+
}
|
|
2312
|
+
)
|
|
2313
|
+
] });
|
|
2314
|
+
}
|
|
2315
|
+
);
|
|
2316
|
+
AnimatedGraphic.displayName = "AnimatedGraphic";
|
|
2034
2317
|
|
|
2035
2318
|
// locales/en.json
|
|
2036
2319
|
var en_default = {
|
|
@@ -2186,7 +2469,7 @@ var ErrorState = ({
|
|
|
2186
2469
|
);
|
|
2187
2470
|
};
|
|
2188
2471
|
ErrorState.displayName = "ErrorState";
|
|
2189
|
-
var ErrorBoundary = class extends
|
|
2472
|
+
var ErrorBoundary = class extends React112__default.Component {
|
|
2190
2473
|
constructor(props) {
|
|
2191
2474
|
super(props);
|
|
2192
2475
|
__publicField(this, "reset", () => {
|
|
@@ -2614,29 +2897,41 @@ var defaultIcon = L.icon({
|
|
|
2614
2897
|
L.Marker.prototype.options.icon = defaultIcon;
|
|
2615
2898
|
|
|
2616
2899
|
// lib/verificationRegistry.ts
|
|
2617
|
-
var checks = /* @__PURE__ */ new Map();
|
|
2618
|
-
var transitions = [];
|
|
2619
2900
|
var MAX_TRANSITIONS = 500;
|
|
2620
|
-
|
|
2901
|
+
function getState() {
|
|
2902
|
+
if (typeof window !== "undefined") {
|
|
2903
|
+
const w = window;
|
|
2904
|
+
if (!w.__verificationRegistryState) {
|
|
2905
|
+
w.__verificationRegistryState = {
|
|
2906
|
+
checks: /* @__PURE__ */ new Map(),
|
|
2907
|
+
transitions: [],
|
|
2908
|
+
bridgeHealth: null,
|
|
2909
|
+
listeners: /* @__PURE__ */ new Set()
|
|
2910
|
+
};
|
|
2911
|
+
}
|
|
2912
|
+
return w.__verificationRegistryState;
|
|
2913
|
+
}
|
|
2914
|
+
return { checks: /* @__PURE__ */ new Map(), transitions: [], bridgeHealth: null, listeners: /* @__PURE__ */ new Set() };
|
|
2915
|
+
}
|
|
2621
2916
|
function notifyListeners() {
|
|
2622
|
-
listeners.forEach((l) => l());
|
|
2917
|
+
getState().listeners.forEach((l) => l());
|
|
2623
2918
|
exposeOnWindow();
|
|
2624
2919
|
}
|
|
2625
2920
|
function registerCheck(id, label, status = "pending", details) {
|
|
2626
|
-
checks.set(id, { id, label, status, details, updatedAt: Date.now() });
|
|
2921
|
+
getState().checks.set(id, { id, label, status, details, updatedAt: Date.now() });
|
|
2627
2922
|
notifyListeners();
|
|
2628
2923
|
}
|
|
2629
2924
|
function getAllChecks() {
|
|
2630
|
-
return Array.from(checks.values());
|
|
2925
|
+
return Array.from(getState().checks.values());
|
|
2631
2926
|
}
|
|
2632
2927
|
function recordTransition(trace) {
|
|
2633
2928
|
const entry = {
|
|
2634
2929
|
...trace,
|
|
2635
2930
|
id: `t-${Date.now()}-${Math.random().toString(36).slice(2, 9)}`
|
|
2636
2931
|
};
|
|
2637
|
-
transitions.push(entry);
|
|
2638
|
-
if (transitions.length > MAX_TRANSITIONS) {
|
|
2639
|
-
transitions.shift();
|
|
2932
|
+
getState().transitions.push(entry);
|
|
2933
|
+
if (getState().transitions.length > MAX_TRANSITIONS) {
|
|
2934
|
+
getState().transitions.shift();
|
|
2640
2935
|
}
|
|
2641
2936
|
if (entry.event === "INIT") {
|
|
2642
2937
|
const hasFetch = entry.effects.some((e) => e.type === "fetch");
|
|
@@ -2671,10 +2966,11 @@ function recordTransition(trace) {
|
|
|
2671
2966
|
notifyListeners();
|
|
2672
2967
|
}
|
|
2673
2968
|
function getTransitions() {
|
|
2674
|
-
return [...transitions];
|
|
2969
|
+
return [...getState().transitions];
|
|
2675
2970
|
}
|
|
2676
2971
|
function getBridgeHealth() {
|
|
2677
|
-
|
|
2972
|
+
const bh = getState().bridgeHealth;
|
|
2973
|
+
return bh ? { ...bh } : null;
|
|
2678
2974
|
}
|
|
2679
2975
|
function getSummary() {
|
|
2680
2976
|
const allChecks = getAllChecks();
|
|
@@ -2695,8 +2991,8 @@ function getSnapshot() {
|
|
|
2695
2991
|
};
|
|
2696
2992
|
}
|
|
2697
2993
|
function subscribeToVerification(listener) {
|
|
2698
|
-
listeners.add(listener);
|
|
2699
|
-
return () => listeners.delete(listener);
|
|
2994
|
+
getState().listeners.add(listener);
|
|
2995
|
+
return () => getState().listeners.delete(listener);
|
|
2700
2996
|
}
|
|
2701
2997
|
function exposeOnWindow() {
|
|
2702
2998
|
if (typeof window === "undefined") return;
|
|
@@ -2713,7 +3009,7 @@ function exposeOnWindow() {
|
|
|
2713
3009
|
}
|
|
2714
3010
|
function waitForTransition(event, timeoutMs = 1e4) {
|
|
2715
3011
|
return new Promise((resolve) => {
|
|
2716
|
-
const existing = transitions.find((t) => t.event === event);
|
|
3012
|
+
const existing = getState().transitions.find((t) => t.event === event);
|
|
2717
3013
|
if (existing) {
|
|
2718
3014
|
resolve(existing);
|
|
2719
3015
|
return;
|
|
@@ -2723,7 +3019,7 @@ function waitForTransition(event, timeoutMs = 1e4) {
|
|
|
2723
3019
|
resolve(null);
|
|
2724
3020
|
}, timeoutMs);
|
|
2725
3021
|
const unsub = subscribeToVerification(() => {
|
|
2726
|
-
const found = transitions.find((t) => t.event === event);
|
|
3022
|
+
const found = getState().transitions.find((t) => t.event === event);
|
|
2727
3023
|
if (found) {
|
|
2728
3024
|
clearTimeout(timeout);
|
|
2729
3025
|
unsub();
|
|
@@ -2766,7 +3062,7 @@ function bindTraitStateGetter(getter) {
|
|
|
2766
3062
|
}
|
|
2767
3063
|
}
|
|
2768
3064
|
exposeOnWindow();
|
|
2769
|
-
var MarkdownContent =
|
|
3065
|
+
var MarkdownContent = React112__default.memo(
|
|
2770
3066
|
({ content, direction, className }) => {
|
|
2771
3067
|
const { t: _t } = useTranslate();
|
|
2772
3068
|
const safeContent = typeof content === "string" ? content : String(content ?? "");
|
|
@@ -2868,7 +3164,7 @@ var MarkdownContent = React110__default.memo(
|
|
|
2868
3164
|
(prev, next) => prev.content === next.content && prev.className === next.className && prev.direction === next.direction
|
|
2869
3165
|
);
|
|
2870
3166
|
MarkdownContent.displayName = "MarkdownContent";
|
|
2871
|
-
var CodeBlock =
|
|
3167
|
+
var CodeBlock = React112__default.memo(
|
|
2872
3168
|
({
|
|
2873
3169
|
code: rawCode,
|
|
2874
3170
|
language = "text",
|
|
@@ -2985,12 +3281,12 @@ GameAudioContext.displayName = "GameAudioContext";
|
|
|
2985
3281
|
|
|
2986
3282
|
// components/organisms/component-registry.generated.ts
|
|
2987
3283
|
function lazyThree(name, loader) {
|
|
2988
|
-
const Lazy =
|
|
3284
|
+
const Lazy = React112__default.lazy(() => loader().then((m) => ({ default: m[name] })));
|
|
2989
3285
|
function ThreeWrapper(props) {
|
|
2990
|
-
return
|
|
2991
|
-
|
|
3286
|
+
return React112__default.createElement(
|
|
3287
|
+
React112__default.Suspense,
|
|
2992
3288
|
{ fallback: null },
|
|
2993
|
-
|
|
3289
|
+
React112__default.createElement(Lazy, props)
|
|
2994
3290
|
);
|
|
2995
3291
|
}
|
|
2996
3292
|
ThreeWrapper.displayName = `Lazy(${name})`;
|
|
@@ -3017,7 +3313,7 @@ function SuspenseConfigProvider({
|
|
|
3017
3313
|
config,
|
|
3018
3314
|
children
|
|
3019
3315
|
}) {
|
|
3020
|
-
return
|
|
3316
|
+
return React112__default.createElement(
|
|
3021
3317
|
SuspenseConfigContext.Provider,
|
|
3022
3318
|
{ value: config },
|
|
3023
3319
|
children
|
|
@@ -3090,7 +3386,7 @@ function VerificationProvider({
|
|
|
3090
3386
|
})) : [];
|
|
3091
3387
|
recordTransition({
|
|
3092
3388
|
traitName: parsed.traitName,
|
|
3093
|
-
from: pending?.from ?? "unknown",
|
|
3389
|
+
from: pending?.from ?? (parsed.event === "INIT" ? "init" : "unknown"),
|
|
3094
3390
|
to: newState,
|
|
3095
3391
|
event: parsed.event,
|
|
3096
3392
|
effects,
|