@almadar/ui 5.121.3 → 5.122.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/avl/index.cjs +1813 -1464
- package/dist/avl/index.js +908 -559
- package/dist/components/index.cjs +1655 -1443
- package/dist/components/index.d.cts +191 -7
- package/dist/components/index.d.ts +191 -7
- package/dist/components/index.js +735 -526
- package/dist/context/index.cjs +24 -0
- package/dist/context/index.js +24 -0
- package/dist/hooks/index.cjs +31 -10
- package/dist/hooks/index.d.cts +17 -1
- package/dist/hooks/index.d.ts +17 -1
- package/dist/hooks/index.js +31 -12
- package/dist/lib/drawable/three/index.cjs +19 -10
- package/dist/lib/drawable/three/index.js +20 -11
- package/dist/lib/index.cjs +41 -13
- package/dist/lib/index.js +41 -13
- package/dist/marketing/index.cjs +37 -20
- package/dist/marketing/index.js +37 -20
- package/dist/providers/index.cjs +1573 -1346
- package/dist/providers/index.d.cts +33 -4
- package/dist/providers/index.d.ts +33 -4
- package/dist/providers/index.js +755 -529
- package/dist/runtime/index.cjs +1673 -1324
- package/dist/runtime/index.d.cts +0 -14
- package/dist/runtime/index.d.ts +0 -14
- package/dist/runtime/index.js +887 -538
- package/package.json +2 -2
- package/tailwind-preset.cjs +175 -0
- package/themes/_base.css +111 -0
- package/themes/_contract.md +25 -0
- package/themes/game-adventure.css +230 -0
- package/themes/game-rpg.css +228 -0
- package/themes/game-sci-fi.css +231 -0
- package/themes/game-ui-pack.css +229 -0
- package/themes/index.css +4 -0
package/dist/components/index.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
2
|
-
import * as
|
|
3
|
-
import
|
|
2
|
+
import * as React74 from 'react';
|
|
3
|
+
import React74__default, { createContext, useContext, useMemo, useRef, useEffect, useCallback, useState, Suspense, lazy, useSyncExternalStore, useLayoutEffect, useId } from 'react';
|
|
4
4
|
import { clsx } from 'clsx';
|
|
5
5
|
import { twMerge } from 'tailwind-merge';
|
|
6
|
-
import { EventBusContext,
|
|
6
|
+
import { EventBusContext, useTraitScopeChain, useCurrentPagePath, useGameAudioContextOptional, useEntitySchemaOptional, TraitScopeProvider } from '@almadar/ui/providers';
|
|
7
7
|
export { GameAudioContext, GameAudioProvider, useGameAudioContext } from '@almadar/ui/providers';
|
|
8
8
|
import { createLogger, isLogLevelEnabled } from '@almadar/logger';
|
|
9
9
|
import * as LucideIcons2 from 'lucide-react';
|
|
@@ -230,7 +230,7 @@ var init_SvgFlow = __esm({
|
|
|
230
230
|
width = 100,
|
|
231
231
|
height = 100
|
|
232
232
|
}) => {
|
|
233
|
-
const markerId =
|
|
233
|
+
const markerId = React74__default.useMemo(() => {
|
|
234
234
|
flowIdCounter += 1;
|
|
235
235
|
return `almadar-flow-arrow-${flowIdCounter}`;
|
|
236
236
|
}, []);
|
|
@@ -823,7 +823,7 @@ var init_SvgRing = __esm({
|
|
|
823
823
|
width = 100,
|
|
824
824
|
height = 100
|
|
825
825
|
}) => {
|
|
826
|
-
const gradientId =
|
|
826
|
+
const gradientId = React74__default.useMemo(() => {
|
|
827
827
|
ringIdCounter += 1;
|
|
828
828
|
return `almadar-ring-glow-${ringIdCounter}`;
|
|
829
829
|
}, []);
|
|
@@ -1043,9 +1043,9 @@ function getGlobalEventBus() {
|
|
|
1043
1043
|
function useEventBus() {
|
|
1044
1044
|
const context = useContext(EventBusContext);
|
|
1045
1045
|
const baseBus = context ?? getGlobalEventBus() ?? fallbackEventBus;
|
|
1046
|
-
const
|
|
1046
|
+
const chain = useTraitScopeChain();
|
|
1047
1047
|
return useMemo(() => {
|
|
1048
|
-
if (
|
|
1048
|
+
if (chain.length === 0) {
|
|
1049
1049
|
return {
|
|
1050
1050
|
...baseBus,
|
|
1051
1051
|
emit: (type, payload, source) => {
|
|
@@ -1061,22 +1061,31 @@ function useEventBus() {
|
|
|
1061
1061
|
emit: (type, payload, source) => {
|
|
1062
1062
|
if (typeof type === "string" && type.startsWith("UI:")) {
|
|
1063
1063
|
const tail = type.slice(3);
|
|
1064
|
-
const
|
|
1065
|
-
|
|
1066
|
-
|
|
1064
|
+
const isQualified = tail.includes(".");
|
|
1065
|
+
const event = isQualified ? tail.split(".").slice(2).join(".") : tail;
|
|
1066
|
+
if (!event) {
|
|
1067
|
+
baseBus.emit(type, payload, source);
|
|
1068
|
+
return;
|
|
1069
|
+
}
|
|
1070
|
+
const keys = /* @__PURE__ */ new Set();
|
|
1071
|
+
if (isQualified) keys.add(type);
|
|
1072
|
+
for (const sc of chain) {
|
|
1073
|
+
keys.add(`UI:${sc.orbital}.${sc.trait}.${event}`);
|
|
1074
|
+
}
|
|
1075
|
+
if (keys.size > 1) {
|
|
1076
|
+
scopeLog.info("emit:fan-out", {
|
|
1067
1077
|
from: type,
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
scopeTrait: scope.trait
|
|
1078
|
+
keys: Array.from(keys),
|
|
1079
|
+
chainDepth: chain.length
|
|
1071
1080
|
});
|
|
1072
1081
|
}
|
|
1073
|
-
baseBus.emit(
|
|
1082
|
+
for (const key of keys) baseBus.emit(key, payload, source);
|
|
1074
1083
|
return;
|
|
1075
1084
|
}
|
|
1076
1085
|
baseBus.emit(type, payload, source);
|
|
1077
1086
|
}
|
|
1078
1087
|
};
|
|
1079
|
-
}, [baseBus,
|
|
1088
|
+
}, [baseBus, chain]);
|
|
1080
1089
|
}
|
|
1081
1090
|
function useEventListener(event, handler) {
|
|
1082
1091
|
const eventBus = useEventBus();
|
|
@@ -1353,13 +1362,13 @@ var init_Icon = __esm({
|
|
|
1353
1362
|
style
|
|
1354
1363
|
}) => {
|
|
1355
1364
|
const directIcon = typeof icon === "string" ? void 0 : icon;
|
|
1356
|
-
const effectiveName = typeof icon === "string" ? icon : name;
|
|
1365
|
+
const effectiveName = typeof icon === "string" && icon !== "" ? icon : name;
|
|
1366
|
+
const effectiveStrokeWidth = strokeWidth != null && strokeWidth > 0 ? strokeWidth : void 0;
|
|
1357
1367
|
const family = useIconFamily();
|
|
1358
|
-
const RenderedComponent =
|
|
1368
|
+
const RenderedComponent = React74__default.useMemo(() => {
|
|
1359
1369
|
if (directIcon) return null;
|
|
1360
1370
|
return effectiveName ? resolveIconForFamily(effectiveName) : null;
|
|
1361
1371
|
}, [directIcon, effectiveName, family]);
|
|
1362
|
-
const effectiveStrokeWidth = strokeWidth ?? void 0;
|
|
1363
1372
|
const inlineStyle = {
|
|
1364
1373
|
...effectiveStrokeWidth === void 0 ? { strokeWidth: "var(--icon-stroke-width, 2)" } : {},
|
|
1365
1374
|
...style
|
|
@@ -1476,7 +1485,7 @@ var init_atlasSlice = __esm({
|
|
|
1476
1485
|
}
|
|
1477
1486
|
});
|
|
1478
1487
|
function useAtlasSliceDataUrl(asset) {
|
|
1479
|
-
const [, bump] =
|
|
1488
|
+
const [, bump] = React74.useReducer((x) => x + 1, 0);
|
|
1480
1489
|
if (!isAtlasAsset(asset)) return void 0;
|
|
1481
1490
|
const key = `${asset.atlas}#${asset.sprite}`;
|
|
1482
1491
|
const cached = sliceDataUrlCache.get(key);
|
|
@@ -1539,13 +1548,13 @@ function AtlasImage({
|
|
|
1539
1548
|
style,
|
|
1540
1549
|
"aria-hidden": ariaHidden
|
|
1541
1550
|
}) {
|
|
1542
|
-
const [, bump] =
|
|
1543
|
-
const canvasRef =
|
|
1551
|
+
const [, bump] = React74.useReducer((x) => x + 1, 0);
|
|
1552
|
+
const canvasRef = React74.useRef(null);
|
|
1544
1553
|
const sliced = isAtlasAsset(asset);
|
|
1545
1554
|
const atlas = sliced ? getAtlas(asset.atlas, bump) : void 0;
|
|
1546
1555
|
const img = sliced && asset?.url ? getSheetImage(asset.url, bump) : null;
|
|
1547
1556
|
const rect = sliced && atlas ? subRectFor(atlas, asset.sprite) : null;
|
|
1548
|
-
|
|
1557
|
+
React74.useEffect(() => {
|
|
1549
1558
|
const canvas = canvasRef.current;
|
|
1550
1559
|
if (!canvas || !img || !rect) return;
|
|
1551
1560
|
canvas.width = rect.sw;
|
|
@@ -1621,7 +1630,7 @@ function resolveIconProp(value, sizeClass) {
|
|
|
1621
1630
|
const IconComp = value;
|
|
1622
1631
|
return /* @__PURE__ */ jsx(IconComp, { className: sizeClass });
|
|
1623
1632
|
}
|
|
1624
|
-
if (
|
|
1633
|
+
if (React74__default.isValidElement(value)) {
|
|
1625
1634
|
return value;
|
|
1626
1635
|
}
|
|
1627
1636
|
if (typeof value === "object" && value !== null && isIconLike(value)) {
|
|
@@ -1698,7 +1707,7 @@ var init_Button = __esm({
|
|
|
1698
1707
|
md: "h-icon-default w-icon-default",
|
|
1699
1708
|
lg: "h-icon-default w-icon-default"
|
|
1700
1709
|
};
|
|
1701
|
-
Button =
|
|
1710
|
+
Button = React74__default.forwardRef(
|
|
1702
1711
|
({
|
|
1703
1712
|
className,
|
|
1704
1713
|
variant = "primary",
|
|
@@ -1740,7 +1749,8 @@ var init_Button = __esm({
|
|
|
1740
1749
|
"font-medium",
|
|
1741
1750
|
"rounded-sm",
|
|
1742
1751
|
"cursor-pointer",
|
|
1743
|
-
"
|
|
1752
|
+
"chrome-button",
|
|
1753
|
+
"transition-all duration-normal",
|
|
1744
1754
|
"focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-offset-[length:var(--focus-ring-offset)]",
|
|
1745
1755
|
"disabled:opacity-50 disabled:cursor-not-allowed",
|
|
1746
1756
|
variantStyles[variant],
|
|
@@ -1768,7 +1778,7 @@ var init_Input = __esm({
|
|
|
1768
1778
|
init_cn();
|
|
1769
1779
|
init_Icon();
|
|
1770
1780
|
init_useEventBus();
|
|
1771
|
-
Input =
|
|
1781
|
+
Input = React74__default.forwardRef(
|
|
1772
1782
|
({
|
|
1773
1783
|
className,
|
|
1774
1784
|
inputType,
|
|
@@ -1803,7 +1813,7 @@ var init_Input = __esm({
|
|
|
1803
1813
|
const showClearButton = clearable && value && String(value).length > 0;
|
|
1804
1814
|
const isMultiline = type === "textarea";
|
|
1805
1815
|
const baseClassName = cn(
|
|
1806
|
-
"block w-full rounded-sm transition-all duration-
|
|
1816
|
+
"block w-full rounded-sm transition-all duration-fast",
|
|
1807
1817
|
"border-[length:var(--border-width-thin)] border-border",
|
|
1808
1818
|
isMultiline ? "px-3 py-2 text-sm" : "h-input-md px-3 text-sm",
|
|
1809
1819
|
"bg-card hover:bg-muted focus:bg-card",
|
|
@@ -1836,7 +1846,7 @@ var init_Input = __esm({
|
|
|
1836
1846
|
eventBus.emit(`UI:${action}`, { value: e.currentTarget.value });
|
|
1837
1847
|
}
|
|
1838
1848
|
};
|
|
1839
|
-
const wrapField = (field) => /* @__PURE__ */ jsxs("div", { className: "w-full", children: [
|
|
1849
|
+
const wrapField = (field, fullWidth = true) => /* @__PURE__ */ jsxs("div", { className: fullWidth ? "w-full" : "w-fit", children: [
|
|
1840
1850
|
label && /* @__PURE__ */ jsx("label", { className: "block text-sm font-medium text-foreground mb-1", children: label }),
|
|
1841
1851
|
field,
|
|
1842
1852
|
(helperText || error) && /* @__PURE__ */ jsx("p", { className: cn("mt-1 text-xs", error ? "text-error" : "text-muted-foreground"), children: error ?? helperText })
|
|
@@ -1896,7 +1906,8 @@ var init_Input = __esm({
|
|
|
1896
1906
|
),
|
|
1897
1907
|
...props
|
|
1898
1908
|
}
|
|
1899
|
-
)
|
|
1909
|
+
),
|
|
1910
|
+
false
|
|
1900
1911
|
);
|
|
1901
1912
|
}
|
|
1902
1913
|
return wrapField(
|
|
@@ -1935,7 +1946,7 @@ var Label;
|
|
|
1935
1946
|
var init_Label = __esm({
|
|
1936
1947
|
"components/core/atoms/Label.tsx"() {
|
|
1937
1948
|
init_cn();
|
|
1938
|
-
Label =
|
|
1949
|
+
Label = React74__default.forwardRef(
|
|
1939
1950
|
({ className, required, children, ...props }, ref) => {
|
|
1940
1951
|
return /* @__PURE__ */ jsxs(
|
|
1941
1952
|
"label",
|
|
@@ -1962,7 +1973,7 @@ var init_Textarea = __esm({
|
|
|
1962
1973
|
"components/core/atoms/Textarea.tsx"() {
|
|
1963
1974
|
init_cn();
|
|
1964
1975
|
init_useEventBus();
|
|
1965
|
-
Textarea =
|
|
1976
|
+
Textarea = React74__default.forwardRef(
|
|
1966
1977
|
({ className, error, onChange, ...props }, ref) => {
|
|
1967
1978
|
const eventBus = useEventBus();
|
|
1968
1979
|
const handleChange = (e) => {
|
|
@@ -2201,7 +2212,7 @@ var init_Select = __esm({
|
|
|
2201
2212
|
init_cn();
|
|
2202
2213
|
init_Icon();
|
|
2203
2214
|
init_useEventBus();
|
|
2204
|
-
Select =
|
|
2215
|
+
Select = React74__default.forwardRef(
|
|
2205
2216
|
(props, _ref) => {
|
|
2206
2217
|
const { multiple, searchable, clearable } = props;
|
|
2207
2218
|
if (multiple || searchable || clearable) {
|
|
@@ -2218,7 +2229,7 @@ var init_Checkbox = __esm({
|
|
|
2218
2229
|
"components/core/atoms/Checkbox.tsx"() {
|
|
2219
2230
|
init_cn();
|
|
2220
2231
|
init_useEventBus();
|
|
2221
|
-
Checkbox =
|
|
2232
|
+
Checkbox = React74__default.forwardRef(
|
|
2222
2233
|
({ className, label, id, onChange, ...props }, ref) => {
|
|
2223
2234
|
const inputId = id || `checkbox-${Math.random().toString(36).substr(2, 9)}`;
|
|
2224
2235
|
const eventBus = useEventBus();
|
|
@@ -2272,7 +2283,7 @@ var init_Spinner = __esm({
|
|
|
2272
2283
|
md: "h-6 w-6",
|
|
2273
2284
|
lg: "h-8 w-8"
|
|
2274
2285
|
};
|
|
2275
|
-
Spinner =
|
|
2286
|
+
Spinner = React74__default.forwardRef(
|
|
2276
2287
|
({ className, size = "md", overlay, ...props }, ref) => {
|
|
2277
2288
|
if (overlay) {
|
|
2278
2289
|
return /* @__PURE__ */ jsx(
|
|
@@ -2314,21 +2325,21 @@ var init_Card = __esm({
|
|
|
2314
2325
|
"bg-card",
|
|
2315
2326
|
"border-[length:var(--border-width)] border-border",
|
|
2316
2327
|
"shadow-elevation-card",
|
|
2317
|
-
"transition-all duration-
|
|
2328
|
+
"transition-all duration-normal",
|
|
2318
2329
|
"hover:shadow-elevation-dialog hover:translate-y-[var(--hover-translate-y)]"
|
|
2319
2330
|
].join(" "),
|
|
2320
2331
|
bordered: [
|
|
2321
2332
|
"bg-card",
|
|
2322
2333
|
"border-[length:var(--border-width)] border-border",
|
|
2323
2334
|
"shadow-elevation-card",
|
|
2324
|
-
"transition-all duration-
|
|
2335
|
+
"transition-all duration-normal",
|
|
2325
2336
|
"hover:shadow-elevation-dialog hover:translate-y-[var(--hover-translate-y)]"
|
|
2326
2337
|
].join(" "),
|
|
2327
2338
|
elevated: [
|
|
2328
2339
|
"bg-card",
|
|
2329
2340
|
"border-[length:var(--border-width)] border-border",
|
|
2330
2341
|
"shadow",
|
|
2331
|
-
"transition-all duration-
|
|
2342
|
+
"transition-all duration-normal",
|
|
2332
2343
|
"hover:shadow-elevation-dialog hover:translate-y-[var(--hover-translate-y)]"
|
|
2333
2344
|
].join(" "),
|
|
2334
2345
|
// Interactive variant with theme-specific hover effects
|
|
@@ -2337,7 +2348,7 @@ var init_Card = __esm({
|
|
|
2337
2348
|
"border-[length:var(--border-width)] border-border",
|
|
2338
2349
|
"shadow",
|
|
2339
2350
|
"cursor-pointer",
|
|
2340
|
-
"transition-all duration-
|
|
2351
|
+
"transition-all duration-normal",
|
|
2341
2352
|
"hover:shadow-elevation-dialog"
|
|
2342
2353
|
].join(" ")
|
|
2343
2354
|
};
|
|
@@ -2362,7 +2373,7 @@ var init_Card = __esm({
|
|
|
2362
2373
|
chip: "shadow-none rounded-pill border-[length:var(--border-width)] border-border",
|
|
2363
2374
|
"tile-image-first": "p-0 overflow-hidden"
|
|
2364
2375
|
};
|
|
2365
|
-
Card =
|
|
2376
|
+
Card = React74__default.forwardRef(
|
|
2366
2377
|
({
|
|
2367
2378
|
className,
|
|
2368
2379
|
variant = "bordered",
|
|
@@ -2388,7 +2399,8 @@ var init_Card = __esm({
|
|
|
2388
2399
|
ref,
|
|
2389
2400
|
className: cn(
|
|
2390
2401
|
"rounded-container relative",
|
|
2391
|
-
"transition-all duration-
|
|
2402
|
+
"transition-all duration-normal",
|
|
2403
|
+
"chrome-panel",
|
|
2392
2404
|
variantStyles2[variant],
|
|
2393
2405
|
paddingStyles[padding],
|
|
2394
2406
|
lookStyles[look],
|
|
@@ -2410,9 +2422,9 @@ var init_Card = __esm({
|
|
|
2410
2422
|
}
|
|
2411
2423
|
);
|
|
2412
2424
|
Card.displayName = "Card";
|
|
2413
|
-
CardHeader =
|
|
2425
|
+
CardHeader = React74__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("mb-4", className), ...props }));
|
|
2414
2426
|
CardHeader.displayName = "CardHeader";
|
|
2415
|
-
CardTitle =
|
|
2427
|
+
CardTitle = React74__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
2416
2428
|
"h3",
|
|
2417
2429
|
{
|
|
2418
2430
|
ref,
|
|
@@ -2425,11 +2437,11 @@ var init_Card = __esm({
|
|
|
2425
2437
|
}
|
|
2426
2438
|
));
|
|
2427
2439
|
CardTitle.displayName = "CardTitle";
|
|
2428
|
-
CardContent =
|
|
2440
|
+
CardContent = React74__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("div", { ref, className: cn("", className), ...props }));
|
|
2429
2441
|
CardContent.displayName = "CardContent";
|
|
2430
2442
|
CardBody = CardContent;
|
|
2431
2443
|
CardBody.displayName = "CardBody";
|
|
2432
|
-
CardFooter =
|
|
2444
|
+
CardFooter = React74__default.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
|
|
2433
2445
|
"div",
|
|
2434
2446
|
{
|
|
2435
2447
|
ref,
|
|
@@ -2483,7 +2495,7 @@ var init_Badge = __esm({
|
|
|
2483
2495
|
md: "px-2.5 py-1 text-sm",
|
|
2484
2496
|
lg: "px-3 py-1.5 text-base"
|
|
2485
2497
|
};
|
|
2486
|
-
Badge =
|
|
2498
|
+
Badge = React74__default.forwardRef(
|
|
2487
2499
|
({ className, variant = "default", size = "sm", amount, label, icon, iconAsset, children, onRemove, removeLabel, ...props }, ref) => {
|
|
2488
2500
|
const iconSizes3 = {
|
|
2489
2501
|
sm: "h-icon-default w-icon-default",
|
|
@@ -2609,7 +2621,7 @@ var init_FilterPill = __esm({
|
|
|
2609
2621
|
md: "w-3.5 h-3.5",
|
|
2610
2622
|
lg: "w-4 h-4"
|
|
2611
2623
|
};
|
|
2612
|
-
FilterPill =
|
|
2624
|
+
FilterPill = React74__default.forwardRef(
|
|
2613
2625
|
({
|
|
2614
2626
|
className,
|
|
2615
2627
|
variant = "default",
|
|
@@ -2738,8 +2750,8 @@ var init_Avatar = __esm({
|
|
|
2738
2750
|
actionPayload
|
|
2739
2751
|
}) => {
|
|
2740
2752
|
const eventBus = useEventBus();
|
|
2741
|
-
const [imgFailed, setImgFailed] =
|
|
2742
|
-
|
|
2753
|
+
const [imgFailed, setImgFailed] = React74__default.useState(false);
|
|
2754
|
+
React74__default.useEffect(() => {
|
|
2743
2755
|
setImgFailed(false);
|
|
2744
2756
|
}, [src]);
|
|
2745
2757
|
const initials = providedInitials ?? (name ? generateInitials(name) : void 0);
|
|
@@ -2991,7 +3003,7 @@ var init_Box = __esm({
|
|
|
2991
3003
|
fixed: "fixed",
|
|
2992
3004
|
sticky: "sticky"
|
|
2993
3005
|
};
|
|
2994
|
-
Box =
|
|
3006
|
+
Box = React74__default.forwardRef(
|
|
2995
3007
|
({
|
|
2996
3008
|
padding,
|
|
2997
3009
|
paddingX,
|
|
@@ -3056,7 +3068,7 @@ var init_Box = __esm({
|
|
|
3056
3068
|
onPointerDown?.(e);
|
|
3057
3069
|
}, [hoverEvent, tapReveal, triggerProps, onPointerDown]);
|
|
3058
3070
|
const isClickable = action || onClick;
|
|
3059
|
-
return
|
|
3071
|
+
return React74__default.createElement(
|
|
3060
3072
|
Component,
|
|
3061
3073
|
{
|
|
3062
3074
|
ref,
|
|
@@ -3110,7 +3122,7 @@ var init_Center = __esm({
|
|
|
3110
3122
|
as: Component = "div"
|
|
3111
3123
|
}) => {
|
|
3112
3124
|
const mergedStyle = minHeight ? { minHeight, ...style } : style;
|
|
3113
|
-
return
|
|
3125
|
+
return React74__default.createElement(Component, {
|
|
3114
3126
|
className: cn(
|
|
3115
3127
|
inline ? "inline-flex" : "flex",
|
|
3116
3128
|
horizontal && "justify-center",
|
|
@@ -3378,7 +3390,7 @@ var init_Radio = __esm({
|
|
|
3378
3390
|
md: "w-2.5 h-2.5",
|
|
3379
3391
|
lg: "w-3 h-3"
|
|
3380
3392
|
};
|
|
3381
|
-
Radio =
|
|
3393
|
+
Radio = React74__default.forwardRef(
|
|
3382
3394
|
({
|
|
3383
3395
|
label,
|
|
3384
3396
|
helperText,
|
|
@@ -3395,12 +3407,12 @@ var init_Radio = __esm({
|
|
|
3395
3407
|
onChange,
|
|
3396
3408
|
...props
|
|
3397
3409
|
}, ref) => {
|
|
3398
|
-
const reactId =
|
|
3410
|
+
const reactId = React74__default.useId();
|
|
3399
3411
|
const baseId = id || `radio-${reactId}`;
|
|
3400
3412
|
const hasError = !!error;
|
|
3401
3413
|
const eventBus = useEventBus();
|
|
3402
|
-
const [selected, setSelected] =
|
|
3403
|
-
|
|
3414
|
+
const [selected, setSelected] = React74__default.useState(value);
|
|
3415
|
+
React74__default.useEffect(() => {
|
|
3404
3416
|
if (value !== void 0) setSelected(value);
|
|
3405
3417
|
}, [value]);
|
|
3406
3418
|
const pick = (next, e) => {
|
|
@@ -3582,7 +3594,7 @@ var init_Switch = __esm({
|
|
|
3582
3594
|
"components/core/atoms/Switch.tsx"() {
|
|
3583
3595
|
"use client";
|
|
3584
3596
|
init_cn();
|
|
3585
|
-
Switch =
|
|
3597
|
+
Switch = React74.forwardRef(
|
|
3586
3598
|
({
|
|
3587
3599
|
checked,
|
|
3588
3600
|
defaultChecked = false,
|
|
@@ -3593,10 +3605,10 @@ var init_Switch = __esm({
|
|
|
3593
3605
|
name,
|
|
3594
3606
|
className
|
|
3595
3607
|
}, ref) => {
|
|
3596
|
-
const [isChecked, setIsChecked] =
|
|
3608
|
+
const [isChecked, setIsChecked] = React74.useState(
|
|
3597
3609
|
checked !== void 0 ? checked : defaultChecked
|
|
3598
3610
|
);
|
|
3599
|
-
|
|
3611
|
+
React74.useEffect(() => {
|
|
3600
3612
|
if (checked !== void 0) {
|
|
3601
3613
|
setIsChecked(checked);
|
|
3602
3614
|
}
|
|
@@ -3627,7 +3639,7 @@ var init_Switch = __esm({
|
|
|
3627
3639
|
// redefine --space-11 to 68px, which makes w-11 enormous and leaves
|
|
3628
3640
|
// the thumb stuck near the left edge. The switch geometry must stay
|
|
3629
3641
|
// proportional regardless of a theme's density scale.
|
|
3630
|
-
"relative inline-flex h-[1.5rem] w-[2.75rem] shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors",
|
|
3642
|
+
"relative inline-flex h-[1.5rem] w-[2.75rem] shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors duration-fast",
|
|
3631
3643
|
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
3632
3644
|
isChecked ? "bg-primary" : "bg-muted",
|
|
3633
3645
|
disabled && "cursor-not-allowed opacity-50"
|
|
@@ -3636,7 +3648,7 @@ var init_Switch = __esm({
|
|
|
3636
3648
|
"span",
|
|
3637
3649
|
{
|
|
3638
3650
|
className: cn(
|
|
3639
|
-
"pointer-events-none block h-[1.25rem] w-[1.25rem] rounded-full bg-background shadow-lg ring-0 transition-transform",
|
|
3651
|
+
"pointer-events-none block h-[1.25rem] w-[1.25rem] rounded-full bg-background shadow-lg ring-0 transition-transform duration-fast",
|
|
3640
3652
|
isChecked ? "translate-x-[1.25rem]" : "translate-x-0"
|
|
3641
3653
|
)
|
|
3642
3654
|
}
|
|
@@ -3759,7 +3771,7 @@ var init_Stack = __esm({
|
|
|
3759
3771
|
};
|
|
3760
3772
|
const isHorizontal = direction === "horizontal";
|
|
3761
3773
|
const directionClass = responsive && isHorizontal ? reverse ? "flex-col-reverse md:flex-row-reverse" : "flex-col md:flex-row" : isHorizontal ? reverse ? "flex-row-reverse" : "flex-row" : reverse ? "flex-col-reverse" : "flex-col";
|
|
3762
|
-
return
|
|
3774
|
+
return React74__default.createElement(
|
|
3763
3775
|
Component,
|
|
3764
3776
|
{
|
|
3765
3777
|
className: cn(
|
|
@@ -3804,7 +3816,7 @@ var init_TextHighlight = __esm({
|
|
|
3804
3816
|
hoverEvent
|
|
3805
3817
|
}) => {
|
|
3806
3818
|
const eventBus = useEventBus();
|
|
3807
|
-
const baseStyles = "cursor-pointer transition-all duration-
|
|
3819
|
+
const baseStyles = "cursor-pointer transition-all duration-fast";
|
|
3808
3820
|
const typeStyles = {
|
|
3809
3821
|
question: cn(
|
|
3810
3822
|
// Blue border for questions
|
|
@@ -3955,7 +3967,7 @@ var init_Typography = __esm({
|
|
|
3955
3967
|
}) => {
|
|
3956
3968
|
const variant = variantProp ?? (level ? `h${level}` : "body1");
|
|
3957
3969
|
const Component = as || defaultElements[variant];
|
|
3958
|
-
return
|
|
3970
|
+
return React74__default.createElement(
|
|
3959
3971
|
Component,
|
|
3960
3972
|
{
|
|
3961
3973
|
id,
|
|
@@ -4038,12 +4050,84 @@ var init_ThemeToggle = __esm({
|
|
|
4038
4050
|
ThemeToggle.displayName = "ThemeToggle";
|
|
4039
4051
|
}
|
|
4040
4052
|
});
|
|
4053
|
+
function isMotionEnabled() {
|
|
4054
|
+
if (typeof document === "undefined") return true;
|
|
4055
|
+
if (motionEnabledCache !== null) return motionEnabledCache;
|
|
4056
|
+
const v = getComputedStyle(document.documentElement).getPropertyValue("--motion-enable").trim().toLowerCase();
|
|
4057
|
+
motionEnabledCache = v !== "off";
|
|
4058
|
+
return motionEnabledCache;
|
|
4059
|
+
}
|
|
4060
|
+
function usePresence(show, opts) {
|
|
4061
|
+
const { animation, animate = true, onExited } = opts;
|
|
4062
|
+
const [mounted, setMounted] = useState(show);
|
|
4063
|
+
const [exiting, setExiting] = useState(false);
|
|
4064
|
+
const prev = useRef(show);
|
|
4065
|
+
const onExitedRef = useRef(onExited);
|
|
4066
|
+
onExitedRef.current = onExited;
|
|
4067
|
+
const safeTimer = useRef(null);
|
|
4068
|
+
const clearSafe = useCallback(() => {
|
|
4069
|
+
if (safeTimer.current) {
|
|
4070
|
+
clearTimeout(safeTimer.current);
|
|
4071
|
+
safeTimer.current = null;
|
|
4072
|
+
}
|
|
4073
|
+
}, []);
|
|
4074
|
+
const finishExit = useCallback(() => {
|
|
4075
|
+
clearSafe();
|
|
4076
|
+
setExiting(false);
|
|
4077
|
+
setMounted(false);
|
|
4078
|
+
onExitedRef.current?.();
|
|
4079
|
+
}, [clearSafe]);
|
|
4080
|
+
useEffect(() => {
|
|
4081
|
+
const moving = animate && isMotionEnabled();
|
|
4082
|
+
if (show && !prev.current) {
|
|
4083
|
+
setExiting(false);
|
|
4084
|
+
setMounted(true);
|
|
4085
|
+
} else if (!show && prev.current) {
|
|
4086
|
+
if (moving) {
|
|
4087
|
+
setExiting(true);
|
|
4088
|
+
clearSafe();
|
|
4089
|
+
safeTimer.current = setTimeout(finishExit, SAFE_EXIT_MS);
|
|
4090
|
+
} else {
|
|
4091
|
+
setMounted(false);
|
|
4092
|
+
setExiting(false);
|
|
4093
|
+
}
|
|
4094
|
+
}
|
|
4095
|
+
prev.current = show;
|
|
4096
|
+
}, [show, animate, clearSafe, finishExit]);
|
|
4097
|
+
useEffect(() => () => clearSafe(), [clearSafe]);
|
|
4098
|
+
const disabled = !animate || !isMotionEnabled();
|
|
4099
|
+
const className = disabled ? "" : exiting ? `animate-${animation}-out` : `animate-${animation}-in`;
|
|
4100
|
+
const onAnimationEnd = useCallback(
|
|
4101
|
+
(e) => {
|
|
4102
|
+
if (e.target !== e.currentTarget) return;
|
|
4103
|
+
if (exiting) finishExit();
|
|
4104
|
+
},
|
|
4105
|
+
[exiting, finishExit]
|
|
4106
|
+
);
|
|
4107
|
+
return { mounted, exiting, className, onAnimationEnd };
|
|
4108
|
+
}
|
|
4109
|
+
var SAFE_EXIT_MS, motionEnabledCache, Presence;
|
|
4110
|
+
var init_Presence = __esm({
|
|
4111
|
+
"components/core/atoms/Presence.tsx"() {
|
|
4112
|
+
"use client";
|
|
4113
|
+
init_cn();
|
|
4114
|
+
SAFE_EXIT_MS = 1e3;
|
|
4115
|
+
motionEnabledCache = null;
|
|
4116
|
+
Presence = ({ show, className, children, ...opts }) => {
|
|
4117
|
+
const { mounted, className: animClass, onAnimationEnd } = usePresence(show, opts);
|
|
4118
|
+
if (!mounted) return null;
|
|
4119
|
+
return /* @__PURE__ */ jsx("div", { className: cn(animClass, className), onAnimationEnd, children });
|
|
4120
|
+
};
|
|
4121
|
+
Presence.displayName = "Presence";
|
|
4122
|
+
}
|
|
4123
|
+
});
|
|
4041
4124
|
var Overlay;
|
|
4042
4125
|
var init_Overlay = __esm({
|
|
4043
4126
|
"components/core/atoms/Overlay.tsx"() {
|
|
4044
4127
|
"use client";
|
|
4045
4128
|
init_cn();
|
|
4046
4129
|
init_useEventBus();
|
|
4130
|
+
init_Presence();
|
|
4047
4131
|
Overlay = ({
|
|
4048
4132
|
isVisible = true,
|
|
4049
4133
|
onClick,
|
|
@@ -4052,7 +4136,8 @@ var init_Overlay = __esm({
|
|
|
4052
4136
|
action
|
|
4053
4137
|
}) => {
|
|
4054
4138
|
const eventBus = useEventBus();
|
|
4055
|
-
|
|
4139
|
+
const { mounted, className: animClass, onAnimationEnd } = usePresence(isVisible, { animation: "overlay" });
|
|
4140
|
+
if (!mounted) return null;
|
|
4056
4141
|
const handleClick = (e) => {
|
|
4057
4142
|
if (action) {
|
|
4058
4143
|
eventBus.emit(`UI:${action}`, {});
|
|
@@ -4065,10 +4150,12 @@ var init_Overlay = __esm({
|
|
|
4065
4150
|
className: cn(
|
|
4066
4151
|
"fixed inset-0 z-40",
|
|
4067
4152
|
blur && "backdrop-blur-sm",
|
|
4153
|
+
animClass,
|
|
4068
4154
|
className
|
|
4069
4155
|
),
|
|
4070
4156
|
style: { backgroundColor: "rgba(0, 0, 0, 0.6)" },
|
|
4071
4157
|
onClick: action || onClick ? handleClick : void 0,
|
|
4158
|
+
onAnimationEnd,
|
|
4072
4159
|
"aria-hidden": "true"
|
|
4073
4160
|
}
|
|
4074
4161
|
);
|
|
@@ -4114,7 +4201,7 @@ var Dialog;
|
|
|
4114
4201
|
var init_Dialog = __esm({
|
|
4115
4202
|
"components/core/atoms/Dialog.tsx"() {
|
|
4116
4203
|
init_cn();
|
|
4117
|
-
Dialog =
|
|
4204
|
+
Dialog = React74__default.forwardRef(
|
|
4118
4205
|
({
|
|
4119
4206
|
role = "dialog",
|
|
4120
4207
|
"aria-modal": ariaModal = true,
|
|
@@ -4140,7 +4227,7 @@ var Aside;
|
|
|
4140
4227
|
var init_Aside = __esm({
|
|
4141
4228
|
"components/core/atoms/Aside.tsx"() {
|
|
4142
4229
|
init_cn();
|
|
4143
|
-
Aside =
|
|
4230
|
+
Aside = React74__default.forwardRef(
|
|
4144
4231
|
({ className, children, ...rest }, ref) => /* @__PURE__ */ jsx("aside", { ref, className: cn(className), ...rest, children })
|
|
4145
4232
|
);
|
|
4146
4233
|
Aside.displayName = "Aside";
|
|
@@ -4219,9 +4306,9 @@ var init_LawReferenceTooltip = __esm({
|
|
|
4219
4306
|
className
|
|
4220
4307
|
}) => {
|
|
4221
4308
|
const { t } = useTranslate();
|
|
4222
|
-
const [isVisible, setIsVisible] =
|
|
4223
|
-
const timeoutRef =
|
|
4224
|
-
const triggerRef =
|
|
4309
|
+
const [isVisible, setIsVisible] = React74__default.useState(false);
|
|
4310
|
+
const timeoutRef = React74__default.useRef(null);
|
|
4311
|
+
const triggerRef = React74__default.useRef(null);
|
|
4225
4312
|
const handleMouseEnter = () => {
|
|
4226
4313
|
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
4227
4314
|
timeoutRef.current = setTimeout(() => setIsVisible(true), 200);
|
|
@@ -4232,7 +4319,7 @@ var init_LawReferenceTooltip = __esm({
|
|
|
4232
4319
|
};
|
|
4233
4320
|
const { revealed, triggerProps } = useTapReveal({ refs: [triggerRef] });
|
|
4234
4321
|
const open = isVisible || revealed;
|
|
4235
|
-
|
|
4322
|
+
React74__default.useEffect(() => {
|
|
4236
4323
|
return () => {
|
|
4237
4324
|
if (timeoutRef.current) clearTimeout(timeoutRef.current);
|
|
4238
4325
|
};
|
|
@@ -4442,7 +4529,7 @@ var init_StatusDot = __esm({
|
|
|
4442
4529
|
md: "w-2.5 h-2.5",
|
|
4443
4530
|
lg: "w-3 h-3"
|
|
4444
4531
|
};
|
|
4445
|
-
StatusDot =
|
|
4532
|
+
StatusDot = React74__default.forwardRef(
|
|
4446
4533
|
({ className, status = "offline", pulse = false, size = "md", label, ...props }, ref) => {
|
|
4447
4534
|
return /* @__PURE__ */ jsx(
|
|
4448
4535
|
"span",
|
|
@@ -4496,7 +4583,7 @@ var init_TrendIndicator = __esm({
|
|
|
4496
4583
|
down: "trending-down",
|
|
4497
4584
|
flat: "arrow-right"
|
|
4498
4585
|
};
|
|
4499
|
-
TrendIndicator =
|
|
4586
|
+
TrendIndicator = React74__default.forwardRef(
|
|
4500
4587
|
({
|
|
4501
4588
|
className,
|
|
4502
4589
|
value,
|
|
@@ -4563,7 +4650,7 @@ var init_RangeSlider = __esm({
|
|
|
4563
4650
|
md: "w-4 h-4",
|
|
4564
4651
|
lg: "w-5 h-5"
|
|
4565
4652
|
};
|
|
4566
|
-
RangeSlider =
|
|
4653
|
+
RangeSlider = React74__default.forwardRef(
|
|
4567
4654
|
({
|
|
4568
4655
|
className,
|
|
4569
4656
|
min = 0,
|
|
@@ -4706,7 +4793,7 @@ var init_RangeSlider = __esm({
|
|
|
4706
4793
|
"border-2 border-primary",
|
|
4707
4794
|
"shadow-sm",
|
|
4708
4795
|
"pointer-events-none",
|
|
4709
|
-
"transition-transform duration-
|
|
4796
|
+
"transition-transform duration-instant",
|
|
4710
4797
|
isDragging && "scale-[var(--hover-scale)]",
|
|
4711
4798
|
thumbSizes[size]
|
|
4712
4799
|
),
|
|
@@ -4756,6 +4843,18 @@ var init_RangeSlider = __esm({
|
|
|
4756
4843
|
function easeOut(t) {
|
|
4757
4844
|
return t * (2 - t);
|
|
4758
4845
|
}
|
|
4846
|
+
function formatDisplay(value, format, decimals) {
|
|
4847
|
+
switch (format) {
|
|
4848
|
+
case "currency":
|
|
4849
|
+
return `$${value.toFixed(2)}`;
|
|
4850
|
+
case "percent":
|
|
4851
|
+
return `${Math.round(value)}%`;
|
|
4852
|
+
case "number":
|
|
4853
|
+
return value.toLocaleString();
|
|
4854
|
+
default:
|
|
4855
|
+
return value.toFixed(decimals);
|
|
4856
|
+
}
|
|
4857
|
+
}
|
|
4759
4858
|
var AnimatedCounter;
|
|
4760
4859
|
var init_AnimatedCounter = __esm({
|
|
4761
4860
|
"components/marketing/atoms/AnimatedCounter.tsx"() {
|
|
@@ -4767,6 +4866,7 @@ var init_AnimatedCounter = __esm({
|
|
|
4767
4866
|
duration = 600,
|
|
4768
4867
|
prefix,
|
|
4769
4868
|
suffix,
|
|
4869
|
+
format,
|
|
4770
4870
|
className
|
|
4771
4871
|
}) => {
|
|
4772
4872
|
const numericRaw = typeof rawValue === "number" ? rawValue : Number.parseFloat(String(rawValue ?? ""));
|
|
@@ -4782,6 +4882,10 @@ var init_AnimatedCounter = __esm({
|
|
|
4782
4882
|
setDisplayValue(to);
|
|
4783
4883
|
return;
|
|
4784
4884
|
}
|
|
4885
|
+
if (window.matchMedia?.("(prefers-reduced-motion: reduce)").matches) {
|
|
4886
|
+
setDisplayValue(to);
|
|
4887
|
+
return;
|
|
4888
|
+
}
|
|
4785
4889
|
const startTime = performance.now();
|
|
4786
4890
|
const diff = to - from;
|
|
4787
4891
|
function animate(currentTime) {
|
|
@@ -4803,7 +4907,7 @@ var init_AnimatedCounter = __esm({
|
|
|
4803
4907
|
};
|
|
4804
4908
|
}, [value, duration]);
|
|
4805
4909
|
const decimalPlaces = Number.isInteger(value) ? 0 : String(value).split(".")[1]?.length ?? 0;
|
|
4806
|
-
const formattedValue = displayValue
|
|
4910
|
+
const formattedValue = formatDisplay(displayValue, format, decimalPlaces);
|
|
4807
4911
|
return /* @__PURE__ */ jsxs(Typography, { variant: "h3", className: cn("tabular-nums", className), children: [
|
|
4808
4912
|
prefix,
|
|
4809
4913
|
formattedValue,
|
|
@@ -5157,7 +5261,7 @@ var init_ContentSection = __esm({
|
|
|
5157
5261
|
md: "py-16",
|
|
5158
5262
|
lg: "py-24"
|
|
5159
5263
|
};
|
|
5160
|
-
ContentSection =
|
|
5264
|
+
ContentSection = React74__default.forwardRef(
|
|
5161
5265
|
({ children, background = "default", padding = "lg", id, className }, ref) => {
|
|
5162
5266
|
return /* @__PURE__ */ jsx(
|
|
5163
5267
|
Box,
|
|
@@ -5691,7 +5795,7 @@ var init_AnimatedReveal = __esm({
|
|
|
5691
5795
|
"scale-up": { opacity: 1, transform: "scale(1) translateY(0)" },
|
|
5692
5796
|
"none": {}
|
|
5693
5797
|
};
|
|
5694
|
-
AnimatedReveal =
|
|
5798
|
+
AnimatedReveal = React74__default.forwardRef(
|
|
5695
5799
|
({
|
|
5696
5800
|
trigger = "scroll",
|
|
5697
5801
|
animation = "fade-up",
|
|
@@ -5851,7 +5955,7 @@ var init_AnimatedGraphic = __esm({
|
|
|
5851
5955
|
"components/marketing/atoms/AnimatedGraphic.tsx"() {
|
|
5852
5956
|
"use client";
|
|
5853
5957
|
init_cn();
|
|
5854
|
-
AnimatedGraphic =
|
|
5958
|
+
AnimatedGraphic = React74__default.forwardRef(
|
|
5855
5959
|
({
|
|
5856
5960
|
src,
|
|
5857
5961
|
svgContent,
|
|
@@ -5874,7 +5978,7 @@ var init_AnimatedGraphic = __esm({
|
|
|
5874
5978
|
const fetchedSvg = useFetchedSvg(svgContent ? void 0 : src);
|
|
5875
5979
|
const resolvedSvg = svgContent ?? fetchedSvg;
|
|
5876
5980
|
const prevAnimateRef = useRef(animate);
|
|
5877
|
-
const setRef =
|
|
5981
|
+
const setRef = React74__default.useCallback(
|
|
5878
5982
|
(node) => {
|
|
5879
5983
|
containerRef.current = node;
|
|
5880
5984
|
if (typeof ref === "function") ref(node);
|
|
@@ -6016,6 +6120,15 @@ var init_Modal = __esm({
|
|
|
6016
6120
|
const [dragY, setDragY] = useState(0);
|
|
6017
6121
|
const dragStartY = useRef(0);
|
|
6018
6122
|
const isDragging = useRef(false);
|
|
6123
|
+
const [closing, setClosing] = useState(false);
|
|
6124
|
+
const wasOpenRef = useRef(isOpen);
|
|
6125
|
+
useEffect(() => {
|
|
6126
|
+
if (wasOpenRef.current && !isOpen) setClosing(true);
|
|
6127
|
+
wasOpenRef.current = isOpen;
|
|
6128
|
+
}, [isOpen]);
|
|
6129
|
+
const handleAnimEnd = (e) => {
|
|
6130
|
+
if (closing && e.target === e.currentTarget) setClosing(false);
|
|
6131
|
+
};
|
|
6019
6132
|
useEffect(() => {
|
|
6020
6133
|
if (isOpen) {
|
|
6021
6134
|
previousActiveElement.current = document.activeElement;
|
|
@@ -6049,7 +6162,11 @@ var init_Modal = __esm({
|
|
|
6049
6162
|
document.body.style.overflow = "";
|
|
6050
6163
|
};
|
|
6051
6164
|
}, [isOpen]);
|
|
6052
|
-
if (
|
|
6165
|
+
if (typeof document === "undefined") return null;
|
|
6166
|
+
const renderOpen = isOpen || closing;
|
|
6167
|
+
if (!renderOpen) return null;
|
|
6168
|
+
const dialogAnim = closing ? "animate-modal-out" : "animate-modal-in";
|
|
6169
|
+
const overlayAnim = closing ? "animate-overlay-out" : "animate-overlay-in";
|
|
6053
6170
|
const handleClose = () => {
|
|
6054
6171
|
if (closeEvent) eventBus.emit(`UI:${closeEvent}`, {});
|
|
6055
6172
|
onClose();
|
|
@@ -6066,7 +6183,8 @@ var init_Modal = __esm({
|
|
|
6066
6183
|
className: cn(
|
|
6067
6184
|
"fixed inset-0 z-[1000]",
|
|
6068
6185
|
"flex items-start justify-center px-4 pb-4 pt-[10vh]",
|
|
6069
|
-
"max-sm:items-stretch max-sm:p-0 max-sm:pt-0"
|
|
6186
|
+
"max-sm:items-stretch max-sm:p-0 max-sm:pt-0",
|
|
6187
|
+
overlayAnim
|
|
6070
6188
|
),
|
|
6071
6189
|
style: { backgroundColor: "rgba(0, 0, 0, 0.6)" },
|
|
6072
6190
|
onClick: handleOverlayClick,
|
|
@@ -6094,8 +6212,10 @@ var init_Modal = __esm({
|
|
|
6094
6212
|
// full height, no rounded corners, no min-width.
|
|
6095
6213
|
"max-sm:max-w-none max-sm:max-h-none max-sm:w-full max-sm:h-full max-sm:rounded-none",
|
|
6096
6214
|
lookStyles2[look],
|
|
6097
|
-
className
|
|
6215
|
+
className,
|
|
6216
|
+
dialogAnim
|
|
6098
6217
|
),
|
|
6218
|
+
onAnimationEnd: handleAnimEnd,
|
|
6099
6219
|
style: dragY > 0 ? {
|
|
6100
6220
|
transform: `translateY(${dragY}px)`,
|
|
6101
6221
|
transition: isDragging.current ? "none" : "transform 200ms ease-out"
|
|
@@ -6185,6 +6305,7 @@ var init_Drawer = __esm({
|
|
|
6185
6305
|
init_Button();
|
|
6186
6306
|
init_Typography();
|
|
6187
6307
|
init_Overlay();
|
|
6308
|
+
init_Presence();
|
|
6188
6309
|
init_cn();
|
|
6189
6310
|
init_useEventBus();
|
|
6190
6311
|
sizeWidths = {
|
|
@@ -6238,6 +6359,7 @@ var init_Drawer = __esm({
|
|
|
6238
6359
|
document.addEventListener("keydown", handleEscape);
|
|
6239
6360
|
return () => document.removeEventListener("keydown", handleEscape);
|
|
6240
6361
|
}, [isOpen, closeOnEscape, onClose, closeEvent, eventBus]);
|
|
6362
|
+
const { mounted, className: drawerAnim, onAnimationEnd } = usePresence(isOpen, { animation: "drawer" });
|
|
6241
6363
|
useEffect(() => {
|
|
6242
6364
|
if (isOpen) {
|
|
6243
6365
|
document.body.style.overflow = "hidden";
|
|
@@ -6248,7 +6370,7 @@ var init_Drawer = __esm({
|
|
|
6248
6370
|
document.body.style.overflow = "";
|
|
6249
6371
|
};
|
|
6250
6372
|
}, [isOpen]);
|
|
6251
|
-
if (!
|
|
6373
|
+
if (!mounted) return null;
|
|
6252
6374
|
const handleClose = () => {
|
|
6253
6375
|
if (closeEvent) eventBus.emit(`UI:${closeEvent}`, {});
|
|
6254
6376
|
onClose();
|
|
@@ -6261,7 +6383,7 @@ var init_Drawer = __esm({
|
|
|
6261
6383
|
const widthClass = width in sizeWidths ? sizeWidths[width] : "";
|
|
6262
6384
|
const widthStyle = width in sizeWidths ? void 0 : { width };
|
|
6263
6385
|
const positionClasses = position === "right" ? "right-0 border-l" : "left-0 border-r";
|
|
6264
|
-
const
|
|
6386
|
+
const drawerSign = position === "right" ? 1 : -1;
|
|
6265
6387
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
6266
6388
|
/* @__PURE__ */ jsx(
|
|
6267
6389
|
Overlay,
|
|
@@ -6283,12 +6405,13 @@ var init_Drawer = __esm({
|
|
|
6283
6405
|
"flex flex-col max-h-screen",
|
|
6284
6406
|
positionClasses,
|
|
6285
6407
|
widthClass,
|
|
6286
|
-
|
|
6408
|
+
drawerAnim,
|
|
6287
6409
|
className
|
|
6288
6410
|
),
|
|
6289
|
-
style: widthStyle,
|
|
6411
|
+
style: { ...widthStyle, "--motion-drawer-sign": drawerSign },
|
|
6290
6412
|
role: "dialog",
|
|
6291
6413
|
"aria-modal": "true",
|
|
6414
|
+
onAnimationEnd,
|
|
6292
6415
|
...title && { "aria-labelledby": "drawer-title" },
|
|
6293
6416
|
children: [
|
|
6294
6417
|
(title || showCloseButton) && /* @__PURE__ */ jsxs(
|
|
@@ -6327,31 +6450,7 @@ var init_Drawer = __esm({
|
|
|
6327
6450
|
)
|
|
6328
6451
|
]
|
|
6329
6452
|
}
|
|
6330
|
-
)
|
|
6331
|
-
/* @__PURE__ */ jsx("style", { children: `
|
|
6332
|
-
@keyframes slide-in-right {
|
|
6333
|
-
from {
|
|
6334
|
-
transform: translateX(100%);
|
|
6335
|
-
}
|
|
6336
|
-
to {
|
|
6337
|
-
transform: translateX(0);
|
|
6338
|
-
}
|
|
6339
|
-
}
|
|
6340
|
-
@keyframes slide-in-left {
|
|
6341
|
-
from {
|
|
6342
|
-
transform: translateX(-100%);
|
|
6343
|
-
}
|
|
6344
|
-
to {
|
|
6345
|
-
transform: translateX(0);
|
|
6346
|
-
}
|
|
6347
|
-
}
|
|
6348
|
-
.animate-slide-in-right {
|
|
6349
|
-
animation: slide-in-right 0.3s ease-out;
|
|
6350
|
-
}
|
|
6351
|
-
.animate-slide-in-left {
|
|
6352
|
-
animation: slide-in-left 0.3s ease-out;
|
|
6353
|
-
}
|
|
6354
|
-
` })
|
|
6453
|
+
)
|
|
6355
6454
|
] });
|
|
6356
6455
|
};
|
|
6357
6456
|
Drawer.displayName = "Drawer";
|
|
@@ -6402,14 +6501,23 @@ var init_Toast = __esm({
|
|
|
6402
6501
|
}) => {
|
|
6403
6502
|
const eventBus = useEventBus();
|
|
6404
6503
|
const { t } = useTranslate();
|
|
6405
|
-
const
|
|
6504
|
+
const [leaving, setLeaving] = useState(false);
|
|
6505
|
+
const doRealDismiss = () => {
|
|
6406
6506
|
if (dismissEvent) eventBus.emit(`UI:${dismissEvent}`, {});
|
|
6407
6507
|
onDismiss?.();
|
|
6408
6508
|
};
|
|
6509
|
+
const handleDismiss = () => {
|
|
6510
|
+
if (leaving) return;
|
|
6511
|
+
setLeaving(true);
|
|
6512
|
+
};
|
|
6409
6513
|
const handleAction = () => {
|
|
6410
6514
|
if (actionEvent) eventBus.emit(`UI:${actionEvent}`, {});
|
|
6411
6515
|
onAction?.();
|
|
6412
6516
|
};
|
|
6517
|
+
const handleAnimEnd = (e) => {
|
|
6518
|
+
if (e.target !== e.currentTarget) return;
|
|
6519
|
+
if (leaving) doRealDismiss();
|
|
6520
|
+
};
|
|
6413
6521
|
useEffect(() => {
|
|
6414
6522
|
if (duration <= 0 || !onDismiss && !dismissEvent) {
|
|
6415
6523
|
return;
|
|
@@ -6428,10 +6536,12 @@ var init_Toast = __esm({
|
|
|
6428
6536
|
// edge. `max-w-[calc(100vw-2rem)]` clamps to viewport too.
|
|
6429
6537
|
"border-l-4 p-4 shadow-elevation-toast min-w-0 sm:min-w-[300px] max-w-md max-w-[calc(100vw-2rem)]",
|
|
6430
6538
|
"rounded-sm",
|
|
6539
|
+
leaving ? "animate-toast-out" : "animate-toast-in",
|
|
6431
6540
|
variantClasses[variant],
|
|
6432
6541
|
className
|
|
6433
6542
|
),
|
|
6434
6543
|
role: "alert",
|
|
6544
|
+
onAnimationEnd: handleAnimEnd,
|
|
6435
6545
|
children: /* @__PURE__ */ jsxs(Box, { className: "flex items-start gap-3", children: [
|
|
6436
6546
|
/* @__PURE__ */ jsx(Box, { className: "flex-shrink-0 mt-0.5", children: /* @__PURE__ */ jsx(
|
|
6437
6547
|
Icon,
|
|
@@ -6547,7 +6657,7 @@ var init_ErrorBoundary = __esm({
|
|
|
6547
6657
|
}
|
|
6548
6658
|
);
|
|
6549
6659
|
};
|
|
6550
|
-
ErrorBoundary = class extends
|
|
6660
|
+
ErrorBoundary = class extends React74__default.Component {
|
|
6551
6661
|
constructor(props) {
|
|
6552
6662
|
super(props);
|
|
6553
6663
|
__publicField(this, "reset", () => {
|
|
@@ -6828,7 +6938,7 @@ var init_Container = __esm({
|
|
|
6828
6938
|
as: Component = "div"
|
|
6829
6939
|
}) => {
|
|
6830
6940
|
const resolvedSize = maxWidth ?? size ?? "lg";
|
|
6831
|
-
return
|
|
6941
|
+
return React74__default.createElement(
|
|
6832
6942
|
Component,
|
|
6833
6943
|
{
|
|
6834
6944
|
className: cn(
|
|
@@ -9732,7 +9842,8 @@ var init_LoadingState = __esm({
|
|
|
9732
9842
|
LoadingState = ({
|
|
9733
9843
|
title,
|
|
9734
9844
|
message,
|
|
9735
|
-
className
|
|
9845
|
+
className,
|
|
9846
|
+
fullPage = false
|
|
9736
9847
|
}) => {
|
|
9737
9848
|
const { t } = useTranslate();
|
|
9738
9849
|
const displayMessage = message ?? t("common.loading");
|
|
@@ -9741,7 +9852,8 @@ var init_LoadingState = __esm({
|
|
|
9741
9852
|
{
|
|
9742
9853
|
align: "center",
|
|
9743
9854
|
className: cn(
|
|
9744
|
-
"justify-center
|
|
9855
|
+
"justify-center",
|
|
9856
|
+
fullPage ? "fixed inset-0 z-[1000] py-12 bg-background/80 backdrop-blur-sm animate-overlay-in" : "py-12",
|
|
9745
9857
|
className
|
|
9746
9858
|
),
|
|
9747
9859
|
children: [
|
|
@@ -10049,7 +10161,7 @@ var init_CodeBlock = __esm({
|
|
|
10049
10161
|
DIFF_STYLE_FALLBACK = { bg: "", prefix: " ", text: "text-foreground" };
|
|
10050
10162
|
LINE_PROPS_FN = (n) => ({ "data-line": String(n - 1) });
|
|
10051
10163
|
HIDDEN_LINE_NUMBERS = { display: "none" };
|
|
10052
|
-
CodeBlock =
|
|
10164
|
+
CodeBlock = React74__default.memo(
|
|
10053
10165
|
({
|
|
10054
10166
|
code: rawCode,
|
|
10055
10167
|
language = "text",
|
|
@@ -10636,7 +10748,7 @@ var init_MarkdownContent = __esm({
|
|
|
10636
10748
|
init_Box();
|
|
10637
10749
|
init_CodeBlock();
|
|
10638
10750
|
init_cn();
|
|
10639
|
-
MarkdownContent =
|
|
10751
|
+
MarkdownContent = React74__default.memo(
|
|
10640
10752
|
({ content, direction = "ltr", className }) => {
|
|
10641
10753
|
const { t: _t } = useTranslate();
|
|
10642
10754
|
const safeContent = typeof content === "string" ? content : String(content ?? "");
|
|
@@ -11599,7 +11711,7 @@ var init_StateMachineView = __esm({
|
|
|
11599
11711
|
Box,
|
|
11600
11712
|
{
|
|
11601
11713
|
className: cn(
|
|
11602
|
-
"fixed z-50 animate-in fade-in-0 zoom-in-95 duration-
|
|
11714
|
+
"fixed z-50 animate-in fade-in-0 zoom-in-95 duration-fast",
|
|
11603
11715
|
tooltip.pinned ? "pointer-events-auto" : "pointer-events-none"
|
|
11604
11716
|
),
|
|
11605
11717
|
style: {
|
|
@@ -11963,7 +12075,7 @@ var init_StateMachineView = __esm({
|
|
|
11963
12075
|
style: { top: title ? 30 : 0 },
|
|
11964
12076
|
children: [
|
|
11965
12077
|
entity && /* @__PURE__ */ jsx(EntityBox, { entity, config }),
|
|
11966
|
-
states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(
|
|
12078
|
+
states.map((state) => renderStateNode ? /* @__PURE__ */ jsx(React74__default.Fragment, { children: renderStateNode(state, config) }, state.id) : /* @__PURE__ */ jsx(
|
|
11967
12079
|
StateNode,
|
|
11968
12080
|
{
|
|
11969
12081
|
state,
|
|
@@ -12943,7 +13055,7 @@ var init_BookCoverPage = __esm({
|
|
|
12943
13055
|
size: "lg",
|
|
12944
13056
|
action: "BOOK_START",
|
|
12945
13057
|
className: "mt-8",
|
|
12946
|
-
children: /* @__PURE__ */ jsx(Typography, { variant: "body", children: t("book.startReading") })
|
|
13058
|
+
children: /* @__PURE__ */ jsx(Typography, { variant: "body", color: "inherit", children: t("book.startReading") })
|
|
12947
13059
|
}
|
|
12948
13060
|
)
|
|
12949
13061
|
]
|
|
@@ -14002,6 +14114,129 @@ var init_Breadcrumb = __esm({
|
|
|
14002
14114
|
Breadcrumb.displayName = "Breadcrumb";
|
|
14003
14115
|
}
|
|
14004
14116
|
});
|
|
14117
|
+
function useSafeEventBus2() {
|
|
14118
|
+
try {
|
|
14119
|
+
return useEventBus();
|
|
14120
|
+
} catch {
|
|
14121
|
+
return { emit: () => {
|
|
14122
|
+
}, on: () => () => {
|
|
14123
|
+
}, once: () => {
|
|
14124
|
+
} };
|
|
14125
|
+
}
|
|
14126
|
+
}
|
|
14127
|
+
var log5, lookStyles4, ButtonGroup;
|
|
14128
|
+
var init_ButtonGroup = __esm({
|
|
14129
|
+
"components/core/molecules/ButtonGroup.tsx"() {
|
|
14130
|
+
"use client";
|
|
14131
|
+
init_cn();
|
|
14132
|
+
init_atoms();
|
|
14133
|
+
init_useEventBus();
|
|
14134
|
+
log5 = createLogger("almadar:ui:button-group");
|
|
14135
|
+
lookStyles4 = {
|
|
14136
|
+
"right-aligned-buttons": "",
|
|
14137
|
+
"floating-bar": "fixed bottom-section left-1/2 -translate-x-1/2 shadow-elevation-toast bg-card p-card-sm rounded-container",
|
|
14138
|
+
"inline-row": "gap-2 inline-flex",
|
|
14139
|
+
"dropdown-menu": "[&>button:not(:first-child)]:hidden",
|
|
14140
|
+
"command-palette-trigger": "[&>button:not(:first-child)]:hidden"
|
|
14141
|
+
};
|
|
14142
|
+
ButtonGroup = ({
|
|
14143
|
+
children,
|
|
14144
|
+
primary,
|
|
14145
|
+
secondary,
|
|
14146
|
+
variant = "default",
|
|
14147
|
+
orientation = "horizontal",
|
|
14148
|
+
className,
|
|
14149
|
+
// Filter-group pattern props (entity and filters are used for schema-driven filtering)
|
|
14150
|
+
entity: _entity,
|
|
14151
|
+
filters,
|
|
14152
|
+
look = "right-aligned-buttons"
|
|
14153
|
+
}) => {
|
|
14154
|
+
const eventBus = useSafeEventBus2();
|
|
14155
|
+
const variantClasses2 = {
|
|
14156
|
+
default: "gap-0",
|
|
14157
|
+
segmented: "gap-0 [&>button]:rounded-none [&>button:first-child]:rounded-l-lg [&>button:last-child]:rounded-r-lg [&>button:not(:first-child)]:border-l-0",
|
|
14158
|
+
toggle: "gap-0 [&>button]:rounded-none [&>button:first-child]:rounded-l-lg [&>button:last-child]:rounded-r-lg [&>button:not(:first-child)]:border-l-0"
|
|
14159
|
+
};
|
|
14160
|
+
const orientationClasses = {
|
|
14161
|
+
horizontal: "flex-row",
|
|
14162
|
+
vertical: "flex-col [&>button:first-child]:rounded-t-lg [&>button:last-child]:rounded-b-lg [&>button:not(:first-child)]:border-t-0 [&>button:not(:first-child)]:border-l"
|
|
14163
|
+
};
|
|
14164
|
+
const handleActionClick = (action) => {
|
|
14165
|
+
if (action.event) {
|
|
14166
|
+
eventBus.emit("UI:DISPATCH", { event: action.event });
|
|
14167
|
+
}
|
|
14168
|
+
if (action.navigatesTo) {
|
|
14169
|
+
eventBus.emit("UI:NAVIGATE", { url: action.navigatesTo });
|
|
14170
|
+
}
|
|
14171
|
+
};
|
|
14172
|
+
const renderFormActions = () => {
|
|
14173
|
+
const buttons = [];
|
|
14174
|
+
if (secondary) {
|
|
14175
|
+
secondary.forEach((action, index) => {
|
|
14176
|
+
buttons.push(
|
|
14177
|
+
/* @__PURE__ */ jsx(
|
|
14178
|
+
Button,
|
|
14179
|
+
{
|
|
14180
|
+
type: action.actionType === "submit" ? "submit" : "button",
|
|
14181
|
+
variant: action.variant || "ghost",
|
|
14182
|
+
onClick: () => handleActionClick(action),
|
|
14183
|
+
children: action.label
|
|
14184
|
+
},
|
|
14185
|
+
`secondary-${index}`
|
|
14186
|
+
)
|
|
14187
|
+
);
|
|
14188
|
+
});
|
|
14189
|
+
}
|
|
14190
|
+
if (primary) {
|
|
14191
|
+
const isSubmit = primary.actionType === "submit";
|
|
14192
|
+
buttons.push(
|
|
14193
|
+
/* @__PURE__ */ jsx(
|
|
14194
|
+
Button,
|
|
14195
|
+
{
|
|
14196
|
+
type: isSubmit ? "submit" : "button",
|
|
14197
|
+
variant: primary.variant || "primary",
|
|
14198
|
+
onClick: () => handleActionClick(primary),
|
|
14199
|
+
"data-testid": isSubmit ? "form-submit" : void 0,
|
|
14200
|
+
children: primary.label
|
|
14201
|
+
},
|
|
14202
|
+
"primary"
|
|
14203
|
+
)
|
|
14204
|
+
);
|
|
14205
|
+
}
|
|
14206
|
+
return buttons;
|
|
14207
|
+
};
|
|
14208
|
+
const renderFilters = () => {
|
|
14209
|
+
if (!filters || filters.length === 0) return null;
|
|
14210
|
+
return filters.map((filter, index) => /* @__PURE__ */ jsx(
|
|
14211
|
+
Button,
|
|
14212
|
+
{
|
|
14213
|
+
variant: "ghost",
|
|
14214
|
+
onClick: () => {
|
|
14215
|
+
log5.debug("Filter clicked", { field: filter.field });
|
|
14216
|
+
},
|
|
14217
|
+
children: filter.label
|
|
14218
|
+
},
|
|
14219
|
+
`filter-${filter.field}-${index}`
|
|
14220
|
+
));
|
|
14221
|
+
};
|
|
14222
|
+
return /* @__PURE__ */ jsx(
|
|
14223
|
+
"div",
|
|
14224
|
+
{
|
|
14225
|
+
className: cn(
|
|
14226
|
+
"inline-flex gap-2",
|
|
14227
|
+
variantClasses2[variant],
|
|
14228
|
+
orientationClasses[orientation],
|
|
14229
|
+
lookStyles4[look],
|
|
14230
|
+
className
|
|
14231
|
+
),
|
|
14232
|
+
role: "group",
|
|
14233
|
+
children: children || renderFilters() || renderFormActions()
|
|
14234
|
+
}
|
|
14235
|
+
);
|
|
14236
|
+
};
|
|
14237
|
+
ButtonGroup.displayName = "ButtonGroup";
|
|
14238
|
+
}
|
|
14239
|
+
});
|
|
14005
14240
|
function useSwipeGesture(callbacks, options = {}) {
|
|
14006
14241
|
const { threshold = 50, velocityThreshold = 0.3, preventDefault = false } = options;
|
|
14007
14242
|
const startX = useRef(0);
|
|
@@ -14372,8 +14607,8 @@ function MiniMap({
|
|
|
14372
14607
|
tileAssets,
|
|
14373
14608
|
unitAssets
|
|
14374
14609
|
}) {
|
|
14375
|
-
const canvasRef =
|
|
14376
|
-
const imgCacheRef =
|
|
14610
|
+
const canvasRef = React74.useRef(null);
|
|
14611
|
+
const imgCacheRef = React74.useRef(/* @__PURE__ */ new Map());
|
|
14377
14612
|
function loadImg(url) {
|
|
14378
14613
|
const cached = imgCacheRef.current.get(url);
|
|
14379
14614
|
if (cached) return cached.complete ? cached : null;
|
|
@@ -14388,7 +14623,7 @@ function MiniMap({
|
|
|
14388
14623
|
imgCacheRef.current.set(url, img);
|
|
14389
14624
|
return null;
|
|
14390
14625
|
}
|
|
14391
|
-
|
|
14626
|
+
React74.useEffect(() => {
|
|
14392
14627
|
const canvas = canvasRef.current;
|
|
14393
14628
|
if (!canvas) return;
|
|
14394
14629
|
const ctx = canvas.getContext("2d");
|
|
@@ -14563,7 +14798,7 @@ function getTraitSnapshots() {
|
|
|
14563
14798
|
try {
|
|
14564
14799
|
snapshots.push(getter());
|
|
14565
14800
|
} catch (err) {
|
|
14566
|
-
|
|
14801
|
+
log6.error("traitSnapshot getter failed", { trait: traitName, err: String(err) });
|
|
14567
14802
|
}
|
|
14568
14803
|
}
|
|
14569
14804
|
return snapshots;
|
|
@@ -14648,10 +14883,10 @@ function updateAssetStatus(url, status) {
|
|
|
14648
14883
|
window.__orbitalVerification.assetStatus[url] = status;
|
|
14649
14884
|
}
|
|
14650
14885
|
}
|
|
14651
|
-
var
|
|
14886
|
+
var log6;
|
|
14652
14887
|
var init_verificationRegistry = __esm({
|
|
14653
14888
|
"lib/verificationRegistry.ts"() {
|
|
14654
|
-
|
|
14889
|
+
log6 = createLogger("almadar:bridge");
|
|
14655
14890
|
exposeOnWindow();
|
|
14656
14891
|
}
|
|
14657
14892
|
});
|
|
@@ -15726,6 +15961,10 @@ function Canvas2D({
|
|
|
15726
15961
|
window.removeEventListener("keyup", onUp);
|
|
15727
15962
|
};
|
|
15728
15963
|
}, [keyMap, keyUpMap, eventBus]);
|
|
15964
|
+
useEffect(() => {
|
|
15965
|
+
if (!keyMap && !keyUpMap) return;
|
|
15966
|
+
canvasRef.current?.focus();
|
|
15967
|
+
}, [keyMap, keyUpMap]);
|
|
15729
15968
|
if (error) {
|
|
15730
15969
|
return /* @__PURE__ */ jsx(Box, { className: cn("flex items-center justify-center w-full h-full bg-[var(--color-card)] rounded-container", className), children: /* @__PURE__ */ jsxs(Stack, { direction: "vertical", gap: "md", align: "center", children: [
|
|
15731
15970
|
/* @__PURE__ */ jsx(Icon, { name: "alert-circle", size: "xl" }),
|
|
@@ -15774,7 +16013,7 @@ function Canvas2D({
|
|
|
15774
16013
|
onWheel: gestureHandlers.onWheel,
|
|
15775
16014
|
onContextMenu: (e) => e.preventDefault(),
|
|
15776
16015
|
className: "cursor-pointer touch-none",
|
|
15777
|
-
tabIndex: isFree ? 0 : void 0,
|
|
16016
|
+
tabIndex: isFree || keyMap || keyUpMap ? 0 : void 0,
|
|
15778
16017
|
style: {
|
|
15779
16018
|
width: viewportSize.width,
|
|
15780
16019
|
height: viewportSize.height
|
|
@@ -16396,7 +16635,7 @@ var init_CardGrid = __esm({
|
|
|
16396
16635
|
CardGrid.displayName = "CardGrid";
|
|
16397
16636
|
}
|
|
16398
16637
|
});
|
|
16399
|
-
function
|
|
16638
|
+
function useSafeEventBus3() {
|
|
16400
16639
|
try {
|
|
16401
16640
|
return useEventBus();
|
|
16402
16641
|
} catch {
|
|
@@ -16432,7 +16671,7 @@ var init_Carousel = __esm({
|
|
|
16432
16671
|
const [activeIndex, setActiveIndex] = useState(0);
|
|
16433
16672
|
const scrollRef = useRef(null);
|
|
16434
16673
|
const autoPlayRef = useRef(null);
|
|
16435
|
-
const eventBus =
|
|
16674
|
+
const eventBus = useSafeEventBus3();
|
|
16436
16675
|
const { t } = useTranslate();
|
|
16437
16676
|
const safeItems = items ?? [];
|
|
16438
16677
|
const totalSlides = safeItems.length;
|
|
@@ -16794,7 +17033,7 @@ var init_Chart = __esm({
|
|
|
16794
17033
|
return /* @__PURE__ */ jsx(
|
|
16795
17034
|
Box,
|
|
16796
17035
|
{
|
|
16797
|
-
className: "h-full rounded-r-sm transition-all duration-
|
|
17036
|
+
className: "h-full rounded-r-sm transition-all duration-slow ease-standard min-w-[2px] cursor-pointer hover:opacity-80",
|
|
16798
17037
|
style: {
|
|
16799
17038
|
width: `${ratio}%`,
|
|
16800
17039
|
backgroundColor: color
|
|
@@ -16840,8 +17079,9 @@ var init_Chart = __esm({
|
|
|
16840
17079
|
align: "center",
|
|
16841
17080
|
flex: true,
|
|
16842
17081
|
className: "min-w-0",
|
|
17082
|
+
style: { height: "100%" },
|
|
16843
17083
|
children: [
|
|
16844
|
-
/* @__PURE__ */ jsx(HStack, { gap: histogram ? "none" : "xs", align: "end",
|
|
17084
|
+
/* @__PURE__ */ jsx(HStack, { gap: histogram ? "none" : "xs", align: "end", justify: histogram ? void 0 : "center", className: "w-full flex-1 min-h-0", children: series.map((s, sIdx) => {
|
|
16845
17085
|
const value = valueAt(s, label);
|
|
16846
17086
|
const barHeight = value / maxValue * 100;
|
|
16847
17087
|
const color = seriesColor(s, sIdx);
|
|
@@ -16849,11 +17089,13 @@ var init_Chart = __esm({
|
|
|
16849
17089
|
Box,
|
|
16850
17090
|
{
|
|
16851
17091
|
className: cn(
|
|
16852
|
-
"rounded-t-sm transition-all duration-
|
|
17092
|
+
"rounded-t-sm transition-all duration-slow ease-standard min-h-[4px] cursor-pointer hover:opacity-80",
|
|
16853
17093
|
histogram ? "flex-1 mx-0" : "flex-1"
|
|
16854
17094
|
),
|
|
16855
17095
|
style: {
|
|
16856
17096
|
height: `${barHeight}%`,
|
|
17097
|
+
// Cap width so a lone category doesn't paint the whole plot as one solid block; narrow columns are unaffected (flex-1 binds first).
|
|
17098
|
+
...!histogram && { maxWidth: 72 },
|
|
16857
17099
|
backgroundColor: color
|
|
16858
17100
|
},
|
|
16859
17101
|
onClick: () => onPointClick?.(
|
|
@@ -16888,15 +17130,16 @@ var init_Chart = __esm({
|
|
|
16888
17130
|
align: "center",
|
|
16889
17131
|
flex: true,
|
|
16890
17132
|
className: "min-w-0",
|
|
17133
|
+
style: { height: "100%" },
|
|
16891
17134
|
children: [
|
|
16892
|
-
/* @__PURE__ */ jsx(VStack, { gap: "none", className: "w-full
|
|
17135
|
+
/* @__PURE__ */ jsx(VStack, { gap: "none", className: "w-full flex-1 min-h-0", justify: "end", children: series.map((s, sIdx) => {
|
|
16893
17136
|
const value = valueAt(s, label);
|
|
16894
17137
|
const ratio = stack === "normalize" ? total === 0 ? 0 : value / total * 100 : value / maxValue * 100;
|
|
16895
17138
|
const color = seriesColor(s, sIdx);
|
|
16896
17139
|
return /* @__PURE__ */ jsx(
|
|
16897
17140
|
Box,
|
|
16898
17141
|
{
|
|
16899
|
-
className: "w-full transition-all duration-
|
|
17142
|
+
className: "w-full transition-all duration-slow ease-standard cursor-pointer hover:opacity-80",
|
|
16900
17143
|
style: {
|
|
16901
17144
|
height: `${ratio}%`,
|
|
16902
17145
|
backgroundColor: color
|
|
@@ -16934,6 +17177,7 @@ var init_Chart = __esm({
|
|
|
16934
17177
|
const innerRadius = donut ? radius * 0.6 : 0;
|
|
16935
17178
|
const center = size / 2;
|
|
16936
17179
|
const segments = useMemo(() => {
|
|
17180
|
+
if (!Number.isFinite(total) || total <= 0) return [];
|
|
16937
17181
|
let currentAngle = -Math.PI / 2;
|
|
16938
17182
|
return data.map((point, idx) => {
|
|
16939
17183
|
const angle = point.value / total * 2 * Math.PI;
|
|
@@ -16945,13 +17189,25 @@ var init_Chart = __esm({
|
|
|
16945
17189
|
const y1 = center + radius * Math.sin(startAngle);
|
|
16946
17190
|
const x2 = center + radius * Math.cos(endAngle);
|
|
16947
17191
|
const y2 = center + radius * Math.sin(endAngle);
|
|
17192
|
+
const fullCircle = angle >= 2 * Math.PI - 1e-9;
|
|
17193
|
+
const midAngle = startAngle + angle / 2;
|
|
17194
|
+
const xm = center + radius * Math.cos(midAngle);
|
|
17195
|
+
const ym = center + radius * Math.sin(midAngle);
|
|
16948
17196
|
let d;
|
|
16949
17197
|
if (innerRadius > 0) {
|
|
16950
17198
|
const ix1 = center + innerRadius * Math.cos(startAngle);
|
|
16951
17199
|
const iy1 = center + innerRadius * Math.sin(startAngle);
|
|
16952
17200
|
const ix2 = center + innerRadius * Math.cos(endAngle);
|
|
16953
17201
|
const iy2 = center + innerRadius * Math.sin(endAngle);
|
|
16954
|
-
|
|
17202
|
+
if (fullCircle) {
|
|
17203
|
+
const ixm = center + innerRadius * Math.cos(midAngle);
|
|
17204
|
+
const iym = center + innerRadius * Math.sin(midAngle);
|
|
17205
|
+
d = `M ${ix1} ${iy1} L ${x1} ${y1} A ${radius} ${radius} 0 1 1 ${xm} ${ym} A ${radius} ${radius} 0 1 1 ${x2} ${y2} L ${ix2} ${iy2} A ${innerRadius} ${innerRadius} 0 1 0 ${ixm} ${iym} A ${innerRadius} ${innerRadius} 0 1 0 ${ix1} ${iy1} Z`;
|
|
17206
|
+
} else {
|
|
17207
|
+
d = `M ${ix1} ${iy1} L ${x1} ${y1} A ${radius} ${radius} 0 ${largeArc} 1 ${x2} ${y2} L ${ix2} ${iy2} A ${innerRadius} ${innerRadius} 0 ${largeArc} 0 ${ix1} ${iy1} Z`;
|
|
17208
|
+
}
|
|
17209
|
+
} else if (fullCircle) {
|
|
17210
|
+
d = `M ${center} ${center} L ${x1} ${y1} A ${radius} ${radius} 0 1 1 ${xm} ${ym} A ${radius} ${radius} 0 1 1 ${x2} ${y2} Z`;
|
|
16955
17211
|
} else {
|
|
16956
17212
|
d = `M ${center} ${center} L ${x1} ${y1} A ${radius} ${radius} 0 ${largeArc} 1 ${x2} ${y2} Z`;
|
|
16957
17213
|
}
|
|
@@ -16973,7 +17229,7 @@ var init_Chart = __esm({
|
|
|
16973
17229
|
fill: seg.color,
|
|
16974
17230
|
stroke: "var(--color-card)",
|
|
16975
17231
|
strokeWidth: "2",
|
|
16976
|
-
className: "transition-opacity duration-
|
|
17232
|
+
className: "transition-opacity duration-fast hover:opacity-80 cursor-pointer",
|
|
16977
17233
|
onClick: () => onPointClick?.(
|
|
16978
17234
|
{ label: seg.label, value: seg.value, color: seg.color },
|
|
16979
17235
|
"default"
|
|
@@ -18227,9 +18483,9 @@ function ControlButton({
|
|
|
18227
18483
|
className
|
|
18228
18484
|
}) {
|
|
18229
18485
|
const eventBus = useEventBus();
|
|
18230
|
-
const [isPressed, setIsPressed] =
|
|
18486
|
+
const [isPressed, setIsPressed] = React74.useState(false);
|
|
18231
18487
|
const actualPressed = pressed ?? isPressed;
|
|
18232
|
-
const handlePointerDown =
|
|
18488
|
+
const handlePointerDown = React74.useCallback(
|
|
18233
18489
|
(e) => {
|
|
18234
18490
|
e.preventDefault();
|
|
18235
18491
|
if (disabled) return;
|
|
@@ -18239,7 +18495,7 @@ function ControlButton({
|
|
|
18239
18495
|
},
|
|
18240
18496
|
[disabled, pressEvent, eventBus, onPress]
|
|
18241
18497
|
);
|
|
18242
|
-
const handlePointerUp =
|
|
18498
|
+
const handlePointerUp = React74.useCallback(
|
|
18243
18499
|
(e) => {
|
|
18244
18500
|
e.preventDefault();
|
|
18245
18501
|
if (disabled) return;
|
|
@@ -18249,7 +18505,7 @@ function ControlButton({
|
|
|
18249
18505
|
},
|
|
18250
18506
|
[disabled, releaseEvent, eventBus, onRelease]
|
|
18251
18507
|
);
|
|
18252
|
-
const handlePointerLeave =
|
|
18508
|
+
const handlePointerLeave = React74.useCallback(
|
|
18253
18509
|
(e) => {
|
|
18254
18510
|
if (isPressed) {
|
|
18255
18511
|
setIsPressed(false);
|
|
@@ -18337,8 +18593,8 @@ function ControlGrid({
|
|
|
18337
18593
|
className
|
|
18338
18594
|
}) {
|
|
18339
18595
|
const eventBus = useEventBus();
|
|
18340
|
-
const [active, setActive] =
|
|
18341
|
-
const handlePress =
|
|
18596
|
+
const [active, setActive] = React74.useState(/* @__PURE__ */ new Set());
|
|
18597
|
+
const handlePress = React74.useCallback(
|
|
18342
18598
|
(id) => {
|
|
18343
18599
|
setActive((prev) => new Set(prev).add(id));
|
|
18344
18600
|
if (actionEvent) eventBus.emit(`UI:${actionEvent}`, { id, pressed: true });
|
|
@@ -18352,7 +18608,7 @@ function ControlGrid({
|
|
|
18352
18608
|
},
|
|
18353
18609
|
[kind, actionEvent, directionEvent, directionEvents, eventBus, onAction, onDirection]
|
|
18354
18610
|
);
|
|
18355
|
-
const handleRelease =
|
|
18611
|
+
const handleRelease = React74.useCallback(
|
|
18356
18612
|
(id) => {
|
|
18357
18613
|
setActive((prev) => {
|
|
18358
18614
|
const next = new Set(prev);
|
|
@@ -19559,8 +19815,8 @@ var init_Menu = __esm({
|
|
|
19559
19815
|
"bottom-end": "bottom-start"
|
|
19560
19816
|
};
|
|
19561
19817
|
const effectivePosition = direction === "rtl" ? rtlMirror[position] ?? position : position;
|
|
19562
|
-
const triggerChild =
|
|
19563
|
-
const triggerElement =
|
|
19818
|
+
const triggerChild = React74__default.isValidElement(trigger) ? trigger : /* @__PURE__ */ jsx(Typography, { variant: "small", as: "span", children: trigger });
|
|
19819
|
+
const triggerElement = React74__default.cloneElement(
|
|
19564
19820
|
triggerChild,
|
|
19565
19821
|
{
|
|
19566
19822
|
ref: triggerRef,
|
|
@@ -19655,14 +19911,14 @@ function useDataDnd(args) {
|
|
|
19655
19911
|
const isZone = Boolean(dragGroup || accepts || sortable);
|
|
19656
19912
|
const enabled = isZone || Boolean(dndRoot);
|
|
19657
19913
|
const eventBus = useEventBus();
|
|
19658
|
-
const parentRoot =
|
|
19914
|
+
const parentRoot = React74__default.useContext(RootCtx);
|
|
19659
19915
|
const isRoot = enabled && parentRoot === null;
|
|
19660
|
-
const zoneId =
|
|
19916
|
+
const zoneId = React74__default.useId();
|
|
19661
19917
|
const ownGroup = dragGroup ?? accepts ?? zoneId;
|
|
19662
|
-
const [optimisticOrders, setOptimisticOrders] =
|
|
19663
|
-
const optimisticOrdersRef =
|
|
19918
|
+
const [optimisticOrders, setOptimisticOrders] = React74__default.useState(() => /* @__PURE__ */ new Map());
|
|
19919
|
+
const optimisticOrdersRef = React74__default.useRef(optimisticOrders);
|
|
19664
19920
|
optimisticOrdersRef.current = optimisticOrders;
|
|
19665
|
-
const clearOptimisticOrder =
|
|
19921
|
+
const clearOptimisticOrder = React74__default.useCallback((group) => {
|
|
19666
19922
|
setOptimisticOrders((prev) => {
|
|
19667
19923
|
if (!prev.has(group)) return prev;
|
|
19668
19924
|
const next = new Map(prev);
|
|
@@ -19687,7 +19943,7 @@ function useDataDnd(args) {
|
|
|
19687
19943
|
const raw = it[dndItemIdField];
|
|
19688
19944
|
return raw != null ? String(raw) : `__idx_${idx}`;
|
|
19689
19945
|
}).join("|");
|
|
19690
|
-
const itemIds =
|
|
19946
|
+
const itemIds = React74__default.useMemo(
|
|
19691
19947
|
() => orderedItems.map((it, idx) => {
|
|
19692
19948
|
const raw = it[dndItemIdField];
|
|
19693
19949
|
return raw != null ? String(raw) : `__idx_${idx}`;
|
|
@@ -19698,7 +19954,7 @@ function useDataDnd(args) {
|
|
|
19698
19954
|
const raw = it[dndItemIdField];
|
|
19699
19955
|
return raw != null ? String(raw) : `__${idx}`;
|
|
19700
19956
|
}).join("|");
|
|
19701
|
-
|
|
19957
|
+
React74__default.useEffect(() => {
|
|
19702
19958
|
const root = isRoot ? null : parentRoot;
|
|
19703
19959
|
if (root) {
|
|
19704
19960
|
root.clearOptimisticOrder(ownGroup);
|
|
@@ -19706,20 +19962,20 @@ function useDataDnd(args) {
|
|
|
19706
19962
|
clearOptimisticOrder(ownGroup);
|
|
19707
19963
|
}
|
|
19708
19964
|
}, [itemsContentSig, ownGroup]);
|
|
19709
|
-
const zonesRef =
|
|
19710
|
-
const registerZone =
|
|
19965
|
+
const zonesRef = React74__default.useRef(/* @__PURE__ */ new Map());
|
|
19966
|
+
const registerZone = React74__default.useCallback((zoneId2, meta2) => {
|
|
19711
19967
|
zonesRef.current.set(zoneId2, meta2);
|
|
19712
19968
|
}, []);
|
|
19713
|
-
const unregisterZone =
|
|
19969
|
+
const unregisterZone = React74__default.useCallback((zoneId2) => {
|
|
19714
19970
|
zonesRef.current.delete(zoneId2);
|
|
19715
19971
|
}, []);
|
|
19716
|
-
const [activeDrag, setActiveDrag] =
|
|
19717
|
-
const [overZoneGroup, setOverZoneGroup] =
|
|
19718
|
-
const meta =
|
|
19972
|
+
const [activeDrag, setActiveDrag] = React74__default.useState(null);
|
|
19973
|
+
const [overZoneGroup, setOverZoneGroup] = React74__default.useState(null);
|
|
19974
|
+
const meta = React74__default.useMemo(
|
|
19719
19975
|
() => ({ group: ownGroup, dropEvent, reorderEvent, positionEvent, itemIds, rawItems: items, idField: dndItemIdField }),
|
|
19720
19976
|
[ownGroup, dropEvent, reorderEvent, positionEvent, itemIds, items, dndItemIdField]
|
|
19721
19977
|
);
|
|
19722
|
-
|
|
19978
|
+
React74__default.useEffect(() => {
|
|
19723
19979
|
const target = isRoot ? null : parentRoot;
|
|
19724
19980
|
if (!target) {
|
|
19725
19981
|
zonesRef.current.set(zoneId, meta);
|
|
@@ -19738,7 +19994,7 @@ function useDataDnd(args) {
|
|
|
19738
19994
|
}, [parentRoot, isRoot, zoneId, meta]);
|
|
19739
19995
|
const sensors = useAlmadarDndSensors(true);
|
|
19740
19996
|
const collisionDetection = almadarDndCollisionDetection;
|
|
19741
|
-
const findZoneByItem =
|
|
19997
|
+
const findZoneByItem = React74__default.useCallback(
|
|
19742
19998
|
(id) => {
|
|
19743
19999
|
for (const z of zonesRef.current.values()) {
|
|
19744
20000
|
if (z.itemIds.includes(id)) return z;
|
|
@@ -19747,7 +20003,7 @@ function useDataDnd(args) {
|
|
|
19747
20003
|
},
|
|
19748
20004
|
[]
|
|
19749
20005
|
);
|
|
19750
|
-
|
|
20006
|
+
React74__default.useCallback(
|
|
19751
20007
|
(group) => {
|
|
19752
20008
|
for (const z of zonesRef.current.values()) {
|
|
19753
20009
|
if (z.group === group) return z;
|
|
@@ -19756,7 +20012,7 @@ function useDataDnd(args) {
|
|
|
19756
20012
|
},
|
|
19757
20013
|
[]
|
|
19758
20014
|
);
|
|
19759
|
-
const handleDragEnd =
|
|
20015
|
+
const handleDragEnd = React74__default.useCallback(
|
|
19760
20016
|
(event) => {
|
|
19761
20017
|
const { active, over } = event;
|
|
19762
20018
|
const activeIdStr = String(active.id);
|
|
@@ -19847,8 +20103,8 @@ function useDataDnd(args) {
|
|
|
19847
20103
|
},
|
|
19848
20104
|
[eventBus]
|
|
19849
20105
|
);
|
|
19850
|
-
const sortableData =
|
|
19851
|
-
const SortableItem =
|
|
20106
|
+
const sortableData = React74__default.useMemo(() => ({ dndGroup: ownGroup }), [ownGroup]);
|
|
20107
|
+
const SortableItem = React74__default.useCallback(
|
|
19852
20108
|
({ id, children }) => {
|
|
19853
20109
|
const {
|
|
19854
20110
|
attributes,
|
|
@@ -19888,7 +20144,7 @@ function useDataDnd(args) {
|
|
|
19888
20144
|
id: droppableId,
|
|
19889
20145
|
data: sortableData
|
|
19890
20146
|
});
|
|
19891
|
-
const ctx =
|
|
20147
|
+
const ctx = React74__default.useContext(RootCtx);
|
|
19892
20148
|
const activeDrag2 = ctx?.activeDrag ?? null;
|
|
19893
20149
|
const overZoneGroup2 = ctx?.overZoneGroup ?? null;
|
|
19894
20150
|
const isThisZoneOver = overZoneGroup2 === ownGroup;
|
|
@@ -19903,7 +20159,7 @@ function useDataDnd(args) {
|
|
|
19903
20159
|
showForeignPlaceholder,
|
|
19904
20160
|
ctxAvailable: ctx != null
|
|
19905
20161
|
});
|
|
19906
|
-
|
|
20162
|
+
React74__default.useEffect(() => {
|
|
19907
20163
|
dndLog.info("dropzone:isOver:change", { droppableId, group: ownGroup, isOver, isThisZoneOver, showForeignPlaceholder, activeDragSourceGroup: activeDrag2?.sourceGroup ?? null });
|
|
19908
20164
|
}, [droppableId, isOver, isThisZoneOver, showForeignPlaceholder]);
|
|
19909
20165
|
return /* @__PURE__ */ jsx(
|
|
@@ -19917,11 +20173,11 @@ function useDataDnd(args) {
|
|
|
19917
20173
|
}
|
|
19918
20174
|
);
|
|
19919
20175
|
};
|
|
19920
|
-
const rootContextValue =
|
|
20176
|
+
const rootContextValue = React74__default.useMemo(
|
|
19921
20177
|
() => ({ registerZone, unregisterZone, activeDrag, overZoneGroup, optimisticOrders, clearOptimisticOrder }),
|
|
19922
20178
|
[registerZone, unregisterZone, activeDrag, overZoneGroup, optimisticOrders, clearOptimisticOrder]
|
|
19923
20179
|
);
|
|
19924
|
-
const handleDragStart =
|
|
20180
|
+
const handleDragStart = React74__default.useCallback((event) => {
|
|
19925
20181
|
const sourceZone = findZoneByItem(event.active.id);
|
|
19926
20182
|
const rect = event.active.rect.current.initial;
|
|
19927
20183
|
const height = rect?.height && rect.height > 0 ? rect.height : 64;
|
|
@@ -19940,7 +20196,7 @@ function useDataDnd(args) {
|
|
|
19940
20196
|
isRoot
|
|
19941
20197
|
});
|
|
19942
20198
|
}, [findZoneByItem, isRoot, zoneId]);
|
|
19943
|
-
const handleDragOver =
|
|
20199
|
+
const handleDragOver = React74__default.useCallback((event) => {
|
|
19944
20200
|
const { active, over } = event;
|
|
19945
20201
|
const overData = over?.data?.current;
|
|
19946
20202
|
const overGroup = overData?.dndGroup ?? null;
|
|
@@ -20010,7 +20266,7 @@ function useDataDnd(args) {
|
|
|
20010
20266
|
return next;
|
|
20011
20267
|
});
|
|
20012
20268
|
}, []);
|
|
20013
|
-
const handleDragCancel =
|
|
20269
|
+
const handleDragCancel = React74__default.useCallback((event) => {
|
|
20014
20270
|
setActiveDrag(null);
|
|
20015
20271
|
setOverZoneGroup(null);
|
|
20016
20272
|
dndLog.warn("dragCancel", {
|
|
@@ -20018,12 +20274,12 @@ function useDataDnd(args) {
|
|
|
20018
20274
|
reason: "dnd-kit cancelled the drag (escape key, pointer interrupted, or external)"
|
|
20019
20275
|
});
|
|
20020
20276
|
}, []);
|
|
20021
|
-
const handleDragEndWithCleanup =
|
|
20277
|
+
const handleDragEndWithCleanup = React74__default.useCallback((event) => {
|
|
20022
20278
|
handleDragEnd(event);
|
|
20023
20279
|
setActiveDrag(null);
|
|
20024
20280
|
setOverZoneGroup(null);
|
|
20025
20281
|
}, [handleDragEnd]);
|
|
20026
|
-
const wrapContainer =
|
|
20282
|
+
const wrapContainer = React74__default.useCallback(
|
|
20027
20283
|
(children) => {
|
|
20028
20284
|
if (!enabled) return children;
|
|
20029
20285
|
const strategy = layout === "grid" ? rectSortingStrategy : verticalListSortingStrategy;
|
|
@@ -20077,7 +20333,7 @@ var init_useDataDnd = __esm({
|
|
|
20077
20333
|
init_useAlmadarDndCollision();
|
|
20078
20334
|
init_Box();
|
|
20079
20335
|
dndLog = createLogger("almadar:ui:dnd");
|
|
20080
|
-
RootCtx =
|
|
20336
|
+
RootCtx = React74__default.createContext(null);
|
|
20081
20337
|
}
|
|
20082
20338
|
});
|
|
20083
20339
|
function renderIconInput(icon, props) {
|
|
@@ -20274,7 +20530,7 @@ function DataGrid({
|
|
|
20274
20530
|
/* @__PURE__ */ jsx(
|
|
20275
20531
|
Box,
|
|
20276
20532
|
{
|
|
20277
|
-
className: cn("grid", gapStyles5[gap], scrollX ? "grid-flow-col overflow-x-auto" : colsClass,
|
|
20533
|
+
className: cn("grid", gapStyles5[gap], scrollX ? "grid-flow-col overflow-x-auto" : colsClass, lookStyles5[look], className),
|
|
20278
20534
|
style: scrollX ? { gridAutoFlow: "column", gridAutoColumns: `minmax(${minCardWidth}px, 1fr)` } : gridTemplateColumns ? { gridTemplateColumns } : void 0,
|
|
20279
20535
|
children: data.map((item, index) => {
|
|
20280
20536
|
const itemData = item;
|
|
@@ -20351,10 +20607,10 @@ function DataGrid({
|
|
|
20351
20607
|
] }),
|
|
20352
20608
|
badgeFields.length > 0 && /* @__PURE__ */ jsx(HStack, { gap: "xs", className: "flex-wrap", children: badgeFields.map((field) => {
|
|
20353
20609
|
const val = getNestedValue(itemData, field.name);
|
|
20354
|
-
if (val === void 0 || val === null) return null;
|
|
20610
|
+
if (val === void 0 || val === null || val === "") return null;
|
|
20355
20611
|
return /* @__PURE__ */ jsxs(HStack, { gap: "xs", className: "items-center", children: [
|
|
20356
20612
|
field.icon && renderIconInput(field.icon, { size: "xs" }),
|
|
20357
|
-
/* @__PURE__ */ jsx(Badge, { variant: resolveBadgeVariant(field, String(val)), children:
|
|
20613
|
+
/* @__PURE__ */ jsx(Badge, { variant: resolveBadgeVariant(field, String(val)), children: formatValue(val, field.format) })
|
|
20358
20614
|
] }, field.name);
|
|
20359
20615
|
}) })
|
|
20360
20616
|
] }),
|
|
@@ -20469,7 +20725,7 @@ function DataGrid({
|
|
|
20469
20725
|
] })
|
|
20470
20726
|
);
|
|
20471
20727
|
}
|
|
20472
|
-
var dataGridLog, BADGE_VARIANTS, gapStyles5,
|
|
20728
|
+
var dataGridLog, BADGE_VARIANTS, gapStyles5, lookStyles5;
|
|
20473
20729
|
var init_DataGrid = __esm({
|
|
20474
20730
|
"components/core/molecules/DataGrid.tsx"() {
|
|
20475
20731
|
"use client";
|
|
@@ -20504,7 +20760,7 @@ var init_DataGrid = __esm({
|
|
|
20504
20760
|
lg: "gap-6",
|
|
20505
20761
|
xl: "gap-8"
|
|
20506
20762
|
};
|
|
20507
|
-
|
|
20763
|
+
lookStyles5 = {
|
|
20508
20764
|
dense: "gap-2 [&>*]:p-card-sm",
|
|
20509
20765
|
spacious: "gap-8 [&>*]:p-card-lg",
|
|
20510
20766
|
striped: "[&>*:nth-child(even)]:bg-muted/30",
|
|
@@ -20604,7 +20860,7 @@ function DataList({
|
|
|
20604
20860
|
}) {
|
|
20605
20861
|
const eventBus = useEventBus();
|
|
20606
20862
|
const { t } = useTranslate();
|
|
20607
|
-
const [visibleCount, setVisibleCount] =
|
|
20863
|
+
const [visibleCount, setVisibleCount] = React74__default.useState(pageSize || Infinity);
|
|
20608
20864
|
const fieldDefs = fields ?? columns ?? [];
|
|
20609
20865
|
const allDataRaw = Array.isArray(entity) ? entity : entity ? [entity] : [];
|
|
20610
20866
|
const dnd = useDataDnd({
|
|
@@ -20623,7 +20879,7 @@ function DataList({
|
|
|
20623
20879
|
const data = pageSize > 0 ? allData.slice(0, visibleCount) : allData;
|
|
20624
20880
|
const hasMoreLocal = pageSize > 0 && visibleCount < allData.length;
|
|
20625
20881
|
const hasRenderProp = typeof children === "function";
|
|
20626
|
-
|
|
20882
|
+
React74__default.useEffect(() => {
|
|
20627
20883
|
const renderItemTypeOf = typeof schemaRenderItem;
|
|
20628
20884
|
const childrenTypeOf = typeof children;
|
|
20629
20885
|
if (data.length > 0 && !hasRenderProp) {
|
|
@@ -20727,7 +20983,7 @@ function DataList({
|
|
|
20727
20983
|
const items2 = [...data];
|
|
20728
20984
|
const groups2 = groupBy ? groupData(items2, groupBy) : [{ label: "", items: items2 }];
|
|
20729
20985
|
const contentField = titleField?.name ?? fieldDefs[0]?.name ?? "";
|
|
20730
|
-
return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(
|
|
20986
|
+
return /* @__PURE__ */ jsx(VStack, { gap: "sm", className: cn("py-2", className), children: groups2.map((group, gi) => /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
|
|
20731
20987
|
group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: "my-2" }),
|
|
20732
20988
|
group.items.map((itemData, index) => {
|
|
20733
20989
|
const id = itemData.id || `${gi}-${index}`;
|
|
@@ -20868,7 +21124,7 @@ function DataList({
|
|
|
20868
21124
|
className
|
|
20869
21125
|
),
|
|
20870
21126
|
children: [
|
|
20871
|
-
groups.map((group, gi) => /* @__PURE__ */ jsxs(
|
|
21127
|
+
groups.map((group, gi) => /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
|
|
20872
21128
|
group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: gi > 0 ? "mt-4" : "mt-0" }),
|
|
20873
21129
|
group.items.map(
|
|
20874
21130
|
(itemData, index) => renderItem(itemData, index, gi === groups.length - 1 && index === group.items.length - 1)
|
|
@@ -20975,8 +21231,8 @@ function ScalarControl({
|
|
|
20975
21231
|
}
|
|
20976
21232
|
const numeric = typeof value === "number";
|
|
20977
21233
|
const initial = value === null ? "" : String(value);
|
|
20978
|
-
const [draft, setDraft] =
|
|
20979
|
-
|
|
21234
|
+
const [draft, setDraft] = React74__default.useState(initial);
|
|
21235
|
+
React74__default.useEffect(() => setDraft(initial), [initial]);
|
|
20980
21236
|
const commit = () => {
|
|
20981
21237
|
if (numeric) {
|
|
20982
21238
|
const n = draft.trim() === "" ? 0 : Number(draft);
|
|
@@ -21044,8 +21300,8 @@ function Row({
|
|
|
21044
21300
|
onRemove,
|
|
21045
21301
|
readonly
|
|
21046
21302
|
}) {
|
|
21047
|
-
const [keyDraft, setKeyDraft] =
|
|
21048
|
-
|
|
21303
|
+
const [keyDraft, setKeyDraft] = React74__default.useState(rowKey);
|
|
21304
|
+
React74__default.useEffect(() => setKeyDraft(rowKey), [rowKey]);
|
|
21049
21305
|
const container = isObj(value) || isArr(value);
|
|
21050
21306
|
return /* @__PURE__ */ jsxs(VStack, { gap: "none", className: "group w-max min-w-full", children: [
|
|
21051
21307
|
/* @__PURE__ */ jsxs(HStack, { gap: "xs", align: "center", className: "py-0.5 w-max", children: [
|
|
@@ -21088,7 +21344,7 @@ function ContainerNode({
|
|
|
21088
21344
|
depth,
|
|
21089
21345
|
readonly
|
|
21090
21346
|
}) {
|
|
21091
|
-
const [open, setOpen] =
|
|
21347
|
+
const [open, setOpen] = React74__default.useState(depth < 2);
|
|
21092
21348
|
const array = isArr(value);
|
|
21093
21349
|
const entries = array ? value.map((v, i) => [String(i), v]) : Object.entries(value);
|
|
21094
21350
|
const setObjValue = (key, next) => {
|
|
@@ -21230,7 +21486,7 @@ var init_FormSection = __esm({
|
|
|
21230
21486
|
columns = 1,
|
|
21231
21487
|
className
|
|
21232
21488
|
}) => {
|
|
21233
|
-
const [collapsed, setCollapsed] =
|
|
21489
|
+
const [collapsed, setCollapsed] = React74__default.useState(defaultCollapsed);
|
|
21234
21490
|
const { t } = useTranslate();
|
|
21235
21491
|
const eventBus = useEventBus();
|
|
21236
21492
|
const gridClass = {
|
|
@@ -21238,7 +21494,7 @@ var init_FormSection = __esm({
|
|
|
21238
21494
|
2: "grid-cols-1 md:grid-cols-2",
|
|
21239
21495
|
3: "grid-cols-1 md:grid-cols-2 lg:grid-cols-3"
|
|
21240
21496
|
}[columns];
|
|
21241
|
-
|
|
21497
|
+
React74__default.useCallback(() => {
|
|
21242
21498
|
if (collapsible) {
|
|
21243
21499
|
setCollapsed((prev) => !prev);
|
|
21244
21500
|
eventBus.emit("UI:TOGGLE_COLLAPSE", { collapsed: !collapsed });
|
|
@@ -21646,8 +21902,8 @@ function TextLikeControl({
|
|
|
21646
21902
|
onCommit
|
|
21647
21903
|
}) {
|
|
21648
21904
|
const initial = value === void 0 || value === null ? "" : String(value);
|
|
21649
|
-
const [draft, setDraft] =
|
|
21650
|
-
|
|
21905
|
+
const [draft, setDraft] = React74__default.useState(initial);
|
|
21906
|
+
React74__default.useEffect(() => setDraft(initial), [initial]);
|
|
21651
21907
|
const commit = () => {
|
|
21652
21908
|
if (numeric) {
|
|
21653
21909
|
const n = draft.trim() === "" ? 0 : Number(draft);
|
|
@@ -21832,14 +22088,14 @@ var init_NodeSlotEditor = __esm({
|
|
|
21832
22088
|
isObj2 = (v) => v !== null && v !== void 0 && typeof v === "object" && !Array.isArray(v);
|
|
21833
22089
|
NodeSlotEditor = ({ value, onChange, className }) => {
|
|
21834
22090
|
const { type, props, wasArray } = normalize(value);
|
|
21835
|
-
const patterns =
|
|
22091
|
+
const patterns = React74__default.useMemo(() => {
|
|
21836
22092
|
try {
|
|
21837
22093
|
return [...getKnownPatterns()].sort();
|
|
21838
22094
|
} catch {
|
|
21839
22095
|
return [];
|
|
21840
22096
|
}
|
|
21841
22097
|
}, []);
|
|
21842
|
-
const options =
|
|
22098
|
+
const options = React74__default.useMemo(
|
|
21843
22099
|
() => [{ value: "", label: "\u2014 none \u2014" }, ...patterns.map((p) => ({ value: p, label: p }))],
|
|
21844
22100
|
[patterns]
|
|
21845
22101
|
);
|
|
@@ -21851,7 +22107,7 @@ var init_NodeSlotEditor = __esm({
|
|
|
21851
22107
|
const pattern = { type: nextType, ...nextProps };
|
|
21852
22108
|
onChange(wasArray || value === void 0 ? [pattern] : pattern);
|
|
21853
22109
|
};
|
|
21854
|
-
const schemaEntries =
|
|
22110
|
+
const schemaEntries = React74__default.useMemo(() => {
|
|
21855
22111
|
if (!type) return [];
|
|
21856
22112
|
const def = getPatternDefinition(type);
|
|
21857
22113
|
if (!def?.propsSchema) return [];
|
|
@@ -22053,129 +22309,6 @@ var init_FormField = __esm({
|
|
|
22053
22309
|
FormField.displayName = "FormField";
|
|
22054
22310
|
}
|
|
22055
22311
|
});
|
|
22056
|
-
function useSafeEventBus3() {
|
|
22057
|
-
try {
|
|
22058
|
-
return useEventBus();
|
|
22059
|
-
} catch {
|
|
22060
|
-
return { emit: () => {
|
|
22061
|
-
}, on: () => () => {
|
|
22062
|
-
}, once: () => {
|
|
22063
|
-
} };
|
|
22064
|
-
}
|
|
22065
|
-
}
|
|
22066
|
-
var log6, lookStyles5, ButtonGroup;
|
|
22067
|
-
var init_ButtonGroup = __esm({
|
|
22068
|
-
"components/core/molecules/ButtonGroup.tsx"() {
|
|
22069
|
-
"use client";
|
|
22070
|
-
init_cn();
|
|
22071
|
-
init_atoms();
|
|
22072
|
-
init_useEventBus();
|
|
22073
|
-
log6 = createLogger("almadar:ui:button-group");
|
|
22074
|
-
lookStyles5 = {
|
|
22075
|
-
"right-aligned-buttons": "",
|
|
22076
|
-
"floating-bar": "fixed bottom-section left-1/2 -translate-x-1/2 shadow-elevation-toast bg-card p-card-sm rounded-container",
|
|
22077
|
-
"inline-row": "gap-2 inline-flex",
|
|
22078
|
-
"dropdown-menu": "[&>button:not(:first-child)]:hidden",
|
|
22079
|
-
"command-palette-trigger": "[&>button:not(:first-child)]:hidden"
|
|
22080
|
-
};
|
|
22081
|
-
ButtonGroup = ({
|
|
22082
|
-
children,
|
|
22083
|
-
primary,
|
|
22084
|
-
secondary,
|
|
22085
|
-
variant = "default",
|
|
22086
|
-
orientation = "horizontal",
|
|
22087
|
-
className,
|
|
22088
|
-
// Filter-group pattern props (entity and filters are used for schema-driven filtering)
|
|
22089
|
-
entity: _entity,
|
|
22090
|
-
filters,
|
|
22091
|
-
look = "right-aligned-buttons"
|
|
22092
|
-
}) => {
|
|
22093
|
-
const eventBus = useSafeEventBus3();
|
|
22094
|
-
const variantClasses2 = {
|
|
22095
|
-
default: "gap-0",
|
|
22096
|
-
segmented: "gap-0 [&>button]:rounded-none [&>button:first-child]:rounded-l-lg [&>button:last-child]:rounded-r-lg [&>button:not(:first-child)]:border-l-0",
|
|
22097
|
-
toggle: "gap-0 [&>button]:rounded-none [&>button:first-child]:rounded-l-lg [&>button:last-child]:rounded-r-lg [&>button:not(:first-child)]:border-l-0"
|
|
22098
|
-
};
|
|
22099
|
-
const orientationClasses = {
|
|
22100
|
-
horizontal: "flex-row",
|
|
22101
|
-
vertical: "flex-col [&>button:first-child]:rounded-t-lg [&>button:last-child]:rounded-b-lg [&>button:not(:first-child)]:border-t-0 [&>button:not(:first-child)]:border-l"
|
|
22102
|
-
};
|
|
22103
|
-
const handleActionClick = (action) => {
|
|
22104
|
-
if (action.event) {
|
|
22105
|
-
eventBus.emit("UI:DISPATCH", { event: action.event });
|
|
22106
|
-
}
|
|
22107
|
-
if (action.navigatesTo) {
|
|
22108
|
-
eventBus.emit("UI:NAVIGATE", { url: action.navigatesTo });
|
|
22109
|
-
}
|
|
22110
|
-
};
|
|
22111
|
-
const renderFormActions = () => {
|
|
22112
|
-
const buttons = [];
|
|
22113
|
-
if (secondary) {
|
|
22114
|
-
secondary.forEach((action, index) => {
|
|
22115
|
-
buttons.push(
|
|
22116
|
-
/* @__PURE__ */ jsx(
|
|
22117
|
-
Button,
|
|
22118
|
-
{
|
|
22119
|
-
type: action.actionType === "submit" ? "submit" : "button",
|
|
22120
|
-
variant: action.variant || "ghost",
|
|
22121
|
-
onClick: () => handleActionClick(action),
|
|
22122
|
-
children: action.label
|
|
22123
|
-
},
|
|
22124
|
-
`secondary-${index}`
|
|
22125
|
-
)
|
|
22126
|
-
);
|
|
22127
|
-
});
|
|
22128
|
-
}
|
|
22129
|
-
if (primary) {
|
|
22130
|
-
const isSubmit = primary.actionType === "submit";
|
|
22131
|
-
buttons.push(
|
|
22132
|
-
/* @__PURE__ */ jsx(
|
|
22133
|
-
Button,
|
|
22134
|
-
{
|
|
22135
|
-
type: isSubmit ? "submit" : "button",
|
|
22136
|
-
variant: primary.variant || "primary",
|
|
22137
|
-
onClick: () => handleActionClick(primary),
|
|
22138
|
-
"data-testid": isSubmit ? "form-submit" : void 0,
|
|
22139
|
-
children: primary.label
|
|
22140
|
-
},
|
|
22141
|
-
"primary"
|
|
22142
|
-
)
|
|
22143
|
-
);
|
|
22144
|
-
}
|
|
22145
|
-
return buttons;
|
|
22146
|
-
};
|
|
22147
|
-
const renderFilters = () => {
|
|
22148
|
-
if (!filters || filters.length === 0) return null;
|
|
22149
|
-
return filters.map((filter, index) => /* @__PURE__ */ jsx(
|
|
22150
|
-
Button,
|
|
22151
|
-
{
|
|
22152
|
-
variant: "ghost",
|
|
22153
|
-
onClick: () => {
|
|
22154
|
-
log6.debug("Filter clicked", { field: filter.field });
|
|
22155
|
-
},
|
|
22156
|
-
children: filter.label
|
|
22157
|
-
},
|
|
22158
|
-
`filter-${filter.field}-${index}`
|
|
22159
|
-
));
|
|
22160
|
-
};
|
|
22161
|
-
return /* @__PURE__ */ jsx(
|
|
22162
|
-
"div",
|
|
22163
|
-
{
|
|
22164
|
-
className: cn(
|
|
22165
|
-
"inline-flex gap-2",
|
|
22166
|
-
variantClasses2[variant],
|
|
22167
|
-
orientationClasses[orientation],
|
|
22168
|
-
lookStyles5[look],
|
|
22169
|
-
className
|
|
22170
|
-
),
|
|
22171
|
-
role: "group",
|
|
22172
|
-
children: children || renderFilters() || renderFormActions()
|
|
22173
|
-
}
|
|
22174
|
-
);
|
|
22175
|
-
};
|
|
22176
|
-
ButtonGroup.displayName = "ButtonGroup";
|
|
22177
|
-
}
|
|
22178
|
-
});
|
|
22179
22312
|
function getOrCreateStore(query) {
|
|
22180
22313
|
if (!queryStores.has(query)) {
|
|
22181
22314
|
queryStores.set(query, {
|
|
@@ -22360,7 +22493,7 @@ var init_FilterGroup = __esm({
|
|
|
22360
22493
|
type: "button",
|
|
22361
22494
|
onClick: () => handleFilterSelect(filter.field, null),
|
|
22362
22495
|
className: cn(
|
|
22363
|
-
"px-3 py-1.5 text-sm font-medium transition-all duration-
|
|
22496
|
+
"px-3 py-1.5 text-sm font-medium transition-all duration-fast",
|
|
22364
22497
|
!selectedValues[filter.field] ? "bg-primary text-primary-foreground" : "bg-card text-muted-foreground hover:bg-muted"
|
|
22365
22498
|
),
|
|
22366
22499
|
children: t("filterGroup.all")
|
|
@@ -22372,7 +22505,7 @@ var init_FilterGroup = __esm({
|
|
|
22372
22505
|
type: "button",
|
|
22373
22506
|
onClick: () => handleFilterSelect(filter.field, option),
|
|
22374
22507
|
className: cn(
|
|
22375
|
-
"px-3 py-1.5 text-sm font-medium transition-all duration-
|
|
22508
|
+
"px-3 py-1.5 text-sm font-medium transition-all duration-fast",
|
|
22376
22509
|
"border-l-[length:var(--border-width)] border-border",
|
|
22377
22510
|
selectedValues[filter.field] === option ? "bg-primary text-primary-foreground" : "bg-card text-muted-foreground hover:bg-muted"
|
|
22378
22511
|
),
|
|
@@ -22753,7 +22886,7 @@ var init_Flex = __esm({
|
|
|
22753
22886
|
flexStyle.flexBasis = typeof basis === "number" ? `${basis}px` : basis;
|
|
22754
22887
|
}
|
|
22755
22888
|
}
|
|
22756
|
-
return
|
|
22889
|
+
return React74__default.createElement(Component, {
|
|
22757
22890
|
className: cn(
|
|
22758
22891
|
inline ? "inline-flex" : "flex",
|
|
22759
22892
|
directionStyles[direction],
|
|
@@ -22872,7 +23005,7 @@ var init_Grid = __esm({
|
|
|
22872
23005
|
as: Component = "div"
|
|
22873
23006
|
}) => {
|
|
22874
23007
|
const mergedStyle = rows2 ? { gridTemplateRows: `repeat(${rows2}, minmax(0, 1fr))`, ...style } : style;
|
|
22875
|
-
return
|
|
23008
|
+
return React74__default.createElement(
|
|
22876
23009
|
Component,
|
|
22877
23010
|
{
|
|
22878
23011
|
className: cn(
|
|
@@ -22957,6 +23090,15 @@ var init_InputGroup = __esm({
|
|
|
22957
23090
|
InputGroup.displayName = "InputGroup";
|
|
22958
23091
|
}
|
|
22959
23092
|
});
|
|
23093
|
+
var PageTransition;
|
|
23094
|
+
var init_PageTransition = __esm({
|
|
23095
|
+
"components/core/molecules/PageTransition.tsx"() {
|
|
23096
|
+
"use client";
|
|
23097
|
+
init_cn();
|
|
23098
|
+
PageTransition = ({ locationKey, children, className }) => /* @__PURE__ */ jsx("div", { className: cn("animate-page-in", className), children }, locationKey);
|
|
23099
|
+
PageTransition.displayName = "PageTransition";
|
|
23100
|
+
}
|
|
23101
|
+
});
|
|
22960
23102
|
function computePopoverStyle(position, triggerRect, popoverWidth) {
|
|
22961
23103
|
if (position === "left" || position === "right") {
|
|
22962
23104
|
return {
|
|
@@ -22983,6 +23125,7 @@ var init_Popover = __esm({
|
|
|
22983
23125
|
"components/core/molecules/Popover.tsx"() {
|
|
22984
23126
|
"use client";
|
|
22985
23127
|
init_Typography();
|
|
23128
|
+
init_Presence();
|
|
22986
23129
|
init_cn();
|
|
22987
23130
|
init_useTapReveal();
|
|
22988
23131
|
arrowClasses = {
|
|
@@ -23006,6 +23149,7 @@ var init_Popover = __esm({
|
|
|
23006
23149
|
const [popoverWidth, setPopoverWidth] = useState(0);
|
|
23007
23150
|
const triggerRef = useRef(null);
|
|
23008
23151
|
const popoverRef = useRef(null);
|
|
23152
|
+
const { mounted, className: panelAnim, onAnimationEnd } = usePresence(isOpen, { animation: "popover" });
|
|
23009
23153
|
const updatePosition = () => {
|
|
23010
23154
|
if (triggerRef.current) {
|
|
23011
23155
|
setTriggerRect(triggerRef.current.getBoundingClientRect());
|
|
@@ -23031,10 +23175,11 @@ var init_Popover = __esm({
|
|
|
23031
23175
|
useEffect(() => {
|
|
23032
23176
|
if (isOpen) {
|
|
23033
23177
|
updatePosition();
|
|
23034
|
-
} else {
|
|
23035
|
-
setPopoverWidth(0);
|
|
23036
23178
|
}
|
|
23037
23179
|
}, [isOpen]);
|
|
23180
|
+
useEffect(() => {
|
|
23181
|
+
if (!mounted) setPopoverWidth(0);
|
|
23182
|
+
}, [mounted]);
|
|
23038
23183
|
useLayoutEffect(() => {
|
|
23039
23184
|
if (isOpen && popoverRef.current) {
|
|
23040
23185
|
const measured = popoverRef.current.offsetWidth;
|
|
@@ -23068,9 +23213,9 @@ var init_Popover = __esm({
|
|
|
23068
23213
|
onMouseLeave: handleClose,
|
|
23069
23214
|
onPointerDown: tapTriggerProps.onPointerDown
|
|
23070
23215
|
};
|
|
23071
|
-
const childElement =
|
|
23216
|
+
const childElement = React74__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
|
|
23072
23217
|
const childPointerDown = childElement.props.onPointerDown;
|
|
23073
|
-
const triggerElement =
|
|
23218
|
+
const triggerElement = React74__default.cloneElement(
|
|
23074
23219
|
childElement,
|
|
23075
23220
|
{
|
|
23076
23221
|
ref: triggerRef,
|
|
@@ -23083,13 +23228,14 @@ var init_Popover = __esm({
|
|
|
23083
23228
|
} : void 0
|
|
23084
23229
|
}
|
|
23085
23230
|
);
|
|
23086
|
-
const panel =
|
|
23231
|
+
const panel = mounted && triggerRect ? /* @__PURE__ */ jsxs(
|
|
23087
23232
|
"div",
|
|
23088
23233
|
{
|
|
23089
23234
|
ref: popoverRef,
|
|
23090
23235
|
className: cn(
|
|
23091
23236
|
"fixed z-50 p-4",
|
|
23092
23237
|
"bg-card border-2 border-border shadow-elevation-popover",
|
|
23238
|
+
panelAnim,
|
|
23093
23239
|
className
|
|
23094
23240
|
),
|
|
23095
23241
|
style: {
|
|
@@ -23097,6 +23243,7 @@ var init_Popover = __esm({
|
|
|
23097
23243
|
...popoverWidth === 0 ? { visibility: "hidden" } : void 0
|
|
23098
23244
|
},
|
|
23099
23245
|
role: "dialog",
|
|
23246
|
+
onAnimationEnd,
|
|
23100
23247
|
onMouseEnter: trigger === "hover" ? handleOpen : void 0,
|
|
23101
23248
|
onMouseLeave: trigger === "hover" ? handleClose : void 0,
|
|
23102
23249
|
children: [
|
|
@@ -23253,7 +23400,7 @@ var init_Coachmark = __esm({
|
|
|
23253
23400
|
role: "dialog",
|
|
23254
23401
|
"aria-label": title,
|
|
23255
23402
|
className: cn(
|
|
23256
|
-
"fixed z-50 max-w-xs w-72 transition-opacity duration-
|
|
23403
|
+
"fixed z-50 max-w-xs w-72 transition-opacity duration-fast",
|
|
23257
23404
|
centered || pos ? "opacity-100" : "opacity-0",
|
|
23258
23405
|
className
|
|
23259
23406
|
),
|
|
@@ -23760,6 +23907,7 @@ var init_SidePanel = __esm({
|
|
|
23760
23907
|
init_Box();
|
|
23761
23908
|
init_Button();
|
|
23762
23909
|
init_Typography();
|
|
23910
|
+
init_Presence();
|
|
23763
23911
|
init_cn();
|
|
23764
23912
|
init_useEventBus();
|
|
23765
23913
|
SidePanel = ({
|
|
@@ -23779,15 +23927,17 @@ var init_SidePanel = __esm({
|
|
|
23779
23927
|
if (closeEvent) eventBus.emit(`UI:${closeEvent}`, {});
|
|
23780
23928
|
onClose();
|
|
23781
23929
|
};
|
|
23782
|
-
|
|
23930
|
+
const { mounted, className: panelAnim, onAnimationEnd } = usePresence(isOpen, { animation: "drawer" });
|
|
23931
|
+
const drawerSign = position === "right" ? 1 : -1;
|
|
23932
|
+
if (!mounted) return null;
|
|
23783
23933
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
23784
|
-
showOverlay && /* @__PURE__ */ jsx(
|
|
23934
|
+
showOverlay && /* @__PURE__ */ jsx(Presence, { show: isOpen, animation: "overlay", children: /* @__PURE__ */ jsx(
|
|
23785
23935
|
Box,
|
|
23786
23936
|
{
|
|
23787
23937
|
className: "fixed inset-0 bg-white/80 backdrop-blur-sm z-40 lg:hidden",
|
|
23788
23938
|
onClick: handleClose
|
|
23789
23939
|
}
|
|
23790
|
-
),
|
|
23940
|
+
) }),
|
|
23791
23941
|
/* @__PURE__ */ jsxs(
|
|
23792
23942
|
Aside,
|
|
23793
23943
|
{
|
|
@@ -23797,11 +23947,13 @@ var init_SidePanel = __esm({
|
|
|
23797
23947
|
"border-l-2 border-border",
|
|
23798
23948
|
position === "left" && "border-l-0 border-r-2",
|
|
23799
23949
|
"flex flex-col",
|
|
23800
|
-
|
|
23950
|
+
panelAnim,
|
|
23801
23951
|
width,
|
|
23802
23952
|
position === "right" ? "right-0" : "left-0",
|
|
23803
23953
|
className
|
|
23804
23954
|
),
|
|
23955
|
+
style: { "--motion-drawer-sign": drawerSign },
|
|
23956
|
+
onAnimationEnd,
|
|
23805
23957
|
children: [
|
|
23806
23958
|
/* @__PURE__ */ jsxs(Box, { className: "flex items-center justify-between p-4 border-b-2 border-border sticky top-0 bg-card z-10", children: [
|
|
23807
23959
|
/* @__PURE__ */ jsx(Typography, { variant: "h6", children: title }),
|
|
@@ -23922,9 +24074,9 @@ var init_Tooltip = __esm({
|
|
|
23922
24074
|
if (hideTimeoutRef.current) clearTimeout(hideTimeoutRef.current);
|
|
23923
24075
|
};
|
|
23924
24076
|
}, []);
|
|
23925
|
-
const triggerElement =
|
|
24077
|
+
const triggerElement = React74__default.isValidElement(children) ? children : /* @__PURE__ */ jsx("span", { children });
|
|
23926
24078
|
const childPointerDown = triggerElement.props.onPointerDown;
|
|
23927
|
-
const trigger =
|
|
24079
|
+
const trigger = React74__default.cloneElement(triggerElement, {
|
|
23928
24080
|
ref: triggerRef,
|
|
23929
24081
|
onMouseEnter: handleMouseEnter,
|
|
23930
24082
|
onMouseLeave: handleMouseLeave,
|
|
@@ -24014,7 +24166,7 @@ var init_WizardProgress = __esm({
|
|
|
24014
24166
|
children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2", children: normalizedSteps.map((step, index) => {
|
|
24015
24167
|
const isActive = index === currentStep;
|
|
24016
24168
|
const isCompleted = index < currentStep;
|
|
24017
|
-
return /* @__PURE__ */ jsxs(
|
|
24169
|
+
return /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
|
|
24018
24170
|
/* @__PURE__ */ jsx(
|
|
24019
24171
|
"button",
|
|
24020
24172
|
{
|
|
@@ -24565,7 +24717,7 @@ var init_FormSectionHeader = __esm({
|
|
|
24565
24717
|
name: "chevron-down",
|
|
24566
24718
|
size: "sm",
|
|
24567
24719
|
className: cn(
|
|
24568
|
-
"text-muted-foreground transition-transform duration-
|
|
24720
|
+
"text-muted-foreground transition-transform duration-fast shrink-0",
|
|
24569
24721
|
isCollapsed && "-rotate-90"
|
|
24570
24722
|
)
|
|
24571
24723
|
}
|
|
@@ -25686,17 +25838,18 @@ function GameHud({
|
|
|
25686
25838
|
const mid = Math.ceil(stats.length / 2);
|
|
25687
25839
|
const leftStats = stats.slice(0, mid);
|
|
25688
25840
|
const rightStats = stats.slice(mid);
|
|
25689
|
-
const isTop = position === "top";
|
|
25690
25841
|
return /* @__PURE__ */ jsxs(
|
|
25691
|
-
|
|
25842
|
+
Card,
|
|
25692
25843
|
{
|
|
25844
|
+
variant: "bordered",
|
|
25845
|
+
padding: "none",
|
|
25693
25846
|
className: cn(
|
|
25694
|
-
"flex items-center justify-between w-full",
|
|
25847
|
+
"flex items-center justify-between w-full rounded-none bg-card",
|
|
25695
25848
|
"px-4 py-2 gap-4",
|
|
25696
|
-
|
|
25697
|
-
transparent && (isTop ? "border-b border-white/10 bg-black/40 backdrop-blur-sm" : "border-t border-white/10 bg-black/40 backdrop-blur-sm"),
|
|
25849
|
+
transparent && "backdrop-blur-sm",
|
|
25698
25850
|
className
|
|
25699
25851
|
),
|
|
25852
|
+
style: transparent ? { backgroundColor: "color-mix(in srgb, var(--color-card) 40%, transparent)" } : void 0,
|
|
25700
25853
|
children: [
|
|
25701
25854
|
/* @__PURE__ */ jsx(Box, { className: "flex items-center gap-3 flex-shrink-0", children: leftStats.map((stat, i) => /* @__PURE__ */ jsx(StatBadge, { ...stat, size }, i)) }),
|
|
25702
25855
|
rightStats.length > 0 && /* @__PURE__ */ jsx(Box, { className: "flex items-center gap-3 flex-shrink-0", children: rightStats.map((stat, i) => /* @__PURE__ */ jsx(StatBadge, { ...stat, size }, i)) })
|
|
@@ -25705,14 +25858,16 @@ function GameHud({
|
|
|
25705
25858
|
);
|
|
25706
25859
|
}
|
|
25707
25860
|
return /* @__PURE__ */ jsx(
|
|
25708
|
-
|
|
25861
|
+
Card,
|
|
25709
25862
|
{
|
|
25710
|
-
|
|
25863
|
+
variant: "bordered",
|
|
25864
|
+
padding: "sm",
|
|
25711
25865
|
className: cn(
|
|
25712
|
-
"z-10 flex items-center gap-4
|
|
25713
|
-
transparent
|
|
25866
|
+
"z-10 relative flex items-center gap-4 bg-card",
|
|
25867
|
+
transparent && "backdrop-blur-sm",
|
|
25714
25868
|
className
|
|
25715
25869
|
),
|
|
25870
|
+
style: transparent ? { backgroundColor: "color-mix(in srgb, var(--color-card) 30%, transparent)" } : void 0,
|
|
25716
25871
|
children: stats.map((stat, i) => /* @__PURE__ */ jsx(StatBadge, { ...stat, size }, i))
|
|
25717
25872
|
}
|
|
25718
25873
|
);
|
|
@@ -25722,6 +25877,7 @@ var init_GameHud = __esm({
|
|
|
25722
25877
|
"components/game/molecules/GameHud.tsx"() {
|
|
25723
25878
|
init_cn();
|
|
25724
25879
|
init_Box();
|
|
25880
|
+
init_Card();
|
|
25725
25881
|
init_StatBadge();
|
|
25726
25882
|
positionMap = {
|
|
25727
25883
|
corners: "inset-0 pointer-events-none"
|
|
@@ -25745,9 +25901,9 @@ function GameMenu({
|
|
|
25745
25901
|
logo,
|
|
25746
25902
|
className
|
|
25747
25903
|
}) {
|
|
25748
|
-
const resolvedOptions = options ?? menuItems ?? DEFAULT_MENU_OPTIONS;
|
|
25904
|
+
const resolvedOptions = (options?.length ? options : void 0) ?? (menuItems?.length ? menuItems : void 0) ?? DEFAULT_MENU_OPTIONS;
|
|
25749
25905
|
const eventBus = useEventBus();
|
|
25750
|
-
const handleOptionClick =
|
|
25906
|
+
const handleOptionClick = React74.useCallback(
|
|
25751
25907
|
(option) => {
|
|
25752
25908
|
if (option.event) {
|
|
25753
25909
|
eventBus.emit(`UI:${option.event}`, { option });
|
|
@@ -25766,39 +25922,48 @@ function GameMenu({
|
|
|
25766
25922
|
{
|
|
25767
25923
|
className: cn(
|
|
25768
25924
|
"min-h-screen w-full flex flex-col items-center justify-center p-8",
|
|
25925
|
+
!background && "bg-background",
|
|
25769
25926
|
className
|
|
25770
25927
|
),
|
|
25771
|
-
style: {
|
|
25772
|
-
background: background ?? "linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f0e17 100%)"
|
|
25773
|
-
},
|
|
25928
|
+
style: background ? { background } : void 0,
|
|
25774
25929
|
children: [
|
|
25775
|
-
/* @__PURE__ */ jsxs(
|
|
25776
|
-
|
|
25777
|
-
/* @__PURE__ */ jsx(
|
|
25778
|
-
Typography,
|
|
25779
|
-
{
|
|
25780
|
-
variant: "h1",
|
|
25781
|
-
className: "text-5xl md:text-7xl font-bold text-[var(--color-foreground)] tracking-tight",
|
|
25782
|
-
style: {
|
|
25783
|
-
textShadow: "0 4px 12px rgba(0,0,0,0.5)"
|
|
25784
|
-
},
|
|
25785
|
-
children: title
|
|
25786
|
-
}
|
|
25787
|
-
),
|
|
25788
|
-
subtitle && /* @__PURE__ */ jsx(Typography, { variant: "body", className: "mt-2 text-lg text-muted-foreground tracking-widest uppercase", children: subtitle })
|
|
25789
|
-
] }),
|
|
25790
|
-
/* @__PURE__ */ jsx(Box, { className: "flex flex-col gap-4 w-full max-w-md", children: resolvedOptions.map((option, index) => /* @__PURE__ */ jsx(
|
|
25791
|
-
ChoiceButton,
|
|
25930
|
+
/* @__PURE__ */ jsxs(
|
|
25931
|
+
Card,
|
|
25792
25932
|
{
|
|
25793
|
-
|
|
25794
|
-
|
|
25795
|
-
|
|
25796
|
-
|
|
25797
|
-
|
|
25798
|
-
|
|
25799
|
-
|
|
25800
|
-
|
|
25801
|
-
|
|
25933
|
+
variant: "bordered",
|
|
25934
|
+
padding: "lg",
|
|
25935
|
+
className: "bg-card flex flex-col items-center max-w-md w-full",
|
|
25936
|
+
children: [
|
|
25937
|
+
/* @__PURE__ */ jsxs(Box, { className: "text-center mb-8 animate-fade-in", children: [
|
|
25938
|
+
logo && /* @__PURE__ */ jsx(GameIcon, { assetUrl: logo, icon: "image", size: 96, alt: title, className: "h-24 w-auto mx-auto mb-6 drop-shadow-2xl" }),
|
|
25939
|
+
/* @__PURE__ */ jsx(
|
|
25940
|
+
Typography,
|
|
25941
|
+
{
|
|
25942
|
+
variant: "h1",
|
|
25943
|
+
className: "text-4xl md:text-5xl font-bold text-foreground tracking-tight",
|
|
25944
|
+
style: {
|
|
25945
|
+
textShadow: "0 4px 12px rgba(0,0,0,0.5)"
|
|
25946
|
+
},
|
|
25947
|
+
children: title
|
|
25948
|
+
}
|
|
25949
|
+
),
|
|
25950
|
+
subtitle && /* @__PURE__ */ jsx(Typography, { variant: "body", className: "mt-2 text-lg text-muted-foreground tracking-widest uppercase", children: subtitle })
|
|
25951
|
+
] }),
|
|
25952
|
+
/* @__PURE__ */ jsx(Box, { className: "flex flex-col gap-4 w-full", children: resolvedOptions.map((option, index) => /* @__PURE__ */ jsx(
|
|
25953
|
+
ChoiceButton,
|
|
25954
|
+
{
|
|
25955
|
+
text: option.label,
|
|
25956
|
+
index: index + 1,
|
|
25957
|
+
disabled: option.disabled,
|
|
25958
|
+
onClick: () => handleOptionClick(option),
|
|
25959
|
+
className: "text-lg py-4 px-8"
|
|
25960
|
+
},
|
|
25961
|
+
index
|
|
25962
|
+
)) })
|
|
25963
|
+
]
|
|
25964
|
+
}
|
|
25965
|
+
),
|
|
25966
|
+
/* @__PURE__ */ jsxs(Box, { position: "absolute", className: "inset-0 pointer-events-none overflow-hidden -z-10", children: [
|
|
25802
25967
|
/* @__PURE__ */ jsx(Box, { position: "absolute", className: "top-1/4 left-1/4 w-64 h-64 bg-info/10 rounded-container blur-3xl" }),
|
|
25803
25968
|
/* @__PURE__ */ jsx(Box, { position: "absolute", className: "bottom-1/4 right-1/4 w-96 h-96 bg-accent/10 rounded-container blur-3xl" })
|
|
25804
25969
|
] })
|
|
@@ -25813,6 +25978,7 @@ var init_GameMenu = __esm({
|
|
|
25813
25978
|
init_cn();
|
|
25814
25979
|
init_useEventBus();
|
|
25815
25980
|
init_Box();
|
|
25981
|
+
init_Card();
|
|
25816
25982
|
init_Typography();
|
|
25817
25983
|
init_GameIcon();
|
|
25818
25984
|
init_ChoiceButton();
|
|
@@ -25973,7 +26139,7 @@ function StateGraph({
|
|
|
25973
26139
|
}) {
|
|
25974
26140
|
const eventBus = useEventBus();
|
|
25975
26141
|
const nodes = states ?? [];
|
|
25976
|
-
const positions =
|
|
26142
|
+
const positions = React74.useMemo(() => layoutStates(nodes, width, height), [nodes, width, height]);
|
|
25977
26143
|
return /* @__PURE__ */ jsxs(
|
|
25978
26144
|
Box,
|
|
25979
26145
|
{
|
|
@@ -26510,7 +26676,7 @@ function LinearView({
|
|
|
26510
26676
|
/* @__PURE__ */ jsx(HStack, { className: "flex-wrap items-center", gap: "xs", children: trait.states.map((state, i) => {
|
|
26511
26677
|
const isDone = i < currentIdx;
|
|
26512
26678
|
const isCurrent = i === currentIdx;
|
|
26513
|
-
return /* @__PURE__ */ jsxs(
|
|
26679
|
+
return /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
|
|
26514
26680
|
i > 0 && /* @__PURE__ */ jsx(
|
|
26515
26681
|
Typography,
|
|
26516
26682
|
{
|
|
@@ -27143,7 +27309,7 @@ function SequenceBar({
|
|
|
27143
27309
|
else onSlotRemove?.(index);
|
|
27144
27310
|
}, [emit, slotRemoveEvent, onSlotRemove, playing]);
|
|
27145
27311
|
const paddedSlots = Array.from({ length: maxSlots }, (_, i) => slots[i]);
|
|
27146
|
-
return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(
|
|
27312
|
+
return /* @__PURE__ */ jsx(HStack, { className: cn("items-center", className), gap: "sm", children: paddedSlots.map((slot, i) => /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
|
|
27147
27313
|
i > 0 && /* @__PURE__ */ jsx(
|
|
27148
27314
|
Typography,
|
|
27149
27315
|
{
|
|
@@ -27330,6 +27496,7 @@ var init_GameShell = __esm({
|
|
|
27330
27496
|
"components/game/templates/GameShell.tsx"() {
|
|
27331
27497
|
init_cn();
|
|
27332
27498
|
init_Box();
|
|
27499
|
+
init_Card();
|
|
27333
27500
|
init_Typography();
|
|
27334
27501
|
init_AtlasImage();
|
|
27335
27502
|
FONT_BASE = "https://almadar-kflow-assets.web.app/shared/_shared/kenney-fonts/fonts";
|
|
@@ -27358,13 +27525,14 @@ var init_GameShell = __esm({
|
|
|
27358
27525
|
showTopBar = true,
|
|
27359
27526
|
children,
|
|
27360
27527
|
backgroundAsset,
|
|
27361
|
-
|
|
27362
|
-
|
|
27528
|
+
fontFamily = "future",
|
|
27529
|
+
"data-theme": dataTheme
|
|
27363
27530
|
}) => {
|
|
27364
27531
|
const font = GAME_FONTS[fontFamily] ?? fontFamily;
|
|
27365
27532
|
return /* @__PURE__ */ jsxs(
|
|
27366
27533
|
Box,
|
|
27367
27534
|
{
|
|
27535
|
+
"data-theme": dataTheme || void 0,
|
|
27368
27536
|
className: cn("game-shell", className),
|
|
27369
27537
|
style: {
|
|
27370
27538
|
position: "relative",
|
|
@@ -27372,7 +27540,7 @@ var init_GameShell = __esm({
|
|
|
27372
27540
|
height: "100vh",
|
|
27373
27541
|
overflow: "hidden",
|
|
27374
27542
|
background: "var(--color-background, #0a0a0f)",
|
|
27375
|
-
color: "var(--color-
|
|
27543
|
+
color: "var(--color-foreground, #e0e0e0)",
|
|
27376
27544
|
fontFamily: `'${font}', system-ui, sans-serif`
|
|
27377
27545
|
},
|
|
27378
27546
|
children: [
|
|
@@ -27404,19 +27572,12 @@ var init_GameShell = __esm({
|
|
|
27404
27572
|
},
|
|
27405
27573
|
children: [
|
|
27406
27574
|
showTopBar && /* @__PURE__ */ jsx(
|
|
27407
|
-
|
|
27575
|
+
Card,
|
|
27408
27576
|
{
|
|
27409
|
-
|
|
27410
|
-
|
|
27411
|
-
|
|
27412
|
-
|
|
27413
|
-
style: {
|
|
27414
|
-
padding: "6px 16px",
|
|
27415
|
-
background: hudBackgroundAsset ? void 0 : "rgba(18, 18, 31, 0.85)",
|
|
27416
|
-
borderRadius: hudBackgroundAsset ? void 0 : 10,
|
|
27417
|
-
boxShadow: "0 4px 14px rgba(0,0,0,0.45)",
|
|
27418
|
-
flexShrink: 0
|
|
27419
|
-
},
|
|
27577
|
+
variant: "bordered",
|
|
27578
|
+
padding: "none",
|
|
27579
|
+
className: "game-shell__title bg-card pointer-events-auto",
|
|
27580
|
+
style: { padding: "6px 16px", flexShrink: 0 },
|
|
27420
27581
|
children: /* @__PURE__ */ jsx(
|
|
27421
27582
|
Typography,
|
|
27422
27583
|
{
|
|
@@ -28128,13 +28289,13 @@ var init_MapView = __esm({
|
|
|
28128
28289
|
shadowSize: [41, 41]
|
|
28129
28290
|
});
|
|
28130
28291
|
L.Marker.prototype.options.icon = defaultIcon;
|
|
28131
|
-
const { useEffect:
|
|
28292
|
+
const { useEffect: useEffect65, useRef: useRef62, useCallback: useCallback105, useState: useState102 } = React74__default;
|
|
28132
28293
|
const { Typography: Typography2 } = await Promise.resolve().then(() => (init_Typography(), Typography_exports));
|
|
28133
28294
|
const { useEventBus: useEventBus2 } = await Promise.resolve().then(() => (init_useEventBus(), useEventBus_exports));
|
|
28134
28295
|
function MapUpdater({ centerLat, centerLng, zoom }) {
|
|
28135
28296
|
const map = useMap();
|
|
28136
|
-
const prevRef =
|
|
28137
|
-
|
|
28297
|
+
const prevRef = useRef62({ centerLat, centerLng, zoom });
|
|
28298
|
+
useEffect65(() => {
|
|
28138
28299
|
const prev = prevRef.current;
|
|
28139
28300
|
if (prev.centerLat !== centerLat || prev.centerLng !== centerLng || prev.zoom !== zoom) {
|
|
28140
28301
|
map.setView([centerLat, centerLng], zoom);
|
|
@@ -28145,7 +28306,7 @@ var init_MapView = __esm({
|
|
|
28145
28306
|
}
|
|
28146
28307
|
function MapClickHandler({ onMapClick }) {
|
|
28147
28308
|
const map = useMap();
|
|
28148
|
-
|
|
28309
|
+
useEffect65(() => {
|
|
28149
28310
|
if (!onMapClick) return;
|
|
28150
28311
|
const handler = (e) => {
|
|
28151
28312
|
onMapClick(e.latlng.lat, e.latlng.lng);
|
|
@@ -28173,8 +28334,8 @@ var init_MapView = __esm({
|
|
|
28173
28334
|
showAttribution = true
|
|
28174
28335
|
}) {
|
|
28175
28336
|
const eventBus = useEventBus2();
|
|
28176
|
-
const [clickedPosition, setClickedPosition] =
|
|
28177
|
-
const handleMapClick =
|
|
28337
|
+
const [clickedPosition, setClickedPosition] = useState102(null);
|
|
28338
|
+
const handleMapClick = useCallback105((lat, lng) => {
|
|
28178
28339
|
if (showClickedPin) {
|
|
28179
28340
|
setClickedPosition({ lat, lng });
|
|
28180
28341
|
}
|
|
@@ -28183,7 +28344,7 @@ var init_MapView = __esm({
|
|
|
28183
28344
|
eventBus.emit(`UI:${mapClickEvent}`, { latitude: lat, longitude: lng });
|
|
28184
28345
|
}
|
|
28185
28346
|
}, [onMapClick, mapClickEvent, eventBus, showClickedPin]);
|
|
28186
|
-
const handleMarkerClick =
|
|
28347
|
+
const handleMarkerClick = useCallback105((marker) => {
|
|
28187
28348
|
onMarkerClick?.(marker);
|
|
28188
28349
|
if (markerClickEvent) {
|
|
28189
28350
|
eventBus.emit(`UI:${markerClickEvent}`, { ...marker });
|
|
@@ -28383,7 +28544,7 @@ var init_NumberStepper = __esm({
|
|
|
28383
28544
|
"text-foreground",
|
|
28384
28545
|
"hover:bg-muted",
|
|
28385
28546
|
"active:bg-muted",
|
|
28386
|
-
"transition-colors duration-
|
|
28547
|
+
"transition-colors duration-instant",
|
|
28387
28548
|
"disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
|
|
28388
28549
|
"focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
|
|
28389
28550
|
styles.button
|
|
@@ -28424,7 +28585,7 @@ var init_NumberStepper = __esm({
|
|
|
28424
28585
|
"text-foreground",
|
|
28425
28586
|
"hover:bg-muted",
|
|
28426
28587
|
"active:bg-muted",
|
|
28427
|
-
"transition-colors duration-
|
|
28588
|
+
"transition-colors duration-instant",
|
|
28428
28589
|
"disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
|
|
28429
28590
|
"focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
|
|
28430
28591
|
styles.button
|
|
@@ -28548,7 +28709,7 @@ var init_StarRating = __esm({
|
|
|
28548
28709
|
className: cn(
|
|
28549
28710
|
styles.star,
|
|
28550
28711
|
"text-foreground/30",
|
|
28551
|
-
"transition-colors duration-
|
|
28712
|
+
"transition-colors duration-instant"
|
|
28552
28713
|
),
|
|
28553
28714
|
strokeWidth: 1.5
|
|
28554
28715
|
}
|
|
@@ -28561,7 +28722,7 @@ var init_StarRating = __esm({
|
|
|
28561
28722
|
styles.star,
|
|
28562
28723
|
"absolute inset-0",
|
|
28563
28724
|
"text-warning fill-warning",
|
|
28564
|
-
"transition-colors duration-
|
|
28725
|
+
"transition-colors duration-instant"
|
|
28565
28726
|
),
|
|
28566
28727
|
strokeWidth: 1.5,
|
|
28567
28728
|
style: isHalf ? { clipPath: "inset(0 50% 0 0)" } : void 0
|
|
@@ -28716,7 +28877,7 @@ var init_UploadDropZone = __esm({
|
|
|
28716
28877
|
"relative flex flex-col items-center justify-center",
|
|
28717
28878
|
"p-8 rounded-sm",
|
|
28718
28879
|
"border-2 border-dashed",
|
|
28719
|
-
"transition-colors duration-
|
|
28880
|
+
"transition-colors duration-fast",
|
|
28720
28881
|
"cursor-pointer",
|
|
28721
28882
|
isDragOver ? "border-primary bg-primary bg-opacity-5" : "border-border bg-surface",
|
|
28722
28883
|
error && "border-error",
|
|
@@ -29043,8 +29204,8 @@ function TableView({
|
|
|
29043
29204
|
}) {
|
|
29044
29205
|
const eventBus = useEventBus();
|
|
29045
29206
|
const { t } = useTranslate();
|
|
29046
|
-
const [visibleCount, setVisibleCount] =
|
|
29047
|
-
const [localSelected, setLocalSelected] =
|
|
29207
|
+
const [visibleCount, setVisibleCount] = React74__default.useState(pageSize > 0 ? pageSize : Infinity);
|
|
29208
|
+
const [localSelected, setLocalSelected] = React74__default.useState(/* @__PURE__ */ new Set());
|
|
29048
29209
|
const colDefs = columns ?? fields ?? [];
|
|
29049
29210
|
const allDataRaw = Array.isArray(entity) ? entity : entity ? [entity] : [];
|
|
29050
29211
|
const dnd = useDataDnd({
|
|
@@ -29124,7 +29285,7 @@ function TableView({
|
|
|
29124
29285
|
className: cn(
|
|
29125
29286
|
"grid items-center gap-3 sticky top-0 z-10",
|
|
29126
29287
|
"bg-[var(--color-surface-subtle)] border-b border-[var(--color-border)]",
|
|
29127
|
-
"text-
|
|
29288
|
+
"text-muted-foreground uppercase text-xs font-semibold tracking-wide",
|
|
29128
29289
|
lk.headPad
|
|
29129
29290
|
),
|
|
29130
29291
|
children: [
|
|
@@ -29239,12 +29400,12 @@ function TableView({
|
|
|
29239
29400
|
]
|
|
29240
29401
|
}
|
|
29241
29402
|
);
|
|
29242
|
-
return dnd.isZone ? /* @__PURE__ */ jsx(dnd.SortableItem, { id: row[idField] ?? id, children: rowInner }, id) : /* @__PURE__ */ jsx(
|
|
29403
|
+
return dnd.isZone ? /* @__PURE__ */ jsx(dnd.SortableItem, { id: row[idField] ?? id, children: rowInner }, id) : /* @__PURE__ */ jsx(React74__default.Fragment, { children: rowInner }, id);
|
|
29243
29404
|
};
|
|
29244
29405
|
const items = Array.from(data);
|
|
29245
29406
|
const groups = groupBy ? groupData2(items, groupBy) : [{ label: "", items }];
|
|
29246
29407
|
let runningIndex = 0;
|
|
29247
|
-
const body = /* @__PURE__ */ jsx(Box, { role: "rowgroup", children: groups.map((group, gi) => /* @__PURE__ */ jsxs(
|
|
29408
|
+
const body = /* @__PURE__ */ jsx(Box, { role: "rowgroup", children: groups.map((group, gi) => /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
|
|
29248
29409
|
group.label && /* @__PURE__ */ jsx(Divider, { label: group.label, className: gi > 0 ? "mt-3" : "mt-0" }),
|
|
29249
29410
|
group.items.map((row) => renderRow(row, runningIndex++))
|
|
29250
29411
|
] }, gi)) });
|
|
@@ -29980,7 +30141,7 @@ function SortableListInner({
|
|
|
29980
30141
|
"flex items-center justify-center",
|
|
29981
30142
|
"text-muted-foreground",
|
|
29982
30143
|
"hover:text-foreground",
|
|
29983
|
-
"transition-colors duration-
|
|
30144
|
+
"transition-colors duration-instant",
|
|
29984
30145
|
"px-1"
|
|
29985
30146
|
),
|
|
29986
30147
|
"aria-grabbed": ariaGrabbed,
|
|
@@ -30007,7 +30168,7 @@ function SortableListInner({
|
|
|
30007
30168
|
gap: "sm",
|
|
30008
30169
|
align: "center",
|
|
30009
30170
|
className: cn(
|
|
30010
|
-
"transition-opacity duration-
|
|
30171
|
+
"transition-opacity duration-fast",
|
|
30011
30172
|
isBeingDragged && "opacity-50"
|
|
30012
30173
|
),
|
|
30013
30174
|
children: [
|
|
@@ -30179,7 +30340,7 @@ var init_PullToRefresh = __esm({
|
|
|
30179
30340
|
children: /* @__PURE__ */ jsx(
|
|
30180
30341
|
Box,
|
|
30181
30342
|
{
|
|
30182
|
-
className: "transition-transform duration-
|
|
30343
|
+
className: "transition-transform duration-fast",
|
|
30183
30344
|
style: {
|
|
30184
30345
|
transform: `scale(${isRefreshing ? 1 : pullProgress})`,
|
|
30185
30346
|
opacity: isRefreshing ? 1 : pullProgress
|
|
@@ -30601,7 +30762,7 @@ var init_StepFlow = __esm({
|
|
|
30601
30762
|
className
|
|
30602
30763
|
}) => {
|
|
30603
30764
|
if (orientation === "vertical") {
|
|
30604
|
-
return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(
|
|
30765
|
+
return /* @__PURE__ */ jsx(VStack, { gap: "none", className: cn("w-full", className), children: steps.map((step, index) => /* @__PURE__ */ jsx(React74__default.Fragment, { children: /* @__PURE__ */ jsxs(HStack, { gap: "md", align: "start", className: "w-full", children: [
|
|
30605
30766
|
/* @__PURE__ */ jsxs(VStack, { gap: "none", align: "center", children: [
|
|
30606
30767
|
/* @__PURE__ */ jsx(StepCircle, { step, index }),
|
|
30607
30768
|
showConnectors && index < steps.length - 1 && /* @__PURE__ */ jsx(Box, { className: "w-px h-8 bg-border" })
|
|
@@ -30612,7 +30773,7 @@ var init_StepFlow = __esm({
|
|
|
30612
30773
|
] })
|
|
30613
30774
|
] }) }, index)) });
|
|
30614
30775
|
}
|
|
30615
|
-
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(
|
|
30776
|
+
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(React74__default.Fragment, { children: [
|
|
30616
30777
|
/* @__PURE__ */ jsxs(VStack, { gap: "sm", align: "center", className: "flex-1 w-full md:w-auto", children: [
|
|
30617
30778
|
/* @__PURE__ */ jsx(StepCircle, { step, index }),
|
|
30618
30779
|
/* @__PURE__ */ jsx(Typography, { variant: "h4", className: "text-center", children: step.title }),
|
|
@@ -31489,6 +31650,11 @@ var init_VoteStack = __esm({
|
|
|
31489
31650
|
{
|
|
31490
31651
|
className: cn(
|
|
31491
31652
|
"inline-flex items-center justify-center",
|
|
31653
|
+
// Shrink-wrap in stretch contexts (slot/sidecar wrappers are
|
|
31654
|
+
// flex-column with stretch alignment): without this the root spans
|
|
31655
|
+
// the full wrapper width and the count row's `w-full` turns the
|
|
31656
|
+
// compact pill into a page-wide band.
|
|
31657
|
+
"w-fit",
|
|
31492
31658
|
variant === "vertical" ? "flex-col" : "flex-row",
|
|
31493
31659
|
"rounded-sm",
|
|
31494
31660
|
"border-[length:var(--border-width)] border-border",
|
|
@@ -31513,7 +31679,7 @@ var init_VoteStack = __esm({
|
|
|
31513
31679
|
isUp ? "text-primary" : "text-muted-foreground",
|
|
31514
31680
|
"hover:bg-muted",
|
|
31515
31681
|
"active:bg-muted",
|
|
31516
|
-
"transition-colors duration-
|
|
31682
|
+
"transition-colors duration-instant",
|
|
31517
31683
|
"disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
|
|
31518
31684
|
"focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
|
|
31519
31685
|
styles.button
|
|
@@ -31550,7 +31716,7 @@ var init_VoteStack = __esm({
|
|
|
31550
31716
|
isDown ? "text-primary" : "text-muted-foreground",
|
|
31551
31717
|
"hover:bg-muted",
|
|
31552
31718
|
"active:bg-muted",
|
|
31553
|
-
"transition-colors duration-
|
|
31719
|
+
"transition-colors duration-instant",
|
|
31554
31720
|
"disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:bg-transparent",
|
|
31555
31721
|
"focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
|
|
31556
31722
|
styles.button
|
|
@@ -31597,7 +31763,7 @@ var init_LikertScale = __esm({
|
|
|
31597
31763
|
md: "text-base",
|
|
31598
31764
|
lg: "text-lg"
|
|
31599
31765
|
};
|
|
31600
|
-
LikertScale =
|
|
31766
|
+
LikertScale = React74__default.forwardRef(
|
|
31601
31767
|
({
|
|
31602
31768
|
question,
|
|
31603
31769
|
options = DEFAULT_LIKERT_OPTIONS,
|
|
@@ -31609,7 +31775,7 @@ var init_LikertScale = __esm({
|
|
|
31609
31775
|
variant = "radios",
|
|
31610
31776
|
className
|
|
31611
31777
|
}, ref) => {
|
|
31612
|
-
const groupId =
|
|
31778
|
+
const groupId = React74__default.useId();
|
|
31613
31779
|
const eventBus = useEventBus();
|
|
31614
31780
|
const handleSelect = useCallback(
|
|
31615
31781
|
(next) => {
|
|
@@ -31662,7 +31828,7 @@ var init_LikertScale = __esm({
|
|
|
31662
31828
|
disabled,
|
|
31663
31829
|
onClick: () => handleSelect(opt.value),
|
|
31664
31830
|
className: cn(
|
|
31665
|
-
"flex-1 text-center font-medium transition-colors duration-
|
|
31831
|
+
"flex-1 text-center font-medium transition-colors duration-instant",
|
|
31666
31832
|
"focus:outline-none focus:ring-[length:var(--focus-ring-width)] focus:ring-ring focus:ring-inset",
|
|
31667
31833
|
"disabled:cursor-not-allowed",
|
|
31668
31834
|
"rounded-none gap-0 shadow-none border-none",
|
|
@@ -33891,7 +34057,7 @@ var init_DocBreadcrumb = __esm({
|
|
|
33891
34057
|
"aria-label": t("aria.breadcrumb"),
|
|
33892
34058
|
children: /* @__PURE__ */ jsx(HStack, { gap: "xs", align: "center", wrap: true, children: items.map((item, idx) => {
|
|
33893
34059
|
const isLast = idx === items.length - 1;
|
|
33894
|
-
return /* @__PURE__ */ jsxs(
|
|
34060
|
+
return /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
|
|
33895
34061
|
idx > 0 && /* @__PURE__ */ jsx(
|
|
33896
34062
|
Icon,
|
|
33897
34063
|
{
|
|
@@ -34760,7 +34926,7 @@ var init_MiniStateMachine = __esm({
|
|
|
34760
34926
|
const x = 2 + i * (NODE_W + GAP2 + ARROW_W + GAP2);
|
|
34761
34927
|
const tc = transitionCounts[s.name] ?? 0;
|
|
34762
34928
|
const role = getStateRole(s.name, s.isInitial ?? void 0, s.isTerminal ?? void 0, tc, maxTC);
|
|
34763
|
-
return /* @__PURE__ */ jsxs(
|
|
34929
|
+
return /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
|
|
34764
34930
|
/* @__PURE__ */ jsx(
|
|
34765
34931
|
AvlState,
|
|
34766
34932
|
{
|
|
@@ -34964,7 +35130,7 @@ var init_PageHeader = __esm({
|
|
|
34964
35130
|
info: "bg-info/10 text-info"
|
|
34965
35131
|
};
|
|
34966
35132
|
return /* @__PURE__ */ jsxs(Box, { className: cn("mb-6", className), children: [
|
|
34967
|
-
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(
|
|
35133
|
+
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(React74__default.Fragment, { children: [
|
|
34968
35134
|
idx > 0 && /* @__PURE__ */ jsx(Typography, { variant: "small", color: "muted", children: "/" }),
|
|
34969
35135
|
crumb.href ? /* @__PURE__ */ jsx(
|
|
34970
35136
|
"a",
|
|
@@ -35322,7 +35488,7 @@ var init_Section = __esm({
|
|
|
35322
35488
|
as: Component = "section"
|
|
35323
35489
|
}) => {
|
|
35324
35490
|
const hasHeader = title || description || action;
|
|
35325
|
-
return
|
|
35491
|
+
return React74__default.createElement(
|
|
35326
35492
|
Component,
|
|
35327
35493
|
{
|
|
35328
35494
|
className: cn(
|
|
@@ -35389,12 +35555,12 @@ var init_Sidebar = __esm({
|
|
|
35389
35555
|
variant: "ghost",
|
|
35390
35556
|
onClick: item.onClick,
|
|
35391
35557
|
className: cn(
|
|
35392
|
-
"w-full flex items-center gap-3 px-3 py-2.5 transition-all duration-
|
|
35558
|
+
"w-full flex items-center gap-3 px-3 py-2.5 transition-all duration-fast group relative",
|
|
35393
35559
|
"rounded-sm border-[length:var(--border-width-thin)] border-transparent",
|
|
35394
35560
|
isActive ? [
|
|
35395
35561
|
"bg-primary text-primary-foreground",
|
|
35396
35562
|
"font-medium shadow-sm",
|
|
35397
|
-
"border-primary translate-x-1 -translate-y-0.5"
|
|
35563
|
+
"border-primary translate-x-1 rtl:-translate-x-1 -translate-y-0.5"
|
|
35398
35564
|
].join(" ") : [
|
|
35399
35565
|
"text-foreground",
|
|
35400
35566
|
"hover:bg-muted hover:border-border",
|
|
@@ -35404,10 +35570,10 @@ var init_Sidebar = __esm({
|
|
|
35404
35570
|
title: collapsed ? item.label : void 0,
|
|
35405
35571
|
children: [
|
|
35406
35572
|
item.icon && (typeof item.icon === "string" ? /* @__PURE__ */ jsx(Icon, { name: item.icon, size: "sm", className: cn("min-w-[20px] flex-shrink-0", isActive && "text-primary-foreground") }) : /* @__PURE__ */ jsx(Icon, { icon: item.icon, size: "sm", className: cn("min-w-[20px] flex-shrink-0", isActive && "text-primary-foreground") })),
|
|
35407
|
-
!collapsed && /* @__PURE__ */ jsx(Typography, { variant: "body", color: isActive ? "inherit" : "primary", className: "font-medium truncate flex-1 text-
|
|
35573
|
+
!collapsed && /* @__PURE__ */ jsx(Typography, { variant: "body", color: isActive ? "inherit" : "primary", className: "font-medium truncate flex-1 text-start", children: item.label }),
|
|
35408
35574
|
!collapsed && item.badge !== void 0 && /* @__PURE__ */ jsx(Badge, { variant: "danger", size: "sm", children: item.badge }),
|
|
35409
35575
|
collapsed && /* @__PURE__ */ jsx(Box, { className: cn(
|
|
35410
|
-
"absolute
|
|
35576
|
+
"absolute start-full ms-2 px-2 py-1 text-xs opacity-0 group-hover:opacity-100",
|
|
35411
35577
|
"pointer-events-none whitespace-nowrap z-50 transition-opacity",
|
|
35412
35578
|
"bg-primary text-primary-foreground",
|
|
35413
35579
|
"border-[length:var(--border-width-thin)] border-border",
|
|
@@ -35462,8 +35628,8 @@ var init_Sidebar = __esm({
|
|
|
35462
35628
|
as: "aside",
|
|
35463
35629
|
className: cn(
|
|
35464
35630
|
"flex flex-col h-full",
|
|
35465
|
-
"bg-card border-
|
|
35466
|
-
"transition-all duration-
|
|
35631
|
+
"bg-card border-e border-border",
|
|
35632
|
+
"transition-all duration-normal ease-standard",
|
|
35467
35633
|
collapsed ? "w-20" : "w-64",
|
|
35468
35634
|
className
|
|
35469
35635
|
),
|
|
@@ -35696,7 +35862,7 @@ var init_WizardContainer = __esm({
|
|
|
35696
35862
|
const isCompleted = index < currentStep;
|
|
35697
35863
|
const stepKey = step.id ?? step.tabId ?? `step-${index}`;
|
|
35698
35864
|
const stepTitle = step.title ?? step.name ?? `Step ${index + 1}`;
|
|
35699
|
-
return /* @__PURE__ */ jsxs(
|
|
35865
|
+
return /* @__PURE__ */ jsxs(React74__default.Fragment, { children: [
|
|
35700
35866
|
/* @__PURE__ */ jsx(
|
|
35701
35867
|
Button,
|
|
35702
35868
|
{
|
|
@@ -36623,7 +36789,7 @@ function resolveColor3(color, el) {
|
|
|
36623
36789
|
function truncateLabel(label) {
|
|
36624
36790
|
return label.length > MAX_LABEL_CHARS ? label.slice(0, MAX_LABEL_CHARS - 1) + "\u2026" : label;
|
|
36625
36791
|
}
|
|
36626
|
-
var GROUP_COLORS2, GROUP_GRAVITY, UNGROUPED_GRAVITY, labelMeasureCtx, MAX_LABEL_CHARS, GraphCanvas;
|
|
36792
|
+
var GROUP_COLORS2, GROUP_GRAVITY, UNGROUPED_GRAVITY, labelMeasureCtx, MAX_LABEL_CHARS, NO_NODES, NO_EDGES, NO_SIM, GraphCanvas;
|
|
36627
36793
|
var init_GraphCanvas = __esm({
|
|
36628
36794
|
"components/core/molecules/GraphCanvas.tsx"() {
|
|
36629
36795
|
"use client";
|
|
@@ -36647,11 +36813,14 @@ var init_GraphCanvas = __esm({
|
|
|
36647
36813
|
UNGROUPED_GRAVITY = 0.02;
|
|
36648
36814
|
labelMeasureCtx = null;
|
|
36649
36815
|
MAX_LABEL_CHARS = 22;
|
|
36816
|
+
NO_NODES = [];
|
|
36817
|
+
NO_EDGES = [];
|
|
36818
|
+
NO_SIM = [];
|
|
36650
36819
|
GraphCanvas = ({
|
|
36651
36820
|
title,
|
|
36652
|
-
nodes: propNodes =
|
|
36653
|
-
edges: propEdges =
|
|
36654
|
-
similarity: propSimilarity =
|
|
36821
|
+
nodes: propNodes = NO_NODES,
|
|
36822
|
+
edges: propEdges = NO_EDGES,
|
|
36823
|
+
similarity: propSimilarity = NO_SIM,
|
|
36655
36824
|
height = 400,
|
|
36656
36825
|
showLabels = true,
|
|
36657
36826
|
interactive = true,
|
|
@@ -36701,6 +36870,7 @@ var init_GraphCanvas = __esm({
|
|
|
36701
36870
|
const interactionRef = useRef({
|
|
36702
36871
|
mode: "none",
|
|
36703
36872
|
dragNodeId: null,
|
|
36873
|
+
pressedNodeId: null,
|
|
36704
36874
|
startMouse: { x: 0, y: 0 },
|
|
36705
36875
|
startOffset: { x: 0, y: 0 },
|
|
36706
36876
|
downPos: { x: 0, y: 0 }
|
|
@@ -36748,6 +36918,11 @@ var init_GraphCanvas = __esm({
|
|
|
36748
36918
|
() => [...new Set(propNodes.map((n) => n.group).filter(Boolean))],
|
|
36749
36919
|
[propNodes]
|
|
36750
36920
|
);
|
|
36921
|
+
const nodesKey = useMemo(() => propNodes.map((n) => n.id).join(""), [propNodes]);
|
|
36922
|
+
const edgesKey = useMemo(
|
|
36923
|
+
() => propEdges.map((e) => `${e.source}${e.target}`).join(""),
|
|
36924
|
+
[propEdges]
|
|
36925
|
+
);
|
|
36751
36926
|
useEffect(() => {
|
|
36752
36927
|
const canvas = canvasRef.current;
|
|
36753
36928
|
if (!canvas || propNodes.length === 0) return;
|
|
@@ -36928,7 +37103,7 @@ var init_GraphCanvas = __esm({
|
|
|
36928
37103
|
return () => {
|
|
36929
37104
|
cancelAnimationFrame(animRef.current);
|
|
36930
37105
|
};
|
|
36931
|
-
}, [
|
|
37106
|
+
}, [nodesKey, edgesKey, propSimilarity, layout, repulsion, linkDistance, nodeSpacing, showLabels]);
|
|
36932
37107
|
useEffect(() => {
|
|
36933
37108
|
const canvas = canvasRef.current;
|
|
36934
37109
|
if (!canvas) return;
|
|
@@ -37058,6 +37233,7 @@ var init_GraphCanvas = __esm({
|
|
|
37058
37233
|
const cancelSinglePointer = useCallback(() => {
|
|
37059
37234
|
interactionRef.current.mode = "none";
|
|
37060
37235
|
interactionRef.current.dragNodeId = null;
|
|
37236
|
+
interactionRef.current.pressedNodeId = null;
|
|
37061
37237
|
}, []);
|
|
37062
37238
|
const handlePointerDown = useCallback(
|
|
37063
37239
|
(e) => {
|
|
@@ -37068,6 +37244,7 @@ var init_GraphCanvas = __esm({
|
|
|
37068
37244
|
state.downPos = { x: e.clientX, y: e.clientY };
|
|
37069
37245
|
state.startMouse = { x: e.clientX, y: e.clientY };
|
|
37070
37246
|
state.startOffset = { ...offset };
|
|
37247
|
+
state.pressedNodeId = node?.id ?? null;
|
|
37071
37248
|
if (draggable && node) {
|
|
37072
37249
|
state.mode = "dragging";
|
|
37073
37250
|
state.dragNodeId = node.id;
|
|
@@ -37119,7 +37296,8 @@ var init_GraphCanvas = __esm({
|
|
|
37119
37296
|
if (moved < 4) {
|
|
37120
37297
|
const coords = toCoords(e);
|
|
37121
37298
|
if (!coords) return;
|
|
37122
|
-
const node = nodeAt(coords.graphX, coords.graphY);
|
|
37299
|
+
const node = (state.pressedNodeId ? nodesRef.current.find((n) => n.id === state.pressedNodeId) : void 0) ?? nodeAt(coords.graphX, coords.graphY);
|
|
37300
|
+
state.pressedNodeId = null;
|
|
37123
37301
|
if (node) {
|
|
37124
37302
|
if (node.badge && node.badge > 1 && onBadgeClick) {
|
|
37125
37303
|
const r = (node.size || 8) + (selectedNodeId === node.id ? 4 : 0);
|
|
@@ -37139,6 +37317,7 @@ var init_GraphCanvas = __esm({
|
|
|
37139
37317
|
);
|
|
37140
37318
|
const handlePointerLeave = useCallback(() => {
|
|
37141
37319
|
setHoveredNode(null);
|
|
37320
|
+
interactionRef.current.pressedNodeId = null;
|
|
37142
37321
|
}, []);
|
|
37143
37322
|
const gestureHandlers = useCanvasGestures({
|
|
37144
37323
|
canvasRef,
|
|
@@ -37453,6 +37632,7 @@ var init_molecules2 = __esm({
|
|
|
37453
37632
|
init_InputGroup();
|
|
37454
37633
|
init_Menu();
|
|
37455
37634
|
init_Modal();
|
|
37635
|
+
init_PageTransition();
|
|
37456
37636
|
init_Pagination();
|
|
37457
37637
|
init_Popover();
|
|
37458
37638
|
init_Coachmark();
|
|
@@ -38503,7 +38683,7 @@ var init_DetailPanel = __esm({
|
|
|
38503
38683
|
}
|
|
38504
38684
|
});
|
|
38505
38685
|
function extractTitle(children) {
|
|
38506
|
-
if (!
|
|
38686
|
+
if (!React74__default.isValidElement(children)) return void 0;
|
|
38507
38687
|
const props = children.props;
|
|
38508
38688
|
if (typeof props.title === "string") {
|
|
38509
38689
|
return props.title;
|
|
@@ -38853,12 +39033,12 @@ var init_Form = __esm({
|
|
|
38853
39033
|
const isSchemaEntity = isOrbitalEntitySchema(entity);
|
|
38854
39034
|
const resolvedEntity = isSchemaEntity ? entity : void 0;
|
|
38855
39035
|
const entityName = typeof entity === "string" ? entity : resolvedEntity?.name;
|
|
38856
|
-
const normalizedInitialData =
|
|
39036
|
+
const normalizedInitialData = React74__default.useMemo(() => {
|
|
38857
39037
|
const entityRowAsInitial = isPlainEntityRow(entity) ? entity : void 0;
|
|
38858
39038
|
const callerInitial = initialData !== null && typeof initialData === "object" && !Array.isArray(initialData) ? initialData : {};
|
|
38859
39039
|
return entityRowAsInitial !== void 0 ? { ...entityRowAsInitial, ...callerInitial } : callerInitial;
|
|
38860
39040
|
}, [entity, initialData]);
|
|
38861
|
-
const entityDerivedFields =
|
|
39041
|
+
const entityDerivedFields = React74__default.useMemo(() => {
|
|
38862
39042
|
if (fields && fields.length > 0) return void 0;
|
|
38863
39043
|
if (!resolvedEntity) return void 0;
|
|
38864
39044
|
return resolvedEntity.fields.map(
|
|
@@ -38879,16 +39059,16 @@ var init_Form = __esm({
|
|
|
38879
39059
|
const conditionalFields = typeof conditionalFieldsRaw === "boolean" ? {} : conditionalFieldsRaw;
|
|
38880
39060
|
const hiddenCalculations = typeof hiddenCalculationsRaw === "boolean" ? [] : hiddenCalculationsRaw;
|
|
38881
39061
|
const violationTriggers = typeof violationTriggersRaw === "boolean" ? [] : violationTriggersRaw;
|
|
38882
|
-
const [formData, setFormData] =
|
|
39062
|
+
const [formData, setFormData] = React74__default.useState(
|
|
38883
39063
|
normalizedInitialData
|
|
38884
39064
|
);
|
|
38885
|
-
const [collapsedSections, setCollapsedSections] =
|
|
39065
|
+
const [collapsedSections, setCollapsedSections] = React74__default.useState(
|
|
38886
39066
|
/* @__PURE__ */ new Set()
|
|
38887
39067
|
);
|
|
38888
|
-
const [submitError, setSubmitError] =
|
|
38889
|
-
const formRef =
|
|
39068
|
+
const [submitError, setSubmitError] = React74__default.useState(null);
|
|
39069
|
+
const formRef = React74__default.useRef(null);
|
|
38890
39070
|
const formMode = props.mode;
|
|
38891
|
-
const mountedRef =
|
|
39071
|
+
const mountedRef = React74__default.useRef(false);
|
|
38892
39072
|
if (!mountedRef.current) {
|
|
38893
39073
|
mountedRef.current = true;
|
|
38894
39074
|
debug("forms", "mount", {
|
|
@@ -38901,7 +39081,7 @@ var init_Form = __esm({
|
|
|
38901
39081
|
});
|
|
38902
39082
|
}
|
|
38903
39083
|
const shouldShowCancel = showCancel ?? (fields && fields.length > 0);
|
|
38904
|
-
const evalContext =
|
|
39084
|
+
const evalContext = React74__default.useMemo(
|
|
38905
39085
|
() => ({
|
|
38906
39086
|
formValues: formData,
|
|
38907
39087
|
globalVariables: externalContext?.globalVariables ?? {},
|
|
@@ -38910,7 +39090,7 @@ var init_Form = __esm({
|
|
|
38910
39090
|
}),
|
|
38911
39091
|
[formData, externalContext]
|
|
38912
39092
|
);
|
|
38913
|
-
|
|
39093
|
+
React74__default.useEffect(() => {
|
|
38914
39094
|
debug("forms", "initialData-sync", {
|
|
38915
39095
|
mode: formMode,
|
|
38916
39096
|
normalizedInitialData,
|
|
@@ -38921,7 +39101,7 @@ var init_Form = __esm({
|
|
|
38921
39101
|
setFormData(normalizedInitialData);
|
|
38922
39102
|
}
|
|
38923
39103
|
}, [normalizedInitialData]);
|
|
38924
|
-
const processCalculations =
|
|
39104
|
+
const processCalculations = React74__default.useCallback(
|
|
38925
39105
|
(changedFieldId, newFormData) => {
|
|
38926
39106
|
if (!hiddenCalculations.length) return;
|
|
38927
39107
|
const context = {
|
|
@@ -38946,7 +39126,7 @@ var init_Form = __esm({
|
|
|
38946
39126
|
},
|
|
38947
39127
|
[hiddenCalculations, externalContext, eventBus]
|
|
38948
39128
|
);
|
|
38949
|
-
const checkViolations =
|
|
39129
|
+
const checkViolations = React74__default.useCallback(
|
|
38950
39130
|
(changedFieldId, newFormData) => {
|
|
38951
39131
|
if (!violationTriggers.length) return;
|
|
38952
39132
|
const context = {
|
|
@@ -38984,7 +39164,7 @@ var init_Form = __esm({
|
|
|
38984
39164
|
processCalculations(name, newFormData);
|
|
38985
39165
|
checkViolations(name, newFormData);
|
|
38986
39166
|
};
|
|
38987
|
-
const isFieldVisible =
|
|
39167
|
+
const isFieldVisible = React74__default.useCallback(
|
|
38988
39168
|
(fieldName) => {
|
|
38989
39169
|
const condition = conditionalFields[fieldName];
|
|
38990
39170
|
if (!condition) return true;
|
|
@@ -38992,7 +39172,7 @@ var init_Form = __esm({
|
|
|
38992
39172
|
},
|
|
38993
39173
|
[conditionalFields, evalContext]
|
|
38994
39174
|
);
|
|
38995
|
-
const isSectionVisible =
|
|
39175
|
+
const isSectionVisible = React74__default.useCallback(
|
|
38996
39176
|
(section) => {
|
|
38997
39177
|
if (!section.condition) return true;
|
|
38998
39178
|
return Boolean(evaluateFormExpression(section.condition, evalContext));
|
|
@@ -39068,7 +39248,7 @@ var init_Form = __esm({
|
|
|
39068
39248
|
eventBus.emit(`UI:${onCancel}`);
|
|
39069
39249
|
}
|
|
39070
39250
|
};
|
|
39071
|
-
const renderField =
|
|
39251
|
+
const renderField = React74__default.useCallback(
|
|
39072
39252
|
(field) => {
|
|
39073
39253
|
const fieldName = field.name || field.field;
|
|
39074
39254
|
if (!fieldName) return null;
|
|
@@ -39089,7 +39269,7 @@ var init_Form = __esm({
|
|
|
39089
39269
|
[formData, isFieldVisible, relationsData, relationsLoading, isLoading]
|
|
39090
39270
|
);
|
|
39091
39271
|
const effectiveFields = entityDerivedFields ?? fields;
|
|
39092
|
-
const normalizedFields =
|
|
39272
|
+
const normalizedFields = React74__default.useMemo(() => {
|
|
39093
39273
|
if (!effectiveFields || effectiveFields.length === 0) return [];
|
|
39094
39274
|
return effectiveFields.map((field) => {
|
|
39095
39275
|
if (typeof field === "string") {
|
|
@@ -39113,7 +39293,7 @@ var init_Form = __esm({
|
|
|
39113
39293
|
return field;
|
|
39114
39294
|
});
|
|
39115
39295
|
}, [effectiveFields, resolvedEntity]);
|
|
39116
|
-
const schemaFields =
|
|
39296
|
+
const schemaFields = React74__default.useMemo(() => {
|
|
39117
39297
|
if (normalizedFields.length === 0) return null;
|
|
39118
39298
|
if (isDebugEnabled()) {
|
|
39119
39299
|
debugGroup(`Form: ${entityName || "unknown"}`);
|
|
@@ -39123,7 +39303,7 @@ var init_Form = __esm({
|
|
|
39123
39303
|
}
|
|
39124
39304
|
return normalizedFields.map(renderField).filter(Boolean);
|
|
39125
39305
|
}, [normalizedFields, renderField, entityName, conditionalFields]);
|
|
39126
|
-
const sectionElements =
|
|
39306
|
+
const sectionElements = React74__default.useMemo(() => {
|
|
39127
39307
|
if (!sections || sections.length === 0) return null;
|
|
39128
39308
|
return sections.map((section) => {
|
|
39129
39309
|
if (!isSectionVisible(section)) {
|
|
@@ -39806,7 +39986,7 @@ var init_List = __esm({
|
|
|
39806
39986
|
Box,
|
|
39807
39987
|
{
|
|
39808
39988
|
className: cn(
|
|
39809
|
-
"h-full rounded-full transition-all duration-
|
|
39989
|
+
"h-full rounded-full transition-all duration-slow",
|
|
39810
39990
|
clampedValue >= 100 ? "bg-success" : clampedValue >= 70 ? "bg-info" : clampedValue >= 40 ? "bg-warning" : "bg-muted-foreground"
|
|
39811
39991
|
),
|
|
39812
39992
|
style: { width: `${clampedValue}%` }
|
|
@@ -39848,7 +40028,7 @@ var init_List = __esm({
|
|
|
39848
40028
|
if (entity && typeof entity === "object" && "id" in entity) return [entity];
|
|
39849
40029
|
return [];
|
|
39850
40030
|
}, [entity]);
|
|
39851
|
-
const getItemActions =
|
|
40031
|
+
const getItemActions = React74__default.useCallback(
|
|
39852
40032
|
(item) => {
|
|
39853
40033
|
if (!itemActions) return [];
|
|
39854
40034
|
if (typeof itemActions === "function") {
|
|
@@ -39975,7 +40155,7 @@ var init_List = __esm({
|
|
|
39975
40155
|
{
|
|
39976
40156
|
className: cn(
|
|
39977
40157
|
"group flex items-center gap-5 px-6 py-5",
|
|
39978
|
-
"transition-all duration-
|
|
40158
|
+
"transition-all duration-normal ease-standard",
|
|
39979
40159
|
hasExplicitClick && "cursor-pointer",
|
|
39980
40160
|
// Hover state
|
|
39981
40161
|
"hover:bg-muted/80",
|
|
@@ -40082,7 +40262,7 @@ var init_List = __esm({
|
|
|
40082
40262
|
variant: "ghost",
|
|
40083
40263
|
action: editAction.event,
|
|
40084
40264
|
className: cn(
|
|
40085
|
-
"p-2 rounded-lg transition-all duration-
|
|
40265
|
+
"p-2 rounded-lg transition-all duration-fast",
|
|
40086
40266
|
"hover:bg-primary/10 hover:text-primary",
|
|
40087
40267
|
"text-muted-foreground",
|
|
40088
40268
|
"active:scale-95"
|
|
@@ -40098,7 +40278,7 @@ var init_List = __esm({
|
|
|
40098
40278
|
variant: "ghost",
|
|
40099
40279
|
action: viewAction.event,
|
|
40100
40280
|
className: cn(
|
|
40101
|
-
"p-2 rounded-lg transition-all duration-
|
|
40281
|
+
"p-2 rounded-lg transition-all duration-fast",
|
|
40102
40282
|
"hover:bg-muted hover:text-foreground",
|
|
40103
40283
|
"text-muted-foreground",
|
|
40104
40284
|
"active:scale-95"
|
|
@@ -40120,7 +40300,7 @@ var init_List = __esm({
|
|
|
40120
40300
|
{
|
|
40121
40301
|
variant: "ghost",
|
|
40122
40302
|
className: cn(
|
|
40123
|
-
"p-2 rounded-lg transition-all duration-
|
|
40303
|
+
"p-2 rounded-lg transition-all duration-fast",
|
|
40124
40304
|
"hover:bg-muted hover:shadow-sm",
|
|
40125
40305
|
"text-muted-foreground hover:text-foreground",
|
|
40126
40306
|
"active:scale-95"
|
|
@@ -40307,8 +40487,17 @@ var init_MediaGallery = __esm({
|
|
|
40307
40487
|
const eventBus = useEventBus();
|
|
40308
40488
|
const { t } = useTranslate();
|
|
40309
40489
|
const [lightboxItem, setLightboxItem] = useState(null);
|
|
40490
|
+
const [failedIds, setFailedIds] = useState(/* @__PURE__ */ new Set());
|
|
40310
40491
|
const closeLightbox = useCallback(() => setLightboxItem(null), []);
|
|
40311
40492
|
useEventListener("UI:LIGHTBOX_CLOSE", closeLightbox);
|
|
40493
|
+
const handleImageError = useCallback((id) => {
|
|
40494
|
+
setFailedIds((prev) => {
|
|
40495
|
+
if (prev.has(id)) return prev;
|
|
40496
|
+
const next = new Set(prev);
|
|
40497
|
+
next.add(id);
|
|
40498
|
+
return next;
|
|
40499
|
+
});
|
|
40500
|
+
}, []);
|
|
40312
40501
|
const handleItemClick = useCallback(
|
|
40313
40502
|
(item) => {
|
|
40314
40503
|
if (selectable) {
|
|
@@ -40323,8 +40512,8 @@ var init_MediaGallery = __esm({
|
|
|
40323
40512
|
[selectable, selectedItems, selectionEvent, eventBus]
|
|
40324
40513
|
);
|
|
40325
40514
|
const entityData = Array.isArray(entity) ? entity : [];
|
|
40326
|
-
const items =
|
|
40327
|
-
if (propItems) return propItems;
|
|
40515
|
+
const items = React74__default.useMemo(() => {
|
|
40516
|
+
if (propItems && propItems.length > 0) return propItems;
|
|
40328
40517
|
if (entityData.length === 0) return [];
|
|
40329
40518
|
return entityData.map((record, idx) => {
|
|
40330
40519
|
return {
|
|
@@ -40401,19 +40590,20 @@ var init_MediaGallery = __esm({
|
|
|
40401
40590
|
{
|
|
40402
40591
|
className: cn(
|
|
40403
40592
|
"group relative overflow-hidden rounded-md cursor-pointer",
|
|
40404
|
-
"border-2 transition-all duration-
|
|
40593
|
+
"border-2 transition-all duration-fast",
|
|
40405
40594
|
isSelected ? "border-primary ring-2 ring-primary/30" : "border-transparent hover:border-border",
|
|
40406
40595
|
ASPECT_CLASSES[aspectRatio]
|
|
40407
40596
|
),
|
|
40408
40597
|
onClick: () => handleItemClick(item),
|
|
40409
40598
|
children: [
|
|
40410
|
-
/* @__PURE__ */ jsx(
|
|
40599
|
+
failedIds.has(item.id) ? /* @__PURE__ */ jsx(Box, { className: "w-full h-full flex items-center justify-center bg-muted text-muted-foreground", children: /* @__PURE__ */ jsx(Icon, { icon: Image$1, size: "lg" }) }) : /* @__PURE__ */ jsx(
|
|
40411
40600
|
"img",
|
|
40412
40601
|
{
|
|
40413
40602
|
src: item.thumbnail || item.src,
|
|
40414
40603
|
alt: item.alt || item.caption || "",
|
|
40415
40604
|
className: "w-full h-full object-cover",
|
|
40416
|
-
loading: "lazy"
|
|
40605
|
+
loading: "lazy",
|
|
40606
|
+
onError: () => handleImageError(item.id)
|
|
40417
40607
|
}
|
|
40418
40608
|
),
|
|
40419
40609
|
/* @__PURE__ */ jsx(
|
|
@@ -40421,14 +40611,14 @@ var init_MediaGallery = __esm({
|
|
|
40421
40611
|
{
|
|
40422
40612
|
className: cn(
|
|
40423
40613
|
"absolute inset-0 bg-foreground/0 group-hover:bg-foreground/20",
|
|
40424
|
-
"transition-colors duration-
|
|
40614
|
+
"transition-colors duration-fast flex items-center justify-center"
|
|
40425
40615
|
),
|
|
40426
40616
|
children: /* @__PURE__ */ jsx(
|
|
40427
40617
|
Icon,
|
|
40428
40618
|
{
|
|
40429
40619
|
icon: ZoomIn,
|
|
40430
40620
|
size: "md",
|
|
40431
|
-
className: "text-white opacity-0 group-hover:opacity-100 transition-opacity duration-
|
|
40621
|
+
className: "text-white opacity-0 group-hover:opacity-100 transition-opacity duration-fast"
|
|
40432
40622
|
}
|
|
40433
40623
|
)
|
|
40434
40624
|
}
|
|
@@ -40486,7 +40676,7 @@ var init_MediaGallery = __esm({
|
|
|
40486
40676
|
}
|
|
40487
40677
|
});
|
|
40488
40678
|
function extractTitle2(children) {
|
|
40489
|
-
if (!
|
|
40679
|
+
if (!React74__default.isValidElement(children)) return void 0;
|
|
40490
40680
|
const props = children.props;
|
|
40491
40681
|
if (typeof props.title === "string") {
|
|
40492
40682
|
return props.title;
|
|
@@ -40741,7 +40931,7 @@ var init_debugRegistry = __esm({
|
|
|
40741
40931
|
}
|
|
40742
40932
|
});
|
|
40743
40933
|
function useDebugData() {
|
|
40744
|
-
const [data, setData] =
|
|
40934
|
+
const [data, setData] = React74.useState(() => ({
|
|
40745
40935
|
traits: [],
|
|
40746
40936
|
ticks: [],
|
|
40747
40937
|
guards: [],
|
|
@@ -40755,7 +40945,7 @@ function useDebugData() {
|
|
|
40755
40945
|
},
|
|
40756
40946
|
lastUpdate: Date.now()
|
|
40757
40947
|
}));
|
|
40758
|
-
|
|
40948
|
+
React74.useEffect(() => {
|
|
40759
40949
|
const updateData = () => {
|
|
40760
40950
|
setData({
|
|
40761
40951
|
traits: getAllTraits(),
|
|
@@ -40864,12 +41054,12 @@ function layoutGraph(states, transitions, initialState, width, height) {
|
|
|
40864
41054
|
return positions;
|
|
40865
41055
|
}
|
|
40866
41056
|
function WalkMinimap() {
|
|
40867
|
-
const [walkStep, setWalkStep] =
|
|
40868
|
-
const [traits2, setTraits] =
|
|
40869
|
-
const [coveredEdges, setCoveredEdges] =
|
|
40870
|
-
const [completedTraits, setCompletedTraits] =
|
|
40871
|
-
const prevTraitRef =
|
|
40872
|
-
|
|
41057
|
+
const [walkStep, setWalkStep] = React74.useState(null);
|
|
41058
|
+
const [traits2, setTraits] = React74.useState([]);
|
|
41059
|
+
const [coveredEdges, setCoveredEdges] = React74.useState([]);
|
|
41060
|
+
const [completedTraits, setCompletedTraits] = React74.useState(/* @__PURE__ */ new Set());
|
|
41061
|
+
const prevTraitRef = React74.useRef(null);
|
|
41062
|
+
React74.useEffect(() => {
|
|
40873
41063
|
const interval = setInterval(() => {
|
|
40874
41064
|
const w = window;
|
|
40875
41065
|
const step = w.__orbitalWalkStep;
|
|
@@ -41305,15 +41495,15 @@ var init_EntitiesTab = __esm({
|
|
|
41305
41495
|
});
|
|
41306
41496
|
function EventFlowTab({ events: events2 }) {
|
|
41307
41497
|
const { t } = useTranslate();
|
|
41308
|
-
const [filter, setFilter] =
|
|
41309
|
-
const containerRef =
|
|
41310
|
-
const [autoScroll, setAutoScroll] =
|
|
41311
|
-
|
|
41498
|
+
const [filter, setFilter] = React74.useState("all");
|
|
41499
|
+
const containerRef = React74.useRef(null);
|
|
41500
|
+
const [autoScroll, setAutoScroll] = React74.useState(true);
|
|
41501
|
+
React74.useEffect(() => {
|
|
41312
41502
|
if (autoScroll && containerRef.current) {
|
|
41313
41503
|
containerRef.current.scrollTop = containerRef.current.scrollHeight;
|
|
41314
41504
|
}
|
|
41315
41505
|
}, [events2.length, autoScroll]);
|
|
41316
|
-
const filteredEvents =
|
|
41506
|
+
const filteredEvents = React74.useMemo(() => {
|
|
41317
41507
|
if (filter === "all") return events2;
|
|
41318
41508
|
return events2.filter((e) => e.type === filter);
|
|
41319
41509
|
}, [events2, filter]);
|
|
@@ -41429,7 +41619,7 @@ var init_EventFlowTab = __esm({
|
|
|
41429
41619
|
});
|
|
41430
41620
|
function GuardsPanel({ guards }) {
|
|
41431
41621
|
const { t } = useTranslate();
|
|
41432
|
-
const [filter, setFilter] =
|
|
41622
|
+
const [filter, setFilter] = React74.useState("all");
|
|
41433
41623
|
if (guards.length === 0) {
|
|
41434
41624
|
return /* @__PURE__ */ jsx(
|
|
41435
41625
|
EmptyState,
|
|
@@ -41442,7 +41632,7 @@ function GuardsPanel({ guards }) {
|
|
|
41442
41632
|
}
|
|
41443
41633
|
const passedCount = guards.filter((g) => g.result).length;
|
|
41444
41634
|
const failedCount = guards.length - passedCount;
|
|
41445
|
-
const filteredGuards =
|
|
41635
|
+
const filteredGuards = React74.useMemo(() => {
|
|
41446
41636
|
if (filter === "all") return guards;
|
|
41447
41637
|
if (filter === "passed") return guards.filter((g) => g.result);
|
|
41448
41638
|
return guards.filter((g) => !g.result);
|
|
@@ -41605,10 +41795,10 @@ function EffectBadge({ effect }) {
|
|
|
41605
41795
|
}
|
|
41606
41796
|
function TransitionTimeline({ transitions }) {
|
|
41607
41797
|
const { t } = useTranslate();
|
|
41608
|
-
const containerRef =
|
|
41609
|
-
const [autoScroll, setAutoScroll] =
|
|
41610
|
-
const [expandedId, setExpandedId] =
|
|
41611
|
-
|
|
41798
|
+
const containerRef = React74.useRef(null);
|
|
41799
|
+
const [autoScroll, setAutoScroll] = React74.useState(true);
|
|
41800
|
+
const [expandedId, setExpandedId] = React74.useState(null);
|
|
41801
|
+
React74.useEffect(() => {
|
|
41612
41802
|
if (autoScroll && containerRef.current) {
|
|
41613
41803
|
containerRef.current.scrollTop = containerRef.current.scrollHeight;
|
|
41614
41804
|
}
|
|
@@ -41888,9 +42078,9 @@ function getAllEvents(traits2) {
|
|
|
41888
42078
|
function EventDispatcherTab({ traits: traits2, schema }) {
|
|
41889
42079
|
const eventBus = useEventBus();
|
|
41890
42080
|
const { t } = useTranslate();
|
|
41891
|
-
const [log19, setLog] =
|
|
41892
|
-
const prevStatesRef =
|
|
41893
|
-
|
|
42081
|
+
const [log19, setLog] = React74.useState([]);
|
|
42082
|
+
const prevStatesRef = React74.useRef(/* @__PURE__ */ new Map());
|
|
42083
|
+
React74.useEffect(() => {
|
|
41894
42084
|
for (const trait of traits2) {
|
|
41895
42085
|
const prev = prevStatesRef.current.get(trait.id);
|
|
41896
42086
|
if (prev && prev !== trait.currentState) {
|
|
@@ -42059,10 +42249,10 @@ function VerifyModePanel({
|
|
|
42059
42249
|
localCount
|
|
42060
42250
|
}) {
|
|
42061
42251
|
const { t } = useTranslate();
|
|
42062
|
-
const [expanded, setExpanded] =
|
|
42063
|
-
const scrollRef =
|
|
42064
|
-
const prevCountRef =
|
|
42065
|
-
|
|
42252
|
+
const [expanded, setExpanded] = React74.useState(true);
|
|
42253
|
+
const scrollRef = React74.useRef(null);
|
|
42254
|
+
const prevCountRef = React74.useRef(0);
|
|
42255
|
+
React74.useEffect(() => {
|
|
42066
42256
|
if (expanded && transitions.length > prevCountRef.current && scrollRef.current) {
|
|
42067
42257
|
scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
|
|
42068
42258
|
}
|
|
@@ -42119,10 +42309,10 @@ function RuntimeDebugger({
|
|
|
42119
42309
|
schema
|
|
42120
42310
|
}) {
|
|
42121
42311
|
const { t } = useTranslate();
|
|
42122
|
-
const [isCollapsed, setIsCollapsed] =
|
|
42123
|
-
const [isVisible, setIsVisible] =
|
|
42312
|
+
const [isCollapsed, setIsCollapsed] = React74.useState(mode === "verify" ? true : defaultCollapsed);
|
|
42313
|
+
const [isVisible, setIsVisible] = React74.useState(mode === "inline" || mode === "verify" || isDebugEnabled2());
|
|
42124
42314
|
const debugData = useDebugData();
|
|
42125
|
-
|
|
42315
|
+
React74.useEffect(() => {
|
|
42126
42316
|
if (mode === "inline") return;
|
|
42127
42317
|
return onDebugToggle((enabled) => {
|
|
42128
42318
|
setIsVisible(enabled);
|
|
@@ -42131,7 +42321,7 @@ function RuntimeDebugger({
|
|
|
42131
42321
|
}
|
|
42132
42322
|
});
|
|
42133
42323
|
}, [mode]);
|
|
42134
|
-
|
|
42324
|
+
React74.useEffect(() => {
|
|
42135
42325
|
if (mode === "inline") return;
|
|
42136
42326
|
const handleKeyDown = (e) => {
|
|
42137
42327
|
if (e.key === "`" && isVisible) {
|
|
@@ -42651,7 +42841,7 @@ var init_StatCard = __esm({
|
|
|
42651
42841
|
const labelToUse = propLabel ?? propTitle;
|
|
42652
42842
|
const eventBus = useEventBus();
|
|
42653
42843
|
const { t } = useTranslate();
|
|
42654
|
-
const handleActionClick =
|
|
42844
|
+
const handleActionClick = React74__default.useCallback(() => {
|
|
42655
42845
|
if (action?.event) {
|
|
42656
42846
|
eventBus.emit(`UI:${action.event}`, {});
|
|
42657
42847
|
}
|
|
@@ -42662,7 +42852,7 @@ var init_StatCard = __esm({
|
|
|
42662
42852
|
const data = Array.isArray(entity) ? entity : entity ? [entity] : [];
|
|
42663
42853
|
const isLoading = externalLoading ?? false;
|
|
42664
42854
|
const error = externalError;
|
|
42665
|
-
const computeMetricValue =
|
|
42855
|
+
const computeMetricValue = React74__default.useCallback(
|
|
42666
42856
|
(metric, items) => {
|
|
42667
42857
|
if (metric.value !== void 0) {
|
|
42668
42858
|
return metric.value;
|
|
@@ -42701,7 +42891,7 @@ var init_StatCard = __esm({
|
|
|
42701
42891
|
},
|
|
42702
42892
|
[]
|
|
42703
42893
|
);
|
|
42704
|
-
const schemaStats =
|
|
42894
|
+
const schemaStats = React74__default.useMemo(() => {
|
|
42705
42895
|
if (!metrics || metrics.length === 0) return null;
|
|
42706
42896
|
return metrics.map((metric) => ({
|
|
42707
42897
|
label: metric.label,
|
|
@@ -42709,7 +42899,7 @@ var init_StatCard = __esm({
|
|
|
42709
42899
|
format: metric.format
|
|
42710
42900
|
}));
|
|
42711
42901
|
}, [metrics, data, computeMetricValue]);
|
|
42712
|
-
const calculatedTrend =
|
|
42902
|
+
const calculatedTrend = React74__default.useMemo(() => {
|
|
42713
42903
|
if (manualTrend !== void 0) return manualTrend;
|
|
42714
42904
|
if (previousValue === void 0 || currentValue2 === void 0)
|
|
42715
42905
|
return void 0;
|
|
@@ -43349,8 +43539,8 @@ var init_SubagentTracePanel = __esm({
|
|
|
43349
43539
|
] });
|
|
43350
43540
|
};
|
|
43351
43541
|
InlineActivityStream = ({ activities, autoScroll = true, className }) => {
|
|
43352
|
-
const endRef =
|
|
43353
|
-
|
|
43542
|
+
const endRef = React74__default.useRef(null);
|
|
43543
|
+
React74__default.useEffect(() => {
|
|
43354
43544
|
if (!autoScroll) return;
|
|
43355
43545
|
endRef.current?.scrollIntoView({ behavior: "smooth", block: "end" });
|
|
43356
43546
|
}, [activities.length, autoScroll]);
|
|
@@ -43444,7 +43634,7 @@ var init_SubagentTracePanel = __esm({
|
|
|
43444
43634
|
};
|
|
43445
43635
|
SubagentRichCard = ({ subagent }) => {
|
|
43446
43636
|
const { t } = useTranslate();
|
|
43447
|
-
const activities =
|
|
43637
|
+
const activities = React74__default.useMemo(
|
|
43448
43638
|
() => subagentMessagesToActivities(subagent.messages),
|
|
43449
43639
|
[subagent.messages]
|
|
43450
43640
|
);
|
|
@@ -43521,8 +43711,8 @@ var init_SubagentTracePanel = __esm({
|
|
|
43521
43711
|
] });
|
|
43522
43712
|
};
|
|
43523
43713
|
CoordinatorConversation = ({ messages, autoScroll = true, className }) => {
|
|
43524
|
-
const endRef =
|
|
43525
|
-
|
|
43714
|
+
const endRef = React74__default.useRef(null);
|
|
43715
|
+
React74__default.useEffect(() => {
|
|
43526
43716
|
if (!autoScroll) return;
|
|
43527
43717
|
endRef.current?.scrollIntoView({ behavior: "smooth", block: "end" });
|
|
43528
43718
|
}, [messages.length, autoScroll]);
|
|
@@ -43901,6 +44091,11 @@ var init_TeamOrganism = __esm({
|
|
|
43901
44091
|
TeamOrganism.displayName = "TeamOrganism";
|
|
43902
44092
|
}
|
|
43903
44093
|
});
|
|
44094
|
+
function formatDate4(value) {
|
|
44095
|
+
const d = new Date(value);
|
|
44096
|
+
if (isNaN(d.getTime())) return value;
|
|
44097
|
+
return d.toLocaleDateString(void 0, { year: "numeric", month: "short", day: "numeric" });
|
|
44098
|
+
}
|
|
43904
44099
|
var lookStyles10, STATUS_STYLES2, Timeline;
|
|
43905
44100
|
var init_Timeline = __esm({
|
|
43906
44101
|
"components/core/organisms/Timeline.tsx"() {
|
|
@@ -43952,7 +44147,7 @@ var init_Timeline = __esm({
|
|
|
43952
44147
|
}) => {
|
|
43953
44148
|
const { t } = useTranslate();
|
|
43954
44149
|
const entityData = entity ?? [];
|
|
43955
|
-
const items =
|
|
44150
|
+
const items = React74__default.useMemo(() => {
|
|
43956
44151
|
if (propItems) return propItems;
|
|
43957
44152
|
if (entityData.length === 0) return [];
|
|
43958
44153
|
return entityData.map((record, idx) => {
|
|
@@ -44028,7 +44223,7 @@ var init_Timeline = __esm({
|
|
|
44028
44223
|
/* @__PURE__ */ jsxs(VStack, { gap: "xs", className: cn("flex-1 min-w-0", !isLast && "pb-6"), children: [
|
|
44029
44224
|
/* @__PURE__ */ jsxs(HStack, { justify: "between", align: "start", wrap: true, children: [
|
|
44030
44225
|
/* @__PURE__ */ jsx(Typography, { variant: "body", weight: "semibold", children: item.title }),
|
|
44031
|
-
item.date && /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "secondary", className: "flex-shrink-0", children: item.date })
|
|
44226
|
+
item.date && /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "secondary", className: "flex-shrink-0", children: formatDate4(item.date) })
|
|
44032
44227
|
] }),
|
|
44033
44228
|
item.description && /* @__PURE__ */ jsx(Typography, { variant: "small", color: "secondary", children: item.description }),
|
|
44034
44229
|
item.tags && item.tags.length > 0 && /* @__PURE__ */ jsx(HStack, { gap: "xs", wrap: true, children: item.tags.map((tag, tagIdx) => /* @__PURE__ */ jsx(Badge, { variant: "default", children: tag }, tagIdx)) }),
|
|
@@ -44054,7 +44249,7 @@ var init_Timeline = __esm({
|
|
|
44054
44249
|
}
|
|
44055
44250
|
});
|
|
44056
44251
|
function extractToastProps(children) {
|
|
44057
|
-
if (!
|
|
44252
|
+
if (!React74__default.isValidElement(children)) {
|
|
44058
44253
|
if (typeof children === "string") {
|
|
44059
44254
|
return { message: children };
|
|
44060
44255
|
}
|
|
@@ -44096,7 +44291,7 @@ var init_ToastSlot = __esm({
|
|
|
44096
44291
|
eventBus.emit(`${prefix}CLOSE`);
|
|
44097
44292
|
};
|
|
44098
44293
|
if (!isVisible) return null;
|
|
44099
|
-
const isCustomContent =
|
|
44294
|
+
const isCustomContent = React74__default.isValidElement(children) && !message;
|
|
44100
44295
|
return /* @__PURE__ */ jsx(Box, { className: "fixed bottom-4 right-4 z-50", children: isCustomContent ? children : /* @__PURE__ */ jsx(
|
|
44101
44296
|
Toast,
|
|
44102
44297
|
{
|
|
@@ -44144,6 +44339,7 @@ var init_component_registry_generated = __esm({
|
|
|
44144
44339
|
init_LayoutPatterns();
|
|
44145
44340
|
init_BranchingLogicBuilder();
|
|
44146
44341
|
init_Breadcrumb();
|
|
44342
|
+
init_ButtonGroup();
|
|
44147
44343
|
init_CTABanner();
|
|
44148
44344
|
init_CalendarGrid();
|
|
44149
44345
|
init_Canvas();
|
|
@@ -44214,8 +44410,8 @@ var init_component_registry_generated = __esm({
|
|
|
44214
44410
|
init_FlipContainer();
|
|
44215
44411
|
init_FloatingActionButton();
|
|
44216
44412
|
init_Form();
|
|
44217
|
-
init_FormSection();
|
|
44218
44413
|
init_FormField();
|
|
44414
|
+
init_FormSection();
|
|
44219
44415
|
init_FormSectionHeader();
|
|
44220
44416
|
init_GameAudioToggle();
|
|
44221
44417
|
init_GameHud();
|
|
@@ -44401,6 +44597,7 @@ var init_component_registry_generated = __esm({
|
|
|
44401
44597
|
"BranchingLogicBuilder": BranchingLogicBuilder,
|
|
44402
44598
|
"Breadcrumb": Breadcrumb,
|
|
44403
44599
|
"Button": ButtonPattern,
|
|
44600
|
+
"ButtonGroup": ButtonGroup,
|
|
44404
44601
|
"ButtonPattern": ButtonPattern,
|
|
44405
44602
|
"CTABanner": CTABanner,
|
|
44406
44603
|
"CalendarGrid": CalendarGrid,
|
|
@@ -44474,7 +44671,6 @@ var init_component_registry_generated = __esm({
|
|
|
44474
44671
|
"FlipContainer": FlipContainer,
|
|
44475
44672
|
"FloatingActionButton": FloatingActionButton,
|
|
44476
44673
|
"Form": Form,
|
|
44477
|
-
"FormActions": FormActions,
|
|
44478
44674
|
"FormField": FormField,
|
|
44479
44675
|
"FormLayout": FormLayout,
|
|
44480
44676
|
"FormSectionHeader": FormSectionHeader,
|
|
@@ -44654,7 +44850,7 @@ function SuspenseConfigProvider({
|
|
|
44654
44850
|
config,
|
|
44655
44851
|
children
|
|
44656
44852
|
}) {
|
|
44657
|
-
return
|
|
44853
|
+
return React74__default.createElement(
|
|
44658
44854
|
SuspenseConfigContext.Provider,
|
|
44659
44855
|
{ value: config },
|
|
44660
44856
|
children
|
|
@@ -44696,7 +44892,7 @@ function enrichFormFields(fields, entityDef) {
|
|
|
44696
44892
|
}
|
|
44697
44893
|
return { name: field, label: field.replace(/([a-z])([A-Z])/g, "$1 $2").replace(/\b\w/g, (c) => c.toUpperCase()) };
|
|
44698
44894
|
}
|
|
44699
|
-
if (field && typeof field === "object" && !Array.isArray(field) && !
|
|
44895
|
+
if (field && typeof field === "object" && !Array.isArray(field) && !React74__default.isValidElement(field) && !(field instanceof Date)) {
|
|
44700
44896
|
const obj = field;
|
|
44701
44897
|
const fieldName = typeof obj.name === "string" ? obj.name : typeof obj.field === "string" ? obj.field : void 0;
|
|
44702
44898
|
if (!fieldName) return field;
|
|
@@ -45149,7 +45345,7 @@ function renderPatternChildren(children, onDismiss, parentId = "root", parentPat
|
|
|
45149
45345
|
const key = `${parentId}-${index}-trait:${traitName}`;
|
|
45150
45346
|
return /* @__PURE__ */ jsx(TraitFrame, { traitName }, key);
|
|
45151
45347
|
}
|
|
45152
|
-
return /* @__PURE__ */ jsx(
|
|
45348
|
+
return /* @__PURE__ */ jsx(React74__default.Fragment, { children: child }, `${parentId}-${index}`);
|
|
45153
45349
|
}
|
|
45154
45350
|
if (!child || typeof child !== "object") return null;
|
|
45155
45351
|
const childId = `${parentId}-${index}`;
|
|
@@ -45202,14 +45398,14 @@ function isPatternConfig(value) {
|
|
|
45202
45398
|
if (value === null || value === void 0) return false;
|
|
45203
45399
|
if (typeof value !== "object") return false;
|
|
45204
45400
|
if (Array.isArray(value)) return false;
|
|
45205
|
-
if (
|
|
45401
|
+
if (React74__default.isValidElement(value)) return false;
|
|
45206
45402
|
if (value instanceof Date) return false;
|
|
45207
45403
|
if (typeof value === "function") return false;
|
|
45208
45404
|
const record = value;
|
|
45209
45405
|
return "type" in record && typeof record.type === "string" && getComponentForPattern$1(record.type) !== null;
|
|
45210
45406
|
}
|
|
45211
45407
|
function isPlainConfigObject(value) {
|
|
45212
|
-
if (
|
|
45408
|
+
if (React74__default.isValidElement(value)) return false;
|
|
45213
45409
|
if (value instanceof Date) return false;
|
|
45214
45410
|
const proto = Object.getPrototypeOf(value);
|
|
45215
45411
|
return proto === Object.prototype || proto === null;
|
|
@@ -45240,7 +45436,7 @@ function substituteTraitRefsDeep(value, pathKey) {
|
|
|
45240
45436
|
}
|
|
45241
45437
|
return value;
|
|
45242
45438
|
}
|
|
45243
|
-
function renderPatternProps(props, onDismiss) {
|
|
45439
|
+
function renderPatternProps(props, onDismiss, propsSchema) {
|
|
45244
45440
|
const rendered = {};
|
|
45245
45441
|
for (const [key, value] of Object.entries(props)) {
|
|
45246
45442
|
if (key === "children") {
|
|
@@ -45258,9 +45454,10 @@ function renderPatternProps(props, onDismiss) {
|
|
|
45258
45454
|
};
|
|
45259
45455
|
rendered[key] = /* @__PURE__ */ jsx(SlotContentRenderer, { content: childContent, onDismiss });
|
|
45260
45456
|
} else if (Array.isArray(value)) {
|
|
45457
|
+
const isDataArray = propsSchema?.[key]?.items?.types?.includes("object") ?? false;
|
|
45261
45458
|
rendered[key] = value.map((item, i) => {
|
|
45262
45459
|
const el = item;
|
|
45263
|
-
if (isPatternConfig(el)) {
|
|
45460
|
+
if (!isDataArray && isPatternConfig(el)) {
|
|
45264
45461
|
const nestedProps = {};
|
|
45265
45462
|
for (const [k, v] of Object.entries(el)) {
|
|
45266
45463
|
if (k !== "type") nestedProps[k] = v;
|
|
@@ -45336,7 +45533,7 @@ function SlotContentRenderer({
|
|
|
45336
45533
|
for (const slotKey of CONTENT_NODE_SLOTS) {
|
|
45337
45534
|
const slotVal = restProps[slotKey];
|
|
45338
45535
|
if (slotVal === void 0 || slotVal === null) continue;
|
|
45339
|
-
if (
|
|
45536
|
+
if (React74__default.isValidElement(slotVal) || typeof slotVal === "string" || typeof slotVal === "number" || typeof slotVal === "boolean") continue;
|
|
45340
45537
|
if (Array.isArray(slotVal) || typeof slotVal === "object" && "type" in slotVal) {
|
|
45341
45538
|
nodeSlotOverrides[slotKey] = renderPatternChildren(
|
|
45342
45539
|
slotVal,
|
|
@@ -45348,14 +45545,15 @@ function SlotContentRenderer({
|
|
|
45348
45545
|
);
|
|
45349
45546
|
}
|
|
45350
45547
|
}
|
|
45351
|
-
const renderedProps = renderPatternProps(restProps, onDismiss);
|
|
45352
45548
|
const patternDef = getPatternDefinition$1(content.pattern);
|
|
45353
45549
|
const propsSchema = patternDef?.propsSchema;
|
|
45550
|
+
const renderedProps = renderPatternProps(restProps, onDismiss, propsSchema);
|
|
45354
45551
|
if (propsSchema) {
|
|
45355
45552
|
for (const [propKey, propValue] of Object.entries(renderedProps)) {
|
|
45356
45553
|
if (typeof propValue !== "string") continue;
|
|
45357
45554
|
const propDef = propsSchema[propKey];
|
|
45358
45555
|
if (!propDef || propDef.kind !== "callback") continue;
|
|
45556
|
+
if (propValue === "") continue;
|
|
45359
45557
|
renderedProps[propKey] = wrapCallbackForEvent(
|
|
45360
45558
|
`UI:${propValue}`,
|
|
45361
45559
|
propDef.callbackArgs,
|
|
@@ -45388,7 +45586,7 @@ function SlotContentRenderer({
|
|
|
45388
45586
|
const resolvedItems = Array.isArray(entityVal) && entityVal[0] !== "fn" ? entityVal : null;
|
|
45389
45587
|
if (resolvedItems && resolvedItems.length > 0 && !finalProps.fields && !finalProps.columns) {
|
|
45390
45588
|
const sample = resolvedItems[0];
|
|
45391
|
-
if (sample && typeof sample === "object" && !Array.isArray(sample) && !
|
|
45589
|
+
if (sample && typeof sample === "object" && !Array.isArray(sample) && !React74__default.isValidElement(sample) && !(sample instanceof Date)) {
|
|
45392
45590
|
const keys = Object.keys(sample).filter((k) => k !== "id" && k !== "_id");
|
|
45393
45591
|
finalProps.fields = keys.map((k, i) => ({ name: k, variant: i === 0 ? "h4" : "body" }));
|
|
45394
45592
|
}
|
|
@@ -45667,6 +45865,7 @@ var init_atoms = __esm({
|
|
|
45667
45865
|
init_Typography();
|
|
45668
45866
|
init_ThemeToggle();
|
|
45669
45867
|
init_Overlay();
|
|
45868
|
+
init_Presence();
|
|
45670
45869
|
init_FlipContainer();
|
|
45671
45870
|
init_Dialog();
|
|
45672
45871
|
init_Aside();
|
|
@@ -47144,6 +47343,16 @@ function useSharedEntityStore() {
|
|
|
47144
47343
|
}
|
|
47145
47344
|
return storeRef.current;
|
|
47146
47345
|
}
|
|
47346
|
+
var SharedEntityStoreContext = createContext(null);
|
|
47347
|
+
function useSharedEntityStoreContext() {
|
|
47348
|
+
const store = useContext(SharedEntityStoreContext);
|
|
47349
|
+
if (!store) {
|
|
47350
|
+
throw new Error(
|
|
47351
|
+
"useSharedEntityStoreContext: no SharedEntityStoreContext.Provider found in the component tree"
|
|
47352
|
+
);
|
|
47353
|
+
}
|
|
47354
|
+
return store;
|
|
47355
|
+
}
|
|
47147
47356
|
function useSharedEntitySnapshot(store, entityId) {
|
|
47148
47357
|
return useSyncExternalStore(
|
|
47149
47358
|
(onStoreChange) => store.subscribe(entityId, onStoreChange),
|
|
@@ -48023,4 +48232,4 @@ function useGitHubBranches(owner, repo, enabled = true) {
|
|
|
48023
48232
|
});
|
|
48024
48233
|
}
|
|
48025
48234
|
|
|
48026
|
-
export { ALL_PRESETS, ALMADAR_DND_MIME, AR_BOOK_FIELDS, AboutPageTemplate, Accordion, Card2 as ActionCard, ActionPalette, ActionTile, ActivationBlock, Alert, AlgorithmCanvas, AnimatedCounter, AnimatedGraphic, AnimatedReveal, ArticleSection, Aside, AssetPicker, AtlasImage, AtlasPanel, AuthLayout, Avatar, Badge, BehaviorView, BiologyCanvas, BloomQuizBlock, BookChapterView, BookCoverPage, BookNavBar, BookTableOfContents, BookViewer, Box, BranchingLogicBuilder, Breadcrumb, Button, ButtonGroup, CTABanner, CalendarGrid, Canvas, Canvas2D, Card, CardBody, CardContent, CardFooter, CardGrid, CardHeader, CardTitle, Carousel, CaseStudyCard, CaseStudyOrganism, Center, Chart, ChartLegend, ChatBar, Checkbox, ChemistryCanvas, ChoiceButton, Coachmark, CodeBlock, CodeRunnerPanel, CollapsibleSection, CommunityLinks, ConditionalWrapper, ConfettiEffect, ConfirmDialog, ConnectionBlock, Container, ContentRenderer, ContentSection, ControlButton, ControlGrid, CounterTemplate, DEFAULT_LIKERT_OPTIONS, DEFAULT_MATRIX_COLUMNS, DEFAULT_SLOTS, DIAMOND_TOP_Y, DashboardGrid, DashboardLayout, DataGrid, DataList, DataTable, DateRangePicker, DateRangeSelector, DayCell, DetailPanel, Dialog, DialogueBubble, Divider, DocBreadcrumb, DocPagination, DocSearch, DocSidebar, DocTOC, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, ELEMENT_SELECTED_EVENT, EdgeDecoration, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EmptyState, EntityDisplayEvents, ErrorBoundary, ErrorState, FEATURE_COLORS, FEATURE_TYPES, FLOOR_HEIGHT, FeatureCard, FeatureDetailPageTemplate, FeatureGrid, FeatureGridOrganism, FileTree, FilterGroup, FilterPill, Flex, FlipCard, FlipContainer, FloatingActionButton, Form, FormActions, FormField, FormLayout, FormSection, FormSectionHeader, GameAudioToggle, GameHud, GameIcon, GameMenu, GameShell, GenericAppTemplate, GeometricPattern, GradientDivider, GraphCanvas, GraphView, Grid, GridPicker, HStack, Header, HealthBar, HeroOrganism, HeroSection, I18nProvider, IDENTITY_BOOK_FIELDS, Icon, IconPicker, InfiniteScrollSentinel, Input, InputGroup, InstallBox, JazariStateMachine, JsonTreeEditor, Label, LandingPageTemplate, LawReferenceTooltip, LearningCanvas, Lightbox, LikertScale, LineChart2 as LineChart, List3 as List, LoadingState, MapView, MarkdownContent, MarketingFooter, MarketingStatCard, MasterDetail, MasterDetailLayout, MathCanvas, MatrixQuestion, MediaGallery, Menu, Meter, Modal, ModalSlot, ModuleCard, Navigation, NodeSlotEditor, NotifyListener, NumberStepper, OnboardingSpotlight, OptionConstraintGroup, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, Pagination, PatternTile, PhysicsCanvas, Popover, PositionedCanvas, PricingCard, PricingGrid, PricingOrganism, PricingPageTemplate, ProgressBar, ProgressDots, PropertyInspector, PullQuote, PullToRefresh, QrScanner, QuizBlock, Radio, RangeSlider, ReflectionBlock, RelationSelect, RepeatableFormSection, ReplyTree, RichBlockEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, ScoreDisplay, SearchInput, Section, SectionHeader, SegmentRenderer, Select, SequenceBar, ServiceCatalog, ShowcaseCard, ShowcaseOrganism, SidePanel, Sidebar, SignaturePad, SimpleGrid, Skeleton, SlotContentRenderer, SocialProof, SortableList, Spacer, Sparkline, Spinner, Split, SplitPane, SplitSection, Stack, StarRating, StatBadge, StatCard, StatDisplay, StateGraph, StateJsonView, StateMachineView, StateNode2 as StateNode, StatsGrid, StatsOrganism, StatusBar, StatusDot, StepFlow, StepFlowOrganism, SubagentTracePanel, SvgBranch, SvgConnection, SvgFlow, SvgGrid, SvgLobe, SvgMesh, SvgMorph, SvgNode, SvgPulse, SvgRing, SvgShield, SvgStack, SwipeableRow, Switch, TERRAIN_COLORS, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, TableView, Tabs, TagCloud, TagInput, TeamCard, TeamOrganism, TerrainPalette, TextHighlight, Textarea, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TraitFrame, TraitSlot, TraitStateViewer, TransitionArrow, TrendIndicator, TypewriterText, Typography, UISlotComponent, UISlotRenderer, UploadDropZone, VStack, VersionDiff, ViolationAlert, VoteStack, WizardContainer, WizardNavigation, WizardProgress, boardEntity, bool, calculateAttackTargets, calculateValidMoves, cn, createInitialGameState, createSharedEntityStore, createTranslate, createUnitAnimationState, getCurrentFrame, getTileDimensions, inferDirection, isoToScreen, makeAsset, makeAssetMap, mapBookData, num, objAvailableActions, objAvailableEvents, objCurrentState, objIcon, objId, objMaxRules, objName, objRules, objStates, parseEditFocus, parseLessonSegments, parseMarkdownWithCodeBlocks, parseQueryBinding, pendulum, projectileMotion, resolveFieldMap, resolveFrame, resolveSheetDirection, rows, runTickFrame, screenToIso, springOscillator, str, tickAnimationState, toCodeLanguage, transitionAnimation, unitHealth, unitPosition, unitTeam, useAgentChat, useAnchorRect, useAtlasSliceDataUrl, useAuthContext, useCamera, useCanvasGestures, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useDragReorder, useDraggable, useDropZone, useEmitEvent, useEventBus, useEventListener, useExtensions, useFileEditor, useFileSystem, useGameAudio, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useImageCache, useInfiniteScroll, useLongPress, useOrbitalHistory, usePreview, usePullToRefresh, useQuerySingleton, useRenderInterpolation, useSharedEntitySnapshot, useSharedEntityStore, useSwipeGesture, useTapReveal, useTraitListens, useTranslate115 as useTranslate, useUIEvents, useUISlotManager, useUnitSpriteAtlas, useValidation, vec2 };
|
|
48235
|
+
export { ALL_PRESETS, ALMADAR_DND_MIME, AR_BOOK_FIELDS, AboutPageTemplate, Accordion, Card2 as ActionCard, ActionPalette, ActionTile, ActivationBlock, Alert, AlgorithmCanvas, AnimatedCounter, AnimatedGraphic, AnimatedReveal, ArticleSection, Aside, AssetPicker, AtlasImage, AtlasPanel, AuthLayout, Avatar, Badge, BehaviorView, BiologyCanvas, BloomQuizBlock, BookChapterView, BookCoverPage, BookNavBar, BookTableOfContents, BookViewer, Box, BranchingLogicBuilder, Breadcrumb, Button, ButtonGroup, CTABanner, CalendarGrid, Canvas, Canvas2D, Card, CardBody, CardContent, CardFooter, CardGrid, CardHeader, CardTitle, Carousel, CaseStudyCard, CaseStudyOrganism, Center, Chart, ChartLegend, ChatBar, Checkbox, ChemistryCanvas, ChoiceButton, Coachmark, CodeBlock, CodeRunnerPanel, CollapsibleSection, CommunityLinks, ConditionalWrapper, ConfettiEffect, ConfirmDialog, ConnectionBlock, Container, ContentRenderer, ContentSection, ControlButton, ControlGrid, CounterTemplate, DEFAULT_LIKERT_OPTIONS, DEFAULT_MATRIX_COLUMNS, DEFAULT_SLOTS, DIAMOND_TOP_Y, DashboardGrid, DashboardLayout, DataGrid, DataList, DataTable, DateRangePicker, DateRangeSelector, DayCell, DetailPanel, Dialog, DialogueBubble, Divider, DocBreadcrumb, DocPagination, DocSearch, DocSidebar, DocTOC, DocumentViewer, StateMachineView as DomStateMachineVisualizer, Drawer, DrawerSlot, ELEMENT_SELECTED_EVENT, EdgeDecoration, EditorCheckbox, EditorSelect, EditorSlider, EditorTextInput, EditorToolbar, EmptyState, EntityDisplayEvents, ErrorBoundary, ErrorState, FEATURE_COLORS, FEATURE_TYPES, FLOOR_HEIGHT, FeatureCard, FeatureDetailPageTemplate, FeatureGrid, FeatureGridOrganism, FileTree, FilterGroup, FilterPill, Flex, FlipCard, FlipContainer, FloatingActionButton, Form, FormActions, FormField, FormLayout, FormSection, FormSectionHeader, GameAudioToggle, GameHud, GameIcon, GameMenu, GameShell, GenericAppTemplate, GeometricPattern, GradientDivider, GraphCanvas, GraphView, Grid, GridPicker, HStack, Header, HealthBar, HeroOrganism, HeroSection, I18nProvider, IDENTITY_BOOK_FIELDS, Icon, IconPicker, InfiniteScrollSentinel, Input, InputGroup, InstallBox, JazariStateMachine, JsonTreeEditor, Label, LandingPageTemplate, LawReferenceTooltip, LearningCanvas, Lightbox, LikertScale, LineChart2 as LineChart, List3 as List, LoadingState, MapView, MarkdownContent, MarketingFooter, MarketingStatCard, MasterDetail, MasterDetailLayout, MathCanvas, MatrixQuestion, MediaGallery, Menu, Meter, Modal, ModalSlot, ModuleCard, Navigation, NodeSlotEditor, NotifyListener, NumberStepper, OnboardingSpotlight, OptionConstraintGroup, StateMachineView as OrbitalStateMachineView, OrbitalVisualization, Overlay, PageHeader, PageTransition, Pagination, PatternTile, PhysicsCanvas, Popover, PositionedCanvas, Presence, PricingCard, PricingGrid, PricingOrganism, PricingPageTemplate, ProgressBar, ProgressDots, PropertyInspector, PullQuote, PullToRefresh, QrScanner, QuizBlock, Radio, RangeSlider, ReflectionBlock, RelationSelect, RepeatableFormSection, ReplyTree, RichBlockEditor, RuntimeDebugger, SHEET_COLUMNS, SPRITE_SHEET_LAYOUT, ScaledDiagram, ScoreDisplay, SearchInput, Section, SectionHeader, SegmentRenderer, Select, SequenceBar, ServiceCatalog, SharedEntityStoreContext, ShowcaseCard, ShowcaseOrganism, SidePanel, Sidebar, SignaturePad, SimpleGrid, Skeleton, SlotContentRenderer, SocialProof, SortableList, Spacer, Sparkline, Spinner, Split, SplitPane, SplitSection, Stack, StarRating, StatBadge, StatCard, StatDisplay, StateGraph, StateJsonView, StateMachineView, StateNode2 as StateNode, StatsGrid, StatsOrganism, StatusBar, StatusDot, StepFlow, StepFlowOrganism, SubagentTracePanel, SvgBranch, SvgConnection, SvgFlow, SvgGrid, SvgLobe, SvgMesh, SvgMorph, SvgNode, SvgPulse, SvgRing, SvgShield, SvgStack, SwipeableRow, Switch, TERRAIN_COLORS, TILE_HEIGHT, TILE_WIDTH, TabbedContainer, TableView, Tabs, TagCloud, TagInput, TeamCard, TeamOrganism, TerrainPalette, TextHighlight, Textarea, ThemeToggle, TimeSlotCell, Timeline, TimerDisplay, Toast, ToastSlot, Tooltip, TraitFrame, TraitSlot, TraitStateViewer, TransitionArrow, TrendIndicator, TypewriterText, Typography, UISlotComponent, UISlotRenderer, UploadDropZone, VStack, VersionDiff, ViolationAlert, VoteStack, WizardContainer, WizardNavigation, WizardProgress, boardEntity, bool, calculateAttackTargets, calculateValidMoves, cn, createInitialGameState, createSharedEntityStore, createTranslate, createUnitAnimationState, getCurrentFrame, getTileDimensions, inferDirection, isoToScreen, makeAsset, makeAssetMap, mapBookData, num, objAvailableActions, objAvailableEvents, objCurrentState, objIcon, objId, objMaxRules, objName, objRules, objStates, parseEditFocus, parseLessonSegments, parseMarkdownWithCodeBlocks, parseQueryBinding, pendulum, projectileMotion, resolveFieldMap, resolveFrame, resolveSheetDirection, rows, runTickFrame, screenToIso, springOscillator, str, tickAnimationState, toCodeLanguage, transitionAnimation, unitHealth, unitPosition, unitTeam, useAgentChat, useAnchorRect, useAtlasSliceDataUrl, useAuthContext, useCamera, useCanvasGestures, useCompile, useConnectGitHub, useDeepAgentGeneration, useDisconnectGitHub, useDragReorder, useDraggable, useDropZone, useEmitEvent, useEventBus, useEventListener, useExtensions, useFileEditor, useFileSystem, useGameAudio, useGitHubBranches, useGitHubRepo, useGitHubRepos, useGitHubStatus, useImageCache, useInfiniteScroll, useLongPress, useOrbitalHistory, usePresence, usePreview, usePullToRefresh, useQuerySingleton, useRenderInterpolation, useSharedEntitySnapshot, useSharedEntityStore, useSharedEntityStoreContext, useSwipeGesture, useTapReveal, useTraitListens, useTranslate115 as useTranslate, useUIEvents, useUISlotManager, useUnitSpriteAtlas, useValidation, vec2 };
|